summaryrefslogtreecommitdiff
path: root/svx/source/cui/iconcdlg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/cui/iconcdlg.cxx')
-rw-r--r--svx/source/cui/iconcdlg.cxx1445
1 files changed, 0 insertions, 1445 deletions
diff --git a/svx/source/cui/iconcdlg.cxx b/svx/source/cui/iconcdlg.cxx
deleted file mode 100644
index 7bd9843fb2..0000000000
--- a/svx/source/cui/iconcdlg.cxx
+++ /dev/null
@@ -1,1445 +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: iconcdlg.cxx,v $
- * $Revision: 1.24 $
- *
- * 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"
-
-#ifdef SVX_DLLIMPLEMENTATION
-#undef SVX_DLLIMPLEMENTATION
-#endif
-#include <sfx2/app.hxx>
-#include <tools/rc.h>
-#include <tools/shl.hxx>
-
-#define _SVSTDARR_USHORTS
-#include <svtools/svstdarr.hxx>
-#include <svx/dialmgr.hxx>
-
-#include "iconcdlg.hxx"
-
-#ifndef _SVX_HELPID_HRC
-#include "helpid.hrc"
-#endif
-#ifndef _SVX_DIALOGS_HRC
-#include <svx/dialogs.hrc>
-#endif
-#include <svtools/viewoptions.hxx>
-#include <svtools/apearcfg.hxx>
-#include <vcl/mnemonic.hxx>
-#include <vcl/i18nhelp.hxx>
-
-#ifdef WNT
-int __cdecl IconcDlgCmpUS_Impl( const void* p1, const void* p2 )
-#else
-#if defined(OS2) && defined(ICC)
-int _Optlink IconcDlgCmpUS_Impl( const void* p1, const void* p2 )
-#else
-int IconcDlgCmpUS_Impl( const void* p1, const void* p2 )
-#endif
-#endif
-{
- return *(USHORT*)p1 - *(USHORT*)p2;
-}
-
-// some stuff for easier changes for SvtViewOptions
-static const sal_Char* pViewOptDataName = "dialog data";
-#define VIEWOPT_DATANAME ::rtl::OUString::createFromAscii( pViewOptDataName )
-
-static inline void SetViewOptUserItem( SvtViewOptions& rOpt, const String& rData )
-{
- rOpt.SetUserItem( VIEWOPT_DATANAME, ::com::sun::star::uno::makeAny( ::rtl::OUString( rData ) ) );
-}
-
-static inline String GetViewOptUserItem( const SvtViewOptions& rOpt )
-{
- ::com::sun::star::uno::Any aAny( rOpt.GetUserItem( VIEWOPT_DATANAME ) );
- ::rtl::OUString aUserData;
- aAny >>= aUserData;
-
- return String( aUserData );
-}
-
-
-//#####################################################################
-//
-// Class IconChoicePage
-//
-//#####################################################################
-
-/**********************************************************************
-|
-| Ctor / Dtor
-|
-\**********************************************************************/
-
-IconChoicePage::IconChoicePage( Window *pParent, const ResId &rResId,
- const SfxItemSet &rAttrSet )
-: TabPage ( pParent, rResId ),
- pSet ( &rAttrSet ),
- bHasExchangeSupport ( FALSE ),
- pDialog ( NULL ),
- bStandard ( FALSE )
-{
- SetStyle ( GetStyle() | WB_DIALOGCONTROL | WB_HIDE );
-}
-
-// -----------------------------------------------------------------------
-
-IconChoicePage::~IconChoicePage()
-{
-}
-
-/**********************************************************************
-|
-| Activate / Deaktivate
-|
-\**********************************************************************/
-
-void IconChoicePage::ActivatePage( const SfxItemSet& )
-{
-}
-
-// -----------------------------------------------------------------------
-
-int IconChoicePage::DeactivatePage( SfxItemSet* )
-{
- return LEAVE_PAGE;
-}
-
-/**********************************************************************
-|
-| ...
-|
-\**********************************************************************/
-
-void IconChoicePage::FillUserData()
-{
-}
-
-// -----------------------------------------------------------------------
-
-BOOL IconChoicePage::IsReadOnly() const
-{
- return FALSE;
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool IconChoicePage::QueryClose()
-{
- return sal_True;
-}
-
-/**********************************************************************
-|
-| handling itemsets
-|
-\**********************************************************************/
-
-const SfxPoolItem* IconChoicePage::GetItem( const SfxItemSet& rSet,
- USHORT nSlot )
-{
- const SfxItemPool* pPool = rSet.GetPool();
- USHORT nWh = pPool->GetWhich( nSlot );
- const SfxPoolItem* pItem = 0;
- rSet.GetItemState( nWh, TRUE, &pItem );
-
- if ( !pItem && nWh != nSlot )
- pItem = &pPool->GetDefaultItem( nWh );
-
- return pItem;
-}
-
-// -----------------------------------------------------------------------
-
-const SfxPoolItem* IconChoicePage::GetOldItem( const SfxItemSet& rSet,
- USHORT nSlot )
-{
- const SfxItemSet& rOldSet = GetItemSet();
- USHORT nWh = GetWhich( nSlot );
- const SfxPoolItem* pItem = 0;
-
- if ( bStandard && rOldSet.GetParent() )
- pItem = GetItem( *rOldSet.GetParent(), nSlot );
- else if ( rSet.GetParent() && SFX_ITEM_DONTCARE == rSet.GetItemState( nWh ) )
- pItem = GetItem( *rSet.GetParent(), nSlot );
- else
- pItem = GetItem( rOldSet, nSlot );
-
- return pItem;
-}
-
-// -----------------------------------------------------------------------
-
-const SfxPoolItem* IconChoicePage::GetExchangeItem( const SfxItemSet& rSet,
- USHORT nSlot )
-{
- if ( pDialog && !pDialog->IsInOK() && pDialog->GetExampleSet() )
- return GetItem( *pDialog->GetExampleSet(), nSlot );
- else
- return GetOldItem( rSet, nSlot );
-}
-
-/**********************************************************************
-|
-| window-methods
-|
-\**********************************************************************/
-
-void IconChoicePage::ImplInitSettings()
-{
- Window* pParent = GetParent();
- if ( pParent->IsChildTransparentModeEnabled() && !IsControlBackground() )
- {
- EnableChildTransparentMode( TRUE );
- SetParentClipMode( PARENTCLIPMODE_NOCLIP );
- SetPaintTransparent( TRUE );
- SetBackground();
- }
- else
- {
- EnableChildTransparentMode( FALSE );
- SetParentClipMode( 0 );
- SetPaintTransparent( FALSE );
-
- if ( IsControlBackground() )
- SetBackground( GetControlBackground() );
- else
- SetBackground( pParent->GetBackground() );
- }
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoicePage::StateChanged( StateChangedType nType )
-{
- Window::StateChanged( nType );
-
- if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
- {
- ImplInitSettings();
- Invalidate();
- }
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoicePage::DataChanged( const DataChangedEvent& rDCEvt )
-{
- Window::DataChanged( rDCEvt );
-
- if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
- (rDCEvt.GetFlags() & SETTINGS_STYLE) )
- {
- ImplInitSettings();
- Invalidate();
- }
-}
-
-//#####################################################################
-//
-// Class IconChoiceDialog
-//
-//#####################################################################
-
-/**********************************************************************
-|
-| Ctor / Dtor
-|
-\**********************************************************************/
-
-IconChoiceDialog::IconChoiceDialog ( Window* pParent, const ResId &rResId,
- const EIconChoicePos ePos,
- const SfxItemSet *pItemSet )//, BOOL bEditFmt, const String *pUserButtonText = 0 )
-: ModalDialog ( pParent, rResId ),
- meChoicePos ( ePos ),
- maIconCtrl ( this, WB_3DLOOK | WB_ICON | WB_BORDER |
- WB_NOCOLUMNHEADER | WB_HIGHLIGHTFRAME |
- /* WB_NOSELECTION | */ WB_NODRAGSELECTION | WB_TABSTOP ),
- mnCurrentPageId ( USHRT_MAX ),
-
- aOKBtn ( this, WB_DEFBUTTON ),
- aCancelBtn ( this, WB_DEFBUTTON ),
- aHelpBtn ( this ),
- aResetBtn ( this ),
- pSet ( pItemSet ),
- pOutSet ( NULL ),
- pExampleSet ( NULL ),
- pRanges ( NULL ),
- nResId ( rResId.GetId() ),
-
- bHideResetBtn ( FALSE ),
- bModal ( FALSE ),
- bInOK ( FALSE ),
- bModified ( FALSE ),
- bItemsReset ( FALSE )
-{
- // IconChoiceCtrl-Settings
- //maIconCtrl.SetBackground ( Wallpaper( Color (146, 146, 186) ) );
-
- maIconCtrl.SetStyle (WB_3DLOOK | WB_ICON | WB_BORDER | WB_NOCOLUMNHEADER | WB_HIGHLIGHTFRAME | /* WB_NOSELECTION | */ WB_NODRAGSELECTION | WB_TABSTOP | WB_CLIPCHILDREN );
- SetCtrlPos ( meChoicePos );
- maIconCtrl.SetClickHdl ( LINK ( this, IconChoiceDialog , ChosePageHdl_Impl ) );
- maIconCtrl.Show();
- maIconCtrl.SetChoiceWithCursor ( TRUE );
- maIconCtrl.SetSelectionMode( SINGLE_SELECTION );
- maIconCtrl.SetHelpId( HID_ICCDIALOG_CHOICECTRL );
-
- // ItemSet
- if ( pSet )
- {
- pExampleSet = new SfxItemSet( *pSet );
- pOutSet = new SfxItemSet( *pSet->GetPool(), pSet->GetRanges() );
- }
-
- // Buttons
- aOKBtn.SetClickHdl ( LINK( this, IconChoiceDialog, OkHdl ) );
- aOKBtn.SetHelpId( HID_ICCDIALOG_OK_BTN );
- aCancelBtn.SetHelpId( HID_ICCDIALOG_CANCEL_BTN );
- aResetBtn.SetClickHdl( LINK( this, IconChoiceDialog, ResetHdl ) );
- aResetBtn.SetText( SVX_RESSTR(RID_SVXSTR_ICONCHOICEDLG_RESETBUT) );
- aResetBtn.SetHelpId( HID_ICCDIALOG_RESET_BTN );
- aOKBtn.Show();
- aCancelBtn.Show();
- aHelpBtn.Show();
- aResetBtn.Show();
-
- SetPosSizeCtrls ( TRUE );
-}
-
-// -----------------------------------------------------------------------
-
-/*
-IconChoiceDialog ::IconChoiceDialog ( SfxViewFrame *pViewFrame, Window* pParent, const ResId &rResId,
- const SfxItemSet * = 0, BOOL bEditFmt = FALSE,
- const String *pUserButtonText = 0 )
-: meChoicePos ( PosLeft ), // Default erst ma Links
- maIconCtrl ( this, Die_Winbits ),
- aOKBtn ( this ),
- pUserBtn ( pUserButtonText? new PushButton(this): 0 ),
- aCancelBtn ( this ),
- aHelpBtn ( this ),
- aResetBtn ( this ),
- aBaseFmtBtn ( this ),
- mnCurrentPageId ( 0 )
-{
- FreeResource();
-}
-*/
-
-// -----------------------------------------------------------------------
-
-IconChoiceDialog ::~IconChoiceDialog ()
-{
- ULONG i;
-
- // save configuration at INI-Manager
- // and remove pages
- SvtViewOptions aTabDlgOpt( E_TABDIALOG, String::CreateFromInt32( nResId ) );
- aTabDlgOpt.SetWindowState( ::rtl::OUString::createFromAscii( GetWindowState((WINDOWSTATE_MASK_X | WINDOWSTATE_MASK_Y | WINDOWSTATE_MASK_STATE | WINDOWSTATE_MASK_MINIMIZED)).GetBuffer() ) );
- aTabDlgOpt.SetPageID( mnCurrentPageId );
-
- const ULONG nCount = maPageList.Count();
-
- for ( i = 0; i < nCount; ++i )
- {
- IconChoicePageData* pData = maPageList.GetObject(i);
-
- if ( pData->pPage )
- {
- pData->pPage->FillUserData();
- String aPageData(pData->pPage->GetUserData());
- if ( aPageData.Len() )
- {
- SvtViewOptions aTabPageOpt( E_TABPAGE, String::CreateFromInt32( pData->nId ) );
-
- SetViewOptUserItem( aTabPageOpt, aPageData );
- }
-
- if ( pData->bOnDemand )
- delete (SfxItemSet*)&pData->pPage->GetItemSet();
- delete pData->pPage;
- }
- delete pData;
- }
-
- // remove Pagelist
-/* for ( i=0; i<maPageList.Count(); i++ )
- {
- IconChoicePageData* pData = (IconChoicePageData*)maPageList.GetObject ( i );
-
- if ( pData->bOnDemand )
- delete ( SfxItemSet * )&( pData->pPage->GetItemSet() );
-
- delete pData->pPage;
- delete pData;
- }*/
-
- // remove Userdata from Icons
- for ( i=0; i<maIconCtrl.GetEntryCount(); i++)
- {
- SvxIconChoiceCtrlEntry* pEntry = maIconCtrl.GetEntry ( i );
- USHORT* pUserData = (USHORT*) pEntry->GetUserData();
- delete pUserData;
- }
-
- //
- if ( pRanges )
- delete pRanges;
- if ( pOutSet )
- delete pOutSet;
-}
-
-/**********************************************************************
-|
-| add new page
-|
-\**********************************************************************/
-
-SvxIconChoiceCtrlEntry* IconChoiceDialog::AddTabPage( USHORT nId, const String& rIconText,
- const Image& rChoiceIcon,
- CreatePage pCreateFunc /* != 0 */,
- GetPageRanges pRangesFunc /* darf 0 sein */,
- BOOL bItemsOnDemand, ULONG /*nPos*/ )
-{
- IconChoicePageData* pData = new IconChoicePageData ( nId, pCreateFunc,
- pRangesFunc,
- bItemsOnDemand );
- maPageList.Insert ( pData, LIST_APPEND );
-
- pData->fnGetRanges = pRangesFunc;
- pData->bOnDemand = bItemsOnDemand;
-
- USHORT *pId = new USHORT ( nId );
- SvxIconChoiceCtrlEntry* pEntry = maIconCtrl.InsertEntry( rIconText, rChoiceIcon );
- pEntry->SetUserData ( (void*) pId );
- return pEntry;
-}
-
-SvxIconChoiceCtrlEntry* IconChoiceDialog::AddTabPage( USHORT nId, const String& rIconText,
- const Image& rChoiceIcon,
- const Image& rChoiceIconHC,
- CreatePage pCreateFunc /* != 0 */,
- GetPageRanges pRangesFunc /* darf 0 sein */,
- BOOL bItemsOnDemand, ULONG /*nPos*/ )
-{
- IconChoicePageData* pData = new IconChoicePageData ( nId, pCreateFunc,
- pRangesFunc,
- bItemsOnDemand );
- maPageList.Insert ( pData, LIST_APPEND );
-
- pData->fnGetRanges = pRangesFunc;
- pData->bOnDemand = bItemsOnDemand;
-
- USHORT *pId = new USHORT ( nId );
- SvxIconChoiceCtrlEntry* pEntry = maIconCtrl.InsertEntry( rIconText, rChoiceIcon, rChoiceIconHC );
- pEntry->SetUserData ( (void*) pId );
- return pEntry;
-}
-
-/**********************************************************************
-|
-| remove page
-|
-\**********************************************************************/
-
-void IconChoiceDialog::RemoveTabPage( USHORT nId )
-{
- IconChoicePageData* pData = GetPageData ( nId );
-
- // remove page from list
- if ( pData )
- {
- maPageList.Remove ( pData );
-
- // save settings
- if ( pData->pPage )
- {
- pData->pPage->FillUserData();
- String aPageData(pData->pPage->GetUserData());
- if ( aPageData.Len() )
- {
- SvtViewOptions aTabPageOpt( E_TABPAGE, String::CreateFromInt32( pData->nId ) );
-
- SetViewOptUserItem( aTabPageOpt, aPageData );
- }
- }
-
- if ( pData->bOnDemand )
- delete ( SfxItemSet * )&( pData->pPage->GetItemSet() );
-
- delete pData->pPage;
- delete pData;
- }
-
- // remove Icon
- BOOL bFound=FALSE;
- for ( ULONG i=0; i<maIconCtrl.GetEntryCount() && !bFound; i++)
- {
- SvxIconChoiceCtrlEntry* pEntry = maIconCtrl.GetEntry ( i );
- USHORT* pUserData = (USHORT*) pEntry->GetUserData();
-
- if ( *pUserData == nId )
- {
- delete pUserData;
- maIconCtrl.RemoveEntry ( pEntry );
- bFound = TRUE;
- }
- }
-
- // was it the current page ?
- if ( nId == mnCurrentPageId )
- {
- mnCurrentPageId = maPageList.First()->nId;
- }
-
- Invalidate ();
-}
-
-/**********************************************************************
-|
-| Paint-method
-|
-\**********************************************************************/
-
-void IconChoiceDialog::Paint( const Rectangle& rRect )
-{
- Dialog::Paint ( rRect );
-
- for ( ULONG i=0; i<maPageList.Count(); i++ )
- {
- IconChoicePageData* pData = (IconChoicePageData*)maPageList.GetObject ( i );
-
- if ( pData->nId == mnCurrentPageId )
- {
- ShowPageImpl ( pData );
- }
- else
- {
- HidePageImpl ( pData );
- }
- }
-}
-
-EIconChoicePos IconChoiceDialog::SetCtrlPos( const EIconChoicePos& rPos )
-{
- WinBits aWinBits = maIconCtrl.GetStyle ();
-
- switch ( meChoicePos )
- {
- case PosLeft :
- aWinBits &= ~WB_ALIGN_TOP & ~WB_NOVSCROLL;
- aWinBits |= WB_ALIGN_LEFT | WB_NOHSCROLL;
- break;
- case PosRight :
- aWinBits &= ~WB_ALIGN_TOP & ~WB_NOVSCROLL;
- aWinBits |= WB_ALIGN_LEFT | WB_NOHSCROLL;
- break;
- case PosTop :
- aWinBits &= ~WB_ALIGN_LEFT & ~WB_NOHSCROLL;
- aWinBits |= WB_ALIGN_TOP | WB_NOVSCROLL;
- break;
- case PosBottom :
- aWinBits &= ~WB_ALIGN_LEFT & ~WB_NOHSCROLL;
- aWinBits |= WB_ALIGN_TOP | WB_NOVSCROLL;
- break;
- };
- maIconCtrl.SetStyle ( aWinBits );
-
- SetPosSizeCtrls();
-
-
- EIconChoicePos eOldPos = meChoicePos;
- meChoicePos = rPos;
-
- return eOldPos;
-}
-
-void IconChoiceDialog::SetCtrlColor ( const Color& rColor )
-{
- Wallpaper aWallpaper ( rColor );
- maIconCtrl.SetBackground( aWallpaper );
- maIconCtrl.SetFontColorToBackground ();
-}
-
-/**********************************************************************
-|
-| Show / Hide page or button
-|
-\**********************************************************************/
-
-void IconChoiceDialog::ShowPageImpl ( IconChoicePageData* pData )
-{
- if ( pData->pPage )
- pData->pPage->Show();
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoiceDialog::HidePageImpl ( IconChoicePageData* pData )
-{
- if ( pData->pPage )
- pData->pPage->Hide();
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoiceDialog::RemoveResetButton()
-{
- aResetBtn.Hide();
- bHideResetBtn = TRUE;
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoiceDialog::ShowPage( USHORT nId )
-{
- bool bInvalidate = GetCurPageId() != nId;
- SetCurPageId( nId );
- ActivatePageImpl( );
- if(bInvalidate)
- Invalidate();
-}
-
-/**********************************************************************
-|
-| Resize Dialog
-|
-\**********************************************************************/
-
-#define ICONCTRL_WIDTH_PIXEL 110
-#define ICONCTRL_HEIGHT_PIXEL 75
-#define MINSIZE_BUTTON_WIDTH 70
-#define MINSIZE_BUTTON_HEIGHT 22
-
-void IconChoiceDialog::Resize()
-{
- Dialog::Resize ();
-
- if ( IsReallyVisible() )
- {
- SetPosSizeCtrls ();
- }
-}
-
-void IconChoiceDialog::SetPosSizeCtrls ( BOOL bInit )
-{
- const Point aCtrlOffset ( LogicToPixel( Point( CTRLS_OFFSET, CTRLS_OFFSET ), MAP_APPFONT ) );
- Size aOutSize ( GetOutputSizePixel() );
-
- ////////////////////////////////////////
- // Button-Defaults
- //
- Size aDefaultButtonSize = LogicToPixel( Size( 50, 14 ), MAP_APPFONT );
-
- // Reset-Button
- Size aResetButtonSize ( bInit ? aDefaultButtonSize :
- aResetBtn.GetSizePixel () );
-
- ////////////////////////////////////////
- // IconChoiceCtrl resizen & positionieren
- //
- SvtTabAppearanceCfg aCfg;
- const long nDefaultWidth = (aCfg.GetScaleFactor() * ICONCTRL_WIDTH_PIXEL) / 100;
- const long nDefaultHeight = (aCfg.GetScaleFactor() * ICONCTRL_HEIGHT_PIXEL) / 100;
-
- Size aNewIconCtrlSize ( nDefaultWidth,
- aOutSize.Height()-(2*aCtrlOffset.X()) );
- Point aIconCtrlPos;
- switch ( meChoicePos )
- {
- case PosLeft :
- aIconCtrlPos = aCtrlOffset;
- aNewIconCtrlSize = Size ( nDefaultWidth,
- aOutSize.Height()-(2*aCtrlOffset.X()) );
- break;
- case PosRight :
- aIconCtrlPos = Point ( aOutSize.Width() - nDefaultWidth -
- aCtrlOffset.X(), aCtrlOffset.X() );
- aNewIconCtrlSize = Size ( nDefaultWidth,
- aOutSize.Height()-(2*aCtrlOffset.X()) );
- break;
- case PosTop :
- aIconCtrlPos = aCtrlOffset;
- aNewIconCtrlSize = Size ( aOutSize.Width()-(2*aCtrlOffset.X()),
- nDefaultHeight );
- break;
- case PosBottom :
- aIconCtrlPos = Point ( aCtrlOffset.X(), aOutSize.Height() -
- aResetButtonSize.Height() - (2*aCtrlOffset.X()) -
- nDefaultHeight );
- aNewIconCtrlSize = Size ( aOutSize.Width()-(2*aCtrlOffset.X()),
- nDefaultHeight );
- break;
- };
- maIconCtrl.SetPosSizePixel ( aIconCtrlPos, aNewIconCtrlSize );
- maIconCtrl.ArrangeIcons();
-
- ////////////////////////////////////////
- // Pages resizen & positionieren
- //
- for ( ULONG i=0; i<maPageList.Count(); i++ )
- {
- IconChoicePageData* pData = (IconChoicePageData*)maPageList.GetObject ( i );
-
- Point aNewPagePos;
- Size aNewPageSize;
- switch ( meChoicePos )
- {
- case PosLeft :
- aNewPagePos = Point ( aNewIconCtrlSize.Width() + (2*CTRLS_OFFSET),
- CTRLS_OFFSET );
- aNewPageSize = Size ( aOutSize.Width() - aNewIconCtrlSize.Width() -
- (3*CTRLS_OFFSET),
- aOutSize.Height() - aOKBtn.GetSizePixel().Height() -
- (3*CTRLS_OFFSET) );
- break;
- case PosRight :
- aNewPagePos = aCtrlOffset;
- aNewPageSize = Size ( aOutSize.Width() - aNewIconCtrlSize.Width() -
- (3*aCtrlOffset.X()),
- aOutSize.Height() - aOKBtn.GetSizePixel().Height() -
- (3*aCtrlOffset.X()) );
- break;
- case PosTop :
- aNewPagePos = Point ( aCtrlOffset.X(), aNewIconCtrlSize.Height() +
- (2*aCtrlOffset.X()) );
- aNewPageSize = Size ( aOutSize.Width() - (2*aCtrlOffset.X()),
- aOutSize.Height() - aOKBtn.GetSizePixel().Height() -
- aNewIconCtrlSize.Height() - (4*aCtrlOffset.X()) );
- break;
- case PosBottom :
- aNewPagePos = aCtrlOffset;
- aNewPageSize = Size ( aOutSize.Width() - (2*aCtrlOffset.X()),
- aOutSize.Height() - aOKBtn.GetSizePixel().Height() -
- aNewIconCtrlSize.Height() - (4*aCtrlOffset.X()) );
- break;
- };
-
- if ( pData->pPage )
- pData->pPage->SetPosSizePixel ( aNewPagePos, aNewPageSize );
- }
-
- ////////////////////////////////////////
- // Buttons positionieren
- //
- ULONG nXOffset=0;
- if ( meChoicePos == PosRight )
- nXOffset = aNewIconCtrlSize.Width()+(2*aCtrlOffset.X());
-
- aResetBtn.SetPosSizePixel ( Point( aOutSize.Width() - nXOffset -
- aResetButtonSize.Width()-aCtrlOffset.X(),
- aOutSize.Height()-aResetButtonSize.Height()-
- aCtrlOffset.X() ),
- aResetButtonSize );
- // Help-Button
- Size aHelpButtonSize ( bInit ? aDefaultButtonSize :
- aHelpBtn.GetSizePixel () );
- aHelpBtn.SetPosSizePixel ( Point( aOutSize.Width()-aResetButtonSize.Width()-
- aHelpButtonSize.Width()- nXOffset -
- (2*aCtrlOffset.X()),
- aOutSize.Height()-aHelpButtonSize.Height()-
- aCtrlOffset.X() ),
- aHelpButtonSize );
- // Cancel-Button
- Size aCancelButtonSize ( bInit ? aDefaultButtonSize :
- aCancelBtn.GetSizePixel () );
- aCancelBtn.SetPosSizePixel ( Point( aOutSize.Width()-aCancelButtonSize.Width()-
- aResetButtonSize.Width()-aHelpButtonSize.Width()-
- (3*aCtrlOffset.X()) - nXOffset,
- aOutSize.Height()-aCancelButtonSize.Height()-
- aCtrlOffset.X() ),
- aCancelButtonSize );
- // OK-Button
- Size aOKButtonSize ( bInit ? aDefaultButtonSize : aOKBtn.GetSizePixel () );
- aOKBtn.SetPosSizePixel ( Point( aOutSize.Width()-aOKButtonSize.Width()-
- aCancelButtonSize.Width()-aResetButtonSize.Width()-
- aHelpButtonSize.Width()-(4*aCtrlOffset.X())- nXOffset,
- aOutSize.Height()-aOKButtonSize.Height()-aCtrlOffset.X() ),
- aOKButtonSize );
-
- Invalidate();
-}
-
-void IconChoiceDialog::SetPosSizePages ( USHORT nId )
-{
- const Point aCtrlOffset ( LogicToPixel( Point( CTRLS_OFFSET, CTRLS_OFFSET ), MAP_APPFONT ) );
- IconChoicePageData* pData = GetPageData ( nId );
-
- if ( pData->pPage )
- {
- Size aOutSize ( GetOutputSizePixel() );
- Size aIconCtrlSize ( maIconCtrl.GetSizePixel() );
-
- Point aNewPagePos;
- Size aNewPageSize;
- switch ( meChoicePos )
- {
- case PosLeft :
- aNewPagePos = Point ( aIconCtrlSize.Width() + (2*aCtrlOffset.X()),
- aCtrlOffset.X() );
- aNewPageSize = Size ( aOutSize.Width() - maIconCtrl.GetSizePixel().Width() -
- (3*aCtrlOffset.X()),
- aOutSize.Height() - aOKBtn.GetSizePixel().Height() -
- (3*aCtrlOffset.X()) );
- break;
- case PosRight :
- aNewPagePos = aCtrlOffset;
- aNewPageSize = Size ( aOutSize.Width() - maIconCtrl.GetSizePixel().Width() -
- (3*aCtrlOffset.X()),
- aOutSize.Height() - aOKBtn.GetSizePixel().Height() -
- (3*aCtrlOffset.X()) );
- break;
- case PosTop :
- aNewPagePos = Point ( aCtrlOffset.X(), aIconCtrlSize.Height() +
- (2*aCtrlOffset.X()) );
- aNewPageSize = Size ( aOutSize.Width() - (2*aCtrlOffset.X()),
- aOutSize.Height() - aOKBtn.GetSizePixel().Height() -
- maIconCtrl.GetSizePixel().Height() - (4*aCtrlOffset.X()) );
- break;
- case PosBottom :
- aNewPagePos = aCtrlOffset;
- aNewPageSize = Size ( aOutSize.Width() - (2*aCtrlOffset.X()),
- aOutSize.Height() - aOKBtn.GetSizePixel().Height() -
- maIconCtrl.GetSizePixel().Height() - (4*aCtrlOffset.X()) );
- break;
- };
-
- pData->pPage->SetPosSizePixel ( aNewPagePos, aNewPageSize );
- }
-}
-
-/**********************************************************************
-|
-| select a page
-|
-\**********************************************************************/
-
-IMPL_LINK ( IconChoiceDialog , ChosePageHdl_Impl, void *, EMPTYARG )
-{
- ULONG nPos;
-
- SvxIconChoiceCtrlEntry *pEntry = maIconCtrl.GetSelectedEntry ( nPos );
- if ( !pEntry )
- pEntry = maIconCtrl.GetCursor( );
-
- USHORT *pId = (USHORT*)pEntry->GetUserData ();
-
- if( *pId != mnCurrentPageId )
- {
- IconChoicePageData* pData = GetPageData ( mnCurrentPageId );
- if ( pData->pPage )
- DeActivatePageImpl();
-
- SetCurPageId ( *pId );
-
- ActivatePageImpl();
- Invalidate();
- }
-
- return 0L;
-}
-
-/**********************************************************************
-|
-| Button-handler
-|
-\**********************************************************************/
-
-IMPL_LINK( IconChoiceDialog, OkHdl, Button *, EMPTYARG )
-{
- bInOK = TRUE;
-
- if ( OK_Impl() )
- {
- if ( bModal )
- EndDialog( Ok() );
- else
- {
- Ok();
- Close();
- }
- }
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( IconChoiceDialog, ResetHdl, Button *, EMPTYARG )
-{
- ResetPageImpl ();
-
- IconChoicePageData* pData = GetPageData ( mnCurrentPageId );
- DBG_ASSERT( pData, "Id nicht bekannt" );
-
- if ( pData->bOnDemand )
- {
- // CSet auf AIS hat hier Probleme, daher getrennt
- const SfxItemSet* _pSet = &( pData->pPage->GetItemSet() );
- pData->pPage->Reset( *(SfxItemSet*)_pSet );
- }
- else
- pData->pPage->Reset( *pSet );
-
-
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( IconChoiceDialog, CancelHdl, Button*, EMPTYARG )
-{
- Close();
-
- return 0;
-}
-
-/**********************************************************************
-|
-| call page
-|
-\**********************************************************************/
-
-void IconChoiceDialog::ActivatePageImpl ()
-{
- DBG_ASSERT( maPageList.Count(), "keine Pages angemeldet" );
- IconChoicePageData* pData = GetPageData ( mnCurrentPageId );
- DBG_ASSERT( pData, "Id nicht bekannt" );
- if ( pData )
- {
- if ( !pData->pPage )
- {
- const SfxItemSet* pTmpSet = 0;
-
- if ( pSet )
- {
- if ( bItemsReset && pSet->GetParent() )
- pTmpSet = pSet->GetParent();
- else
- pTmpSet = pSet;
- }
-
- if ( pTmpSet && !pData->bOnDemand )
- pData->pPage = (pData->fnCreatePage)( this, *pTmpSet );
- else
- pData->pPage = (pData->fnCreatePage)( this, *CreateInputItemSet( mnCurrentPageId ) );
-
- SvtViewOptions aTabPageOpt( E_TABPAGE, String::CreateFromInt32( pData->nId ) );
- pData->pPage->SetUserData( GetViewOptUserItem( aTabPageOpt ) );
- SetPosSizePages ( pData->nId );
-
- if ( pData->bOnDemand )
- pData->pPage->Reset( (SfxItemSet &)pData->pPage->GetItemSet() );
- else
- pData->pPage->Reset( *pSet );
-
- PageCreated( mnCurrentPageId, *pData->pPage );
- }
- else if ( pData->bRefresh )
- {
- pData->pPage->Reset( *pSet );
- }
-
- pData->bRefresh = FALSE;
-
- if ( pExampleSet )
- pData->pPage->ActivatePage( *pExampleSet );
- }
-
- SetHelpId( pData->pPage->GetHelpId() );
-
- BOOL bReadOnly = pData->pPage->IsReadOnly();
- if ( bReadOnly || bHideResetBtn )
- aResetBtn.Hide();
- else
- aResetBtn.Show();
-
-}
-
-// -----------------------------------------------------------------------
-
-BOOL IconChoiceDialog::DeActivatePageImpl ()
-{
- IconChoicePageData *pData = GetPageData ( mnCurrentPageId );
-
- int nRet = IconChoicePage::LEAVE_PAGE;
-
- if ( pData )
- {
- IconChoicePage * pPage = pData->pPage;
-
- if ( !pExampleSet && pPage->HasExchangeSupport() && pSet )
- pExampleSet = new SfxItemSet( *pSet->GetPool(), pSet->GetRanges() );
-
- if ( pSet )
- {
- SfxItemSet aTmp( *pSet->GetPool(), pSet->GetRanges() );
-
- if ( pPage->HasExchangeSupport() )
- nRet = pPage->DeactivatePage( &aTmp );
-
- if ( ( IconChoicePage::LEAVE_PAGE & nRet ) == IconChoicePage::LEAVE_PAGE &&
- aTmp.Count() )
- {
- pExampleSet->Put( aTmp );
- pOutSet->Put( aTmp );
- }
- }
- else
- {
- if ( pPage->HasExchangeSupport() ) //!!!
- {
- if ( !pExampleSet )
- {
- SfxItemPool* pPool = pPage->GetItemSet().GetPool();
- pExampleSet =
- new SfxItemSet( *pPool, GetInputRanges( *pPool ) );
- }
- nRet = pPage->DeactivatePage( pExampleSet );
- }
- else
- nRet = pPage->DeactivatePage( NULL );
- }
-
- if ( nRet & IconChoicePage::REFRESH_SET )
- {
- pSet = GetRefreshedSet();
- DBG_ASSERT( pSet, "GetRefreshedSet() liefert NULL" );
- // alle Pages als neu zu initialsieren flaggen
- const ULONG nCount = maPageList.Count();
-
- for ( USHORT i = 0; i < nCount; ++i )
- {
- IconChoicePageData* pObj = (IconChoicePageData*)maPageList.GetObject(i);
-
- if ( pObj->pPage != pPage ) // eigene Page nicht mehr refreshen
- pObj->bRefresh = TRUE;
- else
- pObj->bRefresh = FALSE;
- }
- }
- }
-
- if ( nRet & IconChoicePage::LEAVE_PAGE )
- return TRUE;
- else
- return FALSE;
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoiceDialog::ResetPageImpl ()
-{
- IconChoicePageData *pData = GetPageData ( mnCurrentPageId );
-
- DBG_ASSERT( pData, "Id nicht bekannt" );
-
- if ( pData->bOnDemand )
- {
- // CSet auf AIS hat hier Probleme, daher getrennt
- const SfxItemSet* _pSet = &pData->pPage->GetItemSet();
- pData->pPage->Reset( *(SfxItemSet*)_pSet );
- }
- else
- pData->pPage->Reset( *pSet );
-}
-
-/**********************************************************************
-|
-| handling itemsets
-|
-\**********************************************************************/
-
-const USHORT* IconChoiceDialog::GetInputRanges( const SfxItemPool& rPool )
-{
- if ( pSet )
- {
- DBG_ERRORFILE( "Set bereits vorhanden!" );
- return pSet->GetRanges();
- }
-
- if ( pRanges )
- return pRanges;
- SvUShorts aUS( 16, 16 );
- ULONG nCount = maPageList.Count();
-
- USHORT i;
- for ( i = 0; i < nCount; ++i )
- {
- IconChoicePageData* pData = maPageList.GetObject (i);
-
- if ( pData->fnGetRanges )
- {
- const USHORT* pTmpRanges = (pData->fnGetRanges)();
- const USHORT* pIter = pTmpRanges;
-
- USHORT nLen;
- for( nLen = 0; *pIter; ++nLen, ++pIter )
- ;
- aUS.Insert( pTmpRanges, nLen, aUS.Count() );
- }
- }
-
- // remove double Id's
-#ifndef TF_POOLABLE
- if ( rPool.HasMap() )
-#endif
- {
- nCount = aUS.Count();
-
- for ( i = 0; i < nCount; ++i )
- aUS[i] = rPool.GetWhich( aUS[i] );
- }
-
- // sortieren
- if ( aUS.Count() > 1 )
- {
-#if defined __SUNPRO_CC
-#pragma disable_warn
-#endif
- qsort( (void*)aUS.GetData(), aUS.Count(), sizeof(USHORT), IconcDlgCmpUS_Impl );
-#if defined __SUNPRO_CC
-#pragma enable_warn
-#endif
- }
-
- pRanges = new USHORT[aUS.Count() + 1];
- memcpy(pRanges, aUS.GetData(), sizeof(USHORT) * aUS.Count());
- pRanges[aUS.Count()] = 0;
-
- return pRanges;
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoiceDialog::SetInputSet( const SfxItemSet* pInSet )
-{
- FASTBOOL bSet = ( pSet != NULL );
-
- pSet = pInSet;
-
- if ( !bSet && !pExampleSet && !pOutSet )
- {
- pExampleSet = new SfxItemSet( *pSet );
- pOutSet = new SfxItemSet( *pSet->GetPool(), pSet->GetRanges() );
- }
-}
-
-// -----------------------------------------------------------------------
-
-// Liefert die Pages, die ihre Sets onDemand liefern, das OutputItemSet.
-const SfxItemSet* IconChoiceDialog::GetOutputItemSet ( USHORT nId )
-{
- IconChoicePageData * pData = GetPageData ( nId );
- DBG_ASSERT( pData, "TabPage nicht gefunden" );
-
- if ( pData )
- {
- if ( !pData->pPage )
- return NULL;
-
- if ( pData->bOnDemand )
- return &pData->pPage->GetItemSet();
-
- return pOutSet;
- }
-
- return NULL;
-}
-
-// -----------------------------------------------------------------------
-
-int IconChoiceDialog::FillOutputItemSet()
-{
- int nRet = IconChoicePage::LEAVE_PAGE;
- if ( OK_Impl() )
- Ok();
- else
- nRet = IconChoicePage::KEEP_PAGE;
- return nRet;
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoiceDialog::PageCreated( USHORT /*nId*/, IconChoicePage& /*rPage*/ )
-{
- // not interested in
-}
-
-// -----------------------------------------------------------------------
-
-SfxItemSet* IconChoiceDialog::CreateInputItemSet( USHORT )
-{
- DBG_WARNINGFILE( "CreateInputItemSet nicht implementiert" );
-
- return 0;
-}
-
-/**********************************************************************
-|
-| start dialog
-|
-\**********************************************************************/
-
-short IconChoiceDialog::Execute()
-{
- if ( !maPageList.Count() )
- return RET_CANCEL;
-
- Start_Impl();
-
- return Dialog::Execute();
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoiceDialog::Start( BOOL bShow )
-{
-
- aCancelBtn.SetClickHdl( LINK( this, IconChoiceDialog, CancelHdl ) );
- bModal = FALSE;
-
- Start_Impl();
-
- if ( bShow )
- Window::Show();
-
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool IconChoiceDialog::QueryClose()
-{
- sal_Bool bRet = sal_True;
- const ULONG nCount = maPageList.Count();
- for ( ULONG i = 0; i < nCount; ++i )
- {
- IconChoicePageData* pData = maPageList.GetObject(i);
- if ( pData->pPage && !pData->pPage->QueryClose() )
- {
- bRet = sal_False;
- break;
- }
- }
- return bRet;
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoiceDialog::Start_Impl()
-{
- Point aPos;
- USHORT nActPage;
-
- if ( mnCurrentPageId == 0 || mnCurrentPageId == USHRT_MAX )
- nActPage = maPageList.GetObject(0)->nId;//First()->nId;
- else
- nActPage = mnCurrentPageId;
-
- // Konfiguration vorhanden?
- SvtViewOptions aTabDlgOpt( E_TABDIALOG, String::CreateFromInt32( nResId ) );
-
- if ( aTabDlgOpt.Exists() )
- {
- // ggf. Position aus Konfig
- SetWindowState( ByteString( aTabDlgOpt.GetWindowState().getStr(), RTL_TEXTENCODING_ASCII_US ) );
-
- // initiale TabPage aus Programm/Hilfe/Konfig
- nActPage = (USHORT)aTabDlgOpt.GetPageID();
-
- if ( USHRT_MAX != mnCurrentPageId )
- nActPage = mnCurrentPageId;
-
- if ( GetPageData ( nActPage ) == NULL )
- nActPage = ( (IconChoicePageData*)maPageList.GetObject(0) )->nId;
- }
- else if ( USHRT_MAX != mnCurrentPageId && GetPageData ( mnCurrentPageId ) != NULL )
- nActPage = mnCurrentPageId;
-
- mnCurrentPageId = nActPage;
-
- FocusOnIcon( mnCurrentPageId );
-
- ActivatePageImpl();
-}
-
-// -----------------------------------------------------------------------
-
-const SfxItemSet* IconChoiceDialog::GetRefreshedSet()
-{
- DBG_ERRORFILE( "GetRefreshedSet nicht implementiert" );
- return 0;
-}
-
-/**********************************************************************
-|
-| tool-methods
-|
-\**********************************************************************/
-
-IconChoicePageData* IconChoiceDialog::GetPageData ( USHORT nId )
-{
- IconChoicePageData *pRet = NULL;
- BOOL bFound = FALSE;
-
- for ( ULONG i=0; i<maPageList.Count() && !bFound; i++ )
- {
- IconChoicePageData* pData = (IconChoicePageData*)maPageList.GetObject ( i );
-
- if ( pData->nId == nId )
- {
- pRet = pData;
- }
- }
-
- return pRet;
-}
-
-/**********************************************************************
-|
-| OK-Status
-|
-\**********************************************************************/
-
-BOOL IconChoiceDialog::OK_Impl()
-{
- IconChoicePage* pPage = GetPageData ( mnCurrentPageId )->pPage;
-
- bool bEnd = !pPage;
- if ( pPage )
- {
- int nRet = IconChoicePage::LEAVE_PAGE;
- if ( pSet )
- {
- SfxItemSet aTmp( *pSet->GetPool(), pSet->GetRanges() );
- BOOL bRet = FALSE;
-
- if ( pPage->HasExchangeSupport() )
- nRet = pPage->DeactivatePage( &aTmp );
-
- if ( ( IconChoicePage::LEAVE_PAGE & nRet ) == IconChoicePage::LEAVE_PAGE
- && aTmp.Count() )
- {
- pExampleSet->Put( aTmp );
- pOutSet->Put( aTmp );
- }
- else if ( bRet )
- bModified |= TRUE;
- }
- else
- nRet = pPage->DeactivatePage( NULL );
- bEnd = nRet;
- }
-
- return bEnd;
-}
-
-// -----------------------------------------------------------------------
-
-short IconChoiceDialog::Ok()
-{
- bInOK = TRUE;
-
- if ( !pOutSet )
- {
- if ( !pExampleSet && pSet )
- pOutSet = pSet->Clone( FALSE ); // ohne Items
- else if ( pExampleSet )
- pOutSet = new SfxItemSet( *pExampleSet );
- }
- BOOL _bModified = FALSE;
-
- const ULONG nCount = maPageList.Count();
-
- for ( USHORT i = 0; i < nCount; ++i )
- {
- IconChoicePageData* pData = GetPageData ( i );
-
- IconChoicePage* pPage = pData->pPage;
-
- if ( pPage )
- {
- if ( pData->bOnDemand )
- {
- SfxItemSet& rSet = (SfxItemSet&)pPage->GetItemSet();
- rSet.ClearItem();
- _bModified |= pPage->FillItemSet( rSet );
- }
- else if ( pSet && !pPage->HasExchangeSupport() )
- {
- SfxItemSet aTmp( *pSet->GetPool(), pSet->GetRanges() );
-
- if ( pPage->FillItemSet( aTmp ) )
- {
- _bModified |= TRUE;
- pExampleSet->Put( aTmp );
- pOutSet->Put( aTmp );
- }
- }
- }
- }
-
- if ( _bModified || ( pOutSet && pOutSet->Count() > 0 ) )
- _bModified |= TRUE;
-
- return _bModified ? RET_OK : RET_CANCEL;
-}
-
-// -----------------------------------------------------------------------
-
-BOOL IconChoiceDialog::IsInOK() const
-{
- return bInOK;
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoiceDialog::FocusOnIcon( USHORT nId )
-{
- // set focus to icon for the current visible page
- for ( USHORT i=0; i<maIconCtrl.GetEntryCount(); i++)
- {
- SvxIconChoiceCtrlEntry* pEntry = maIconCtrl.GetEntry ( i );
- USHORT* pUserData = (USHORT*) pEntry->GetUserData();
-
- if ( pUserData && *pUserData == nId )
- {
- maIconCtrl.SetCursor( pEntry );
- break;
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-void IconChoiceDialog::CreateIconTextAutoMnemonics( void )
-{
- maIconCtrl.CreateAutoMnemonics();
-}