summaryrefslogtreecommitdiff
path: root/toolkit/source/vclcompat/wbutton.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/source/vclcompat/wbutton.cxx')
-rw-r--r--toolkit/source/vclcompat/wbutton.cxx582
1 files changed, 0 insertions, 582 deletions
diff --git a/toolkit/source/vclcompat/wbutton.cxx b/toolkit/source/vclcompat/wbutton.cxx
deleted file mode 100644
index 9268e5ee4770..000000000000
--- a/toolkit/source/vclcompat/wbutton.cxx
+++ /dev/null
@@ -1,582 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: wbutton.cxx,v $
- *
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "wrapper.hxx"
-
-#include <com/sun/star/awt/PosSize.hpp>
-#include <com/sun/star/awt/XActionListener.hpp>
-#include <com/sun/star/awt/XButton.hpp>
-#include <com/sun/star/awt/XCheckBox.hpp>
-#include <com/sun/star/awt/XRadioButton.hpp>
-#include <com/sun/star/graphic/XGraphic.hpp>
-#include <cppuhelper/implbase1.hxx>
-#include <toolkit/awt/vclxwindow.hxx>
-#include <toolkit/helper/convert.hxx>
-#include <vcl/button.hxx>
-#include <vcl/event.hxx>
-#include <vcl/msgbox.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/window.hxx>
-
-#include <list>
-
-#include "layout/layoutcore.hxx"
-
-using namespace ::com::sun::star;
-
-namespace layout
-{
-
-class ImageImpl
-{
- public:
- css::uno::Reference< css::graphic::XGraphic > mxGraphic;
- ImageImpl( const char *pName )
- : mxGraphic( layoutimpl::loadGraphic( pName ) )
- {
- if ( !mxGraphic.is() )
- {
- DBG_ERROR1( "ERROR: failed to load image: `%s'\n", pName );
- }
- }
-};
-
-Image::Image( const char *pName )
- : pImpl( new ImageImpl( pName ) )
-{
-}
-
-Image::~Image()
-{
- delete pImpl;
-}
-
-class ButtonImpl : public ControlImpl
- , public ::cppu::WeakImplHelper1< awt::XActionListener >
- , public ::cppu::WeakImplHelper1< awt::XItemListener >
-{
- Link maClickHdl;
-protected:
- // we add toggle hooks here to cut on code
- Link maToggleHdl;
-public:
- uno::Reference< awt::XButton > mxButton;
- ButtonImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
- : ControlImpl( pCtx, xPeer, pWindow )
- , mxButton( xPeer, uno::UNO_QUERY )
- {
- mxButton->addActionListener( this );
- }
-
- ~ButtonImpl()
- {
- }
-
- virtual void Click() { /* make me pure virtual? */ };
-
- void SetClickHdl( const Link& rLink )
- {
- maClickHdl = rLink;
- if ( !rLink )
- mxButton->removeActionListener( this );
- else
- mxButton->addActionListener( this );
- }
-
- virtual void SAL_CALL disposing( const css::lang::EventObject& /* Source */ )
- throw (css::uno::RuntimeException)
- { mxButton.clear(); }
-
- virtual void SAL_CALL actionPerformed( const css::awt::ActionEvent& /* rEvent */ )
- throw (css::uno::RuntimeException)
- {
- if ( !maClickHdl )
- Click();
- else
- maClickHdl.Call( static_cast<Window *>( mpWindow ) );
- }
-
- virtual // HACK: doesn't need to be virtual... remove in future...
- void SAL_CALL itemStateChanged( const css::awt::ItemEvent& /* rEvent */ )
- throw (css::uno::RuntimeException)
- {
- maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
- }
-
- BOOL SetModeImage( css::uno::Reference< css::graphic::XGraphic > xGraph )
- {
- setProperty( "Graphic", uno::Any( xGraph ) );
- return true;
- }
-};
-
-void Button::SetText( const String& rStr )
-{
- if ( !getImpl().mxButton.is() )
- return;
- getImpl().mxButton->setLabel( rStr );
-}
-
-void Button::SetClickHdl( const Link& rLink )
-{
- getImpl().SetClickHdl( rLink );
-}
-
-BOOL Button::SetModeImage( const Image& rImage )
-{
- return getImpl().SetModeImage( rImage.getImpl().mxGraphic );
-}
-
-void Button::SetImageAlign( ImageAlign eAlign )
-{
- getImpl().setProperty( "ImageAlign", uno::Any( (sal_Int16) eAlign ) );
-}
-
-void Button::Click()
-{
-}
-
-DECL_GET_IMPL_IMPL( Button );
-DECL_CONSTRUCTOR_IMPLS( Button, Control, "button" );
-
-class PushButtonImpl : public ButtonImpl
-{
- public:
- PushButtonImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
- : ButtonImpl( pCtx, xPeer, pWindow ) {}
-
- void SetToggleHdl( const Link& rLink )
- {
- // XButton doesn't have an explicit event for Toggle. Anyway, it is a
- // superset of the clicks: all clicks, and explicit toggles
- maToggleHdl = rLink;
- if ( !rLink )
- mxButton->removeActionListener( this );
- else
- mxButton->addActionListener( this );
- }
-
- virtual void SAL_CALL actionPerformed( const css::awt::ActionEvent& rEvent )
- throw (css::uno::RuntimeException)
- {
- ButtonImpl::actionPerformed( rEvent );
- fireToggle();
- }
-
- inline void fireToggle()
- {
- maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
- }
-};
-
-void PushButton::Check( BOOL bCheck )
-{
- getImpl().setProperty( "State", uno::Any( (sal_Int16) !!bCheck ) );
- // XButton doesn't have explicit toggle event
- getImpl().fireToggle();
-}
-
-BOOL PushButton::IsChecked() const
-{
- return !!( getImpl().getProperty( "State" ).get< sal_Int16 >() );
-}
-
-void PushButton::Toggle()
-{
- Check( true );
-}
-
-void PushButton::SetToggleHdl( const Link& rLink )
-{
- getImpl().SetToggleHdl( rLink );
-}
-
-DECL_GET_IMPL_IMPL( PushButton );
-DECL_CONSTRUCTOR_IMPLS( PushButton, Button, "pushbutton" );
-
- // HACK: put every radio button into a group :/
-static std::list< RadioButtonImpl*> mpRadioGroup;
-
-class RadioButtonImpl : public ButtonImpl
-{
-public:
- uno::Reference< awt::XRadioButton > mxRadioButton;
- RadioButtonImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
- : ButtonImpl( pCtx, xPeer, pWindow )
- , mxRadioButton( xPeer, uno::UNO_QUERY )
- {
- // TEMP:
- mpRadioGroup.push_back( this );
- mxRadioButton->addItemListener( this );
- }
-
- ~RadioButtonImpl()
- {
- //mxRadioButton->removeItemListener( this );
- mpRadioGroup.pop_front();
- }
-
- void Check( BOOL bCheck )
- {
- if ( !mxRadioButton.is() )
- return;
- mxRadioButton->setState( !!bCheck );
- fireToggle();
-
- if ( bCheck )
- unsetOthersGroup( this );
- }
-
- BOOL IsChecked()
- {
- if ( !mxRadioButton.is() )
- return FALSE;
- return mxRadioButton->getState();
- }
-
- static void unsetOthersGroup( RadioButtonImpl* current )
- {
- // set all others to false
- for ( std::list< RadioButtonImpl*>::iterator i = mpRadioGroup.begin();
- i != mpRadioGroup.end(); i++ )
- {
- if ( *i != current )
- ( *i )->Check( false );
- }
- }
-
- void SetToggleHdl( const Link& rLink )
- {
- maToggleHdl = rLink;
-#if 0
- if ( !rLink )
- mxRadioButton->removeItemListener( this );
- else
- mxRadioButton->addItemListener( this );
-#endif
- }
-
- inline void fireToggle()
- {
- maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
- }
-
-//HACK: temp
- virtual void SAL_CALL itemStateChanged( const css::awt::ItemEvent& rEvent )
- throw (css::uno::RuntimeException)
- {
- if ( !!maToggleHdl )
- ButtonImpl::itemStateChanged( rEvent );
-
- if ( IsChecked() )
- unsetOthersGroup( this );
- }
-};
-
-void RadioButton::Check( BOOL bCheck )
-{
- getImpl().Check( bCheck );
-}
-
-BOOL RadioButton::IsChecked() const
-{
- return getImpl().IsChecked();
-}
-
-void RadioButton::SetToggleHdl( const Link& rLink )
-{
- getImpl().SetToggleHdl( rLink );
-}
-
-DECL_GET_IMPL_IMPL( RadioButton );
-#if 1
-DECL_CONSTRUCTOR_IMPLS( RadioButton, Button, "radiobutton" );
-#else //debugging aid
-RadioButton::RadioButton( Context *pCtx, const char *pId, sal_uInt32 nId )
- : Button( new RadioButtonImpl( pCtx, pCtx->GetPeerHandle( pId, nId ), this ) )
-{
- printf( "%s: name=%s\n", __PRETTY_FUNCTION__, pId );
-}
-
-RadioButton::RadioButton( Window *pParent, WinBits nBits )
- : Button( new RadioButtonImpl( pParent->getContext(), Window::CreatePeer( pParent, nBits, "radiobutton" ), this ) )
-{
-}
-#endif
-
-class CheckBoxImpl : public ButtonImpl
-{
- public:
- uno::Reference< awt::XCheckBox > mxCheckBox;
- CheckBoxImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
- : ButtonImpl( pCtx, xPeer, pWindow )
- , mxCheckBox( xPeer, uno::UNO_QUERY ) {}
-
- void SetToggleHdl( const Link& rLink )
- {
- maToggleHdl = rLink;
- if ( !rLink )
- mxCheckBox->removeItemListener( this );
- else
- mxCheckBox->addItemListener( this );
- }
-};
-
-void CheckBox::Check( BOOL bCheck )
-{
- if ( !getImpl().mxCheckBox.is() )
- return;
- getImpl().mxCheckBox->setState( !!bCheck );
-}
-
-BOOL CheckBox::IsChecked() const
-{
- if ( !getImpl().mxCheckBox.is() )
- return FALSE;
- return getImpl().mxCheckBox->getState() != 0;
-}
-
-void CheckBox::SetToggleHdl( const Link& rLink )
-{
- getImpl().SetToggleHdl( rLink );
-}
-
-DECL_GET_IMPL_IMPL( CheckBox );
-DECL_CONSTRUCTOR_IMPLS( CheckBox, Button, "checkbox" );
-
-#define BUTTON_IMPL(t, parent, response) \
- class t##Impl : public parent##Impl \
- { \
- public: \
- t##Impl( Context *pCtx, PeerHandle const& xPeer, Window *pWindow ) \
- : parent##Impl( pCtx, xPeer, pWindow ) \
- { \
- } \
- void Click() \
- { \
- Dialog *d = static_cast<Dialog *>( mpCtx ); \
- d->EndDialog( response ); \
- } \
- }
-
-/* Common button types currently unavailable in OOo: */
-/* mpReset */
-/* mpApply */
-/* mpAction */
-#define RET_RESET 6
-#define RET_APPLY 7
-#define BUTTONID_RESET RET_RESET
-#define BUTTONID_APPLY RET_APPLY
-
-BUTTON_IMPL( OKButton, PushButton, BUTTONID_OK );
-BUTTON_IMPL( CancelButton, PushButton, BUTTONID_CANCEL );
-BUTTON_IMPL( YesButton, PushButton, BUTTONID_YES );
-BUTTON_IMPL( NoButton, PushButton, BUTTONID_NO );
-BUTTON_IMPL( RetryButton, PushButton, BUTTONID_RETRY );
-BUTTON_IMPL( IgnoreButton, PushButton, BUTTONID_IGNORE );
-BUTTON_IMPL( ResetButton, PushButton, BUTTONID_RESET );
-BUTTON_IMPL( ApplyButton, PushButton, BUTTONID_APPLY ); /* Deprecated? */
-BUTTON_IMPL( HelpButton, PushButton, BUTTONID_HELP );
-
-DECL_CONSTRUCTOR_IMPLS( OKButton, PushButton, "okbutton" );
-DECL_CONSTRUCTOR_IMPLS( CancelButton, PushButton, "cancelbutton" );
-DECL_CONSTRUCTOR_IMPLS( YesButton, PushButton, "yesbutton" );
-DECL_CONSTRUCTOR_IMPLS( NoButton, PushButton, "nobutton" );
-DECL_CONSTRUCTOR_IMPLS( RetryButton, PushButton, "retrybutton" );
-DECL_CONSTRUCTOR_IMPLS( IgnoreButton, PushButton, "ignorebutton" );
-DECL_CONSTRUCTOR_IMPLS( ResetButton, PushButton, "resetbutton" );
-DECL_CONSTRUCTOR_IMPLS( ApplyButton, PushButton, "applybutton" ); /* Deprecated? */
-DECL_CONSTRUCTOR_IMPLS( HelpButton, PushButton, "helpbutton" );
-
-class AdvancedButtonImpl : public PushButtonImpl
-{
-protected:
- bool bAdvancedMode;
- std::list< Window*> maAdvanced;
- std::list< Window*> maSimple;
- rtl::OUString mSimpleLabel;
- rtl::OUString mAdvancedLabel;
-
- Window* Remove( std::list< Window*> lst, Window* w )
- {
- for ( std::list< Window*>::iterator it = maAdvanced.begin();
- it != maAdvanced.end(); it++ )
- if ( *it == w )
- {
- lst.erase( it );
- return *it;
- }
- return 0;
- }
- void redraw()
- {
- uno::Reference <awt::XWindow> ref( mxWindow, uno::UNO_QUERY );
- ::Window* window = VCLXWindow::GetImplementation( ref )->GetWindow();
- ::Window* parent = window->GetParent();
-
- ::Rectangle r = Rectangle( parent->GetPosPixel(),
- parent->GetSizePixel() );
-
- parent->Invalidate( r, INVALIDATE_CHILDREN | INVALIDATE_NOCHILDREN );
- parent->SetPosSizePixel( 0, 0, r.nRight - r.nLeft, r.nBottom - r.nTop,
- awt::PosSize::SIZE );
- }
-
-public:
- AdvancedButtonImpl( Context *pCtx, PeerHandle const& xPeer, Window *pWindow )
- : PushButtonImpl( pCtx, xPeer, pWindow )
- , bAdvancedMode( false )
- // TODO: i18n
- // Button::GetStandardText( BUTTON_ADVANCED );
- // Button::GetStandardText( BUTTON_SIMPLE );
- , mSimpleLabel( rtl::OUString::createFromAscii( "Advanced..." ) )
- , mAdvancedLabel( rtl::OUString::createFromAscii( "Simple..." ) )
- {
- }
- void Click()
- {
- bAdvancedMode = !bAdvancedMode;
- if ( bAdvancedMode )
- advancedMode();
- else
- simpleMode();
- }
- void advancedMode()
- {
- // TODO: set symbol/image?
- // SYMBOL_PAGEUP, SYMBOL_PAGEDOWN
-#if 0
- // How to set images from here?
- // XImageConsumer looks like a disaster
- // Should move all this switching functionality to VCLXAdvancedButton?
- /biek/home/janneke/vc/layout-cws/default_images/res/commandimagelist/
- sc_arrowshapes_down.png
- sch_flowchartshapes.flowchart-extract.png
- sch_flowchartshapes.flowchart-merge.png
-#endif
- mxButton->setLabel( mAdvancedLabel );
- for ( std::list< Window*>::iterator it = maAdvanced.begin();
- it != maAdvanced.end(); it++ )
- ( *it )->Show();
- for ( std::list< Window*>::iterator it = maSimple.begin();
- it != maSimple.end(); it++ )
- ( *it )->Hide();
-
- redraw();
- }
-
- void simpleMode()
- {
- mxButton->setLabel( mSimpleLabel );
- for ( std::list< Window*>::iterator it = maAdvanced.begin();
- it != maAdvanced.end(); it++ )
- ( *it )->Hide();
- for ( std::list< Window*>::iterator it = maSimple.begin();
- it != maSimple.end(); it++ )
- ( *it )->Show();
-
- redraw();
- }
- void AddAdvanced( Window* w )
- {
- maAdvanced.push_back( w );
- if ( !bAdvancedMode )
- w->Hide();
- }
- void AddSimple( Window* w )
- {
- maSimple.push_back( w );
- if ( bAdvancedMode )
- w->Hide();
- }
- void RemoveAdvanced( Window* w )
- {
- Remove( maAdvanced, w );
- }
- void RemoveSimple( Window* w )
- {
- Remove( maSimple, w );
- }
-};
-
-void AdvancedButton::AddAdvanced( Window* w )
-{
- getImpl().AddAdvanced( w );
-}
-
-void AdvancedButton::AddSimple( Window* w )
-{
- getImpl().AddSimple( w );
-}
-
-void AdvancedButton::RemoveAdvanced( Window* w )
-{
- getImpl().RemoveAdvanced( w );
-}
-
-void AdvancedButton::RemoveSimple( Window* w )
-{
- getImpl().RemoveSimple( w );
-}
-
-DECL_CONSTRUCTOR_IMPLS( AdvancedButton, PushButton, "advancedbutton" );
-DECL_GET_IMPL_IMPL( AdvancedButton );
-
-
-class MoreButtonImpl : public AdvancedButtonImpl
-{
-public:
- MoreButtonImpl( Context *pCtx, PeerHandle const& xPeer, Window *pWindow )
- : AdvancedButtonImpl( pCtx, xPeer, pWindow)
- {
- mAdvancedLabel = ::Button::GetStandardText( BUTTON_LESS );
- mSimpleLabel = ::Button::GetStandardText( BUTTON_MORE );
- }
- void AddWindow( Window* w ) { AddAdvanced( w ); }
- void RemoveWindow( Window* w ) { RemoveAdvanced( w ); }
-};
-
-// TODO
-//BUTTON_IMPL( MoreButton, PushButton, 0 );
-DECL_CONSTRUCTOR_IMPLS( MoreButton, AdvancedButton, "morebutton" );
-DECL_GET_IMPL_IMPL( MoreButton );
-
-void MoreButton::AddWindow( Window* w )
-{
- getImpl().AddWindow( w );
-}
-
-void MoreButton::RemoveWindow( Window* w )
-{
- getImpl().RemoveWindow( w );
-}
-
-} // namespace layout