1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 #include "wrapper.hxx"
25
26 #include <com/sun/star/awt/PosSize.hpp>
27 #include <com/sun/star/awt/XActionListener.hpp>
28 #include <com/sun/star/awt/XButton.hpp>
29 #include <com/sun/star/awt/XCheckBox.hpp>
30 #include <com/sun/star/awt/XRadioButton.hpp>
31 #include <com/sun/star/graphic/XGraphic.hpp>
32 #include <cppuhelper/implbase1.hxx>
33 #include <toolkit/awt/vclxwindow.hxx>
34 #include <toolkit/awt/vclxwindows.hxx>
35 #include <toolkit/helper/convert.hxx>
36 #include <vcl/button.hxx>
37 #include <vcl/event.hxx>
38 #include <vcl/msgbox.hxx>
39 #include <vcl/svapp.hxx>
40 #include <vcl/window.hxx>
41
42 #include <list>
43
44 #include <layout/core/helper.hxx>
45
46 using namespace ::com::sun::star;
47
48 using rtl::OUString;
49
50 namespace layout
51 {
52
53 class ImageImpl
54 {
55 public:
56 uno::Reference< graphic::XGraphic > mxGraphic;
ImageImpl(const char * pName)57 ImageImpl( const char *pName )
58 : mxGraphic( layoutimpl::loadGraphic( pName ) )
59 {
60 if ( !mxGraphic.is() )
61 {
62 DBG_ERROR1( "ERROR: failed to load image: `%s'\n", pName );
63 }
64 }
65 };
66
Image(const char * pName)67 Image::Image( const char *pName )
68 : pImpl( new ImageImpl( pName ) )
69 {
70 }
71
~Image()72 Image::~Image()
73 {
74 delete pImpl;
75 }
76
77 class ButtonImpl : public ControlImpl
78 , public ::cppu::WeakImplHelper1< awt::XActionListener >
79 {
80 Link maClickHdl;
81
82 public:
83 uno::Reference< awt::XButton > mxButton;
ButtonImpl(Context * context,const PeerHandle & peer,Window * window)84 ButtonImpl( Context *context, const PeerHandle &peer, Window *window )
85 : ControlImpl( context, peer, window )
86 , mxButton( peer, uno::UNO_QUERY )
87 {
88 /* We have default action when clicked, always listen. */
89 mxButton->addActionListener( this );
90 }
91
~ButtonImpl()92 ~ButtonImpl()
93 {
94 }
95
Click()96 virtual void Click() { /* make me pure virtual? */ };
97
GetClickHdl()98 Link& GetClickHdl ()
99 {
100 return maClickHdl;
101 }
102
SetClickHdl(Link const & link)103 virtual void SetClickHdl( Link const& link )
104 {
105 maClickHdl = link;
106 }
107
disposing(lang::EventObject const & e)108 void SAL_CALL disposing( lang::EventObject const& e )
109 throw (uno::RuntimeException)
110 {
111 mxButton->removeActionListener( this );
112 ControlImpl::disposing (e);
113 mxButton.clear ();
114 }
115
actionPerformed(const awt::ActionEvent &)116 virtual void SAL_CALL actionPerformed( const awt::ActionEvent& )
117 throw (uno::RuntimeException)
118 {
119 if ( !maClickHdl )
120 Click();
121 else
122 maClickHdl.Call( static_cast<Window *>( mpWindow ) );
123 }
124
SetModeImage(uno::Reference<graphic::XGraphic> xGraph)125 bool SetModeImage( uno::Reference< graphic::XGraphic > xGraph )
126 {
127 setProperty( "Graphic", uno::Any( xGraph ) );
128 return true;
129 }
130 };
131
~Button()132 Button::~Button ()
133 {
134 }
135
GetStandardText(sal_uInt16 button_type)136 String Button::GetStandardText (sal_uInt16 button_type)
137 {
138 return ::Button::GetStandardText (button_type);
139 }
140
SetText(OUString const & rStr)141 void Button::SetText( OUString const& rStr )
142 {
143 if ( !getImpl()->mxButton.is() )
144 return;
145 getImpl()->mxButton->setLabel( rStr );
146 }
147
SetClickHdl(const Link & link)148 void Button::SetClickHdl( const Link& link )
149 {
150 if (getImpl() && getImpl()->mxButton.is ())
151 getImpl()->SetClickHdl( link );
152 }
153
GetClickHdl()154 Link& Button::GetClickHdl ()
155 {
156 return getImpl()->GetClickHdl ();
157 }
158
SetModeImage(Image const & image)159 bool Button::SetModeImage (Image const& image)
160 {
161 return getImpl() || getImpl()->SetModeImage (image.getImpl().mxGraphic);
162 }
163
SetModeImage(::Image const & image,BmpColorMode mode)164 bool Button::SetModeImage (::Image const& image, BmpColorMode mode)
165 {
166 return !GetButton () || GetButton ()->SetModeImage (image, mode);
167 }
168
SetImageAlign(ImageAlign eAlign)169 void Button::SetImageAlign( ImageAlign eAlign )
170 {
171 if ( getImpl() )
172 getImpl()->setProperty( "ImageAlign", uno::Any( (sal_Int16) eAlign ) );
173 }
174
Click()175 void Button::Click()
176 {
177 }
178
179 IMPL_GET_IMPL( Button );
180 IMPL_CONSTRUCTORS( Button, Control, "button" );
181 IMPL_GET_WINDOW (Button);
182
183 class PushButtonImpl : public ButtonImpl
184 , public ::cppu::WeakImplHelper1< awt::XItemListener >
185 {
186 Link maToggleHdl;
187 public:
PushButtonImpl(Context * context,const PeerHandle & peer,Window * window)188 PushButtonImpl( Context *context, const PeerHandle &peer, Window *window )
189 : ButtonImpl( context, peer, window )
190 {
191 }
192
SetToggleHdl(const Link & link)193 void SetToggleHdl( const Link& link )
194 {
195 // XButton doesn't have an explicit event for Toggle. Anyway, it is a
196 // superset of the clicks: all clicks, and explicit toggles
197 if (!link && !!maToggleHdl)
198 mxButton->removeActionListener( this );
199 else if (!!link && !maToggleHdl)
200 mxButton->addActionListener( this );
201 maToggleHdl = link;
202 }
disposing(lang::EventObject const & e)203 void SAL_CALL disposing( lang::EventObject const& e )
204 throw (uno::RuntimeException)
205 {
206 ButtonImpl::disposing (e);
207 }
actionPerformed(awt::ActionEvent const & e)208 virtual void SAL_CALL actionPerformed( awt::ActionEvent const& e )
209 throw (uno::RuntimeException)
210 {
211 ButtonImpl::actionPerformed( e );
212 fireToggle();
213 }
itemStateChanged(const awt::ItemEvent &)214 virtual void SAL_CALL itemStateChanged( const awt::ItemEvent& )
215 throw (uno::RuntimeException)
216 {
217 maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
218 }
fireToggle()219 void fireToggle()
220 {
221 maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
222 }
223
224 };
225
~PushButton()226 PushButton::~PushButton ()
227 {
228 SetToggleHdl (Link ());
229 }
230
Check(bool bCheck)231 void PushButton::Check( bool bCheck )
232 {
233 if ( getImpl() )
234 getImpl()->setProperty( "State", uno::Any( (sal_Int16) !!bCheck ) );
235 // XButton doesn't have explicit toggle event
236 getImpl()->fireToggle();
237 }
238
IsChecked() const239 bool PushButton::IsChecked() const
240 {
241 return !!( getImpl() && getImpl()->getProperty( "State" ).get< sal_Int16 >() );
242 }
243
Toggle()244 void PushButton::Toggle()
245 {
246 Check( true );
247 }
248
SetToggleHdl(const Link & link)249 void PushButton::SetToggleHdl( const Link& link )
250 {
251 if (getImpl() && getImpl()->mxButton.is ())
252 getImpl()->SetToggleHdl( link );
253 }
254
255 IMPL_GET_IMPL( PushButton );
256 IMPL_CONSTRUCTORS( PushButton, Button, "pushbutton" );
257 IMPL_GET_WINDOW (PushButton);
258
259 class RadioButtonImpl : public ButtonImpl
260 , public ::cppu::WeakImplHelper1< awt::XItemListener >
261 {
262 Link maToggleHdl;
263 public:
264 uno::Reference< awt::XRadioButton > mxRadioButton;
RadioButtonImpl(Context * context,const PeerHandle & peer,Window * window)265 RadioButtonImpl( Context *context, const PeerHandle &peer, Window *window )
266 : ButtonImpl( context, peer, window )
267 , mxRadioButton( peer, uno::UNO_QUERY )
268 {
269 }
270
Check(bool bCheck)271 void Check( bool bCheck )
272 {
273 if ( !mxRadioButton.is() )
274 return;
275
276 #if 1
277 // Have setState fire item event for
278 // RadioGroups::RadioGroup::itemStateChanged ()
279 ::RadioButton *r = static_cast<RadioButton*>(mpWindow)->GetRadioButton ();
280 bool state = r->IsRadioCheckEnabled ();
281 r->EnableRadioCheck();
282 mxRadioButton->setState( !!bCheck );
283 r->EnableRadioCheck (state);
284 #else
285 mxRadioButton->setState( !!bCheck );
286 #endif
287 fireToggle();
288 }
289
IsChecked()290 bool IsChecked()
291 {
292 if ( !mxRadioButton.is() )
293 return false;
294 return mxRadioButton->getState();
295 }
296
SetToggleHdl(const Link & link)297 void SetToggleHdl( const Link& link )
298 {
299 if (!link && !!maToggleHdl)
300 mxRadioButton->removeItemListener( this );
301 else if (!!link && !maToggleHdl)
302 mxRadioButton->addItemListener( this );
303 maToggleHdl = link;
304 }
305
fireToggle()306 inline void fireToggle()
307 {
308 maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
309 }
310
SetClickHdl(const Link & link)311 virtual void SetClickHdl( const Link& link )
312 {
313 // Keep RadioGroups::RadioGroup's actionListener at HEAD
314 // of list. This way, it can handle RadioGroup's button
315 // states before all other callbacks and make sure the
316 // client code has the right state.
317
318 // IWBN to add an XRadioButton2 and layout::VCLXRadioButton
319 // with {get,set}RadioGroup() (and a "radiogroup" property
320 // even) and handle the grouping here in RadioButtonImpl.
321 uno::Reference< uno::XInterface > x = static_cast<VCLXRadioButton*> (mpWindow->GetVCLXWindow ())->getFirstActionListener ();
322 uno::Reference< awt::XActionListener > a = uno::Reference< awt::XActionListener> (x ,uno::UNO_QUERY );
323 mxButton->removeActionListener (a);
324 ButtonImpl::SetClickHdl (link);
325 mxButton->addActionListener (a);
326 }
327
disposing(lang::EventObject const & e)328 void SAL_CALL disposing( lang::EventObject const& e )
329 throw (uno::RuntimeException)
330 {
331 ButtonImpl::disposing (e);
332 }
333
itemStateChanged(const awt::ItemEvent &)334 virtual void SAL_CALL itemStateChanged( const awt::ItemEvent& )
335 throw (uno::RuntimeException)
336 {
337 maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
338 }
339 };
340
~RadioButton()341 RadioButton::~RadioButton ()
342 {
343 SetToggleHdl (Link ());
344 }
345
Check(bool bCheck)346 void RadioButton::Check( bool bCheck )
347 {
348 getImpl()->Check( bCheck );
349 }
350
IsChecked() const351 bool RadioButton::IsChecked() const
352 {
353 return getImpl()->IsChecked();
354 }
355
SetToggleHdl(const Link & link)356 void RadioButton::SetToggleHdl( const Link& link )
357 {
358 if (getImpl() && getImpl()->mxRadioButton.is ())
359 getImpl()->SetToggleHdl( link );
360 }
361
362 IMPL_GET_IMPL( RadioButton );
363 IMPL_GET_WINDOW( RadioButton );
364 IMPL_GET_VCLXWINDOW( RadioButton );
365 IMPL_CONSTRUCTORS( RadioButton, Button, "radiobutton" );
366
367 class CheckBoxImpl : public ButtonImpl
368 , public ::cppu::WeakImplHelper1< awt::XItemListener >
369 {
370 Link maToggleHdl;
371 public:
372 uno::Reference< awt::XCheckBox > mxCheckBox;
CheckBoxImpl(Context * context,const PeerHandle & peer,Window * window)373 CheckBoxImpl( Context *context, const PeerHandle &peer, Window *window )
374 : ButtonImpl( context, peer, window )
375 , mxCheckBox( peer, uno::UNO_QUERY )
376 {
377 }
378
SetToggleHdl(const Link & link)379 void SetToggleHdl( const Link& link )
380 {
381 if (!link && !!maToggleHdl)
382 mxCheckBox->removeItemListener( this );
383 else if (!!link && !maToggleHdl)
384 mxCheckBox->addItemListener( this );
385 maToggleHdl = link;
386 }
disposing(lang::EventObject const & e)387 void SAL_CALL disposing( lang::EventObject const& e )
388 throw (uno::RuntimeException)
389 {
390 ButtonImpl::disposing (e);
391 }
itemStateChanged(const awt::ItemEvent &)392 virtual void SAL_CALL itemStateChanged( const awt::ItemEvent& )
393 throw (uno::RuntimeException)
394 {
395 maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
396 }
397 };
398
~CheckBox()399 CheckBox::~CheckBox ()
400 {
401 SetToggleHdl (Link ());
402 }
403
Check(bool bCheck)404 void CheckBox::Check( bool bCheck )
405 {
406 if ( !getImpl()->mxCheckBox.is() )
407 return;
408 getImpl()->mxCheckBox->setState( !!bCheck );
409 }
410
IsChecked() const411 bool CheckBox::IsChecked() const
412 {
413 if ( !getImpl()->mxCheckBox.is() )
414 return false;
415 return getImpl()->mxCheckBox->getState() != 0;
416 }
417
SetToggleHdl(const Link & link)418 void CheckBox::SetToggleHdl( const Link& link )
419 {
420 if (getImpl() && getImpl()->mxCheckBox.is ())
421 getImpl()->SetToggleHdl( link );
422 }
423
424 IMPL_GET_IMPL( CheckBox );
425 IMPL_CONSTRUCTORS( CheckBox, Button, "checkbox" );
426
427 #define BUTTON_IMPL(t, parent, response) \
428 class t##Impl : public parent##Impl \
429 { \
430 public: \
431 t##Impl( Context *context, PeerHandle const& peer, Window *window ) \
432 : parent##Impl( context, peer, window ) \
433 { \
434 } \
435 void Click() \
436 { \
437 if (Dialog *d = static_cast<Dialog *> (mpCtx)) \
438 d->EndDialog( response ); \
439 } \
440 }
441
442 /* Common button types currently unavailable in OOo: */
443 /* mpReset */
444 /* mpApply */
445 /* mpAction */
446 #define RET_RESET 6
447 #define RET_APPLY 7
448 #define BUTTONID_RESET RET_RESET
449 #define BUTTONID_APPLY RET_APPLY
450
451 BUTTON_IMPL( OKButton, PushButton, BUTTONID_OK );
452 BUTTON_IMPL( CancelButton, PushButton, BUTTONID_CANCEL );
453 BUTTON_IMPL( YesButton, PushButton, BUTTONID_YES );
454 BUTTON_IMPL( NoButton, PushButton, BUTTONID_NO );
455 BUTTON_IMPL( RetryButton, PushButton, BUTTONID_RETRY );
456 BUTTON_IMPL( IgnoreButton, PushButton, BUTTONID_IGNORE );
457 BUTTON_IMPL( ResetButton, PushButton, BUTTONID_RESET );
458 BUTTON_IMPL( ApplyButton, PushButton, BUTTONID_APPLY ); /* Deprecated? */
459 BUTTON_IMPL( HelpButton, PushButton, BUTTONID_HELP );
460
461 IMPL_CONSTRUCTORS( OKButton, PushButton, "okbutton" );
462 IMPL_CONSTRUCTORS( CancelButton, PushButton, "cancelbutton" );
463 IMPL_CONSTRUCTORS( YesButton, PushButton, "yesbutton" );
464 IMPL_CONSTRUCTORS( NoButton, PushButton, "nobutton" );
465 IMPL_CONSTRUCTORS( RetryButton, PushButton, "retrybutton" );
466 IMPL_CONSTRUCTORS( IgnoreButton, PushButton, "ignorebutton" );
467 IMPL_CONSTRUCTORS( ResetButton, PushButton, "resetbutton" );
468 IMPL_CONSTRUCTORS( ApplyButton, PushButton, "applybutton" ); /* Deprecated? */
469 IMPL_CONSTRUCTORS( HelpButton, PushButton, "helpbutton" );
470
471 IMPL_IMPL (ImageButton, PushButton)
472
473
474 IMPL_CONSTRUCTORS( ImageButton, PushButton, "imagebutton" );
475
476 class AdvancedButtonImpl : public PushButtonImpl
477 {
478 protected:
479 bool bAdvancedMode;
480 std::list< Window*> maAdvanced;
481 std::list< Window*> maSimple;
482
483 public:
484 rtl::OUString mAdvancedLabel;
485 rtl::OUString mSimpleLabel;
486
487 protected:
Remove(std::list<Window * > lst,Window * w)488 Window* Remove( std::list< Window*> lst, Window* w )
489 {
490 for ( std::list< Window*>::iterator it = maAdvanced.begin();
491 it != maAdvanced.end(); it++ )
492 if ( *it == w )
493 {
494 lst.erase( it );
495 return *it;
496 }
497 return 0;
498 }
499
500 public:
AdvancedButtonImpl(Context * context,PeerHandle const & peer,Window * window)501 AdvancedButtonImpl( Context *context, PeerHandle const& peer, Window *window )
502 : PushButtonImpl( context, peer, window )
503 , bAdvancedMode( false )
504 // TODO: i18n
505 // Button::GetStandardText( BUTTON_ADVANCED );
506 // Button::GetStandardText( BUTTON_SIMPLE );
507 , mAdvancedLabel( rtl::OUString::createFromAscii( "Advanced..." ) )
508 , mSimpleLabel( rtl::OUString::createFromAscii( "Simple..." ) )
509 {
510 }
Click()511 void Click()
512 {
513 bAdvancedMode = !bAdvancedMode;
514 if ( bAdvancedMode )
515 advancedMode();
516 else
517 simpleMode();
518 }
setAlign()519 void setAlign ()
520 {
521 ::PushButton *b = static_cast<PushButton*> (mpWindow)->GetPushButton ();
522 b->SetSymbolAlign (SYMBOLALIGN_RIGHT);
523 b->SetSmallSymbol ();
524 //mpWindow->SetStyle (mpWindow->GetStyle() | WB_CENTER);
525 }
advancedMode()526 void advancedMode()
527 {
528 ::PushButton *b = static_cast<PushButton*> (mpWindow)->GetPushButton ();
529 b->SetSymbol (SYMBOL_PAGEUP);
530 setAlign ();
531 if (mSimpleLabel.getLength ())
532 b->SetText (mSimpleLabel);
533 for ( std::list< Window*>::iterator it = maAdvanced.begin();
534 it != maAdvanced.end(); it++ )
535 ( *it )->Show();
536 for ( std::list< Window*>::iterator it = maSimple.begin();
537 it != maSimple.end(); it++ )
538 ( *it )->Hide();
539
540 redraw ();
541 }
simpleMode()542 void simpleMode()
543 {
544 //mxButton->setLabel( mSimpleLabel );
545 ::PushButton *b = static_cast<PushButton*> (mpWindow)->GetPushButton ();
546 b->SetSymbol (SYMBOL_PAGEDOWN);
547 if (mAdvancedLabel.getLength ())
548 b->SetText (mAdvancedLabel);
549 setAlign ();
550 for ( std::list< Window*>::iterator it = maAdvanced.begin();
551 it != maAdvanced.end(); it++ )
552 ( *it )->Hide();
553 for ( std::list< Window*>::iterator it = maSimple.begin();
554 it != maSimple.end(); it++ )
555 ( *it )->Show();
556
557 redraw (true);
558 }
AddAdvanced(Window * w)559 void AddAdvanced( Window* w )
560 {
561 maAdvanced.push_back( w );
562 if ( !bAdvancedMode )
563 w->Hide();
564 }
AddSimple(Window * w)565 void AddSimple( Window* w )
566 {
567 maSimple.push_back( w );
568 if ( bAdvancedMode )
569 w->Hide();
570 }
RemoveAdvanced(Window * w)571 void RemoveAdvanced( Window* w )
572 {
573 Remove( maAdvanced, w );
574 }
RemoveSimple(Window * w)575 void RemoveSimple( Window* w )
576 {
577 Remove( maSimple, w );
578 }
579 };
580
AddAdvanced(Window * w)581 void AdvancedButton::AddAdvanced( Window* w )
582 {
583 getImpl()->AddAdvanced( w );
584 }
585
AddSimple(Window * w)586 void AdvancedButton::AddSimple( Window* w )
587 {
588 getImpl()->AddSimple( w );
589 }
590
RemoveAdvanced(Window * w)591 void AdvancedButton::RemoveAdvanced( Window* w )
592 {
593 getImpl()->RemoveAdvanced( w );
594 }
595
RemoveSimple(Window * w)596 void AdvancedButton::RemoveSimple( Window* w )
597 {
598 getImpl()->RemoveSimple( w );
599 }
600
SetAdvancedText(rtl::OUString const & text)601 void AdvancedButton::SetAdvancedText (rtl::OUString const& text)
602 {
603 if (text.getLength ())
604 getImpl()->mAdvancedLabel = text;
605 }
606
SetSimpleText(rtl::OUString const & text)607 void AdvancedButton::SetSimpleText (rtl::OUString const& text)
608 {
609 if (text.getLength ())
610 getImpl()->mSimpleLabel = text;
611 }
612
GetAdvancedText() const613 rtl::OUString AdvancedButton::GetAdvancedText () const
614 {
615 return getImpl()->mAdvancedLabel;
616 }
617
GetSimpleText() const618 rtl::OUString AdvancedButton::GetSimpleText () const
619 {
620 return getImpl()->mSimpleLabel;
621 }
622
SetDelta(int)623 void AdvancedButton::SetDelta (int)
624 {
625 }
626
627 IMPL_CONSTRUCTORS_BODY( AdvancedButton, PushButton, "advancedbutton", getImpl()->simpleMode () );
628 IMPL_GET_IMPL( AdvancedButton );
629
630
631 class MoreButtonImpl : public AdvancedButtonImpl
632 {
633 public:
MoreButtonImpl(Context * context,PeerHandle const & peer,Window * window)634 MoreButtonImpl( Context *context, PeerHandle const& peer, Window *window )
635 : AdvancedButtonImpl( context, peer, window)
636 {
637 mSimpleLabel = Button::GetStandardText( BUTTON_MORE );
638 mAdvancedLabel = Button::GetStandardText( BUTTON_LESS );
639 }
AddWindow(Window * w)640 void AddWindow( Window* w ) { AddAdvanced( w ); }
RemoveWindow(Window * w)641 void RemoveWindow( Window* w ) { RemoveAdvanced( w ); }
642 };
643
644 // TODO
645 //BUTTON_IMPL( MoreButton, PushButton, 0 );
646 IMPL_CONSTRUCTORS_BODY( MoreButton, AdvancedButton, "morebutton", getImpl()->simpleMode () );
647 IMPL_GET_IMPL( MoreButton );
648
AddWindow(Window * w)649 void MoreButton::AddWindow( Window* w )
650 {
651 getImpl()->AddWindow( w );
652 }
653
RemoveWindow(Window * w)654 void MoreButton::RemoveWindow( Window* w )
655 {
656 getImpl()->RemoveWindow( w );
657 }
658
SetMoreText(rtl::OUString const & text)659 void MoreButton::SetMoreText (rtl::OUString const& text)
660 {
661 SetAdvancedText (text);
662 }
663
SetLessText(rtl::OUString const & text)664 void MoreButton::SetLessText (rtl::OUString const& text)
665 {
666 SetSimpleText (text);
667 }
668
GetMoreText() const669 rtl::OUString MoreButton::GetMoreText () const
670 {
671 return GetAdvancedText ();
672 }
673
GetLessText() const674 rtl::OUString MoreButton::GetLessText () const
675 {
676 return GetSimpleText ();
677 }
678
679 } // namespace layout
680