more support for data bars in new dialogs
Change-Id: I2292517a060a12c1d0dffd70558afc8a57e89754
This commit is contained in:
parent
3d193574ef
commit
c161e8a5a8
6 changed files with 163 additions and 15 deletions
|
@ -33,6 +33,7 @@
|
|||
|
||||
#include <svx/xtable.hxx>
|
||||
#include <svx/drawitem.hxx>
|
||||
#include <vcl/msgbox.hxx>
|
||||
|
||||
ScDataBarSettingsDlg::ScDataBarSettingsDlg(Window* pWindow):
|
||||
ModalDialog( pWindow, ScResId( RID_SCDLG_DATABAR ) ),
|
||||
|
@ -66,7 +67,7 @@ ScDataBarSettingsDlg::ScDataBarSettingsDlg(Window* pWindow):
|
|||
|
||||
namespace {
|
||||
|
||||
void SetType(ScColorScaleEntry* pEntry, ListBox& aLstBox)
|
||||
void SetType(const ScColorScaleEntry* pEntry, ListBox& aLstBox)
|
||||
{
|
||||
if(pEntry->GetMin())
|
||||
aLstBox.SelectEntryPos(0);
|
||||
|
@ -82,6 +83,37 @@ void SetType(ScColorScaleEntry* pEntry, ListBox& aLstBox)
|
|||
aLstBox.SelectEntryPos(4);
|
||||
}
|
||||
|
||||
void GetType(const ListBox& rLstBox, const Edit& rEd, ScColorScaleEntry* pEntry )
|
||||
{
|
||||
double nVal = 0;
|
||||
switch(rLstBox.GetSelectEntryPos())
|
||||
{
|
||||
case 0:
|
||||
pEntry->SetMin(true);
|
||||
break;
|
||||
case 1:
|
||||
pEntry->SetMax(true);
|
||||
break;
|
||||
case 2:
|
||||
pEntry->SetPercentile(true);
|
||||
nVal = rtl::math::stringToDouble(rEd.GetText(), '.', ',');
|
||||
pEntry->SetValue(nVal);
|
||||
break;
|
||||
case 3:
|
||||
nVal = rtl::math::stringToDouble(rEd.GetText(), '.', ',');
|
||||
pEntry->SetPercent(true);
|
||||
pEntry->SetValue(nVal);
|
||||
break;
|
||||
case 4:
|
||||
//FIXME
|
||||
break;
|
||||
case 5:
|
||||
nVal = rtl::math::stringToDouble(rEd.GetText(), '.', ',');
|
||||
pEntry->SetValue(nVal);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetValue( ScColorScaleEntry* pEntry, Edit& aEdit)
|
||||
{
|
||||
if(pEntry->HasFormula())
|
||||
|
@ -94,6 +126,53 @@ void SetValue( ScColorScaleEntry* pEntry, Edit& aEdit)
|
|||
|
||||
}
|
||||
|
||||
ScDataBarSettingsDlg::ScDataBarSettingsDlg(Window* pWindow, const ScDataBarFormatData& rData):
|
||||
ModalDialog( pWindow, ScResId( RID_SCDLG_DATABAR ) ),
|
||||
maBtnOk( this, ScResId( BTN_OK ) ),
|
||||
maBtnCancel( this, ScResId( BTN_CANCEL ) ),
|
||||
maFlBarColors( this, ScResId( FL_BAR_COLORS ) ),
|
||||
maFlAxes( this, ScResId( FL_AXIS ) ),
|
||||
maFlValues( this, ScResId( FL_VALUES ) ),
|
||||
maFtMin( this, ScResId( FT_MINIMUM ) ),
|
||||
maFtMax( this, ScResId( FT_MAXIMUM ) ),
|
||||
maFtPositive( this, ScResId( FT_POSITIVE ) ),
|
||||
maFtNegative( this, ScResId( FT_NEGATIVE ) ),
|
||||
maFtPosition( this, ScResId( FT_POSITION ) ),
|
||||
maFtAxisColor( this, ScResId( FT_COLOR_AXIS ) ),
|
||||
maLbPos( this, ScResId( LB_POS ) ),
|
||||
maLbNeg( this, ScResId( LB_NEG ) ),
|
||||
maLbAxisCol( this, ScResId( LB_COL_AXIS ) ),
|
||||
maLbTypeMin( this, ScResId( LB_TYPE ) ),
|
||||
maLbTypeMax( this, ScResId( LB_TYPE ) ),
|
||||
maLbAxisPos( this, ScResId( LB_AXIS_POSITION ) ),
|
||||
maEdMin( this, ScResId( ED_MIN ) ),
|
||||
maEdMax( this, ScResId( ED_MAX ) )
|
||||
{
|
||||
Init();
|
||||
FreeResource();
|
||||
|
||||
maLbPos.SelectEntry( rData.maPositiveColor );
|
||||
if(rData.mpNegativeColor)
|
||||
maLbNeg.SelectEntry( *rData.mpNegativeColor );
|
||||
|
||||
switch (rData.meAxisPosition)
|
||||
{
|
||||
case databar::NONE:
|
||||
maLbAxisPos.SelectEntryPos(2);
|
||||
break;
|
||||
case databar::AUTOMATIC:
|
||||
maLbAxisPos.SelectEntryPos(0);
|
||||
break;
|
||||
case databar::MIDDLE:
|
||||
maLbAxisPos.SelectEntryPos(1);
|
||||
break;
|
||||
}
|
||||
::SetType(rData.mpLowerLimit.get(), maLbTypeMin);
|
||||
::SetType(rData.mpUpperLimit.get(), maLbTypeMax);
|
||||
SetValue(rData.mpLowerLimit.get(), maEdMin);
|
||||
SetValue(rData.mpUpperLimit.get(), maEdMax);
|
||||
}
|
||||
|
||||
ScDataBarSettingsDlg::ScDataBarSettingsDlg(Window* pWindow, ScDataBarFormat* pFormat):
|
||||
ModalDialog( pWindow, ScResId( RID_SCDLG_DATABAR ) ),
|
||||
maBtnOk( this, ScResId( BTN_OK ) ),
|
||||
|
@ -188,6 +267,43 @@ void ScDataBarSettingsDlg::Init()
|
|||
maLbTypeMax.SetPosPixel(aPoint);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
void GetAxesPosition(ScDataBarFormatData* pData, const ListBox& rLbox)
|
||||
{
|
||||
switch(rLbox.GetSelectEntryPos())
|
||||
{
|
||||
case 0:
|
||||
pData->meAxisPosition = databar::AUTOMATIC;
|
||||
break;
|
||||
case 1:
|
||||
pData->meAxisPosition = databar::MIDDLE;
|
||||
break;
|
||||
case 2:
|
||||
pData->meAxisPosition = databar::NONE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
ScDataBarFormatData* ScDataBarSettingsDlg::GetData()
|
||||
{
|
||||
ScDataBarFormatData* pData = new ScDataBarFormatData();
|
||||
pData->maPositiveColor = maLbPos.GetSelectEntryColor();
|
||||
pData->mpNegativeColor.reset(new Color(maLbNeg.GetSelectEntryColor()));
|
||||
pData->mbGradient = true; //FIXME
|
||||
pData->mpUpperLimit.reset(new ScColorScaleEntry());
|
||||
pData->mpLowerLimit.reset(new ScColorScaleEntry());
|
||||
|
||||
::GetType(maLbTypeMin, maEdMin, pData->mpLowerLimit.get());
|
||||
::GetType(maLbTypeMax, maEdMax, pData->mpUpperLimit.get());
|
||||
GetAxesPosition(pData, maLbAxisPos);
|
||||
|
||||
return pData;
|
||||
}
|
||||
|
||||
IMPL_LINK_NOARG( ScDataBarSettingsDlg, OkBtnHdl )
|
||||
{
|
||||
//check that min < max
|
||||
|
@ -216,7 +332,7 @@ IMPL_LINK_NOARG( ScDataBarSettingsDlg, OkBtnHdl )
|
|||
}
|
||||
else
|
||||
{
|
||||
Close();
|
||||
EndDialog(RET_OK);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <svl/intitem.hxx>
|
||||
#include <svx/xtable.hxx>
|
||||
#include <svx/drawitem.hxx>
|
||||
#include <vcl/msgbox.hxx>
|
||||
|
||||
#include "anyrefdg.hxx"
|
||||
#include "document.hxx"
|
||||
|
@ -44,6 +45,7 @@
|
|||
#include "tabvwsh.hxx"
|
||||
#include "conditio.hxx"
|
||||
#include "colorscale.hxx"
|
||||
#include "colorformat.hxx"
|
||||
|
||||
#include <rtl/math.hxx>
|
||||
|
||||
|
@ -164,6 +166,11 @@ ScCondFrmtEntry::ScCondFrmtEntry(Window* pParent, ScDocument* pDoc, const ScForm
|
|||
maLbColMin( this, ScResId( LB_COL) ),
|
||||
maLbColMiddle( this, ScResId( LB_COL) ),
|
||||
maLbColMax( this, ScResId( LB_COL) ),
|
||||
maLbDataBarMinType( this, ScResId( LB_TYPE_COL_SCALE ) ),
|
||||
maLbDataBarMaxType( this, ScResId( LB_TYPE_COL_SCALE ) ),
|
||||
maEdDataBarMin( this, ScResId( ED_COL_SCALE ) ),
|
||||
maEdDataBarMax( this, ScResId( ED_COL_SCALE ) ),
|
||||
maBtOptions( this, ScResId( BTN_OPTIONS ) ),
|
||||
mpDoc(pDoc)
|
||||
{
|
||||
SetControlBackground(GetSettings().GetStyleSettings().GetDialogColor());
|
||||
|
@ -240,6 +247,7 @@ ScCondFrmtEntry::ScCondFrmtEntry(Window* pParent, ScDocument* pDoc, const ScForm
|
|||
else if( pFormatEntry && pFormatEntry->GetType() == condformat::DATABAR )
|
||||
{
|
||||
const ScDataBarFormat* pEntry = static_cast<const ScDataBarFormat*>(pFormatEntry);
|
||||
mpDataBarData.reset(new ScDataBarFormatData(*pEntry->GetDataBarData()));
|
||||
maLbType.SelectEntryPos(0);
|
||||
maLbColorFormat.SelectEntryPos(2);
|
||||
SetDataBarType();
|
||||
|
@ -250,6 +258,10 @@ ScCondFrmtEntry::ScCondFrmtEntry(Window* pParent, ScDocument* pDoc, const ScForm
|
|||
SetHeight();
|
||||
}
|
||||
|
||||
ScCondFrmtEntry::~ScCondFrmtEntry()
|
||||
{
|
||||
}
|
||||
|
||||
void ScCondFrmtEntry::Init()
|
||||
{
|
||||
maLbType.SetSelectHdl( LINK( this, ScCondFrmtEntry, TypeListHdl ) );
|
||||
|
@ -266,15 +278,18 @@ void ScCondFrmtEntry::Init()
|
|||
Point aPointEd = maEdMiddle.GetPosPixel();
|
||||
Point aPointCol = maLbColMiddle.GetPosPixel();
|
||||
Point aPointEdDataBar = maEdDataBarMin.GetPosPixel();
|
||||
Point aPointLbDataBar = maLbDataBarMaxType.GetPosPixel();
|
||||
const long nMovePos = 150;
|
||||
aPointLb.X() += nMovePos;
|
||||
aPointEd.X() += nMovePos;
|
||||
aPointCol.X() += nMovePos;
|
||||
aPointEdDataBar.X() += 1.5*nMovePos;
|
||||
aPointLbDataBar.X() += 1.5*nMovePos;
|
||||
maLbEntryTypeMiddle.SetPosPixel(aPointLb);
|
||||
maEdMiddle.SetPosPixel(aPointEd);
|
||||
maLbColMiddle.SetPosPixel(aPointCol);
|
||||
maEdDataBarMin.SetPosPixel(aPointEdDataBar);
|
||||
maLbDataBarMaxType.SetPosPixel(aPointLbDataBar);
|
||||
aPointLb.X() += nMovePos;
|
||||
aPointEd.X() += nMovePos;
|
||||
aPointCol.X() += nMovePos;
|
||||
|
@ -319,6 +334,14 @@ void ScCondFrmtEntry::Init()
|
|||
maLbColMiddle.SetUpdateMode( sal_True );
|
||||
maLbColMax.SetUpdateMode( sal_True );
|
||||
}
|
||||
|
||||
maBtOptions.SetClickHdl( LINK( this, ScCondFrmtEntry, OptionBtnHdl ) );
|
||||
|
||||
mpDataBarData.reset(new ScDataBarFormatData());
|
||||
mpDataBarData->mpUpperLimit.reset(new ScColorScaleEntry());
|
||||
mpDataBarData->mpLowerLimit.reset(new ScColorScaleEntry());
|
||||
mpDataBarData->mpLowerLimit->SetMin(true);
|
||||
mpDataBarData->mpUpperLimit->SetMax(true);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
@ -445,7 +468,7 @@ void ScCondFrmtEntry::SetHeight()
|
|||
aSize.Height() = 200;
|
||||
break;
|
||||
case DATABAR:
|
||||
aSize.Height() = 120;
|
||||
aSize.Height() = 200;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -637,7 +660,7 @@ ScFormatEntry* ScCondFrmtEntry::createColorscaleEntry() const
|
|||
ScFormatEntry* ScCondFrmtEntry::createDatabarEntry() const
|
||||
{
|
||||
ScDataBarFormat* pDataBar = new ScDataBarFormat(mpDoc);
|
||||
pDataBar->SetDataBarData(new ScDataBarFormatData());
|
||||
pDataBar->SetDataBarData(new ScDataBarFormatData(*mpDataBarData.get()));
|
||||
return pDataBar;
|
||||
}
|
||||
|
||||
|
@ -753,8 +776,12 @@ IMPL_LINK_NOARG(ScCondFrmtEntry, StyleSelectHdl)
|
|||
|
||||
IMPL_LINK_NOARG( ScCondFrmtEntry, OptionBtnHdl )
|
||||
{
|
||||
ScDataBarSettingsDlg* pDlg = new ScDataBarSettingsDlg(this);
|
||||
pDlg->Execute();
|
||||
ScDataBarSettingsDlg* pDlg = new ScDataBarSettingsDlg(this, *mpDataBarData);
|
||||
if( pDlg->Execute() == RET_OK)
|
||||
{
|
||||
std::cout << "Ok" << std::endl;
|
||||
mpDataBarData.reset(pDlg->GetData());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,11 +33,7 @@
|
|||
#include "anyrefdg.hxx"
|
||||
|
||||
class ScDataBarFormat;
|
||||
|
||||
class ScColorScaleSettingsDlg : public ModalDialog
|
||||
{
|
||||
|
||||
};
|
||||
struct ScDataBarFormatData;
|
||||
|
||||
class ScDataBarSettingsDlg : public ModalDialog
|
||||
{
|
||||
|
@ -72,7 +68,10 @@ private:
|
|||
|
||||
public:
|
||||
ScDataBarSettingsDlg(Window* pParent);
|
||||
ScDataBarSettingsDlg(Window* pParent, const ScDataBarFormatData& rData);
|
||||
ScDataBarSettingsDlg(Window* pParent, ScDataBarFormat* pFormat);
|
||||
|
||||
ScDataBarFormatData* GetData();
|
||||
};
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
|
|
@ -52,6 +52,6 @@
|
|||
#define ED_COL_SCALE 28
|
||||
#define WD_PREVIEW 26
|
||||
#define LB_COL 27
|
||||
#define BTN_OPTIONS 28
|
||||
#define BTN_OPTIONS 30
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
|
|
@ -44,6 +44,7 @@ class ScDocument;
|
|||
class ScConditionalFormat;
|
||||
class ScFormatEntry;
|
||||
class ScConditionalFormat;
|
||||
struct ScDataBarFormatData;
|
||||
|
||||
enum ScCondFormatEntryType
|
||||
{
|
||||
|
@ -97,7 +98,9 @@ private:
|
|||
ListBox maLbDataBarMaxType;
|
||||
Edit maEdDataBarMin;
|
||||
Edit maEdDataBarMax;
|
||||
Button maBtOptions;
|
||||
PushButton maBtOptions;
|
||||
|
||||
boost::scoped_ptr<ScDataBarFormatData> mpDataBarData;
|
||||
|
||||
//
|
||||
void SwitchToType(ScCondFormatEntryType eType);
|
||||
|
@ -121,10 +124,12 @@ private:
|
|||
DECL_LINK( TypeListHdl, void*);
|
||||
DECL_LINK( ColFormatTypeHdl, void*);
|
||||
DECL_LINK( StyleSelectHdl, void* );
|
||||
DECL_LINK( OptionBtnHdl, void* );
|
||||
|
||||
public:
|
||||
ScCondFrmtEntry( Window* pParent, ScDocument* pDoc );
|
||||
ScCondFrmtEntry( Window* pParent, ScDocument* pDoc, const ScFormatEntry* pFormatEntry );
|
||||
virtual ~ScCondFrmtEntry();
|
||||
|
||||
virtual long Notify( NotifyEvent& rNEvt );
|
||||
|
||||
|
|
|
@ -215,10 +215,11 @@ Control RID_COND_ENTRY
|
|||
DropDown = TRUE;
|
||||
DDExtraWidth = TRUE;
|
||||
};
|
||||
Button BTN_OPTIONS
|
||||
PushButton BTN_OPTIONS
|
||||
{
|
||||
Pos = MAP_APPFONT( 120 , 62 );
|
||||
Pos = MAP_APPFONT( 120, 62 );
|
||||
Size = MAP_APPFONT( 60, 14 );
|
||||
Text [ en-US ] = "More options ...";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue