1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_vcl.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <tools/ref.hxx> 32*cdf0e10cSrcweir #include <tools/debug.hxx> 33*cdf0e10cSrcweir #include <tools/rc.h> 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir #include <svdata.hxx> 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir #include <vcl/button.hxx> 38*cdf0e10cSrcweir #include <vcl/btndlg.hxx> 39*cdf0e10cSrcweir 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir // ======================================================================= 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir struct ImplBtnDlgItem 45*cdf0e10cSrcweir { 46*cdf0e10cSrcweir sal_uInt16 mnId; 47*cdf0e10cSrcweir sal_Bool mbOwnButton; 48*cdf0e10cSrcweir sal_Bool mbDummyAlign; 49*cdf0e10cSrcweir long mnSepSize; 50*cdf0e10cSrcweir PushButton* mpPushButton; 51*cdf0e10cSrcweir }; 52*cdf0e10cSrcweir 53*cdf0e10cSrcweir DECLARE_LIST( ImplBtnDlgItemList, ImplBtnDlgItem* ) 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir // ======================================================================= 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir void ButtonDialog::ImplInitButtonDialogData() 58*cdf0e10cSrcweir { 59*cdf0e10cSrcweir mpItemList = new ImplBtnDlgItemList( 8, 8 ); 60*cdf0e10cSrcweir mnButtonSize = 0; 61*cdf0e10cSrcweir mnCurButtonId = 0; 62*cdf0e10cSrcweir mnFocusButtonId = BUTTONDIALOG_BUTTON_NOTFOUND; 63*cdf0e10cSrcweir mbFormat = sal_True; 64*cdf0e10cSrcweir } 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir // ----------------------------------------------------------------------- 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir ButtonDialog::ButtonDialog( WindowType nType ) : 69*cdf0e10cSrcweir Dialog( nType ) 70*cdf0e10cSrcweir { 71*cdf0e10cSrcweir ImplInitButtonDialogData(); 72*cdf0e10cSrcweir } 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir // ----------------------------------------------------------------------- 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir ButtonDialog::ButtonDialog( Window* pParent, WinBits nStyle ) : 77*cdf0e10cSrcweir Dialog( WINDOW_BUTTONDIALOG ) 78*cdf0e10cSrcweir { 79*cdf0e10cSrcweir ImplInitButtonDialogData(); 80*cdf0e10cSrcweir ImplInit( pParent, nStyle ); 81*cdf0e10cSrcweir } 82*cdf0e10cSrcweir 83*cdf0e10cSrcweir // ----------------------------------------------------------------------- 84*cdf0e10cSrcweir 85*cdf0e10cSrcweir ButtonDialog::ButtonDialog( Window* pParent, const ResId& rResId ) : 86*cdf0e10cSrcweir Dialog( WINDOW_BUTTONDIALOG ) 87*cdf0e10cSrcweir { 88*cdf0e10cSrcweir ImplInitButtonDialogData(); 89*cdf0e10cSrcweir rResId.SetRT( RSC_DIALOG ); // !!!!!!!!!! RSC_BUTTONDIALOG !!!!!!!! 90*cdf0e10cSrcweir ImplInit( pParent, ImplInitRes( rResId ) ); 91*cdf0e10cSrcweir ImplLoadRes( rResId ); 92*cdf0e10cSrcweir } 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir // ----------------------------------------------------------------------- 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir ButtonDialog::~ButtonDialog() 97*cdf0e10cSrcweir { 98*cdf0e10cSrcweir ImplBtnDlgItem* pItem = mpItemList->First(); 99*cdf0e10cSrcweir while ( pItem ) 100*cdf0e10cSrcweir { 101*cdf0e10cSrcweir if ( pItem->mpPushButton && pItem->mbOwnButton ) 102*cdf0e10cSrcweir delete pItem->mpPushButton; 103*cdf0e10cSrcweir delete pItem; 104*cdf0e10cSrcweir pItem = mpItemList->Next(); 105*cdf0e10cSrcweir } 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir delete mpItemList; 108*cdf0e10cSrcweir } 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir // ----------------------------------------------------------------------- 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir PushButton* ButtonDialog::ImplCreatePushButton( sal_uInt16 nBtnFlags ) 113*cdf0e10cSrcweir { 114*cdf0e10cSrcweir PushButton* pBtn; 115*cdf0e10cSrcweir WinBits nStyle = 0; 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir if ( nBtnFlags & BUTTONDIALOG_DEFBUTTON ) 118*cdf0e10cSrcweir nStyle |= WB_DEFBUTTON; 119*cdf0e10cSrcweir if ( nBtnFlags & BUTTONDIALOG_CANCELBUTTON ) 120*cdf0e10cSrcweir pBtn = new CancelButton( this, nStyle ); 121*cdf0e10cSrcweir else if ( nBtnFlags & BUTTONDIALOG_OKBUTTON ) 122*cdf0e10cSrcweir pBtn = new OKButton( this, nStyle ); 123*cdf0e10cSrcweir else if ( nBtnFlags & BUTTONDIALOG_HELPBUTTON ) 124*cdf0e10cSrcweir pBtn = new HelpButton( this, nStyle ); 125*cdf0e10cSrcweir else 126*cdf0e10cSrcweir pBtn = new PushButton( this, nStyle ); 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir if ( !(nBtnFlags & BUTTONDIALOG_HELPBUTTON) ) 129*cdf0e10cSrcweir pBtn->SetClickHdl( LINK( this, ButtonDialog, ImplClickHdl ) ); 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir return pBtn; 132*cdf0e10cSrcweir } 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir // ----------------------------------------------------------------------- 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir ImplBtnDlgItem* ButtonDialog::ImplGetItem( sal_uInt16 nId ) const 137*cdf0e10cSrcweir { 138*cdf0e10cSrcweir ImplBtnDlgItem* pItem = mpItemList->First(); 139*cdf0e10cSrcweir while ( pItem ) 140*cdf0e10cSrcweir { 141*cdf0e10cSrcweir if ( pItem->mnId == nId ) 142*cdf0e10cSrcweir return pItem; 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir pItem = mpItemList->Next(); 145*cdf0e10cSrcweir } 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir return NULL; 148*cdf0e10cSrcweir } 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir // ----------------------------------------------------------------------- 151*cdf0e10cSrcweir 152*cdf0e10cSrcweir long ButtonDialog::ImplGetButtonSize() 153*cdf0e10cSrcweir { 154*cdf0e10cSrcweir if ( !mbFormat ) 155*cdf0e10cSrcweir return mnButtonSize; 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir // Calculate ButtonSize 158*cdf0e10cSrcweir long nLastSepSize = 0; 159*cdf0e10cSrcweir long nSepSize = 0; 160*cdf0e10cSrcweir long nButtonCount = 0; 161*cdf0e10cSrcweir maCtrlSize = Size( IMPL_MINSIZE_BUTTON_WIDTH, IMPL_MINSIZE_BUTTON_HEIGHT ); 162*cdf0e10cSrcweir ImplBtnDlgItem* pItem = mpItemList->First(); 163*cdf0e10cSrcweir while ( pItem ) 164*cdf0e10cSrcweir { 165*cdf0e10cSrcweir nSepSize += nLastSepSize; 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir long nTxtWidth = pItem->mpPushButton->GetCtrlTextWidth( pItem->mpPushButton->GetText() ); 168*cdf0e10cSrcweir nTxtWidth += IMPL_EXTRA_BUTTON_WIDTH; 169*cdf0e10cSrcweir if ( nTxtWidth > maCtrlSize.Width() ) 170*cdf0e10cSrcweir maCtrlSize.Width() = nTxtWidth; 171*cdf0e10cSrcweir long nTxtHeight = pItem->mpPushButton->GetTextHeight(); 172*cdf0e10cSrcweir nTxtHeight += IMPL_EXTRA_BUTTON_HEIGHT; 173*cdf0e10cSrcweir if ( nTxtHeight > maCtrlSize.Height() ) 174*cdf0e10cSrcweir maCtrlSize.Height() = nTxtHeight; 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir nSepSize += pItem->mnSepSize; 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir if ( GetStyle() & WB_HORZ ) 179*cdf0e10cSrcweir nLastSepSize = IMPL_SEP_BUTTON_X; 180*cdf0e10cSrcweir else 181*cdf0e10cSrcweir nLastSepSize = IMPL_SEP_BUTTON_Y; 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir nButtonCount++; 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir pItem = mpItemList->Next(); 186*cdf0e10cSrcweir } 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir if ( GetStyle() & WB_HORZ ) 189*cdf0e10cSrcweir mnButtonSize = nSepSize + (nButtonCount*maCtrlSize.Width()); 190*cdf0e10cSrcweir else 191*cdf0e10cSrcweir mnButtonSize = nSepSize + (nButtonCount*maCtrlSize.Height()); 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir return mnButtonSize; 194*cdf0e10cSrcweir } 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir // ----------------------------------------------------------------------- 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir void ButtonDialog::ImplPosControls() 199*cdf0e10cSrcweir { 200*cdf0e10cSrcweir if ( !mbFormat ) 201*cdf0e10cSrcweir return; 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir // Create PushButtons and determine Sizes 204*cdf0e10cSrcweir ImplGetButtonSize(); 205*cdf0e10cSrcweir 206*cdf0e10cSrcweir // determine dialog size 207*cdf0e10cSrcweir ImplBtnDlgItem* pItem; 208*cdf0e10cSrcweir Size aDlgSize = maPageSize; 209*cdf0e10cSrcweir long nX; 210*cdf0e10cSrcweir long nY; 211*cdf0e10cSrcweir if ( GetStyle() & WB_HORZ ) 212*cdf0e10cSrcweir { 213*cdf0e10cSrcweir if ( mnButtonSize+(IMPL_DIALOG_OFFSET*2) > aDlgSize.Width() ) 214*cdf0e10cSrcweir aDlgSize.Width() = mnButtonSize+(IMPL_DIALOG_OFFSET*2); 215*cdf0e10cSrcweir if ( GetStyle() & WB_LEFT ) 216*cdf0e10cSrcweir nX = IMPL_DIALOG_OFFSET; 217*cdf0e10cSrcweir else if ( GetStyle() & WB_RIGHT ) 218*cdf0e10cSrcweir nX = aDlgSize.Width()-mnButtonSize-IMPL_DIALOG_OFFSET; 219*cdf0e10cSrcweir else 220*cdf0e10cSrcweir nX = (aDlgSize.Width()-mnButtonSize)/2; 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir aDlgSize.Height() += IMPL_DIALOG_OFFSET+maCtrlSize.Height(); 223*cdf0e10cSrcweir nY = aDlgSize.Height()-maCtrlSize.Height()-IMPL_DIALOG_OFFSET; 224*cdf0e10cSrcweir } 225*cdf0e10cSrcweir else 226*cdf0e10cSrcweir { 227*cdf0e10cSrcweir if ( mnButtonSize+(IMPL_DIALOG_OFFSET*2) > aDlgSize.Height() ) 228*cdf0e10cSrcweir aDlgSize.Height() = mnButtonSize+(IMPL_DIALOG_OFFSET*2); 229*cdf0e10cSrcweir if ( GetStyle() & WB_BOTTOM ) 230*cdf0e10cSrcweir nY = aDlgSize.Height()-mnButtonSize-IMPL_DIALOG_OFFSET; 231*cdf0e10cSrcweir else if ( GetStyle() & WB_VCENTER ) 232*cdf0e10cSrcweir nY = (aDlgSize.Height()-mnButtonSize)/2; 233*cdf0e10cSrcweir else 234*cdf0e10cSrcweir nY = IMPL_DIALOG_OFFSET; 235*cdf0e10cSrcweir 236*cdf0e10cSrcweir aDlgSize.Width() += IMPL_DIALOG_OFFSET+maCtrlSize.Width(); 237*cdf0e10cSrcweir nX = aDlgSize.Width()-maCtrlSize.Width()-IMPL_DIALOG_OFFSET; 238*cdf0e10cSrcweir } 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir // Arrange PushButtons 241*cdf0e10cSrcweir pItem = mpItemList->First(); 242*cdf0e10cSrcweir while ( pItem ) 243*cdf0e10cSrcweir { 244*cdf0e10cSrcweir if ( GetStyle() & WB_HORZ ) 245*cdf0e10cSrcweir nX += pItem->mnSepSize; 246*cdf0e10cSrcweir else 247*cdf0e10cSrcweir nY += pItem->mnSepSize; 248*cdf0e10cSrcweir pItem->mpPushButton->SetPosSizePixel( Point( nX, nY ), maCtrlSize ); 249*cdf0e10cSrcweir pItem->mpPushButton->Show(); 250*cdf0e10cSrcweir if ( GetStyle() & WB_HORZ ) 251*cdf0e10cSrcweir nX += maCtrlSize.Width()+IMPL_SEP_BUTTON_X; 252*cdf0e10cSrcweir else 253*cdf0e10cSrcweir nY += maCtrlSize.Height()+IMPL_SEP_BUTTON_Y; 254*cdf0e10cSrcweir 255*cdf0e10cSrcweir pItem = mpItemList->Next(); 256*cdf0e10cSrcweir } 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir SetOutputSizePixel( aDlgSize ); 259*cdf0e10cSrcweir 260*cdf0e10cSrcweir mbFormat = sal_False; 261*cdf0e10cSrcweir } 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir // ----------------------------------------------------------------------- 264*cdf0e10cSrcweir 265*cdf0e10cSrcweir IMPL_LINK( ButtonDialog, ImplClickHdl, PushButton*, pBtn ) 266*cdf0e10cSrcweir { 267*cdf0e10cSrcweir ImplBtnDlgItem* pItem = mpItemList->First(); 268*cdf0e10cSrcweir while ( pItem ) 269*cdf0e10cSrcweir { 270*cdf0e10cSrcweir if ( pItem->mpPushButton == pBtn ) 271*cdf0e10cSrcweir { 272*cdf0e10cSrcweir mnCurButtonId = pItem->mnId; 273*cdf0e10cSrcweir Click(); 274*cdf0e10cSrcweir break; 275*cdf0e10cSrcweir } 276*cdf0e10cSrcweir 277*cdf0e10cSrcweir pItem = mpItemList->Next(); 278*cdf0e10cSrcweir } 279*cdf0e10cSrcweir 280*cdf0e10cSrcweir return 0; 281*cdf0e10cSrcweir } 282*cdf0e10cSrcweir 283*cdf0e10cSrcweir // ----------------------------------------------------------------------- 284*cdf0e10cSrcweir 285*cdf0e10cSrcweir void ButtonDialog::Resize() 286*cdf0e10cSrcweir { 287*cdf0e10cSrcweir } 288*cdf0e10cSrcweir 289*cdf0e10cSrcweir // ----------------------------------------------------------------------- 290*cdf0e10cSrcweir 291*cdf0e10cSrcweir void ButtonDialog::StateChanged( StateChangedType nType ) 292*cdf0e10cSrcweir { 293*cdf0e10cSrcweir if ( nType == STATE_CHANGE_INITSHOW ) 294*cdf0e10cSrcweir { 295*cdf0e10cSrcweir ImplPosControls(); 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir // Focus evt. auf den entsprechenden Button setzen 298*cdf0e10cSrcweir if ( mnFocusButtonId != BUTTONDIALOG_BUTTON_NOTFOUND ) 299*cdf0e10cSrcweir { 300*cdf0e10cSrcweir ImplBtnDlgItem* pItem = mpItemList->First(); 301*cdf0e10cSrcweir while ( pItem ) 302*cdf0e10cSrcweir { 303*cdf0e10cSrcweir if ( pItem->mnId == mnFocusButtonId ) 304*cdf0e10cSrcweir { 305*cdf0e10cSrcweir if ( pItem->mpPushButton->IsVisible() ) 306*cdf0e10cSrcweir pItem->mpPushButton->GrabFocus(); 307*cdf0e10cSrcweir break; 308*cdf0e10cSrcweir } 309*cdf0e10cSrcweir 310*cdf0e10cSrcweir pItem = mpItemList->Next(); 311*cdf0e10cSrcweir } 312*cdf0e10cSrcweir } 313*cdf0e10cSrcweir } 314*cdf0e10cSrcweir 315*cdf0e10cSrcweir Dialog::StateChanged( nType ); 316*cdf0e10cSrcweir } 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir // ----------------------------------------------------------------------- 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir void ButtonDialog::Click() 321*cdf0e10cSrcweir { 322*cdf0e10cSrcweir if ( !maClickHdl ) 323*cdf0e10cSrcweir { 324*cdf0e10cSrcweir if ( IsInExecute() ) 325*cdf0e10cSrcweir EndDialog( GetCurButtonId() ); 326*cdf0e10cSrcweir } 327*cdf0e10cSrcweir else 328*cdf0e10cSrcweir maClickHdl.Call( this ); 329*cdf0e10cSrcweir } 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir // ----------------------------------------------------------------------- 332*cdf0e10cSrcweir 333*cdf0e10cSrcweir void ButtonDialog::AddButton( const XubString& rText, sal_uInt16 nId, 334*cdf0e10cSrcweir sal_uInt16 nBtnFlags, long nSepPixel ) 335*cdf0e10cSrcweir { 336*cdf0e10cSrcweir // PageItem anlegen 337*cdf0e10cSrcweir ImplBtnDlgItem* pItem = new ImplBtnDlgItem; 338*cdf0e10cSrcweir pItem->mnId = nId; 339*cdf0e10cSrcweir pItem->mbOwnButton = sal_True; 340*cdf0e10cSrcweir pItem->mnSepSize = nSepPixel; 341*cdf0e10cSrcweir pItem->mpPushButton = ImplCreatePushButton( nBtnFlags ); 342*cdf0e10cSrcweir if ( rText.Len() ) 343*cdf0e10cSrcweir pItem->mpPushButton->SetText( rText ); 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir // In die Liste eintragen 346*cdf0e10cSrcweir mpItemList->Insert( pItem, LIST_APPEND ); 347*cdf0e10cSrcweir 348*cdf0e10cSrcweir if ( nBtnFlags & BUTTONDIALOG_FOCUSBUTTON ) 349*cdf0e10cSrcweir mnFocusButtonId = nId; 350*cdf0e10cSrcweir 351*cdf0e10cSrcweir mbFormat = sal_True; 352*cdf0e10cSrcweir } 353*cdf0e10cSrcweir 354*cdf0e10cSrcweir // ----------------------------------------------------------------------- 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir void ButtonDialog::AddButton( StandardButtonType eType, sal_uInt16 nId, 357*cdf0e10cSrcweir sal_uInt16 nBtnFlags, long nSepPixel ) 358*cdf0e10cSrcweir { 359*cdf0e10cSrcweir // PageItem anlegen 360*cdf0e10cSrcweir ImplBtnDlgItem* pItem = new ImplBtnDlgItem; 361*cdf0e10cSrcweir pItem->mnId = nId; 362*cdf0e10cSrcweir pItem->mbOwnButton = sal_True; 363*cdf0e10cSrcweir pItem->mnSepSize = nSepPixel; 364*cdf0e10cSrcweir 365*cdf0e10cSrcweir if ( eType == BUTTON_OK ) 366*cdf0e10cSrcweir nBtnFlags |= BUTTONDIALOG_OKBUTTON; 367*cdf0e10cSrcweir else if ( eType == BUTTON_HELP ) 368*cdf0e10cSrcweir nBtnFlags |= BUTTONDIALOG_HELPBUTTON; 369*cdf0e10cSrcweir else if ( (eType == BUTTON_CANCEL) || (eType == BUTTON_CLOSE) ) 370*cdf0e10cSrcweir nBtnFlags |= BUTTONDIALOG_CANCELBUTTON; 371*cdf0e10cSrcweir pItem->mpPushButton = ImplCreatePushButton( nBtnFlags ); 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir // Standard-Buttons have the right text already 374*cdf0e10cSrcweir if ( !((eType == BUTTON_OK) && (pItem->mpPushButton->GetType() == WINDOW_OKBUTTON)) || 375*cdf0e10cSrcweir !((eType == BUTTON_CANCEL) && (pItem->mpPushButton->GetType() == WINDOW_CANCELBUTTON)) || 376*cdf0e10cSrcweir !((eType == BUTTON_HELP) && (pItem->mpPushButton->GetType() == WINDOW_HELPBUTTON)) ) 377*cdf0e10cSrcweir { 378*cdf0e10cSrcweir pItem->mpPushButton->SetText( Button::GetStandardText( eType ) ); 379*cdf0e10cSrcweir pItem->mpPushButton->SetHelpText( Button::GetStandardHelpText( eType ) ); 380*cdf0e10cSrcweir } 381*cdf0e10cSrcweir 382*cdf0e10cSrcweir if ( nBtnFlags & BUTTONDIALOG_FOCUSBUTTON ) 383*cdf0e10cSrcweir mnFocusButtonId = nId; 384*cdf0e10cSrcweir 385*cdf0e10cSrcweir // In die Liste eintragen 386*cdf0e10cSrcweir mpItemList->Insert( pItem, LIST_APPEND ); 387*cdf0e10cSrcweir 388*cdf0e10cSrcweir mbFormat = sal_True; 389*cdf0e10cSrcweir } 390*cdf0e10cSrcweir 391*cdf0e10cSrcweir // ----------------------------------------------------------------------- 392*cdf0e10cSrcweir 393*cdf0e10cSrcweir void ButtonDialog::AddButton( PushButton* pBtn, sal_uInt16 nId, 394*cdf0e10cSrcweir sal_uInt16 nBtnFlags, long nSepPixel ) 395*cdf0e10cSrcweir { 396*cdf0e10cSrcweir // PageItem anlegen 397*cdf0e10cSrcweir ImplBtnDlgItem* pItem = new ImplBtnDlgItem; 398*cdf0e10cSrcweir pItem->mnId = nId; 399*cdf0e10cSrcweir pItem->mbOwnButton = sal_False; 400*cdf0e10cSrcweir pItem->mnSepSize = nSepPixel; 401*cdf0e10cSrcweir pItem->mpPushButton = pBtn; 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir if ( nBtnFlags & BUTTONDIALOG_FOCUSBUTTON ) 404*cdf0e10cSrcweir mnFocusButtonId = nId; 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir // In die View-Liste eintragen 407*cdf0e10cSrcweir mpItemList->Insert( pItem, LIST_APPEND ); 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir mbFormat = sal_True; 410*cdf0e10cSrcweir } 411*cdf0e10cSrcweir 412*cdf0e10cSrcweir // ----------------------------------------------------------------------- 413*cdf0e10cSrcweir 414*cdf0e10cSrcweir void ButtonDialog::RemoveButton( sal_uInt16 nId ) 415*cdf0e10cSrcweir { 416*cdf0e10cSrcweir ImplBtnDlgItem* pItem = mpItemList->First(); 417*cdf0e10cSrcweir while ( pItem ) 418*cdf0e10cSrcweir { 419*cdf0e10cSrcweir if ( pItem->mnId == nId ) 420*cdf0e10cSrcweir { 421*cdf0e10cSrcweir pItem->mpPushButton->Hide(); 422*cdf0e10cSrcweir if ( pItem->mbOwnButton ) 423*cdf0e10cSrcweir delete pItem->mpPushButton; 424*cdf0e10cSrcweir delete pItem; 425*cdf0e10cSrcweir mpItemList->Remove(); 426*cdf0e10cSrcweir mbFormat = sal_True; 427*cdf0e10cSrcweir break; 428*cdf0e10cSrcweir } 429*cdf0e10cSrcweir 430*cdf0e10cSrcweir pItem = mpItemList->Next(); 431*cdf0e10cSrcweir } 432*cdf0e10cSrcweir 433*cdf0e10cSrcweir DBG_ERRORFILE( "ButtonDialog::RemoveButton(): ButtonId invalid" ); 434*cdf0e10cSrcweir } 435*cdf0e10cSrcweir 436*cdf0e10cSrcweir // ----------------------------------------------------------------------- 437*cdf0e10cSrcweir 438*cdf0e10cSrcweir void ButtonDialog::Clear() 439*cdf0e10cSrcweir { 440*cdf0e10cSrcweir ImplBtnDlgItem* pItem = mpItemList->First(); 441*cdf0e10cSrcweir while ( pItem ) 442*cdf0e10cSrcweir { 443*cdf0e10cSrcweir pItem->mpPushButton->Hide(); 444*cdf0e10cSrcweir if ( pItem->mbOwnButton ) 445*cdf0e10cSrcweir delete pItem->mpPushButton; 446*cdf0e10cSrcweir delete pItem; 447*cdf0e10cSrcweir pItem = mpItemList->Next(); 448*cdf0e10cSrcweir } 449*cdf0e10cSrcweir 450*cdf0e10cSrcweir mpItemList->Clear(); 451*cdf0e10cSrcweir mbFormat = sal_True; 452*cdf0e10cSrcweir } 453*cdf0e10cSrcweir 454*cdf0e10cSrcweir // ----------------------------------------------------------------------- 455*cdf0e10cSrcweir 456*cdf0e10cSrcweir sal_uInt16 ButtonDialog::GetButtonCount() const 457*cdf0e10cSrcweir { 458*cdf0e10cSrcweir return (sal_uInt16)mpItemList->Count(); 459*cdf0e10cSrcweir } 460*cdf0e10cSrcweir 461*cdf0e10cSrcweir // ----------------------------------------------------------------------- 462*cdf0e10cSrcweir 463*cdf0e10cSrcweir sal_uInt16 ButtonDialog::GetButtonId( sal_uInt16 nButton ) const 464*cdf0e10cSrcweir { 465*cdf0e10cSrcweir if ( nButton < mpItemList->Count() ) 466*cdf0e10cSrcweir return (sal_uInt16)mpItemList->GetObject( nButton )->mnId; 467*cdf0e10cSrcweir else 468*cdf0e10cSrcweir return BUTTONDIALOG_BUTTON_NOTFOUND; 469*cdf0e10cSrcweir } 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir // ----------------------------------------------------------------------- 472*cdf0e10cSrcweir 473*cdf0e10cSrcweir PushButton* ButtonDialog::GetPushButton( sal_uInt16 nId ) const 474*cdf0e10cSrcweir { 475*cdf0e10cSrcweir ImplBtnDlgItem* pItem = ImplGetItem( nId ); 476*cdf0e10cSrcweir 477*cdf0e10cSrcweir if ( pItem ) 478*cdf0e10cSrcweir return pItem->mpPushButton; 479*cdf0e10cSrcweir else 480*cdf0e10cSrcweir return NULL; 481*cdf0e10cSrcweir } 482*cdf0e10cSrcweir 483*cdf0e10cSrcweir // ----------------------------------------------------------------------- 484*cdf0e10cSrcweir 485*cdf0e10cSrcweir void ButtonDialog::SetButtonText( sal_uInt16 nId, const XubString& rText ) 486*cdf0e10cSrcweir { 487*cdf0e10cSrcweir ImplBtnDlgItem* pItem = ImplGetItem( nId ); 488*cdf0e10cSrcweir 489*cdf0e10cSrcweir if ( pItem ) 490*cdf0e10cSrcweir { 491*cdf0e10cSrcweir pItem->mpPushButton->SetText( rText ); 492*cdf0e10cSrcweir mbFormat = sal_True; 493*cdf0e10cSrcweir } 494*cdf0e10cSrcweir } 495*cdf0e10cSrcweir 496*cdf0e10cSrcweir // ----------------------------------------------------------------------- 497*cdf0e10cSrcweir 498*cdf0e10cSrcweir XubString ButtonDialog::GetButtonText( sal_uInt16 nId ) const 499*cdf0e10cSrcweir { 500*cdf0e10cSrcweir ImplBtnDlgItem* pItem = ImplGetItem( nId ); 501*cdf0e10cSrcweir 502*cdf0e10cSrcweir if ( pItem ) 503*cdf0e10cSrcweir return pItem->mpPushButton->GetText(); 504*cdf0e10cSrcweir else 505*cdf0e10cSrcweir return ImplGetSVEmptyStr(); 506*cdf0e10cSrcweir } 507*cdf0e10cSrcweir 508*cdf0e10cSrcweir // ----------------------------------------------------------------------- 509*cdf0e10cSrcweir 510*cdf0e10cSrcweir void ButtonDialog::SetButtonHelpText( sal_uInt16 nId, const XubString& rText ) 511*cdf0e10cSrcweir { 512*cdf0e10cSrcweir ImplBtnDlgItem* pItem = ImplGetItem( nId ); 513*cdf0e10cSrcweir 514*cdf0e10cSrcweir if ( pItem ) 515*cdf0e10cSrcweir pItem->mpPushButton->SetHelpText( rText ); 516*cdf0e10cSrcweir } 517*cdf0e10cSrcweir 518*cdf0e10cSrcweir // ----------------------------------------------------------------------- 519*cdf0e10cSrcweir 520*cdf0e10cSrcweir XubString ButtonDialog::GetButtonHelpText( sal_uInt16 nId ) const 521*cdf0e10cSrcweir { 522*cdf0e10cSrcweir ImplBtnDlgItem* pItem = ImplGetItem( nId ); 523*cdf0e10cSrcweir 524*cdf0e10cSrcweir if ( pItem ) 525*cdf0e10cSrcweir return pItem->mpPushButton->GetHelpText(); 526*cdf0e10cSrcweir else 527*cdf0e10cSrcweir return ImplGetSVEmptyStr(); 528*cdf0e10cSrcweir } 529*cdf0e10cSrcweir 530*cdf0e10cSrcweir // ----------------------------------------------------------------------- 531*cdf0e10cSrcweir 532*cdf0e10cSrcweir void ButtonDialog::SetButtonHelpId( sal_uInt16 nId, const rtl::OString& rHelpId ) 533*cdf0e10cSrcweir { 534*cdf0e10cSrcweir ImplBtnDlgItem* pItem = ImplGetItem( nId ); 535*cdf0e10cSrcweir 536*cdf0e10cSrcweir if ( pItem ) 537*cdf0e10cSrcweir pItem->mpPushButton->SetHelpId( rHelpId ); 538*cdf0e10cSrcweir } 539*cdf0e10cSrcweir 540*cdf0e10cSrcweir // ----------------------------------------------------------------------- 541*cdf0e10cSrcweir 542*cdf0e10cSrcweir rtl::OString ButtonDialog::GetButtonHelpId( sal_uInt16 nId ) const 543*cdf0e10cSrcweir { 544*cdf0e10cSrcweir ImplBtnDlgItem* pItem = ImplGetItem( nId ); 545*cdf0e10cSrcweir 546*cdf0e10cSrcweir return pItem ? rtl::OString( pItem->mpPushButton->GetHelpId() ) : rtl::OString(); 547*cdf0e10cSrcweir } 548