1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_extensions.hxx" 26*b1cdbd2cSJim Jagielski #include "propertyeditor.hxx" 27*b1cdbd2cSJim Jagielski #include "browserpage.hxx" 28*b1cdbd2cSJim Jagielski #include "linedescriptor.hxx" 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/ 31*b1cdbd2cSJim Jagielski /** === end UNO includes === **/ 32*b1cdbd2cSJim Jagielski #include <tools/debug.hxx> 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski //............................................................................ 35*b1cdbd2cSJim Jagielski namespace pcr 36*b1cdbd2cSJim Jagielski { 37*b1cdbd2cSJim Jagielski //............................................................................ 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski #define LAYOUT_BORDER_LEFT 3 40*b1cdbd2cSJim Jagielski #define LAYOUT_BORDER_TOP 3 41*b1cdbd2cSJim Jagielski #define LAYOUT_BORDER_RIGHT 3 42*b1cdbd2cSJim Jagielski #define LAYOUT_BORDER_BOTTOM 3 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski /** === begin UNO using === **/ 45*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Any; 46*b1cdbd2cSJim Jagielski using ::com::sun::star::inspection::XPropertyControl; 47*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Reference; 48*b1cdbd2cSJim Jagielski /** === end UNO using === **/ 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski //================================================================== 51*b1cdbd2cSJim Jagielski // class OPropertyEditor 52*b1cdbd2cSJim Jagielski //================================================================== DBG_NAME(OPropertyEditor)53*b1cdbd2cSJim Jagielski DBG_NAME(OPropertyEditor) 54*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ 55*b1cdbd2cSJim Jagielski OPropertyEditor::OPropertyEditor( Window* pParent, WinBits nWinStyle) 56*b1cdbd2cSJim Jagielski :Control(pParent, nWinStyle) 57*b1cdbd2cSJim Jagielski ,m_aTabControl( this ) 58*b1cdbd2cSJim Jagielski ,m_nNextId(1) 59*b1cdbd2cSJim Jagielski ,m_bHasHelpSection( false ) 60*b1cdbd2cSJim Jagielski ,m_nMinHelpLines( 0 ) 61*b1cdbd2cSJim Jagielski ,m_nMaxHelpLines( 0 ) 62*b1cdbd2cSJim Jagielski { 63*b1cdbd2cSJim Jagielski DBG_CTOR(OPropertyEditor,NULL); 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski m_aTabControl.Show(); 66*b1cdbd2cSJim Jagielski m_aTabControl.SetDeactivatePageHdl(LINK(this, OPropertyEditor, OnPageDeactivate)); 67*b1cdbd2cSJim Jagielski m_aTabControl.SetActivatePageHdl(LINK(this, OPropertyEditor, OnPageActivate)); 68*b1cdbd2cSJim Jagielski m_aTabControl.SetBackground(GetBackground()); 69*b1cdbd2cSJim Jagielski m_aTabControl.SetPaintTransparent(sal_True); 70*b1cdbd2cSJim Jagielski } 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ ~OPropertyEditor()73*b1cdbd2cSJim Jagielski OPropertyEditor::~OPropertyEditor() 74*b1cdbd2cSJim Jagielski { 75*b1cdbd2cSJim Jagielski Hide(); 76*b1cdbd2cSJim Jagielski ClearAll(); 77*b1cdbd2cSJim Jagielski DBG_DTOR(OPropertyEditor,NULL); 78*b1cdbd2cSJim Jagielski } 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ ClearAll()81*b1cdbd2cSJim Jagielski void OPropertyEditor::ClearAll() 82*b1cdbd2cSJim Jagielski { 83*b1cdbd2cSJim Jagielski m_nNextId=1; 84*b1cdbd2cSJim Jagielski sal_uInt16 nCount = m_aTabControl.GetPageCount(); 85*b1cdbd2cSJim Jagielski for(long i = nCount-1; i >= 0; --i) 86*b1cdbd2cSJim Jagielski { 87*b1cdbd2cSJim Jagielski sal_uInt16 nID = m_aTabControl.GetPageId((sal_uInt16)i); 88*b1cdbd2cSJim Jagielski OBrowserPage* pPage = static_cast<OBrowserPage*>(m_aTabControl.GetTabPage(nID)); 89*b1cdbd2cSJim Jagielski if (pPage) 90*b1cdbd2cSJim Jagielski { 91*b1cdbd2cSJim Jagielski pPage->EnableInput(sal_False); 92*b1cdbd2cSJim Jagielski m_aTabControl.RemovePage(nID); 93*b1cdbd2cSJim Jagielski delete pPage; 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski m_aTabControl.Clear(); 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski { 99*b1cdbd2cSJim Jagielski MapStringToPageId aEmpty; 100*b1cdbd2cSJim Jagielski m_aPropertyPageIds.swap( aEmpty ); 101*b1cdbd2cSJim Jagielski } 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski while ( !m_aHiddenPages.empty() ) 104*b1cdbd2cSJim Jagielski { 105*b1cdbd2cSJim Jagielski delete m_aHiddenPages.begin()->second.pPage; 106*b1cdbd2cSJim Jagielski m_aHiddenPages.erase( m_aHiddenPages.begin() ); 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ getMinimumHeight()111*b1cdbd2cSJim Jagielski sal_Int32 OPropertyEditor::getMinimumHeight() 112*b1cdbd2cSJim Jagielski { 113*b1cdbd2cSJim Jagielski sal_Int32 nMinHeight( LAYOUT_BORDER_TOP + LAYOUT_BORDER_BOTTOM ); 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski if ( m_aTabControl.GetPageCount() > 0 ) 116*b1cdbd2cSJim Jagielski { 117*b1cdbd2cSJim Jagielski sal_uInt16 nFirstID = m_aTabControl.GetPageId( 0 ); 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski // reserve space for the tabs themself 120*b1cdbd2cSJim Jagielski Rectangle aTabArea( m_aTabControl.GetTabBounds( nFirstID ) ); 121*b1cdbd2cSJim Jagielski nMinHeight += aTabArea.GetHeight(); 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski // ask the page how much it requires 124*b1cdbd2cSJim Jagielski OBrowserPage* pPage = static_cast< OBrowserPage* >( m_aTabControl.GetTabPage( nFirstID ) ); 125*b1cdbd2cSJim Jagielski if ( pPage ) 126*b1cdbd2cSJim Jagielski nMinHeight += pPage->getMinimumHeight(); 127*b1cdbd2cSJim Jagielski } 128*b1cdbd2cSJim Jagielski else 129*b1cdbd2cSJim Jagielski nMinHeight += 250; // arbitrary ... 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski return nMinHeight; 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ getMinimumWidth()135*b1cdbd2cSJim Jagielski sal_Int32 OPropertyEditor::getMinimumWidth() 136*b1cdbd2cSJim Jagielski { 137*b1cdbd2cSJim Jagielski sal_uInt16 nCount = m_aTabControl.GetPageCount(); 138*b1cdbd2cSJim Jagielski sal_Int32 nPageMinWidth = 0; 139*b1cdbd2cSJim Jagielski for(long i = nCount-1; i >= 0; --i) 140*b1cdbd2cSJim Jagielski { 141*b1cdbd2cSJim Jagielski sal_uInt16 nID = m_aTabControl.GetPageId((sal_uInt16)i); 142*b1cdbd2cSJim Jagielski OBrowserPage* pPage = static_cast<OBrowserPage*>(m_aTabControl.GetTabPage(nID)); 143*b1cdbd2cSJim Jagielski if (pPage) 144*b1cdbd2cSJim Jagielski { 145*b1cdbd2cSJim Jagielski sal_Int32 nCurPageMinWidth = pPage->getMinimumWidth(); 146*b1cdbd2cSJim Jagielski if( nCurPageMinWidth > nPageMinWidth ) 147*b1cdbd2cSJim Jagielski nPageMinWidth = nCurPageMinWidth; 148*b1cdbd2cSJim Jagielski } 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski return nPageMinWidth+6; 151*b1cdbd2cSJim Jagielski } 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ CommitModified()154*b1cdbd2cSJim Jagielski void OPropertyEditor::CommitModified() 155*b1cdbd2cSJim Jagielski { 156*b1cdbd2cSJim Jagielski // commit all of my pages, if necessary 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski sal_uInt16 nCount = m_aTabControl.GetPageCount(); 159*b1cdbd2cSJim Jagielski for ( sal_uInt16 i=0; i<nCount; ++i ) 160*b1cdbd2cSJim Jagielski { 161*b1cdbd2cSJim Jagielski sal_uInt16 nID = m_aTabControl.GetPageId( i ); 162*b1cdbd2cSJim Jagielski OBrowserPage* pPage = static_cast< OBrowserPage* >( m_aTabControl.GetTabPage( nID ) ); 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski if ( pPage && pPage->getListBox().IsModified() ) 165*b1cdbd2cSJim Jagielski pPage->getListBox().CommitModified(); 166*b1cdbd2cSJim Jagielski } 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ GetFocus()170*b1cdbd2cSJim Jagielski void OPropertyEditor::GetFocus() 171*b1cdbd2cSJim Jagielski { 172*b1cdbd2cSJim Jagielski m_aTabControl.GrabFocus(); 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ getPage(const::rtl::OUString & _rPropertyName)176*b1cdbd2cSJim Jagielski OBrowserPage* OPropertyEditor::getPage( const ::rtl::OUString& _rPropertyName ) 177*b1cdbd2cSJim Jagielski { 178*b1cdbd2cSJim Jagielski OBrowserPage* pPage = NULL; 179*b1cdbd2cSJim Jagielski MapStringToPageId::const_iterator aPropertyPageIdPos = m_aPropertyPageIds.find( _rPropertyName ); 180*b1cdbd2cSJim Jagielski if ( aPropertyPageIdPos != m_aPropertyPageIds.end() ) 181*b1cdbd2cSJim Jagielski pPage = static_cast< OBrowserPage* >( m_aTabControl.GetTabPage( aPropertyPageIdPos->second ) ); 182*b1cdbd2cSJim Jagielski return pPage; 183*b1cdbd2cSJim Jagielski } 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ getPage(const::rtl::OUString & _rPropertyName) const186*b1cdbd2cSJim Jagielski const OBrowserPage* OPropertyEditor::getPage( const ::rtl::OUString& _rPropertyName ) const 187*b1cdbd2cSJim Jagielski { 188*b1cdbd2cSJim Jagielski return const_cast< OPropertyEditor* >( this )->getPage( _rPropertyName ); 189*b1cdbd2cSJim Jagielski } 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ getPage(sal_uInt16 & _rPageId)192*b1cdbd2cSJim Jagielski OBrowserPage* OPropertyEditor::getPage( sal_uInt16& _rPageId ) 193*b1cdbd2cSJim Jagielski { 194*b1cdbd2cSJim Jagielski return static_cast< OBrowserPage* >( m_aTabControl.GetTabPage( _rPageId ) ); 195*b1cdbd2cSJim Jagielski } 196*b1cdbd2cSJim Jagielski 197*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ getPage(sal_uInt16 & _rPageId) const198*b1cdbd2cSJim Jagielski const OBrowserPage* OPropertyEditor::getPage( sal_uInt16& _rPageId ) const 199*b1cdbd2cSJim Jagielski { 200*b1cdbd2cSJim Jagielski return const_cast< OPropertyEditor* >( this )->getPage( _rPageId ); 201*b1cdbd2cSJim Jagielski } 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ Resize()204*b1cdbd2cSJim Jagielski void OPropertyEditor::Resize() 205*b1cdbd2cSJim Jagielski { 206*b1cdbd2cSJim Jagielski Rectangle aPlayground( 207*b1cdbd2cSJim Jagielski Point( LAYOUT_BORDER_LEFT, LAYOUT_BORDER_TOP ), 208*b1cdbd2cSJim Jagielski Size( 209*b1cdbd2cSJim Jagielski GetOutputSizePixel().Width() - LAYOUT_BORDER_LEFT - LAYOUT_BORDER_RIGHT, 210*b1cdbd2cSJim Jagielski GetOutputSizePixel().Height() - LAYOUT_BORDER_TOP - LAYOUT_BORDER_BOTTOM 211*b1cdbd2cSJim Jagielski ) 212*b1cdbd2cSJim Jagielski ); 213*b1cdbd2cSJim Jagielski 214*b1cdbd2cSJim Jagielski Rectangle aTabArea( aPlayground ); 215*b1cdbd2cSJim Jagielski m_aTabControl.SetPosSizePixel( aTabArea.TopLeft(), aTabArea.GetSize() ); 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski 218*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ AppendPage(const String & _rText,const rtl::OString & _rHelpId)219*b1cdbd2cSJim Jagielski sal_uInt16 OPropertyEditor::AppendPage( const String & _rText, const rtl::OString& _rHelpId ) 220*b1cdbd2cSJim Jagielski { 221*b1cdbd2cSJim Jagielski // obtain a new id 222*b1cdbd2cSJim Jagielski sal_uInt16 nId = m_nNextId++; 223*b1cdbd2cSJim Jagielski // insert the id 224*b1cdbd2cSJim Jagielski m_aTabControl.InsertPage(nId, _rText); 225*b1cdbd2cSJim Jagielski 226*b1cdbd2cSJim Jagielski // create a new page 227*b1cdbd2cSJim Jagielski OBrowserPage* pPage = new OBrowserPage(&m_aTabControl); 228*b1cdbd2cSJim Jagielski pPage->SetText( _rText ); 229*b1cdbd2cSJim Jagielski // some knittings 230*b1cdbd2cSJim Jagielski pPage->SetSizePixel(m_aTabControl.GetTabPageSizePixel()); 231*b1cdbd2cSJim Jagielski pPage->getListBox().SetListener(m_pListener); 232*b1cdbd2cSJim Jagielski pPage->getListBox().SetObserver(m_pObserver); 233*b1cdbd2cSJim Jagielski pPage->getListBox().EnableHelpSection( m_bHasHelpSection ); 234*b1cdbd2cSJim Jagielski pPage->getListBox().SetHelpLineLimites( m_nMinHelpLines, m_nMaxHelpLines ); 235*b1cdbd2cSJim Jagielski pPage->SetHelpId( _rHelpId ); 236*b1cdbd2cSJim Jagielski 237*b1cdbd2cSJim Jagielski // immediately activate the page 238*b1cdbd2cSJim Jagielski m_aTabControl.SetTabPage(nId, pPage); 239*b1cdbd2cSJim Jagielski m_aTabControl.SetCurPageId(nId); 240*b1cdbd2cSJim Jagielski 241*b1cdbd2cSJim Jagielski return nId; 242*b1cdbd2cSJim Jagielski } 243*b1cdbd2cSJim Jagielski 244*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ SetHelpId(const rtl::OString & rHelpId)245*b1cdbd2cSJim Jagielski void OPropertyEditor::SetHelpId( const rtl::OString& rHelpId ) 246*b1cdbd2cSJim Jagielski { 247*b1cdbd2cSJim Jagielski Control::SetHelpId(""); 248*b1cdbd2cSJim Jagielski m_aTabControl.SetHelpId(rHelpId); 249*b1cdbd2cSJim Jagielski } 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ RemovePage(sal_uInt16 nID)252*b1cdbd2cSJim Jagielski void OPropertyEditor::RemovePage(sal_uInt16 nID) 253*b1cdbd2cSJim Jagielski { 254*b1cdbd2cSJim Jagielski OBrowserPage* pPage = static_cast<OBrowserPage*>(m_aTabControl.GetTabPage(nID)); 255*b1cdbd2cSJim Jagielski 256*b1cdbd2cSJim Jagielski if (pPage) 257*b1cdbd2cSJim Jagielski pPage->EnableInput(sal_False); 258*b1cdbd2cSJim Jagielski m_aTabControl.RemovePage(nID); 259*b1cdbd2cSJim Jagielski if (pPage) 260*b1cdbd2cSJim Jagielski delete pPage; 261*b1cdbd2cSJim Jagielski } 262*b1cdbd2cSJim Jagielski 263*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ SetPage(sal_uInt16 nId)264*b1cdbd2cSJim Jagielski void OPropertyEditor::SetPage(sal_uInt16 nId) 265*b1cdbd2cSJim Jagielski { 266*b1cdbd2cSJim Jagielski m_aTabControl.SetCurPageId(nId); 267*b1cdbd2cSJim Jagielski } 268*b1cdbd2cSJim Jagielski 269*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ GetCurPage()270*b1cdbd2cSJim Jagielski sal_uInt16 OPropertyEditor::GetCurPage() 271*b1cdbd2cSJim Jagielski { 272*b1cdbd2cSJim Jagielski if(m_aTabControl.GetPageCount()>0) 273*b1cdbd2cSJim Jagielski return m_aTabControl.GetCurPageId(); 274*b1cdbd2cSJim Jagielski else 275*b1cdbd2cSJim Jagielski return 0; 276*b1cdbd2cSJim Jagielski } 277*b1cdbd2cSJim Jagielski 278*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ Update(const::std::mem_fun_t<void,OBrowserListBox> & _aUpdateFunction)279*b1cdbd2cSJim Jagielski void OPropertyEditor::Update(const ::std::mem_fun_t<void,OBrowserListBox>& _aUpdateFunction) 280*b1cdbd2cSJim Jagielski { 281*b1cdbd2cSJim Jagielski // forward this to all our pages 282*b1cdbd2cSJim Jagielski sal_uInt16 nCount = m_aTabControl.GetPageCount(); 283*b1cdbd2cSJim Jagielski for (sal_uInt16 i=0;i<nCount;++i) 284*b1cdbd2cSJim Jagielski { 285*b1cdbd2cSJim Jagielski sal_uInt16 nID = m_aTabControl.GetPageId(i); 286*b1cdbd2cSJim Jagielski OBrowserPage* pPage = static_cast<OBrowserPage*>(m_aTabControl.GetTabPage(nID)); 287*b1cdbd2cSJim Jagielski if (pPage) 288*b1cdbd2cSJim Jagielski _aUpdateFunction(&pPage->getListBox()); 289*b1cdbd2cSJim Jagielski } 290*b1cdbd2cSJim Jagielski } 291*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ EnableUpdate()292*b1cdbd2cSJim Jagielski void OPropertyEditor::EnableUpdate() 293*b1cdbd2cSJim Jagielski { 294*b1cdbd2cSJim Jagielski Update(::std::mem_fun(&OBrowserListBox::EnableUpdate)); 295*b1cdbd2cSJim Jagielski } 296*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ DisableUpdate()297*b1cdbd2cSJim Jagielski void OPropertyEditor::DisableUpdate() 298*b1cdbd2cSJim Jagielski { 299*b1cdbd2cSJim Jagielski Update(::std::mem_fun(&OBrowserListBox::DisableUpdate)); 300*b1cdbd2cSJim Jagielski } 301*b1cdbd2cSJim Jagielski 302*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ forEachPage(PageOperation _pOperation,const void * _pArgument)303*b1cdbd2cSJim Jagielski void OPropertyEditor::forEachPage( PageOperation _pOperation, const void* _pArgument ) 304*b1cdbd2cSJim Jagielski { 305*b1cdbd2cSJim Jagielski sal_uInt16 nCount = m_aTabControl.GetPageCount(); 306*b1cdbd2cSJim Jagielski for ( sal_uInt16 i=0; i<nCount; ++i ) 307*b1cdbd2cSJim Jagielski { 308*b1cdbd2cSJim Jagielski sal_uInt16 nID = m_aTabControl.GetPageId(i); 309*b1cdbd2cSJim Jagielski OBrowserPage* pPage = static_cast< OBrowserPage* >( m_aTabControl.GetTabPage( nID ) ); 310*b1cdbd2cSJim Jagielski if ( !pPage ) 311*b1cdbd2cSJim Jagielski continue; 312*b1cdbd2cSJim Jagielski (this->*_pOperation)( *pPage, _pArgument ); 313*b1cdbd2cSJim Jagielski } 314*b1cdbd2cSJim Jagielski } 315*b1cdbd2cSJim Jagielski 316*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ setPageLineListener(OBrowserPage & _rPage,const void *)317*b1cdbd2cSJim Jagielski void OPropertyEditor::setPageLineListener( OBrowserPage& _rPage, const void* ) 318*b1cdbd2cSJim Jagielski { 319*b1cdbd2cSJim Jagielski _rPage.getListBox().SetListener( m_pListener ); 320*b1cdbd2cSJim Jagielski } 321*b1cdbd2cSJim Jagielski 322*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ SetLineListener(IPropertyLineListener * _pListener)323*b1cdbd2cSJim Jagielski void OPropertyEditor::SetLineListener(IPropertyLineListener* _pListener) 324*b1cdbd2cSJim Jagielski { 325*b1cdbd2cSJim Jagielski m_pListener = _pListener; 326*b1cdbd2cSJim Jagielski forEachPage( &OPropertyEditor::setPageLineListener ); 327*b1cdbd2cSJim Jagielski } 328*b1cdbd2cSJim Jagielski 329*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ setPageControlObserver(OBrowserPage & _rPage,const void *)330*b1cdbd2cSJim Jagielski void OPropertyEditor::setPageControlObserver( OBrowserPage& _rPage, const void* ) 331*b1cdbd2cSJim Jagielski { 332*b1cdbd2cSJim Jagielski _rPage.getListBox().SetObserver( m_pObserver ); 333*b1cdbd2cSJim Jagielski } 334*b1cdbd2cSJim Jagielski 335*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ SetControlObserver(IPropertyControlObserver * _pObserver)336*b1cdbd2cSJim Jagielski void OPropertyEditor::SetControlObserver( IPropertyControlObserver* _pObserver ) 337*b1cdbd2cSJim Jagielski { 338*b1cdbd2cSJim Jagielski m_pObserver = _pObserver; 339*b1cdbd2cSJim Jagielski forEachPage( &OPropertyEditor::setPageControlObserver ); 340*b1cdbd2cSJim Jagielski } 341*b1cdbd2cSJim Jagielski 342*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ EnableHelpSection(bool _bEnable)343*b1cdbd2cSJim Jagielski void OPropertyEditor::EnableHelpSection( bool _bEnable ) 344*b1cdbd2cSJim Jagielski { 345*b1cdbd2cSJim Jagielski m_bHasHelpSection = _bEnable; 346*b1cdbd2cSJim Jagielski forEachPage( &OPropertyEditor::enableHelpSection ); 347*b1cdbd2cSJim Jagielski } 348*b1cdbd2cSJim Jagielski 349*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ HasHelpSection() const350*b1cdbd2cSJim Jagielski bool OPropertyEditor::HasHelpSection() const 351*b1cdbd2cSJim Jagielski { 352*b1cdbd2cSJim Jagielski return m_bHasHelpSection; 353*b1cdbd2cSJim Jagielski } 354*b1cdbd2cSJim Jagielski 355*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ SetHelpText(const::rtl::OUString & _rHelpText)356*b1cdbd2cSJim Jagielski void OPropertyEditor::SetHelpText( const ::rtl::OUString& _rHelpText ) 357*b1cdbd2cSJim Jagielski { 358*b1cdbd2cSJim Jagielski forEachPage( &OPropertyEditor::setHelpSectionText, &_rHelpText ); 359*b1cdbd2cSJim Jagielski } 360*b1cdbd2cSJim Jagielski 361*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ SetHelpLineLimites(sal_Int32 _nMinLines,sal_Int32 _nMaxLines)362*b1cdbd2cSJim Jagielski void OPropertyEditor::SetHelpLineLimites( sal_Int32 _nMinLines, sal_Int32 _nMaxLines ) 363*b1cdbd2cSJim Jagielski { 364*b1cdbd2cSJim Jagielski m_nMinHelpLines = _nMinLines; 365*b1cdbd2cSJim Jagielski m_nMaxHelpLines = _nMaxLines; 366*b1cdbd2cSJim Jagielski forEachPage( &OPropertyEditor::setHelpLineLimits ); 367*b1cdbd2cSJim Jagielski } 368*b1cdbd2cSJim Jagielski 369*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ enableHelpSection(OBrowserPage & _rPage,const void *)370*b1cdbd2cSJim Jagielski void OPropertyEditor::enableHelpSection( OBrowserPage& _rPage, const void* ) 371*b1cdbd2cSJim Jagielski { 372*b1cdbd2cSJim Jagielski _rPage.getListBox().EnableHelpSection( m_bHasHelpSection ); 373*b1cdbd2cSJim Jagielski } 374*b1cdbd2cSJim Jagielski 375*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ setHelpSectionText(OBrowserPage & _rPage,const void * _pPointerToOUString)376*b1cdbd2cSJim Jagielski void OPropertyEditor::setHelpSectionText( OBrowserPage& _rPage, const void* _pPointerToOUString ) 377*b1cdbd2cSJim Jagielski { 378*b1cdbd2cSJim Jagielski OSL_ENSURE( _pPointerToOUString, "OPropertyEditor::setHelpSectionText: invalid argument!" ); 379*b1cdbd2cSJim Jagielski if ( !_pPointerToOUString ) 380*b1cdbd2cSJim Jagielski return; 381*b1cdbd2cSJim Jagielski 382*b1cdbd2cSJim Jagielski const ::rtl::OUString& rText( *(const ::rtl::OUString*)_pPointerToOUString ); 383*b1cdbd2cSJim Jagielski _rPage.getListBox().SetHelpText( rText ); 384*b1cdbd2cSJim Jagielski } 385*b1cdbd2cSJim Jagielski 386*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ setHelpLineLimits(OBrowserPage & _rPage,const void *)387*b1cdbd2cSJim Jagielski void OPropertyEditor::setHelpLineLimits( OBrowserPage& _rPage, const void* ) 388*b1cdbd2cSJim Jagielski { 389*b1cdbd2cSJim Jagielski _rPage.getListBox().SetHelpLineLimites( m_nMinHelpLines, m_nMaxHelpLines ); 390*b1cdbd2cSJim Jagielski } 391*b1cdbd2cSJim Jagielski 392*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ InsertEntry(const OLineDescriptor & rData,sal_uInt16 _nPageId,sal_uInt16 nPos)393*b1cdbd2cSJim Jagielski sal_uInt16 OPropertyEditor::InsertEntry( const OLineDescriptor& rData, sal_uInt16 _nPageId, sal_uInt16 nPos ) 394*b1cdbd2cSJim Jagielski { 395*b1cdbd2cSJim Jagielski // let the current page handle this 396*b1cdbd2cSJim Jagielski OBrowserPage* pPage = getPage( _nPageId ); 397*b1cdbd2cSJim Jagielski DBG_ASSERT( pPage, "OPropertyEditor::InsertEntry: don't have such a page!" ); 398*b1cdbd2cSJim Jagielski if ( !pPage ) 399*b1cdbd2cSJim Jagielski return LISTBOX_ENTRY_NOTFOUND; 400*b1cdbd2cSJim Jagielski 401*b1cdbd2cSJim Jagielski sal_uInt16 nEntry = pPage->getListBox().InsertEntry( rData, nPos ); 402*b1cdbd2cSJim Jagielski 403*b1cdbd2cSJim Jagielski OSL_ENSURE( m_aPropertyPageIds.find( rData.sName ) == m_aPropertyPageIds.end(), 404*b1cdbd2cSJim Jagielski "OPropertyEditor::InsertEntry: property already present in the map!" ); 405*b1cdbd2cSJim Jagielski m_aPropertyPageIds.insert( MapStringToPageId::value_type( rData.sName, _nPageId ) ); 406*b1cdbd2cSJim Jagielski 407*b1cdbd2cSJim Jagielski return nEntry; 408*b1cdbd2cSJim Jagielski } 409*b1cdbd2cSJim Jagielski 410*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ RemoveEntry(const::rtl::OUString & _rName)411*b1cdbd2cSJim Jagielski void OPropertyEditor::RemoveEntry( const ::rtl::OUString& _rName ) 412*b1cdbd2cSJim Jagielski { 413*b1cdbd2cSJim Jagielski OBrowserPage* pPage = getPage( _rName ); 414*b1cdbd2cSJim Jagielski if ( pPage ) 415*b1cdbd2cSJim Jagielski { 416*b1cdbd2cSJim Jagielski OSL_VERIFY( pPage->getListBox().RemoveEntry( _rName ) ); 417*b1cdbd2cSJim Jagielski 418*b1cdbd2cSJim Jagielski OSL_ENSURE( m_aPropertyPageIds.find( _rName ) != m_aPropertyPageIds.end(), 419*b1cdbd2cSJim Jagielski "OPropertyEditor::RemoveEntry: property not present in the map!" ); 420*b1cdbd2cSJim Jagielski m_aPropertyPageIds.erase( _rName ); 421*b1cdbd2cSJim Jagielski } 422*b1cdbd2cSJim Jagielski } 423*b1cdbd2cSJim Jagielski 424*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ ChangeEntry(const OLineDescriptor & rData)425*b1cdbd2cSJim Jagielski void OPropertyEditor::ChangeEntry( const OLineDescriptor& rData ) 426*b1cdbd2cSJim Jagielski { 427*b1cdbd2cSJim Jagielski OBrowserPage* pPage = getPage( rData.sName ); 428*b1cdbd2cSJim Jagielski if ( pPage ) 429*b1cdbd2cSJim Jagielski pPage->getListBox().ChangeEntry( rData, EDITOR_LIST_REPLACE_EXISTING ); 430*b1cdbd2cSJim Jagielski } 431*b1cdbd2cSJim Jagielski 432*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ SetPropertyValue(const::rtl::OUString & rEntryName,const Any & _rValue,bool _bUnknownValue)433*b1cdbd2cSJim Jagielski void OPropertyEditor::SetPropertyValue( const ::rtl::OUString& rEntryName, const Any& _rValue, bool _bUnknownValue ) 434*b1cdbd2cSJim Jagielski { 435*b1cdbd2cSJim Jagielski OBrowserPage* pPage = getPage( rEntryName ); 436*b1cdbd2cSJim Jagielski if ( pPage ) 437*b1cdbd2cSJim Jagielski pPage->getListBox().SetPropertyValue( rEntryName, _rValue, _bUnknownValue ); 438*b1cdbd2cSJim Jagielski } 439*b1cdbd2cSJim Jagielski 440*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ GetPropertyPos(const::rtl::OUString & rEntryName) const441*b1cdbd2cSJim Jagielski sal_uInt16 OPropertyEditor::GetPropertyPos( const ::rtl::OUString& rEntryName ) const 442*b1cdbd2cSJim Jagielski { 443*b1cdbd2cSJim Jagielski sal_uInt16 nVal=LISTBOX_ENTRY_NOTFOUND; 444*b1cdbd2cSJim Jagielski const OBrowserPage* pPage = getPage( rEntryName ); 445*b1cdbd2cSJim Jagielski if ( pPage ) 446*b1cdbd2cSJim Jagielski nVal = pPage->getListBox().GetPropertyPos( rEntryName ); 447*b1cdbd2cSJim Jagielski return nVal; 448*b1cdbd2cSJim Jagielski } 449*b1cdbd2cSJim Jagielski 450*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ ShowPropertyPage(sal_uInt16 _nPageId,bool _bShow)451*b1cdbd2cSJim Jagielski void OPropertyEditor::ShowPropertyPage( sal_uInt16 _nPageId, bool _bShow ) 452*b1cdbd2cSJim Jagielski { 453*b1cdbd2cSJim Jagielski if ( !_bShow ) 454*b1cdbd2cSJim Jagielski { 455*b1cdbd2cSJim Jagielski sal_uInt16 nPagePos = m_aTabControl.GetPagePos( _nPageId ); 456*b1cdbd2cSJim Jagielski if ( TAB_PAGE_NOTFOUND == nPagePos ) 457*b1cdbd2cSJim Jagielski return; 458*b1cdbd2cSJim Jagielski DBG_ASSERT( m_aHiddenPages.find( _nPageId ) == m_aHiddenPages.end(), "OPropertyEditor::ShowPropertyPage: page already hidden!" ); 459*b1cdbd2cSJim Jagielski 460*b1cdbd2cSJim Jagielski m_aHiddenPages[ _nPageId ] = HiddenPage( nPagePos, m_aTabControl.GetTabPage( _nPageId ) ); 461*b1cdbd2cSJim Jagielski m_aTabControl.RemovePage( _nPageId ); 462*b1cdbd2cSJim Jagielski } 463*b1cdbd2cSJim Jagielski else 464*b1cdbd2cSJim Jagielski { 465*b1cdbd2cSJim Jagielski ::std::map< sal_uInt16, HiddenPage >::iterator aPagePos = m_aHiddenPages.find( _nPageId ); 466*b1cdbd2cSJim Jagielski if ( aPagePos == m_aHiddenPages.end() ) 467*b1cdbd2cSJim Jagielski return; 468*b1cdbd2cSJim Jagielski 469*b1cdbd2cSJim Jagielski aPagePos->second.pPage->SetSizePixel( m_aTabControl.GetTabPageSizePixel() ); 470*b1cdbd2cSJim Jagielski m_aTabControl.InsertPage( aPagePos->first, aPagePos->second.pPage->GetText(), aPagePos->second.nPos ); 471*b1cdbd2cSJim Jagielski m_aTabControl.SetTabPage( aPagePos->first, aPagePos->second.pPage ); 472*b1cdbd2cSJim Jagielski 473*b1cdbd2cSJim Jagielski m_aHiddenPages.erase( aPagePos ); 474*b1cdbd2cSJim Jagielski } 475*b1cdbd2cSJim Jagielski } 476*b1cdbd2cSJim Jagielski 477*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ EnablePropertyControls(const::rtl::OUString & _rEntryName,sal_Int16 _nControls,bool _bEnable)478*b1cdbd2cSJim Jagielski void OPropertyEditor::EnablePropertyControls( const ::rtl::OUString& _rEntryName, sal_Int16 _nControls, bool _bEnable ) 479*b1cdbd2cSJim Jagielski { 480*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < m_aTabControl.GetPageCount(); ++i ) 481*b1cdbd2cSJim Jagielski { 482*b1cdbd2cSJim Jagielski OBrowserPage* pPage = static_cast< OBrowserPage* >( m_aTabControl.GetTabPage( m_aTabControl.GetPageId( i ) ) ); 483*b1cdbd2cSJim Jagielski if ( pPage ) 484*b1cdbd2cSJim Jagielski pPage->getListBox().EnablePropertyControls( _rEntryName, _nControls, _bEnable ); 485*b1cdbd2cSJim Jagielski } 486*b1cdbd2cSJim Jagielski } 487*b1cdbd2cSJim Jagielski 488*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ EnablePropertyLine(const::rtl::OUString & _rEntryName,bool _bEnable)489*b1cdbd2cSJim Jagielski void OPropertyEditor::EnablePropertyLine( const ::rtl::OUString& _rEntryName, bool _bEnable ) 490*b1cdbd2cSJim Jagielski { 491*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < m_aTabControl.GetPageCount(); ++i ) 492*b1cdbd2cSJim Jagielski { 493*b1cdbd2cSJim Jagielski OBrowserPage* pPage = static_cast< OBrowserPage* >( m_aTabControl.GetTabPage( m_aTabControl.GetPageId( i ) ) ); 494*b1cdbd2cSJim Jagielski if ( pPage ) 495*b1cdbd2cSJim Jagielski pPage->getListBox().EnablePropertyLine( _rEntryName, _bEnable ); 496*b1cdbd2cSJim Jagielski } 497*b1cdbd2cSJim Jagielski } 498*b1cdbd2cSJim Jagielski 499*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ GetPropertyControl(const::rtl::OUString & rEntryName)500*b1cdbd2cSJim Jagielski Reference< XPropertyControl > OPropertyEditor::GetPropertyControl(const ::rtl::OUString& rEntryName) 501*b1cdbd2cSJim Jagielski { 502*b1cdbd2cSJim Jagielski Reference< XPropertyControl > xControl; 503*b1cdbd2cSJim Jagielski // let the current page handle this 504*b1cdbd2cSJim Jagielski OBrowserPage* pPage = static_cast<OBrowserPage*>(m_aTabControl.GetTabPage(m_aTabControl.GetCurPageId())); 505*b1cdbd2cSJim Jagielski if (pPage) 506*b1cdbd2cSJim Jagielski xControl = pPage->getListBox().GetPropertyControl(rEntryName); 507*b1cdbd2cSJim Jagielski return xControl; 508*b1cdbd2cSJim Jagielski } 509*b1cdbd2cSJim Jagielski 510*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ IMPL_LINK(OPropertyEditor,OnPageActivate,TabControl *,EMPTYARG)511*b1cdbd2cSJim Jagielski IMPL_LINK(OPropertyEditor, OnPageActivate, TabControl*, EMPTYARG) 512*b1cdbd2cSJim Jagielski { 513*b1cdbd2cSJim Jagielski if (m_aPageActivationHandler.IsSet()) 514*b1cdbd2cSJim Jagielski m_aPageActivationHandler.Call(NULL); 515*b1cdbd2cSJim Jagielski return 0L; 516*b1cdbd2cSJim Jagielski } 517*b1cdbd2cSJim Jagielski 518*b1cdbd2cSJim Jagielski //------------------------------------------------------------------ IMPL_LINK(OPropertyEditor,OnPageDeactivate,TabControl *,EMPTYARG)519*b1cdbd2cSJim Jagielski IMPL_LINK(OPropertyEditor, OnPageDeactivate, TabControl*, EMPTYARG) 520*b1cdbd2cSJim Jagielski { 521*b1cdbd2cSJim Jagielski // commit the data on the current (to-be-decativated) tab page 522*b1cdbd2cSJim Jagielski // (79404) 523*b1cdbd2cSJim Jagielski sal_Int32 nCurrentId = m_aTabControl.GetCurPageId(); 524*b1cdbd2cSJim Jagielski OBrowserPage* pCurrentPage = static_cast<OBrowserPage*>(m_aTabControl.GetTabPage((sal_uInt16)nCurrentId)); 525*b1cdbd2cSJim Jagielski if ( !pCurrentPage ) 526*b1cdbd2cSJim Jagielski return 1L; 527*b1cdbd2cSJim Jagielski 528*b1cdbd2cSJim Jagielski if ( pCurrentPage->getListBox().IsModified() ) 529*b1cdbd2cSJim Jagielski pCurrentPage->getListBox().CommitModified(); 530*b1cdbd2cSJim Jagielski 531*b1cdbd2cSJim Jagielski return 1L; 532*b1cdbd2cSJim Jagielski } 533*b1cdbd2cSJim Jagielski 534*b1cdbd2cSJim Jagielski //............................................................................ 535*b1cdbd2cSJim Jagielski } // namespace pcr 536*b1cdbd2cSJim Jagielski //............................................................................ 537*b1cdbd2cSJim Jagielski 538*b1cdbd2cSJim Jagielski 539