diff options
Diffstat (limited to 'sc/source/ui/condformat/condformatdlg.cxx')
-rw-r--r-- | sc/source/ui/condformat/condformatdlg.cxx | 123 |
1 files changed, 74 insertions, 49 deletions
diff --git a/sc/source/ui/condformat/condformatdlg.cxx b/sc/source/ui/condformat/condformatdlg.cxx index ad260e40fe80..59d343195294 100644 --- a/sc/source/ui/condformat/condformatdlg.cxx +++ b/sc/source/ui/condformat/condformatdlg.cxx @@ -37,7 +37,7 @@ ScCondFormatList::ScCondFormatList(vcl::Window* pParent, WinBits nStyle) : Control(pParent, nStyle | WB_DIALOGCONTROL) , mbHasScrollBar(false) - , mpScrollBar(new ScrollBar(this, WB_VERT )) + , mpScrollBar(VclPtr<ScrollBar>::Create(this, WB_VERT )) , mpDoc(NULL) , mpDialogParent(NULL) { @@ -47,6 +47,18 @@ ScCondFormatList::ScCondFormatList(vcl::Window* pParent, WinBits nStyle) SetBackground(GetControlBackground()); } +ScCondFormatList::~ScCondFormatList() +{ + disposeOnce(); +} + +void ScCondFormatList::dispose() +{ + mpDialogParent.clear(); + mpScrollBar.disposeAndClear(); + Control::dispose(); +} + void ScCondFormatList::init(ScDocument* pDoc, ScCondFormatDlg* pDialogParent, const ScConditionalFormat* pFormat, const ScRangeList& rRanges, const ScAddress& rPos, condformat::dialog::ScCondFormatDialogType eType) @@ -68,9 +80,9 @@ void ScCondFormatList::init(ScDocument* pDoc, ScCondFormatDlg* pDialogParent, { const ScCondFormatEntry* pConditionEntry = static_cast<const ScCondFormatEntry*>( pEntry ); if(pConditionEntry->GetOperation() != SC_COND_DIRECT) - maEntries.push_back(new ScConditionFrmtEntry( this, mpDoc, pDialogParent, maPos, pConditionEntry ) ); + maEntries.push_back(VclPtr<ScConditionFrmtEntry>::Create( this, mpDoc, pDialogParent, maPos, pConditionEntry ) ); else - maEntries.push_back(new ScFormulaFrmtEntry( this, mpDoc, pDialogParent, maPos, pConditionEntry ) ); + maEntries.push_back(VclPtr<ScFormulaFrmtEntry>::Create( this, mpDoc, pDialogParent, maPos, pConditionEntry ) ); } break; @@ -78,43 +90,43 @@ void ScCondFormatList::init(ScDocument* pDoc, ScCondFormatDlg* pDialogParent, { const ScColorScaleFormat* pColorScale = static_cast<const ScColorScaleFormat*>( pEntry ); if( pColorScale->size() == 2 ) - maEntries.push_back(new ScColorScale2FrmtEntry( this, mpDoc, maPos, pColorScale ) ); + maEntries.push_back(VclPtr<ScColorScale2FrmtEntry>::Create( this, mpDoc, maPos, pColorScale ) ); else - maEntries.push_back(new ScColorScale3FrmtEntry( this, mpDoc, maPos, pColorScale ) ); + maEntries.push_back(VclPtr<ScColorScale3FrmtEntry>::Create( this, mpDoc, maPos, pColorScale ) ); } break; case condformat::DATABAR: - maEntries.push_back(new ScDataBarFrmtEntry( this, mpDoc, maPos, static_cast<const ScDataBarFormat*>( pEntry ) ) ); + maEntries.push_back(VclPtr<ScDataBarFrmtEntry>::Create( this, mpDoc, maPos, static_cast<const ScDataBarFormat*>( pEntry ) ) ); break; case condformat::ICONSET: - maEntries.push_back(new ScIconSetFrmtEntry( this, mpDoc, maPos, static_cast<const ScIconSetFormat*>( pEntry ) ) ); + maEntries.push_back(VclPtr<ScIconSetFrmtEntry>::Create( this, mpDoc, maPos, static_cast<const ScIconSetFormat*>( pEntry ) ) ); break; case condformat::DATE: - maEntries.push_back(new ScDateFrmtEntry( this, mpDoc, static_cast<const ScCondDateFormatEntry*>( pEntry ) ) ); + maEntries.push_back(VclPtr<ScDateFrmtEntry>::Create( this, mpDoc, static_cast<const ScCondDateFormatEntry*>( pEntry ) ) ); break; } } if(nCount) - EntrySelectHdl(&maEntries[0]); + EntrySelectHdl(maEntries[0].get()); } else { switch(eType) { case condformat::dialog::CONDITION: - maEntries.push_back(new ScConditionFrmtEntry( this, mpDoc, pDialogParent, maPos )); + maEntries.push_back(VclPtr<ScConditionFrmtEntry>::Create( this, mpDoc, pDialogParent, maPos )); break; case condformat::dialog::COLORSCALE: - maEntries.push_back(new ScColorScale3FrmtEntry( this, mpDoc, maPos )); + maEntries.push_back(VclPtr<ScColorScale3FrmtEntry>::Create( this, mpDoc, maPos )); break; case condformat::dialog::DATABAR: - maEntries.push_back(new ScDataBarFrmtEntry( this, mpDoc, maPos )); + maEntries.push_back(VclPtr<ScDataBarFrmtEntry>::Create( this, mpDoc, maPos )); break; case condformat::dialog::ICONSET: - maEntries.push_back(new ScIconSetFrmtEntry( this, mpDoc, maPos )); + maEntries.push_back(VclPtr<ScIconSetFrmtEntry>::Create( this, mpDoc, maPos )); break; case condformat::dialog::DATE: - maEntries.push_back(new ScDateFrmtEntry( this, mpDoc )); + maEntries.push_back(VclPtr<ScDateFrmtEntry>::Create( this, mpDoc )); break; case condformat::dialog::NONE: break; @@ -122,7 +134,7 @@ void ScCondFormatList::init(ScDocument* pDoc, ScCondFormatDlg* pDialogParent, } RecalcAll(); if (!maEntries.empty()) - maEntries.begin()->SetActive(); + (*maEntries.begin())->SetActive(); RecalcAll(); } @@ -158,7 +170,7 @@ ScConditionalFormat* ScCondFormatList::GetConditionalFormat() const ScConditionalFormat* pFormat = new ScConditionalFormat(0, mpDoc); for(EntryContainer::const_iterator itr = maEntries.begin(); itr != maEntries.end(); ++itr) { - ScFormatEntry* pEntry = itr->GetEntry(); + ScFormatEntry* pEntry = (*itr)->GetEntry(); if(pEntry) pFormat->AddEntry(pEntry); } @@ -174,8 +186,8 @@ void ScCondFormatList::RecalcAll() sal_Int32 nIndex = 1; for(EntryContainer::iterator itr = maEntries.begin(); itr != maEntries.end(); ++itr) { - nTotalHeight += itr->GetSizePixel().Height(); - itr->SetIndex( nIndex ); + nTotalHeight += (*itr)->GetSizePixel().Height(); + (*itr)->SetIndex( nIndex ); ++nIndex; } @@ -199,15 +211,15 @@ void ScCondFormatList::RecalcAll() Point aPoint(0,-1*mpScrollBar->GetThumbPos()); for(EntryContainer::iterator itr = maEntries.begin(); itr != maEntries.end(); ++itr) { - itr->SetPosPixel(aPoint); - Size aSize = itr->GetSizePixel(); + (*itr)->SetPosPixel(aPoint); + Size aSize = (*itr)->GetSizePixel(); if(mbHasScrollBar) aSize.Width() = aCtrlSize.Width() - nSrcBarSize; else aSize.Width() = aCtrlSize.Width(); - itr->SetSizePixel(aSize); + (*itr)->SetSizePixel(aSize); - aPoint.Y() += itr->GetSizePixel().Height(); + aPoint.Y() += (*itr)->GetSizePixel().Height(); } } @@ -225,7 +237,7 @@ IMPL_LINK(ScCondFormatList, ColFormatTypeHdl, ListBox*, pBox) EntryContainer::iterator itr = maEntries.begin(); for(; itr != maEntries.end(); ++itr) { - if(itr->IsSelected()) + if((*itr)->IsSelected()) break; } if(itr == maEntries.end()) @@ -235,34 +247,34 @@ IMPL_LINK(ScCondFormatList, ColFormatTypeHdl, ListBox*, pBox) switch(nPos) { case 0: - if(itr->GetType() == condformat::entry::COLORSCALE2) + if((*itr)->GetType() == condformat::entry::COLORSCALE2) return 0; - maEntries.replace( itr, new ScColorScale2FrmtEntry( this, mpDoc, maPos ) ); + *itr = VclPtr<ScColorScale2FrmtEntry>::Create( this, mpDoc, maPos ); break; case 1: - if(itr->GetType() == condformat::entry::COLORSCALE3) + if((*itr)->GetType() == condformat::entry::COLORSCALE3) return 0; - maEntries.replace( itr, new ScColorScale3FrmtEntry( this, mpDoc, maPos ) ); + *itr = VclPtr<ScColorScale3FrmtEntry>::Create( this, mpDoc, maPos ); break; case 2: - if(itr->GetType() == condformat::entry::DATABAR) + if((*itr)->GetType() == condformat::entry::DATABAR) return 0; - maEntries.replace( itr, new ScDataBarFrmtEntry( this, mpDoc, maPos ) ); + *itr = VclPtr<ScDataBarFrmtEntry>::Create( this, mpDoc, maPos ); break; case 3: - if(itr->GetType() == condformat::entry::ICONSET) + if((*itr)->GetType() == condformat::entry::ICONSET) return 0; - maEntries.replace( itr, new ScIconSetFrmtEntry( this, mpDoc, maPos ) ); + *itr = VclPtr<ScIconSetFrmtEntry>::Create( this, mpDoc, maPos ); break; default: break; } mpDialogParent->InvalidateRefData(); - itr->SetActive(); + (*itr)->SetActive(); RecalcAll(); return 0; } @@ -282,7 +294,7 @@ IMPL_LINK(ScCondFormatList, AfterTypeListHdl, ListBox*, pBox) EntryContainer::iterator itr = maEntries.begin(); for(; itr != maEntries.end(); ++itr) { - if(itr->IsSelected()) + if((*itr)->IsSelected()) break; } if(itr == maEntries.end()) @@ -292,7 +304,7 @@ IMPL_LINK(ScCondFormatList, AfterTypeListHdl, ListBox*, pBox) switch(nPos) { case 0: - switch(itr->GetType()) + switch((*itr)->GetType()) { case condformat::entry::FORMULA: case condformat::entry::CONDITION: @@ -304,33 +316,33 @@ IMPL_LINK(ScCondFormatList, AfterTypeListHdl, ListBox*, pBox) case condformat::entry::ICONSET: return 0; } - maEntries.replace( itr, new ScColorScale3FrmtEntry(this, mpDoc, maPos)); + *itr = VclPtr<ScColorScale3FrmtEntry>::Create(this, mpDoc, maPos); mpDialogParent->InvalidateRefData(); - itr->SetActive(); + (*itr)->SetActive(); break; case 1: - if(itr->GetType() == condformat::entry::CONDITION) + if((*itr)->GetType() == condformat::entry::CONDITION) return 0; - maEntries.replace( itr, new ScConditionFrmtEntry(this, mpDoc, mpDialogParent, maPos)); + *itr = VclPtr<ScConditionFrmtEntry>::Create(this, mpDoc, mpDialogParent, maPos); mpDialogParent->InvalidateRefData(); - itr->SetActive(); + (*itr)->SetActive(); break; case 2: - if(itr->GetType() == condformat::entry::FORMULA) + if((*itr)->GetType() == condformat::entry::FORMULA) return 0; - maEntries.replace( itr, new ScFormulaFrmtEntry(this, mpDoc, mpDialogParent, maPos)); + *itr = VclPtr<ScFormulaFrmtEntry>::Create(this, mpDoc, mpDialogParent, maPos); mpDialogParent->InvalidateRefData(); - itr->SetActive(); + (*itr)->SetActive(); break; case 3: - if(itr->GetType() == condformat::entry::DATE) + if((*itr)->GetType() == condformat::entry::DATE) return 0; - maEntries.replace( itr, new ScDateFrmtEntry( this, mpDoc )); + *itr = VclPtr<ScDateFrmtEntry>::Create( this, mpDoc ); mpDialogParent->InvalidateRefData(); - itr->SetActive(); + (*itr)->SetActive(); break; } @@ -340,11 +352,11 @@ IMPL_LINK(ScCondFormatList, AfterTypeListHdl, ListBox*, pBox) IMPL_LINK_NOARG( ScCondFormatList, AddBtnHdl ) { - ScCondFrmtEntry* pNewEntry = new ScConditionFrmtEntry(this, mpDoc, mpDialogParent, maPos); + VclPtr<ScCondFrmtEntry> pNewEntry = VclPtr<ScConditionFrmtEntry>::Create(this, mpDoc, mpDialogParent, maPos); maEntries.push_back( pNewEntry ); for(EntryContainer::iterator itr = maEntries.begin(); itr != maEntries.end(); ++itr) { - itr->SetInactive(); + (*itr)->SetInactive(); } mpDialogParent->InvalidateRefData(); pNewEntry->SetActive(); @@ -356,7 +368,7 @@ IMPL_LINK_NOARG( ScCondFormatList, RemoveBtnHdl ) { for(EntryContainer::iterator itr = maEntries.begin(); itr != maEntries.end(); ++itr) { - if(itr->IsSelected()) + if((*itr)->IsSelected()) { maEntries.erase(itr); break; @@ -377,7 +389,7 @@ IMPL_LINK( ScCondFormatList, EntrySelectHdl, ScCondFrmtEntry*, pEntry ) bool bReGrabFocus = HasChildPathFocus(); for(EntryContainer::iterator itr = maEntries.begin(); itr != maEntries.end(); ++itr) { - itr->SetInactive(); + (*itr)->SetInactive(); } mpDialogParent->InvalidateRefData(); pEntry->SetActive(); @@ -436,7 +448,20 @@ ScCondFormatDlg::ScCondFormatDlg(vcl::Window* pParent, ScDocument* pDoc, ScCondFormatDlg::~ScCondFormatDlg() { + disposeOnce(); +} + +void ScCondFormatDlg::dispose() +{ SC_MOD()->PopAnyRefDlg(); + mpBtnAdd.clear(); + mpBtnRemove.clear(); + mpFtRange.clear(); + mpEdRange.clear(); + mpRbRange.clear(); + mpCondFormList.clear(); + mpLastEdit.clear(); + ScAnyRefModalDlg::dispose(); } void ScCondFormatDlg::SetActive() |