summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-10-09 04:34:14 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-10-09 06:33:18 +0200
commit1b8f33153b98251e28da4d2b6e16ddd0380f8c56 (patch)
tree2eca349c7c4c326277ae9d90a271cb0f6b6761d5 /sc
parent7bc0c2bd9edac11d17d2483ec79b845854db3da4 (diff)
separate color scale with 2 and 3 entries
Change-Id: Idd3cd7467850ee32cb1380fce307395f21076071
Diffstat (limited to 'sc')
-rw-r--r--sc/source/ui/condformat/condformatdlg.cxx34
-rw-r--r--sc/source/ui/condformat/condformatdlgentry.cxx185
-rw-r--r--sc/source/ui/inc/condformatdlgentry.hxx60
3 files changed, 264 insertions, 15 deletions
diff --git a/sc/source/ui/condformat/condformatdlg.cxx b/sc/source/ui/condformat/condformatdlg.cxx
index 92af3cebb630..6ffba85a4e76 100644
--- a/sc/source/ui/condformat/condformatdlg.cxx
+++ b/sc/source/ui/condformat/condformatdlg.cxx
@@ -78,7 +78,7 @@ ScCondFormatList::ScCondFormatList(Window* pParent, const ResId& rResId, ScDocum
maEntries.push_back(new ScConditionFrmtEntry( this, mpDoc, maPos, static_cast<const ScCondFormatEntry*>( pEntry ) ) );
break;
case condformat::COLORSCALE:
- maEntries.push_back(new ScColorScaleFrmtEntry( this, mpDoc, maPos, static_cast<const ScColorScaleFormat*>( pEntry ) ) );
+ maEntries.push_back(new ScColorScale3FrmtEntry( this, mpDoc, maPos, static_cast<const ScColorScaleFormat*>( pEntry ) ) );
break;
case condformat::DATABAR:
maEntries.push_back(new ScDataBarFrmtEntry( this, mpDoc, maPos, static_cast<const ScDataBarFormat*>( pEntry ) ) );
@@ -94,7 +94,7 @@ ScCondFormatList::ScCondFormatList(Window* pParent, const ResId& rResId, ScDocum
maEntries.push_back(new ScConditionFrmtEntry( this, mpDoc, maPos ));
break;
case condformat::dialog::COLORSCALE:
- maEntries.push_back(new ScColorScaleFrmtEntry( this, mpDoc, maPos ));
+ maEntries.push_back(new ScColorScale3FrmtEntry( this, mpDoc, maPos ));
break;
case condformat::dialog::DATABAR:
maEntries.push_back(new ScDataBarFrmtEntry( this, mpDoc, maPos ));
@@ -182,6 +182,34 @@ void ScCondFormatList::DoScroll(long nDelta)
IMPL_LINK(ScCondFormatList, ColFormatTypeHdl, ListBox*, pBox)
{
+ EntryContainer::iterator itr = maEntries.begin();
+ for(; itr != maEntries.end(); ++itr)
+ {
+ if(itr->IsSelected())
+ break;
+ }
+ if(itr == maEntries.end())
+ return 0;;
+
+ sal_Int32 nPos = pBox->GetSelectEntryPos();
+ switch(nPos)
+ {
+ case 0:
+ if(itr->GetType() != condformat::entry::COLORSCALE2)
+ maEntries.replace( itr, new ScColorScale2FrmtEntry( this, mpDoc, maPos ) );
+ break;
+ case 1:
+ if(itr->GetType() != condformat::entry::COLORSCALE3)
+ maEntries.replace( itr, new ScColorScale3FrmtEntry( this, mpDoc, maPos ) );
+ break;
+ case 2:
+ if(itr->GetType() != condformat::entry::DATABAR)
+ maEntries.replace( itr, new ScDataBarFrmtEntry( this, mpDoc, maPos ) );
+ break;
+ default:
+ break;
+ }
+ itr->SetActive();
RecalcAll();
return 0;
}
@@ -201,7 +229,7 @@ IMPL_LINK(ScCondFormatList, TypeListHdl, ListBox*, pBox)
switch(nPos)
{
case 0:
- maEntries.replace( itr, new ScColorScaleFrmtEntry(this, mpDoc, maPos));
+ maEntries.replace( itr, new ScColorScale3FrmtEntry(this, mpDoc, maPos));
itr->SetActive();
break;
case 1:
diff --git a/sc/source/ui/condformat/condformatdlgentry.cxx b/sc/source/ui/condformat/condformatdlgentry.cxx
index 00c5b3ea56c8..fc2e733c8059 100644
--- a/sc/source/ui/condformat/condformatdlgentry.cxx
+++ b/sc/source/ui/condformat/condformatdlgentry.cxx
@@ -151,6 +151,7 @@ ScConditionFrmtEntry::ScConditionFrmtEntry( Window* pParent, ScDocument* pDoc, c
{
FreeResource();
+ maLbType.SelectEntryPos(1);
Init();
@@ -378,6 +379,7 @@ ScFormulaFrmtEntry::ScFormulaFrmtEntry( Window* pParent, ScDocument* pDoc, const
Init();
FreeResource();
+ maLbType.SelectEntryPos(2);
if(pFormat)
{
@@ -584,7 +586,168 @@ ScColorScaleEntry* createColorScaleEntry( const ListBox& rType, const ColorListB
}
-ScColorScaleFrmtEntry::ScColorScaleFrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScColorScaleFormat* pFormat ):
+ScColorScale2FrmtEntry::ScColorScale2FrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScColorScaleFormat* pFormat ):
+ ScCondFrmtEntry( pParent, pDoc, rPos ),
+ maLbColorFormat( this, ScResId( LB_COLOR_FORMAT ) ),
+ maLbColScale2( this, ScResId( LB_COL_SCALE2 ) ),
+ maLbEntryTypeMin( this, ScResId( LB_TYPE_COL_SCALE ) ),
+ maLbEntryTypeMax( this, ScResId( LB_TYPE_COL_SCALE ) ),
+ maEdMin( this, ScResId( ED_COL_SCALE ) ),
+ maEdMax( this, ScResId( ED_COL_SCALE ) ),
+ maLbColMin( this, ScResId( LB_COL) ),
+ maLbColMax( this, ScResId( LB_COL) )
+{
+ maLbType.SelectEntryPos(0);
+ maLbColorFormat.SelectEntryPos(0);
+ if(pFormat)
+ {
+ ScColorScaleFormat::const_iterator itr = pFormat->begin();
+ SetColorScaleEntryTypes(*itr, maLbEntryTypeMin, maEdMin, maLbColMin);
+ ++itr;
+ SetColorScaleEntryTypes(*itr, maLbEntryTypeMax, maEdMax, maLbColMax);
+ }
+ else
+ {
+ maLbEntryTypeMin.SelectEntryPos(0);
+ maLbEntryTypeMax.SelectEntryPos(1);
+ }
+ FreeResource();
+
+ maLbColorFormat.SetSelectHdl( LINK( pParent, ScCondFormatList, ColFormatTypeHdl ) );
+
+ Init();
+}
+
+void ScColorScale2FrmtEntry::Init()
+{
+ maLbEntryTypeMin.SetSelectHdl( LINK( this, ScColorScale2FrmtEntry, EntryTypeHdl ) );
+ maLbEntryTypeMax.SetSelectHdl( LINK( this, ScColorScale2FrmtEntry, EntryTypeHdl ) );
+
+ SfxObjectShell* pDocSh = SfxObjectShell::Current();
+ const SfxPoolItem* pItem = NULL;
+ XColorListRef pColorTable;
+
+ DBG_ASSERT( pDocSh, "DocShell not found!" );
+
+ /*
+ Point aPointLb = maLbEntryTypeMiddle.GetPosPixel();
+ Point aPointEd = maEdMiddle.GetPosPixel();
+ Point aPointCol = maLbColMiddle.GetPosPixel();
+ const long nMovePos = maLbEntryTypeMiddle.GetSizePixel().Width() * 1.2;
+ aPointLb.X() += nMovePos;
+ aPointEd.X() += nMovePos;
+ aPointCol.X() += nMovePos;
+ maLbEntryTypeMiddle.SetPosPixel(aPointLb);
+ maEdMiddle.SetPosPixel(aPointEd);
+ maLbColMiddle.SetPosPixel(aPointCol);
+ aPointLb.X() += nMovePos;
+ aPointEd.X() += nMovePos;
+ aPointCol.X() += nMovePos;
+ maLbEntryTypeMax.SetPosPixel(aPointLb);
+ maEdMax.SetPosPixel(aPointEd);
+ maLbColMax.SetPosPixel(aPointCol);
+ */
+
+ if ( pDocSh )
+ {
+ pItem = pDocSh->GetItem( SID_COLOR_TABLE );
+ if ( pItem != NULL )
+ pColorTable = ( (SvxColorListItem*)pItem )->GetColorList();
+ }
+ if ( pColorTable.is() )
+ {
+ // filling the line color box
+ maLbColMin.SetUpdateMode( false );
+ maLbColMax.SetUpdateMode( false );
+
+ for ( long i = 0; i < pColorTable->Count(); ++i )
+ {
+ XColorEntry* pEntry = pColorTable->GetColor(i);
+ maLbColMin.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
+ maLbColMax.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
+
+ if(pEntry->GetColor() == Color(COL_LIGHTRED))
+ maLbColMin.SelectEntryPos(i);
+ if(pEntry->GetColor() == Color(COL_LIGHTBLUE))
+ maLbColMax.SelectEntryPos(i);
+ }
+ maLbColMin.SetUpdateMode( sal_True );
+ maLbColMax.SetUpdateMode( sal_True );
+ }
+
+ EntryTypeHdl(&maLbEntryTypeMin);
+ EntryTypeHdl(&maLbEntryTypeMax);
+}
+
+ScFormatEntry* ScColorScale2FrmtEntry::createColorscaleEntry() const
+{
+ ScColorScaleFormat* pColorScale = new ScColorScaleFormat(mpDoc);
+ pColorScale->AddEntry(createColorScaleEntry(maLbEntryTypeMin, maLbColMin, maEdMin, mpDoc, maPos));
+ pColorScale->AddEntry(createColorScaleEntry(maLbEntryTypeMax, maLbColMax, maEdMax, mpDoc, maPos));
+ return pColorScale;
+}
+
+ScFormatEntry* ScColorScale2FrmtEntry::GetEntry() const
+{
+ return createColorscaleEntry();
+}
+
+void ScColorScale2FrmtEntry::SetActive()
+{
+ maLbColScale2.Show();
+
+ maLbEntryTypeMin.Show();
+ maLbEntryTypeMax.Show();
+
+ maEdMin.Show();
+ maEdMax.Show();
+
+ maLbColMin.Show();
+ maLbColMax.Show();
+
+ Select();
+}
+
+void ScColorScale2FrmtEntry::SetInactive()
+{
+ maLbColScale2.Hide();
+
+ maLbEntryTypeMin.Hide();
+ maLbEntryTypeMax.Hide();
+
+ maEdMin.Hide();
+ maEdMax.Hide();
+
+ maLbColMin.Hide();
+ maLbColMax.Hide();
+
+ Deselect();
+}
+
+IMPL_LINK( ScColorScale2FrmtEntry, EntryTypeHdl, ListBox*, pBox )
+{
+ bool bEnableEdit = true;
+ sal_Int32 nPos = pBox->GetSelectEntryPos();
+ if(nPos == 0 || nPos == 1)
+ {
+ bEnableEdit = false;
+ }
+
+ Edit* pEd = NULL;
+ if(pBox == &maLbEntryTypeMin)
+ pEd = &maEdMin;
+ else if(pBox == &maLbEntryTypeMax)
+ pEd = &maEdMax;
+
+ if(bEnableEdit)
+ pEd->Enable();
+ else
+ pEd->Disable();
+
+ return 0;
+}
+
+ScColorScale3FrmtEntry::ScColorScale3FrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScColorScaleFormat* pFormat ):
ScCondFrmtEntry( pParent, pDoc, rPos ),
maLbColorFormat( this, ScResId( LB_COLOR_FORMAT ) ),
maLbColScale2( this, ScResId( LB_COL_SCALE2 ) ),
@@ -599,6 +762,7 @@ ScColorScaleFrmtEntry::ScColorScaleFrmtEntry( Window* pParent, ScDocument* pDoc,
maLbColMiddle( this, ScResId( LB_COL) ),
maLbColMax( this, ScResId( LB_COL) )
{
+ maLbType.SelectEntryPos(0);
if(pFormat)
{
if(pFormat->size() == 2)
@@ -630,11 +794,11 @@ ScColorScaleFrmtEntry::ScColorScaleFrmtEntry( Window* pParent, ScDocument* pDoc,
Init();
}
-void ScColorScaleFrmtEntry::Init()
+void ScColorScale3FrmtEntry::Init()
{
- maLbEntryTypeMin.SetSelectHdl( LINK( this, ScColorScaleFrmtEntry, EntryTypeHdl ) );
- maLbEntryTypeMax.SetSelectHdl( LINK( this, ScColorScaleFrmtEntry, EntryTypeHdl ) );
- maLbEntryTypeMiddle.SetSelectHdl( LINK( this, ScColorScaleFrmtEntry, EntryTypeHdl ) );
+ maLbEntryTypeMin.SetSelectHdl( LINK( this, ScColorScale3FrmtEntry, EntryTypeHdl ) );
+ maLbEntryTypeMax.SetSelectHdl( LINK( this, ScColorScale3FrmtEntry, EntryTypeHdl ) );
+ maLbEntryTypeMiddle.SetSelectHdl( LINK( this, ScColorScale3FrmtEntry, EntryTypeHdl ) );
SfxObjectShell* pDocSh = SfxObjectShell::Current();
const SfxPoolItem* pItem = NULL;
@@ -696,7 +860,7 @@ void ScColorScaleFrmtEntry::Init()
EntryTypeHdl(&maLbEntryTypeMax);
}
-ScFormatEntry* ScColorScaleFrmtEntry::createColorscaleEntry() const
+ScFormatEntry* ScColorScale3FrmtEntry::createColorscaleEntry() const
{
ScColorScaleFormat* pColorScale = new ScColorScaleFormat(mpDoc);
pColorScale->AddEntry(createColorScaleEntry(maLbEntryTypeMin, maLbColMin, maEdMin, mpDoc, maPos));
@@ -706,12 +870,12 @@ ScFormatEntry* ScColorScaleFrmtEntry::createColorscaleEntry() const
return pColorScale;
}
-ScFormatEntry* ScColorScaleFrmtEntry::GetEntry() const
+ScFormatEntry* ScColorScale3FrmtEntry::GetEntry() const
{
return createColorscaleEntry();
}
-void ScColorScaleFrmtEntry::SetActive()
+void ScColorScale3FrmtEntry::SetActive()
{
maLbColScale2.Show();
maLbColScale3.Show();
@@ -731,7 +895,7 @@ void ScColorScaleFrmtEntry::SetActive()
Select();
}
-void ScColorScaleFrmtEntry::SetInactive()
+void ScColorScale3FrmtEntry::SetInactive()
{
maLbColScale2.Hide();
maLbColScale3.Hide();
@@ -751,7 +915,7 @@ void ScColorScaleFrmtEntry::SetInactive()
Deselect();
}
-IMPL_LINK( ScColorScaleFrmtEntry, EntryTypeHdl, ListBox*, pBox )
+IMPL_LINK( ScColorScale3FrmtEntry, EntryTypeHdl, ListBox*, pBox )
{
bool bEnableEdit = true;
sal_Int32 nPos = pBox->GetSelectEntryPos();
@@ -841,6 +1005,7 @@ ScDataBarFrmtEntry::ScDataBarFrmtEntry( Window* pParent, ScDocument* pDoc, const
maBtOptions( this, ScResId( BTN_OPTIONS ) )
{
maLbColorFormat.SelectEntryPos(2);
+ maLbType.SelectEntryPos(0);
if(pFormat)
{
mpDataBarData.reset(new ScDataBarFormatData(*pFormat->GetDataBarData()));
diff --git a/sc/source/ui/inc/condformatdlgentry.hxx b/sc/source/ui/inc/condformatdlgentry.hxx
index 75f45022ea30..3147bfb03c2f 100644
--- a/sc/source/ui/inc/condformatdlgentry.hxx
+++ b/sc/source/ui/inc/condformatdlgentry.hxx
@@ -1,6 +1,23 @@
#include "colorscale.hxx"
#include "conditio.hxx"
+namespace condformat {
+
+namespace entry {
+
+enum ScCondFrmtEntryType
+{
+ CONDITION,
+ FORMULA,
+ COLORSCALE2,
+ COLORSCALE3,
+ DATABAR
+};
+
+}
+
+}
+
class ScCondFrmtEntry : public Control
{
private:
@@ -41,6 +58,8 @@ public:
virtual ScFormatEntry* GetEntry() const = 0;
virtual void SetActive() = 0;
virtual void SetInactive() = 0;
+
+ virtual condformat::entry::ScCondFrmtEntryType GetType() = 0;
};
class ScConditionFrmtEntry : public ScCondFrmtEntry
@@ -65,6 +84,8 @@ public:
virtual ScFormatEntry* GetEntry() const;
virtual void SetActive();
virtual void SetInactive();
+
+ virtual condformat::entry::ScCondFrmtEntryType GetType() { return condformat::entry::CONDITION; }
};
class ScFormulaFrmtEntry : public ScCondFrmtEntry
@@ -84,9 +105,41 @@ public:
virtual ScFormatEntry* GetEntry() const;
virtual void SetActive();
virtual void SetInactive();
+ virtual condformat::entry::ScCondFrmtEntryType GetType() { return condformat::entry::FORMULA; }
+};
+
+class ScColorScale2FrmtEntry : public ScCondFrmtEntry
+{
+
+ //color format ui elements
+ ListBox maLbColorFormat;
+
+ //color scale ui elements
+ ListBox maLbColScale2;
+
+ ListBox maLbEntryTypeMin;
+ ListBox maLbEntryTypeMax;
+
+ Edit maEdMin;
+ Edit maEdMax;
+
+ ColorListBox maLbColMin;
+ ColorListBox maLbColMax;
+
+ ScFormatEntry* createColorscaleEntry() const;
+
+ void Init();
+
+ DECL_LINK( EntryTypeHdl, ListBox* );
+public:
+ ScColorScale2FrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScColorScaleFormat* pFormat = NULL );
+ virtual ScFormatEntry* GetEntry() const;
+ virtual void SetActive();
+ virtual void SetInactive();
+ virtual condformat::entry::ScCondFrmtEntryType GetType() { return condformat::entry::COLORSCALE2; }
};
-class ScColorScaleFrmtEntry : public ScCondFrmtEntry
+class ScColorScale3FrmtEntry : public ScCondFrmtEntry
{
//color format ui elements
@@ -114,10 +167,11 @@ class ScColorScaleFrmtEntry : public ScCondFrmtEntry
DECL_LINK( EntryTypeHdl, ListBox* );
public:
- ScColorScaleFrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScColorScaleFormat* pFormat = NULL );
+ ScColorScale3FrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScColorScaleFormat* pFormat = NULL );
virtual ScFormatEntry* GetEntry() const;
virtual void SetActive();
virtual void SetInactive();
+ virtual condformat::entry::ScCondFrmtEntryType GetType() { return condformat::entry::COLORSCALE3; }
};
class ScDataBarFrmtEntry : public ScCondFrmtEntry
@@ -146,5 +200,7 @@ public:
virtual ScFormatEntry* GetEntry() const;
virtual void SetActive();
virtual void SetInactive();
+
+ virtual condformat::entry::ScCondFrmtEntryType GetType() { return condformat::entry::DATABAR; }
};