summaryrefslogtreecommitdiff
path: root/svx/source/tbxctrls/itemwin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/tbxctrls/itemwin.cxx')
-rw-r--r--svx/source/tbxctrls/itemwin.cxx825
1 files changed, 825 insertions, 0 deletions
diff --git a/svx/source/tbxctrls/itemwin.cxx b/svx/source/tbxctrls/itemwin.cxx
new file mode 100644
index 000000000000..9415ddaf1814
--- /dev/null
+++ b/svx/source/tbxctrls/itemwin.cxx
@@ -0,0 +1,825 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svx.hxx"
+
+// include ---------------------------------------------------------------
+#include <tools/shl.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/objsh.hxx>
+#include <sfx2/viewsh.hxx>
+#include <sfx2/module.hxx>
+#include <tools/urlobj.hxx>
+
+#define _SVX_ITEMWIN_CXX
+
+#include <vcl/svapp.hxx>
+
+#include <svx/dialogs.hrc>
+
+#define DELAY_TIMEOUT 100
+
+#include <svx/xlnclit.hxx>
+#include <svx/xlnwtit.hxx>
+#include <svx/xlineit0.hxx>
+#include <svx/xlndsit.hxx>
+#include <svx/xtable.hxx>
+#include "drawitem.hxx"
+#include <svx/dialmgr.hxx>
+#include "dlgutil.hxx"
+#include <svx/itemwin.hxx>
+#include "linectrl.hxx"
+#include <svtools/colorcfg.hxx>
+
+#include "linectrl.hrc"
+
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::frame;
+using namespace ::com::sun::star::util;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::beans;
+
+#define LOGICAL_EDIT_HEIGHT 12
+//========================================================================
+// SvxLineBox
+//========================================================================
+
+SvxLineBox::SvxLineBox( Window* pParent, const Reference< XFrame >& rFrame, WinBits nBits ) :
+ LineLB( pParent, nBits ),
+ meBmpMode ( GetSettings().GetStyleSettings().GetHighContrastMode() ? BMP_COLOR_HIGHCONTRAST : BMP_COLOR_NORMAL ),
+ nCurPos ( 0 ),
+ aLogicalSize(40,140),
+ bRelease ( TRUE ),
+ mpSh ( NULL ),
+ mxFrame ( rFrame )
+{
+ SetSizePixel( LogicToPixel( aLogicalSize, MAP_APPFONT ));
+ Show();
+
+ aDelayTimer.SetTimeout( DELAY_TIMEOUT );
+ aDelayTimer.SetTimeoutHdl( LINK( this, SvxLineBox, DelayHdl_Impl ) );
+ aDelayTimer.Start();
+}
+
+// -----------------------------------------------------------------------
+
+SvxLineBox::~SvxLineBox()
+{
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxLineBox, DelayHdl_Impl, Timer *, EMPTYARG )
+{
+ if ( GetEntryCount() == 0 )
+ {
+ mpSh = SfxObjectShell::Current();
+ FillControl();
+ }
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxLineBox::Select()
+{
+ // Call the parent's Select() member to trigger accessibility events.
+ LineLB::Select();
+
+ if ( !IsTravelSelect() )
+ {
+ XLineStyle eXLS;
+ USHORT nPos = GetSelectEntryPos();
+// SfxDispatcher* pDisp = rBindings.GetDispatcher();
+ //DBG_ASSERT( pDisp, "invalid Dispatcher" );
+
+ switch ( nPos )
+ {
+ case 0:
+ eXLS = XLINE_NONE;
+ break;
+
+ case 1:
+ eXLS = XLINE_SOLID;
+ break;
+
+ default:
+ {
+ eXLS = XLINE_DASH;
+
+ if ( nPos != LISTBOX_ENTRY_NOTFOUND &&
+ SfxObjectShell::Current() &&
+ SfxObjectShell::Current()->GetItem( SID_DASH_LIST ) )
+ {
+ // LineDashItem wird nur geschickt, wenn es auch einen Dash besitzt.
+ // Notify k"ummert sich darum!
+ SvxDashListItem aItem( *(const SvxDashListItem*)(
+ SfxObjectShell::Current()->GetItem( SID_DASH_LIST ) ) );
+ XLineDashItem aLineDashItem( GetSelectEntry(),
+ aItem.GetDashList()->GetDash( nPos - 2 )->GetDash() );
+
+ Any a;
+ Sequence< PropertyValue > aArgs( 1 );
+ aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "LineDash" ));
+ aLineDashItem.QueryValue ( a );
+ aArgs[0].Value = a;
+ SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:LineDash" )),
+ aArgs );
+// pDisp->Execute( SID_ATTR_LINE_DASH, SFX_CALLMODE_RECORD, &aLineDashItem, 0L );
+ }
+ }
+ break;
+ }
+
+ XLineStyleItem aLineStyleItem( eXLS );
+ Any a;
+ Sequence< PropertyValue > aArgs( 1 );
+ aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "XLineStyle" ));
+ aLineStyleItem.QueryValue ( a );
+ aArgs[0].Value = a;
+ SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:XLineStyle" )),
+ aArgs );
+// pDisp->Execute( SID_ATTR_LINE_STYLE, SFX_CALLMODE_RECORD, &aLineStyleItem, 0L );
+
+ nCurPos = GetSelectEntryPos();
+ ReleaseFocus_Impl();
+ }
+}
+
+// -----------------------------------------------------------------------
+
+long SvxLineBox::PreNotify( NotifyEvent& rNEvt )
+{
+ USHORT nType = rNEvt.GetType();
+
+ switch(nType)
+ {
+ case EVENT_MOUSEBUTTONDOWN:
+ case EVENT_GETFOCUS:
+ nCurPos = GetSelectEntryPos();
+ break;
+ case EVENT_LOSEFOCUS:
+ SelectEntryPos(nCurPos);
+ break;
+ case EVENT_KEYINPUT:
+ {
+ const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
+ if( pKEvt->GetKeyCode().GetCode() == KEY_TAB)
+ {
+ bRelease = FALSE;
+ Select();
+ }
+ }
+ break;
+ }
+ return LineLB::PreNotify( rNEvt );
+}
+
+// -----------------------------------------------------------------------
+
+long SvxLineBox::Notify( NotifyEvent& rNEvt )
+{
+ long nHandled = LineLB::Notify( rNEvt );
+
+ if ( rNEvt.GetType() == EVENT_KEYINPUT )
+ {
+ const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
+
+ switch ( pKEvt->GetKeyCode().GetCode() )
+ {
+ case KEY_RETURN:
+ Select();
+ nHandled = 1;
+ break;
+
+ case KEY_ESCAPE:
+ SelectEntryPos( nCurPos );
+ ReleaseFocus_Impl();
+ nHandled = 1;
+ break;
+ }
+ }
+ return nHandled;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxLineBox::ReleaseFocus_Impl()
+{
+ if(!bRelease)
+ {
+ bRelease = TRUE;
+ return;
+ }
+
+ if( SfxViewShell::Current() )
+ {
+ Window* pShellWnd = SfxViewShell::Current()->GetWindow();
+
+ if ( pShellWnd )
+ pShellWnd->GrabFocus();
+ }
+}
+/* -----------------------------08.03.2002 15:39------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SvxLineBox::DataChanged( const DataChangedEvent& rDCEvt )
+{
+ if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
+ (rDCEvt.GetFlags() & SETTINGS_STYLE) )
+ {
+ SetSizePixel(LogicToPixel(aLogicalSize, MAP_APPFONT));
+ Size aDropSize( aLogicalSize.Width(), LOGICAL_EDIT_HEIGHT);
+ SetDropDownSizePixel(LogicToPixel(aDropSize, MAP_APPFONT));
+ }
+
+ LineLB::DataChanged( rDCEvt );
+
+ if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
+ (rDCEvt.GetFlags() & SETTINGS_STYLE) )
+ {
+ BmpColorMode eMode = GetSettings().GetStyleSettings().GetHighContrastMode() ? BMP_COLOR_HIGHCONTRAST : BMP_COLOR_NORMAL;
+ if( eMode != meBmpMode )
+ {
+ meBmpMode = eMode;
+ FillControl();
+ }
+ }
+}
+
+void SvxLineBox::FillControl()
+{
+ FillStyles();
+ if ( !mpSh )
+ mpSh = SfxObjectShell::Current();
+
+ if( mpSh )
+ {
+ const SvxDashListItem* pItem = (const SvxDashListItem*)( mpSh->GetItem( SID_DASH_LIST ) );
+ if ( pItem )
+ Fill( pItem->GetDashList() );
+ }
+
+
+// rBindings.Invalidate( SID_ATTR_LINE_DASH );
+}
+//========================================================================
+// SvxColorBox
+//========================================================================
+
+SvxColorBox::SvxColorBox(
+ Window* pParent,
+ const ::rtl::OUString& rCommand,
+ const Reference< XFrame >& rFrame,
+ WinBits nBits ) :
+ ColorLB( pParent, nBits ),
+ nCurPos ( 0 ),
+ aLogicalSize(45,80),
+ bRelease ( TRUE ),
+ maCommand ( rCommand ),
+ mxFrame ( rFrame )
+{
+ SetSizePixel( LogicToPixel( aLogicalSize , MAP_APPFONT));
+ Show();
+
+ SfxObjectShell* pSh = SfxObjectShell::Current();
+
+ if ( pSh )
+ {
+ const SvxColorTableItem* pItem =
+ (const SvxColorTableItem*)( pSh->GetItem( SID_COLOR_TABLE ) );
+ if(pItem)
+ Fill( pItem->GetColorTable() );
+ }
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxColorBox, DelayHdl_Impl, Timer *, EMPTYARG )
+{
+ SfxObjectShell* pSh = SfxObjectShell::Current();
+
+ if ( pSh )
+ {
+ const SvxColorTableItem* pItem = (const SvxColorTableItem*)( pSh->GetItem( SID_COLOR_TABLE ) );
+ if ( pItem )
+ Fill( pItem->GetColorTable() );
+// rBindings.Invalidate( nId );
+ }
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+SvxColorBox::~SvxColorBox()
+{
+}
+
+// -----------------------------------------------------------------------
+
+void SvxColorBox::Update( const XLineColorItem* pItem )
+{
+ if ( pItem )
+ SelectEntry( pItem->GetColorValue() );
+ else
+ SetNoSelection();
+}
+
+// -----------------------------------------------------------------------
+
+void SvxColorBox::Select()
+{
+ // OJ: base class call needed here because otherwise no event is send for accessibility
+ ColorLB::Select();
+ if ( !IsTravelSelect() )
+ {
+ XLineColorItem aLineColorItem( GetSelectEntry(), GetSelectEntryColor() );
+
+ INetURLObject aObj( maCommand );
+
+ Any a;
+ Sequence< PropertyValue > aArgs( 1 );
+ aArgs[0].Name = aObj.GetURLPath();
+ aLineColorItem.QueryValue( a );
+ aArgs[0].Value = a;
+ SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
+ maCommand,
+ aArgs );
+// rBindings.GetDispatcher()->Execute( nId, SFX_CALLMODE_RECORD, &aLineColorItem, 0L );
+
+ nCurPos = GetSelectEntryPos();
+ ReleaseFocus_Impl();
+ }
+}
+
+// -----------------------------------------------------------------------
+
+long SvxColorBox::PreNotify( NotifyEvent& rNEvt )
+{
+ USHORT nType = rNEvt.GetType();
+
+ switch(nType)
+ {
+ case EVENT_MOUSEBUTTONDOWN:
+ case EVENT_GETFOCUS:
+ nCurPos = GetSelectEntryPos();
+ break;
+ case EVENT_LOSEFOCUS:
+ SelectEntryPos(nCurPos);
+ break;
+ case EVENT_KEYINPUT:
+ {
+ const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
+
+ if( pKEvt->GetKeyCode().GetCode() == KEY_TAB)
+ {
+ bRelease = FALSE;
+ Select();
+ }
+ }
+ }
+
+ return ColorLB::PreNotify( rNEvt );
+}
+
+// -----------------------------------------------------------------------
+
+long SvxColorBox::Notify( NotifyEvent& rNEvt )
+{
+ long nHandled = ColorLB::Notify( rNEvt );
+
+ if ( rNEvt.GetType() == EVENT_KEYINPUT )
+ {
+ const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
+
+ switch ( pKEvt->GetKeyCode().GetCode() )
+ {
+ case KEY_RETURN:
+ Select();
+ nHandled = 1;
+ break;
+
+ case KEY_ESCAPE:
+ SelectEntryPos( nCurPos );
+ ReleaseFocus_Impl();
+ nHandled = 1;
+ break;
+ }
+ }
+ return nHandled;
+}
+/* -----------------------------08.03.2002 15:35------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SvxColorBox::DataChanged( const DataChangedEvent& rDCEvt )
+{
+ if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
+ (rDCEvt.GetFlags() & SETTINGS_STYLE) )
+ {
+ SetSizePixel(LogicToPixel(aLogicalSize, MAP_APPFONT));
+ Size aDropSize( aLogicalSize.Width(), LOGICAL_EDIT_HEIGHT);
+ SetDropDownSizePixel(LogicToPixel(aDropSize, MAP_APPFONT));
+ }
+
+ ColorLB::DataChanged( rDCEvt );
+}
+// -----------------------------------------------------------------------
+
+void SvxColorBox::ReleaseFocus_Impl()
+{
+ if(!bRelease)
+ {
+ bRelease = TRUE;
+ return;
+ }
+
+ if( SfxViewShell::Current() )
+ {
+ Window* pShellWnd = SfxViewShell::Current()->GetWindow();
+
+ if ( pShellWnd )
+ pShellWnd->GrabFocus();
+ }
+}
+
+//========================================================================
+// SvxMetricField
+//========================================================================
+
+SvxMetricField::SvxMetricField(
+ Window* pParent, const Reference< XFrame >& rFrame, WinBits nBits ) :
+ MetricField( pParent, nBits ),
+ aCurTxt( String() ),
+ mxFrame( rFrame )
+{
+ Size aSize = Size(GetTextWidth( String::CreateFromAscii("99,99mm") ),GetTextHeight());
+ aSize.Width() += 20;
+ aSize.Height() += 6;
+ SetSizePixel( aSize );
+ aLogicalSize = PixelToLogic(aSize, MAP_APPFONT);
+ SetUnit( FUNIT_MM );
+ SetDecimalDigits( 2 );
+ SetMax( 5000 );
+ SetMin( 0 );
+ SetLast( 5000 );
+ SetFirst( 0 );
+
+ eDlgUnit = SfxModule::GetCurrentFieldUnit();
+ SetFieldUnit( *this, eDlgUnit, FALSE );
+ Show();
+}
+
+// -----------------------------------------------------------------------
+
+SvxMetricField::~SvxMetricField()
+{
+}
+
+// -----------------------------------------------------------------------
+
+void SvxMetricField::Update( const XLineWidthItem* pItem )
+{
+ if ( pItem )
+ {
+ if ( pItem->GetValue() != GetCoreValue( *this, ePoolUnit ) )
+ SetMetricValue( *this, pItem->GetValue(), ePoolUnit );
+ }
+ else
+ SetText( String() );
+}
+
+// -----------------------------------------------------------------------
+
+void SvxMetricField::Modify()
+{
+ MetricField::Modify();
+ long nTmp = GetCoreValue( *this, ePoolUnit );
+ XLineWidthItem aLineWidthItem( nTmp );
+
+ Any a;
+ Sequence< PropertyValue > aArgs( 1 );
+ aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "LineWidth" ));
+ aLineWidthItem.QueryValue( a );
+ aArgs[0].Value = a;
+ SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:LineWidth" )),
+ aArgs );
+// rBindings.GetDispatcher()->Execute( SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aLineWidthItem, 0L );
+}
+
+// -----------------------------------------------------------------------
+
+void SvxMetricField::ReleaseFocus_Impl()
+{
+ if( SfxViewShell::Current() )
+ {
+ Window* pShellWnd = SfxViewShell::Current()->GetWindow();
+ if ( pShellWnd )
+ pShellWnd->GrabFocus();
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void SvxMetricField::Down()
+{
+ sal_Int64 nValue = GetValue();
+ nValue -= GetSpinSize();
+
+ // Um unter OS/2 einen Sprung auf Max zu verhindern
+ if ( nValue >= GetMin() )
+ MetricField::Down();
+}
+
+// -----------------------------------------------------------------------
+
+void SvxMetricField::Up()
+{
+ MetricField::Up();
+}
+
+// -----------------------------------------------------------------------
+
+void SvxMetricField::SetCoreUnit( SfxMapUnit eUnit )
+{
+ ePoolUnit = eUnit;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxMetricField::RefreshDlgUnit()
+{
+ FieldUnit eTmpUnit = SfxModule::GetCurrentFieldUnit();
+ if ( eDlgUnit != eTmpUnit )
+ {
+ eDlgUnit = eTmpUnit;
+ SetFieldUnit( *this, eDlgUnit, FALSE );
+ }
+}
+
+// -----------------------------------------------------------------------
+
+long SvxMetricField::PreNotify( NotifyEvent& rNEvt )
+{
+ USHORT nType = rNEvt.GetType();
+
+ if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType )
+ aCurTxt = GetText();
+
+ return MetricField::PreNotify( rNEvt );
+}
+
+// -----------------------------------------------------------------------
+
+long SvxMetricField::Notify( NotifyEvent& rNEvt )
+{
+ long nHandled = MetricField::Notify( rNEvt );
+
+ if ( rNEvt.GetType() == EVENT_KEYINPUT )
+ {
+ const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
+ const KeyCode& rKey = pKEvt->GetKeyCode();
+ SfxViewShell* pSh = SfxViewShell::Current();
+
+ if ( rKey.GetModifier() && rKey.GetGroup() != KEYGROUP_CURSOR && pSh )
+ pSh->KeyInput( *pKEvt );
+ else
+ {
+ FASTBOOL bHandled = FALSE;
+
+ switch ( rKey.GetCode() )
+ {
+ case KEY_RETURN:
+ Reformat();
+ bHandled = TRUE;
+ break;
+
+ case KEY_ESCAPE:
+ SetText( aCurTxt );
+ bHandled = TRUE;
+ break;
+ }
+
+ if ( bHandled )
+ {
+ nHandled = 1;
+ Modify();
+ ReleaseFocus_Impl();
+ }
+ }
+ }
+ return nHandled;
+}
+/* -----------------------------08.03.2002 15:32------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SvxMetricField::DataChanged( const DataChangedEvent& rDCEvt )
+{
+ if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
+ (rDCEvt.GetFlags() & SETTINGS_STYLE) )
+ {
+ SetSizePixel(LogicToPixel(aLogicalSize, MAP_APPFONT));
+ }
+
+ MetricField::DataChanged( rDCEvt );
+}
+
+//========================================================================
+// SvxFillTypeBox
+//========================================================================
+
+SvxFillTypeBox::SvxFillTypeBox( Window* pParent, WinBits nBits ) :
+ FillTypeLB( pParent, nBits | WB_TABSTOP ),
+ nCurPos ( 0 ),
+ bSelect ( FALSE ),
+ bRelease(TRUE)
+{
+ SetSizePixel( LogicToPixel( Size(40, 40 ),MAP_APPFONT ));
+ Fill();
+ SelectEntryPos( XFILL_SOLID );
+ Show();
+}
+
+// -----------------------------------------------------------------------
+
+SvxFillTypeBox::~SvxFillTypeBox()
+{
+}
+
+// -----------------------------------------------------------------------
+
+long SvxFillTypeBox::PreNotify( NotifyEvent& rNEvt )
+{
+ USHORT nType = rNEvt.GetType();
+
+ if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType )
+ nCurPos = GetSelectEntryPos();
+ else if ( EVENT_LOSEFOCUS == nType
+ && Application::GetFocusWindow()
+ && !IsWindowOrChild( Application::GetFocusWindow(), TRUE ) )
+ {
+ if ( !bSelect )
+ SelectEntryPos( nCurPos );
+ else
+ bSelect = FALSE;
+ }
+
+ return FillTypeLB::PreNotify( rNEvt );
+}
+
+// -----------------------------------------------------------------------
+
+long SvxFillTypeBox::Notify( NotifyEvent& rNEvt )
+{
+ long nHandled = FillTypeLB::Notify( rNEvt );
+
+ if ( rNEvt.GetType() == EVENT_KEYINPUT )
+ {
+ const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
+ switch ( pKEvt->GetKeyCode().GetCode() )
+ {
+ case KEY_RETURN:
+ nHandled = 1;
+ ( (Link&)GetSelectHdl() ).Call( this );
+ break;
+ case KEY_TAB:
+ bRelease = FALSE;
+ ( (Link&)GetSelectHdl() ).Call( this );
+ bRelease = TRUE;
+ break;
+
+ case KEY_ESCAPE:
+ SelectEntryPos( nCurPos );
+ ReleaseFocus_Impl();
+ nHandled = 1;
+ break;
+ }
+ }
+ return nHandled;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxFillTypeBox::ReleaseFocus_Impl()
+{
+ if( SfxViewShell::Current() )
+ {
+ Window* pShellWnd = SfxViewShell::Current()->GetWindow();
+
+ if ( pShellWnd )
+ pShellWnd->GrabFocus();
+ }
+}
+
+//========================================================================
+// SvxFillAttrBox
+//========================================================================
+
+SvxFillAttrBox::SvxFillAttrBox( Window* pParent, WinBits nBits ) :
+
+ FillAttrLB( pParent, nBits | WB_TABSTOP ),
+
+ nCurPos( 0 ),
+ bRelease( TRUE )
+
+{
+ SetPosPixel( Point( 90, 0 ) );
+ SetSizePixel( LogicToPixel( Size(50, 80 ), MAP_APPFONT ));
+ Show();
+}
+
+// -----------------------------------------------------------------------
+
+SvxFillAttrBox::~SvxFillAttrBox()
+{
+}
+
+// -----------------------------------------------------------------------
+
+long SvxFillAttrBox::PreNotify( NotifyEvent& rNEvt )
+{
+ USHORT nType = rNEvt.GetType();
+
+ if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType )
+ nCurPos = GetSelectEntryPos();
+
+ return FillAttrLB::PreNotify( rNEvt );
+}
+
+// -----------------------------------------------------------------------
+
+long SvxFillAttrBox::Notify( NotifyEvent& rNEvt )
+{
+ long nHandled = FillAttrLB::Notify( rNEvt );
+
+ if ( rNEvt.GetType() == EVENT_KEYINPUT )
+ {
+ const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
+
+ switch ( pKEvt->GetKeyCode().GetCode() )
+ {
+ case KEY_RETURN:
+ ( (Link&)GetSelectHdl() ).Call( this );
+ nHandled = 1;
+ break;
+ case KEY_TAB:
+ bRelease = FALSE;
+ GetSelectHdl().Call( this );
+ bRelease = TRUE;
+ break;
+ case KEY_ESCAPE:
+ SelectEntryPos( nCurPos );
+ ReleaseFocus_Impl();
+ nHandled = 1;
+ break;
+ }
+ }
+ return nHandled;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxFillAttrBox::Select()
+{
+ FillAttrLB::Select();
+}
+
+// -----------------------------------------------------------------------
+
+void SvxFillAttrBox::ReleaseFocus_Impl()
+{
+ if( SfxViewShell::Current() )
+ {
+ Window* pShellWnd = SfxViewShell::Current()->GetWindow();
+
+ if ( pShellWnd )
+ pShellWnd->GrabFocus();
+ }
+}