diff options
-rw-r--r-- | sc/source/ui/condformat/condformatdlg.cxx | 34 | ||||
-rw-r--r-- | sc/source/ui/condformat/condformatdlgentry.cxx | 185 | ||||
-rw-r--r-- | sc/source/ui/inc/condformatdlgentry.hxx | 60 |
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; } }; |