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 "taborder.hxx" 27*b1cdbd2cSJim Jagielski #ifndef EXTENSIONS_SOURCE_PROPCTRLR_TABORDER_HRC 28*b1cdbd2cSJim Jagielski #include "taborder.hrc" 29*b1cdbd2cSJim Jagielski #endif 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #ifndef _EXTENSIONS_PROPCTRLR_MODULEPRC_HXX_ 32*b1cdbd2cSJim Jagielski #include "modulepcr.hxx" 33*b1cdbd2cSJim Jagielski #endif 34*b1cdbd2cSJim Jagielski #ifndef _EXTENSIONS_FORMCTRLR_PROPRESID_HRC_ 35*b1cdbd2cSJim Jagielski #include "formresid.hrc" 36*b1cdbd2cSJim Jagielski #endif 37*b1cdbd2cSJim Jagielski #include "formstrings.hxx" 38*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx> 39*b1cdbd2cSJim Jagielski #include <comphelper/property.hxx> 40*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase1.hxx> 41*b1cdbd2cSJim Jagielski #include <com/sun/star/form/FormComponentType.hpp> 42*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XTabController.hpp> 43*b1cdbd2cSJim Jagielski #include <vcl/scrbar.hxx> 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski //............................................................................ 46*b1cdbd2cSJim Jagielski namespace pcr 47*b1cdbd2cSJim Jagielski { 48*b1cdbd2cSJim Jagielski //............................................................................ 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno; 51*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::awt; 52*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang; 53*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::form; 54*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans; 55*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::datatransfer; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski //======================================================================== 58*b1cdbd2cSJim Jagielski //= OSimpleTabModel 59*b1cdbd2cSJim Jagielski //======================================================================== 60*b1cdbd2cSJim Jagielski class OSimpleTabModel : public ::cppu::WeakImplHelper1< XTabControllerModel> 61*b1cdbd2cSJim Jagielski { 62*b1cdbd2cSJim Jagielski Sequence< Reference< XControlModel > > m_aModels; 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski public: OSimpleTabModel(const Sequence<Reference<XControlModel>> & _rModels)65*b1cdbd2cSJim Jagielski OSimpleTabModel( const Sequence< Reference< XControlModel > >& _rModels ) 66*b1cdbd2cSJim Jagielski :m_aModels( _rModels ) 67*b1cdbd2cSJim Jagielski { 68*b1cdbd2cSJim Jagielski } 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski // XTabControllerModel setControlModels(const Sequence<Reference<XControlModel>> & rModels)71*b1cdbd2cSJim Jagielski virtual void SAL_CALL setControlModels(const Sequence< Reference< XControlModel > >& rModels) throw( RuntimeException ) {m_aModels = rModels;} getControlModels(void)72*b1cdbd2cSJim Jagielski virtual Sequence< Reference< XControlModel > > SAL_CALL getControlModels(void) throw( RuntimeException ) {return m_aModels;} setGroup(const Sequence<Reference<XControlModel>> &,const::rtl::OUString &)73*b1cdbd2cSJim Jagielski virtual void SAL_CALL setGroup(const Sequence< Reference< XControlModel > >& /*Group*/, const ::rtl::OUString& /*GroupName*/) throw( RuntimeException ) {} getGroupCount(void)74*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL getGroupCount(void) throw( RuntimeException ) {return 0;} getGroup(sal_Int32,Sequence<Reference<XControlModel>> &,::rtl::OUString &)75*b1cdbd2cSJim Jagielski virtual void SAL_CALL getGroup(sal_Int32 /*nGroup*/, Sequence< Reference< XControlModel > >& /*Group*/, ::rtl::OUString& /*Name*/) throw( RuntimeException ) {} getGroupByName(const::rtl::OUString &,Sequence<Reference<XControlModel>> &)76*b1cdbd2cSJim Jagielski virtual void SAL_CALL getGroupByName(const ::rtl::OUString& /*Name*/, Sequence< Reference< XControlModel > >& /*Group*/) throw( RuntimeException ) {} getGroupControl(void)77*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL getGroupControl(void) throw( RuntimeException ){return sal_False;} ; setGroupControl(sal_Bool)78*b1cdbd2cSJim Jagielski virtual void SAL_CALL setGroupControl(sal_Bool /*GroupControl*/) throw( RuntimeException ){}; 79*b1cdbd2cSJim Jagielski }; 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski //======================================================================== 82*b1cdbd2cSJim Jagielski //= TabOrderDialog 83*b1cdbd2cSJim Jagielski //======================================================================== DBG_NAME(TabOrderDialog)84*b1cdbd2cSJim Jagielski DBG_NAME(TabOrderDialog) 85*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ 86*b1cdbd2cSJim Jagielski TabOrderDialog::TabOrderDialog( Window* _pParent, const Reference< XTabControllerModel >& _rxTabModel, 87*b1cdbd2cSJim Jagielski const Reference< XControlContainer >& _rxControlCont, const Reference< XMultiServiceFactory >& _rxORB ) 88*b1cdbd2cSJim Jagielski :ModalDialog( _pParent, PcrRes( RID_DLG_TABORDER ) ) 89*b1cdbd2cSJim Jagielski ,m_xModel( _rxTabModel ) 90*b1cdbd2cSJim Jagielski ,m_xControlContainer( _rxControlCont ) 91*b1cdbd2cSJim Jagielski ,m_xORB( _rxORB ) 92*b1cdbd2cSJim Jagielski ,aFT_Controls( this, PcrRes( FT_CONTROLS ) ) 93*b1cdbd2cSJim Jagielski ,aLB_Controls( this, PcrRes( CTRL_TREE ) ) 94*b1cdbd2cSJim Jagielski ,aPB_OK( this, PcrRes( PB_OK ) ) 95*b1cdbd2cSJim Jagielski ,aPB_CANCEL( this, PcrRes( PB_CANCEL ) ) 96*b1cdbd2cSJim Jagielski ,aPB_HELP( this, PcrRes( PB_HELP ) ) 97*b1cdbd2cSJim Jagielski ,aPB_MoveUp( this, PcrRes( PB_MOVE_UP ) ) 98*b1cdbd2cSJim Jagielski ,aPB_MoveDown( this, PcrRes( PB_MOVE_DOWN ) ) 99*b1cdbd2cSJim Jagielski ,aPB_AutoOrder( this, PcrRes( PB_AUTO_ORDER ) ) 100*b1cdbd2cSJim Jagielski ,pImageList( NULL ) 101*b1cdbd2cSJim Jagielski { 102*b1cdbd2cSJim Jagielski DBG_CTOR(TabOrderDialog,NULL); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski aPB_MoveUp.SetClickHdl( LINK( this, TabOrderDialog, MoveUpClickHdl ) ); 105*b1cdbd2cSJim Jagielski aPB_MoveDown.SetClickHdl( LINK( this, TabOrderDialog, MoveDownClickHdl ) ); 106*b1cdbd2cSJim Jagielski aPB_AutoOrder.SetClickHdl( LINK( this, TabOrderDialog, AutoOrderClickHdl ) ); 107*b1cdbd2cSJim Jagielski aPB_OK.SetClickHdl( LINK( this, TabOrderDialog, OKClickHdl ) ); 108*b1cdbd2cSJim Jagielski aPB_OK.Disable(); 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski sal_Bool bIsHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 111*b1cdbd2cSJim Jagielski pImageList = new ImageList( PcrRes( bIsHighContrast ? RID_IL_FORMEXPLORER_HC : RID_IL_FORMEXPLORER ) ); 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski if ( m_xModel.is() ) 115*b1cdbd2cSJim Jagielski m_xTempModel = new OSimpleTabModel( m_xModel->getControlModels() ); 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski if ( m_xTempModel.is() && m_xControlContainer.is() ) 118*b1cdbd2cSJim Jagielski FillList(); 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski if ( aLB_Controls.GetEntryCount() < 2 ) 121*b1cdbd2cSJim Jagielski { 122*b1cdbd2cSJim Jagielski aPB_MoveUp.Disable(); 123*b1cdbd2cSJim Jagielski aPB_MoveDown.Disable(); 124*b1cdbd2cSJim Jagielski aPB_AutoOrder.Disable(); 125*b1cdbd2cSJim Jagielski } 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski FreeResource(); 128*b1cdbd2cSJim Jagielski } 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ SetModified()131*b1cdbd2cSJim Jagielski void TabOrderDialog::SetModified() 132*b1cdbd2cSJim Jagielski { 133*b1cdbd2cSJim Jagielski aPB_OK.Enable(); 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ ~TabOrderDialog()137*b1cdbd2cSJim Jagielski TabOrderDialog::~TabOrderDialog() 138*b1cdbd2cSJim Jagielski { 139*b1cdbd2cSJim Jagielski aLB_Controls.Hide(); 140*b1cdbd2cSJim Jagielski // delete pLB_Controls; 141*b1cdbd2cSJim Jagielski delete pImageList; 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski DBG_DTOR(TabOrderDialog,NULL); 144*b1cdbd2cSJim Jagielski } 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ GetImage(const Reference<XPropertySet> & _rxSet) const147*b1cdbd2cSJim Jagielski Image TabOrderDialog::GetImage( const Reference< XPropertySet >& _rxSet ) const 148*b1cdbd2cSJim Jagielski { 149*b1cdbd2cSJim Jagielski sal_uInt16 nImageId = RID_SVXIMG_CONTROL; 150*b1cdbd2cSJim Jagielski // TODO: classify controls also in Basic propbrw 151*b1cdbd2cSJim Jagielski if ( _rxSet.is() && ::comphelper::hasProperty( PROPERTY_CLASSID, _rxSet ) ) 152*b1cdbd2cSJim Jagielski { 153*b1cdbd2cSJim Jagielski switch( ::comphelper::getINT16( _rxSet->getPropertyValue( PROPERTY_CLASSID ) ) ) 154*b1cdbd2cSJim Jagielski { 155*b1cdbd2cSJim Jagielski case FormComponentType::COMMANDBUTTON: nImageId = RID_SVXIMG_BUTTON; break; 156*b1cdbd2cSJim Jagielski case FormComponentType::FIXEDTEXT: nImageId = RID_SVXIMG_FIXEDTEXT; break; 157*b1cdbd2cSJim Jagielski case FormComponentType::TEXTFIELD: nImageId = RID_SVXIMG_EDIT; break; 158*b1cdbd2cSJim Jagielski case FormComponentType::RADIOBUTTON: nImageId = RID_SVXIMG_RADIOBUTTON; break; 159*b1cdbd2cSJim Jagielski case FormComponentType::CHECKBOX: nImageId = RID_SVXIMG_CHECKBOX; break; 160*b1cdbd2cSJim Jagielski case FormComponentType::LISTBOX: nImageId = RID_SVXIMG_LISTBOX; break; 161*b1cdbd2cSJim Jagielski case FormComponentType::COMBOBOX: nImageId = RID_SVXIMG_COMBOBOX; break; 162*b1cdbd2cSJim Jagielski case FormComponentType::GROUPBOX: nImageId = RID_SVXIMG_GROUPBOX; break; 163*b1cdbd2cSJim Jagielski case FormComponentType::IMAGEBUTTON: nImageId = RID_SVXIMG_IMAGEBUTTON; break; 164*b1cdbd2cSJim Jagielski case FormComponentType::FILECONTROL: nImageId = RID_SVXIMG_FILECONTROL; break; 165*b1cdbd2cSJim Jagielski case FormComponentType::HIDDENCONTROL: nImageId = RID_SVXIMG_HIDDEN; break; 166*b1cdbd2cSJim Jagielski case FormComponentType::DATEFIELD: nImageId = RID_SVXIMG_DATEFIELD; break; 167*b1cdbd2cSJim Jagielski case FormComponentType::TIMEFIELD: nImageId = RID_SVXIMG_TIMEFIELD; break; 168*b1cdbd2cSJim Jagielski case FormComponentType::NUMERICFIELD: nImageId = RID_SVXIMG_NUMERICFIELD; break; 169*b1cdbd2cSJim Jagielski case FormComponentType::CURRENCYFIELD: nImageId = RID_SVXIMG_CURRENCYFIELD; break; 170*b1cdbd2cSJim Jagielski case FormComponentType::PATTERNFIELD: nImageId = RID_SVXIMG_PATTERNFIELD; break; 171*b1cdbd2cSJim Jagielski case FormComponentType::IMAGECONTROL: nImageId = RID_SVXIMG_IMAGECONTROL; break; 172*b1cdbd2cSJim Jagielski case FormComponentType::GRIDCONTROL: nImageId = RID_SVXIMG_GRID; break; 173*b1cdbd2cSJim Jagielski case FormComponentType::SCROLLBAR: nImageId = RID_SVXIMG_SCROLLBAR; break; 174*b1cdbd2cSJim Jagielski case FormComponentType::SPINBUTTON: nImageId = RID_SVXIMG_SPINBUTTON; break; 175*b1cdbd2cSJim Jagielski case FormComponentType::NAVIGATIONBAR: nImageId = RID_SVXIMG_NAVIGATIONBAR; break; 176*b1cdbd2cSJim Jagielski default: 177*b1cdbd2cSJim Jagielski DBG_ERROR( "TabOrderDialog::GetImage: unknown control type" ); 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski } 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski return pImageList->GetImage( nImageId ); 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ FillList()185*b1cdbd2cSJim Jagielski void TabOrderDialog::FillList() 186*b1cdbd2cSJim Jagielski { 187*b1cdbd2cSJim Jagielski DBG_ASSERT( m_xTempModel.is() && m_xControlContainer.is(), "TabOrderDialog::FillList: invalid call!" ); 188*b1cdbd2cSJim Jagielski if ( !m_xTempModel.is() || !m_xControlContainer.is() ) 189*b1cdbd2cSJim Jagielski return; 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski aLB_Controls.Clear(); 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski try 194*b1cdbd2cSJim Jagielski { 195*b1cdbd2cSJim Jagielski Sequence< Reference< XControlModel > > aControlModels( m_xTempModel->getControlModels() ); 196*b1cdbd2cSJim Jagielski const Reference< XControlModel >* pControlModels = aControlModels.getConstArray(); 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski ::rtl::OUString aName; 199*b1cdbd2cSJim Jagielski Image aImage; 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski for ( sal_Int32 i=0; i < aControlModels.getLength(); ++i, ++pControlModels ) 202*b1cdbd2cSJim Jagielski { 203*b1cdbd2cSJim Jagielski Reference< XPropertySet > xControl( *pControlModels, UNO_QUERY ); 204*b1cdbd2cSJim Jagielski Reference< XPropertySetInfo > xPI; 205*b1cdbd2cSJim Jagielski if ( xControl.is() ) 206*b1cdbd2cSJim Jagielski xPI = xControl->getPropertySetInfo(); 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski if ( xPI.is() ) 209*b1cdbd2cSJim Jagielski { 210*b1cdbd2cSJim Jagielski if ( xPI->hasPropertyByName( PROPERTY_TABSTOP ) ) 211*b1cdbd2cSJim Jagielski { 212*b1cdbd2cSJim Jagielski aName = ::comphelper::getString( xControl->getPropertyValue( PROPERTY_NAME ) ); 213*b1cdbd2cSJim Jagielski // TODO: do Basic controls have a name? 214*b1cdbd2cSJim Jagielski aImage = GetImage( xControl ); 215*b1cdbd2cSJim Jagielski aLB_Controls.InsertEntry( aName, aImage, aImage, 0, sal_False, LIST_APPEND, xControl.get() ); 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski } 218*b1cdbd2cSJim Jagielski else 219*b1cdbd2cSJim Jagielski { 220*b1cdbd2cSJim Jagielski // no property set -> no tab order 221*b1cdbd2cSJim Jagielski DBG_ERROR( "TabOrderDialog::FillList: invalid control encountered!" ); 222*b1cdbd2cSJim Jagielski aLB_Controls.Clear(); 223*b1cdbd2cSJim Jagielski break; 224*b1cdbd2cSJim Jagielski } 225*b1cdbd2cSJim Jagielski } 226*b1cdbd2cSJim Jagielski } 227*b1cdbd2cSJim Jagielski catch( const Exception& ) 228*b1cdbd2cSJim Jagielski { 229*b1cdbd2cSJim Jagielski DBG_ERROR( "TabOrderDialog::FillList: caught an exception!" ); 230*b1cdbd2cSJim Jagielski } 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski // select first entry 233*b1cdbd2cSJim Jagielski SvLBoxEntry* pFirstEntry = aLB_Controls.GetEntry( 0 ); 234*b1cdbd2cSJim Jagielski if ( pFirstEntry ) 235*b1cdbd2cSJim Jagielski aLB_Controls.Select( pFirstEntry ); 236*b1cdbd2cSJim Jagielski } 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ 239*b1cdbd2cSJim Jagielski IMPL_LINK( TabOrderDialog, MoveUpClickHdl, Button*, /*pButton*/ ) 240*b1cdbd2cSJim Jagielski { 241*b1cdbd2cSJim Jagielski aLB_Controls.MoveSelection( -1 ); 242*b1cdbd2cSJim Jagielski return 0; 243*b1cdbd2cSJim Jagielski } 244*b1cdbd2cSJim Jagielski 245*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ 246*b1cdbd2cSJim Jagielski IMPL_LINK( TabOrderDialog, MoveDownClickHdl, Button*, /*pButton*/ ) 247*b1cdbd2cSJim Jagielski { 248*b1cdbd2cSJim Jagielski aLB_Controls.MoveSelection( 1 ); 249*b1cdbd2cSJim Jagielski return 0; 250*b1cdbd2cSJim Jagielski } 251*b1cdbd2cSJim Jagielski 252*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ 253*b1cdbd2cSJim Jagielski IMPL_LINK( TabOrderDialog, AutoOrderClickHdl, Button*, /*pButton*/ ) 254*b1cdbd2cSJim Jagielski { 255*b1cdbd2cSJim Jagielski try 256*b1cdbd2cSJim Jagielski { 257*b1cdbd2cSJim Jagielski Reference< XTabController > xTabController; 258*b1cdbd2cSJim Jagielski if ( m_xORB.is() ) 259*b1cdbd2cSJim Jagielski xTabController = xTabController.query( m_xORB->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.FormController" ) ) ) ); 260*b1cdbd2cSJim Jagielski DBG_ASSERT( xTabController.is(), "TabOrderDialog::AutoOrderClickHdl: could not instantiate a tab controller!" ); 261*b1cdbd2cSJim Jagielski if ( !xTabController.is() ) 262*b1cdbd2cSJim Jagielski return 0; 263*b1cdbd2cSJim Jagielski 264*b1cdbd2cSJim Jagielski xTabController->setModel( m_xTempModel ); 265*b1cdbd2cSJim Jagielski xTabController->setContainer( m_xControlContainer ); 266*b1cdbd2cSJim Jagielski xTabController->autoTabOrder(); 267*b1cdbd2cSJim Jagielski 268*b1cdbd2cSJim Jagielski SetModified(); 269*b1cdbd2cSJim Jagielski FillList(); 270*b1cdbd2cSJim Jagielski 271*b1cdbd2cSJim Jagielski ::comphelper::disposeComponent( xTabController ); 272*b1cdbd2cSJim Jagielski } 273*b1cdbd2cSJim Jagielski catch( const Exception& ) 274*b1cdbd2cSJim Jagielski { 275*b1cdbd2cSJim Jagielski OSL_ENSURE( sal_False, "TabOrderDialog::AutoOrderClickHdl: caught an exception!" ); 276*b1cdbd2cSJim Jagielski } 277*b1cdbd2cSJim Jagielski 278*b1cdbd2cSJim Jagielski return 0; 279*b1cdbd2cSJim Jagielski } 280*b1cdbd2cSJim Jagielski 281*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ 282*b1cdbd2cSJim Jagielski IMPL_LINK( TabOrderDialog, OKClickHdl, Button*, /*pButton*/ ) 283*b1cdbd2cSJim Jagielski { 284*b1cdbd2cSJim Jagielski sal_uLong nEntryCount = aLB_Controls.GetEntryCount(); 285*b1cdbd2cSJim Jagielski Sequence< Reference< XControlModel > > aSortedControlModelSeq( nEntryCount ); 286*b1cdbd2cSJim Jagielski Sequence< Reference< XControlModel > > aControlModels( m_xTempModel->getControlModels()); 287*b1cdbd2cSJim Jagielski Reference< XControlModel > * pSortedControlModels = aSortedControlModelSeq.getArray(); 288*b1cdbd2cSJim Jagielski const Reference< XControlModel > * pControlModels = aControlModels.getConstArray(); 289*b1cdbd2cSJim Jagielski 290*b1cdbd2cSJim Jagielski for (sal_uLong i=0; i < nEntryCount; i++) 291*b1cdbd2cSJim Jagielski { 292*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = aLB_Controls.GetEntry(i); 293*b1cdbd2cSJim Jagielski 294*b1cdbd2cSJim Jagielski for( sal_Int32 j=0; j<aControlModels.getLength(); j++ ) 295*b1cdbd2cSJim Jagielski { 296*b1cdbd2cSJim Jagielski Reference< XPropertySet > xSet(pControlModels[j], UNO_QUERY); 297*b1cdbd2cSJim Jagielski if ((XPropertySet*)xSet.get() == ((XPropertySet*)pEntry->GetUserData())) 298*b1cdbd2cSJim Jagielski { 299*b1cdbd2cSJim Jagielski pSortedControlModels[i] = pControlModels[j]; 300*b1cdbd2cSJim Jagielski break; 301*b1cdbd2cSJim Jagielski } 302*b1cdbd2cSJim Jagielski } 303*b1cdbd2cSJim Jagielski } 304*b1cdbd2cSJim Jagielski 305*b1cdbd2cSJim Jagielski // TODO: UNO action (to bracket all the single actions which are being created) 306*b1cdbd2cSJim Jagielski // pDrawModel->BegUndo(PcrRes(RID_STR_UNDO_TABORDER)); 307*b1cdbd2cSJim Jagielski m_xModel->setControlModels( aSortedControlModelSeq ); 308*b1cdbd2cSJim Jagielski // pDrawModel->EndUndo(); 309*b1cdbd2cSJim Jagielski 310*b1cdbd2cSJim Jagielski EndDialog( sal_True ); 311*b1cdbd2cSJim Jagielski return 0; 312*b1cdbd2cSJim Jagielski } 313*b1cdbd2cSJim Jagielski 314*b1cdbd2cSJim Jagielski //======================================================================== 315*b1cdbd2cSJim Jagielski //= TabOrderListBox 316*b1cdbd2cSJim Jagielski //======================================================================== 317*b1cdbd2cSJim Jagielski DBG_NAME(TabOrderListBox); 318*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ TabOrderListBox(Window * pParent,const ResId & rResId)319*b1cdbd2cSJim Jagielski TabOrderListBox::TabOrderListBox( Window* pParent, const ResId& rResId ) 320*b1cdbd2cSJim Jagielski :SvTreeListBox( pParent, rResId ) 321*b1cdbd2cSJim Jagielski { 322*b1cdbd2cSJim Jagielski DBG_CTOR(TabOrderListBox,NULL); 323*b1cdbd2cSJim Jagielski SetDragDropMode(0xFFFF/*SV_DRAGDROP_CTRL_MOVE*/); 324*b1cdbd2cSJim Jagielski // Hmm. The flag alone is not enough, so to be on the safe side ... 325*b1cdbd2cSJim Jagielski 326*b1cdbd2cSJim Jagielski SetSelectionMode( MULTIPLE_SELECTION ); 327*b1cdbd2cSJim Jagielski } 328*b1cdbd2cSJim Jagielski 329*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ ~TabOrderListBox()330*b1cdbd2cSJim Jagielski TabOrderListBox::~TabOrderListBox() 331*b1cdbd2cSJim Jagielski { 332*b1cdbd2cSJim Jagielski DBG_DTOR(TabOrderListBox,NULL); 333*b1cdbd2cSJim Jagielski } 334*b1cdbd2cSJim Jagielski 335*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ ModelHasMoved(SvListEntry * _pSource)336*b1cdbd2cSJim Jagielski void TabOrderListBox::ModelHasMoved( SvListEntry* _pSource ) 337*b1cdbd2cSJim Jagielski { 338*b1cdbd2cSJim Jagielski SvTreeListBox::ModelHasMoved( _pSource ); 339*b1cdbd2cSJim Jagielski 340*b1cdbd2cSJim Jagielski ((TabOrderDialog*)Window::GetParent())->SetModified(); 341*b1cdbd2cSJim Jagielski } 342*b1cdbd2cSJim Jagielski 343*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ MoveSelection(long nRelPos)344*b1cdbd2cSJim Jagielski void TabOrderListBox::MoveSelection( long nRelPos ) 345*b1cdbd2cSJim Jagielski { 346*b1cdbd2cSJim Jagielski UniString aSelEntryPrevText,aSelEntryNextText; 347*b1cdbd2cSJim Jagielski Image aImage; 348*b1cdbd2cSJim Jagielski for (long i=0; i<labs(nRelPos); i++) 349*b1cdbd2cSJim Jagielski { 350*b1cdbd2cSJim Jagielski ((TabOrderDialog*)Window::GetParent())->SetModified(); 351*b1cdbd2cSJim Jagielski 352*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////// 353*b1cdbd2cSJim Jagielski // move entries 354*b1cdbd2cSJim Jagielski if( nRelPos < 0 ) 355*b1cdbd2cSJim Jagielski { 356*b1cdbd2cSJim Jagielski SvLBoxEntry* pFirstSelected = FirstSelected(); 357*b1cdbd2cSJim Jagielski if( !pFirstSelected ) return; 358*b1cdbd2cSJim Jagielski sal_uLong nFirstSelPos = GetModel()->GetAbsPos( pFirstSelected ); 359*b1cdbd2cSJim Jagielski if( nFirstSelPos == 0 ) return; 360*b1cdbd2cSJim Jagielski 361*b1cdbd2cSJim Jagielski SvLBoxEntry* pSelEntry = pFirstSelected; 362*b1cdbd2cSJim Jagielski while( pSelEntry ) 363*b1cdbd2cSJim Jagielski { 364*b1cdbd2cSJim Jagielski sal_uLong nSelEntryPos = GetModel()->GetAbsPos( pSelEntry ); 365*b1cdbd2cSJim Jagielski SvLBoxEntry* pSelEntryPrev = GetEntry( nSelEntryPos-1 ); 366*b1cdbd2cSJim Jagielski aSelEntryPrevText = GetEntryText( pSelEntryPrev ); 367*b1cdbd2cSJim Jagielski aImage = GetExpandedEntryBmp(pSelEntryPrev); 368*b1cdbd2cSJim Jagielski void* pData = pSelEntryPrev->GetUserData(); 369*b1cdbd2cSJim Jagielski 370*b1cdbd2cSJim Jagielski GetModel()->Remove( pSelEntryPrev ); 371*b1cdbd2cSJim Jagielski InsertEntry( aSelEntryPrevText, aImage, aImage, 0, sal_False, nSelEntryPos, pData ); 372*b1cdbd2cSJim Jagielski 373*b1cdbd2cSJim Jagielski pSelEntry = NextSelected( pSelEntry ); 374*b1cdbd2cSJim Jagielski } 375*b1cdbd2cSJim Jagielski } 376*b1cdbd2cSJim Jagielski 377*b1cdbd2cSJim Jagielski else if( nRelPos > 0 ) 378*b1cdbd2cSJim Jagielski { 379*b1cdbd2cSJim Jagielski SvLBoxEntry* pLastSelected = LastSelected(); 380*b1cdbd2cSJim Jagielski if( !pLastSelected ) return; 381*b1cdbd2cSJim Jagielski sal_uLong nLastSelPos = GetModel()->GetAbsPos( pLastSelected ); 382*b1cdbd2cSJim Jagielski 383*b1cdbd2cSJim Jagielski if( (nLastSelPos + nRelPos - i) > (GetEntryCount()-1) ) return; 384*b1cdbd2cSJim Jagielski 385*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0 386*b1cdbd2cSJim Jagielski sal_uLong nSelCount = GetSelectionCount(); 387*b1cdbd2cSJim Jagielski (void)nSelCount; 388*b1cdbd2cSJim Jagielski #endif 389*b1cdbd2cSJim Jagielski 390*b1cdbd2cSJim Jagielski 391*b1cdbd2cSJim Jagielski SvLBoxEntry* pSelEntry = pLastSelected; 392*b1cdbd2cSJim Jagielski while( pSelEntry ) 393*b1cdbd2cSJim Jagielski { 394*b1cdbd2cSJim Jagielski sal_uLong nSelEntryPos = GetModel()->GetAbsPos( pSelEntry ); 395*b1cdbd2cSJim Jagielski SvLBoxEntry* pSelEntryNext = GetEntry( nSelEntryPos+1 ); 396*b1cdbd2cSJim Jagielski void* pData = pSelEntryNext->GetUserData(); 397*b1cdbd2cSJim Jagielski 398*b1cdbd2cSJim Jagielski aSelEntryNextText = GetEntryText( pSelEntryNext ); 399*b1cdbd2cSJim Jagielski aImage = GetExpandedEntryBmp(pSelEntryNext); 400*b1cdbd2cSJim Jagielski 401*b1cdbd2cSJim Jagielski GetModel()->Remove( pSelEntryNext ); 402*b1cdbd2cSJim Jagielski InsertEntry( aSelEntryNextText, aImage, aImage, 0, sal_False, nSelEntryPos, pData ); 403*b1cdbd2cSJim Jagielski 404*b1cdbd2cSJim Jagielski pSelEntry = PrevSelected( pSelEntry ); 405*b1cdbd2cSJim Jagielski } 406*b1cdbd2cSJim Jagielski long nThumbPos = GetVScroll()->GetThumbPos(); 407*b1cdbd2cSJim Jagielski long nVisibleSize = GetVScroll()->GetVisibleSize(); 408*b1cdbd2cSJim Jagielski long nFirstVisible = GetModel()->GetAbsPos( FirstVisible()); 409*b1cdbd2cSJim Jagielski 410*b1cdbd2cSJim Jagielski if ( ( nThumbPos + nVisibleSize + 1 ) < (long)( nLastSelPos + 3 ) ) 411*b1cdbd2cSJim Jagielski GetVScroll()->DoScrollAction(SCROLL_LINEDOWN); 412*b1cdbd2cSJim Jagielski else if((nThumbPos+nVisibleSize+1) >= (nFirstVisible)) 413*b1cdbd2cSJim Jagielski GetVScroll()->DoScrollAction(SCROLL_LINEUP); 414*b1cdbd2cSJim Jagielski } 415*b1cdbd2cSJim Jagielski } 416*b1cdbd2cSJim Jagielski } 417*b1cdbd2cSJim Jagielski 418*b1cdbd2cSJim Jagielski //............................................................................ 419*b1cdbd2cSJim Jagielski } // namespace pcr 420*b1cdbd2cSJim Jagielski //............................................................................ 421