blob: d2c01343f2d60b4b2a8909af7c630196a5351d9f [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SFX_TEMPDLGI_HXX
#define _SFX_TEMPDLGI_HXX
class SfxTemplateControllerItem;
#ifndef _BUTTON_HXX //autogen
#include <vcl/button.hxx>
#endif
#ifndef _TOOLBOX_HXX //autogen
#include <vcl/toolbox.hxx>
#endif
#ifndef _LSTBOX_HXX //autogen
#include <vcl/lstbox.hxx>
#endif
#include <svl/lstner.hxx>
#include <svtools/svtreebx.hxx>
#include <svl/eitem.hxx>
#define _SVSTDARR_USHORTS
#include <svl/svstdarr.hxx> // SvUShorts
#include <rsc/rscsfx.hxx>
#include <tools/rtti.hxx>
#include <sfx2/childwin.hxx>
#include <sfx2/templdlg.hxx>
class SfxStyleFamilies;
class SfxStyleFamilyItem;
class SfxTemplateItem;
class SfxBindings;
class SfxStyleSheetBasePool;
class SvTreeListBox ;
class StyleTreeListBox_Impl;
class SfxTemplateDialog_Impl;
class SfxCommonTemplateDialog_Impl;
class SfxTemplateDialogWrapper;
class SfxDockingWindow;
namespace com { namespace sun { namespace star { namespace frame { class XModuleManager; } } } }
// class DropListBox_Impl ------------------------------------------------
class DropListBox_Impl : public SvTreeListBox
{
private:
DECL_LINK( OnAsyncExecuteDrop, SvLBoxEntry* );
DECL_LINK( OnAsyncExecuteError, void* );
protected:
SfxCommonTemplateDialog_Impl* pDialog;
sal_uInt16 nModifier;
public:
DropListBox_Impl( Window* pParent, const ResId& rId, SfxCommonTemplateDialog_Impl* pD ) :
SvTreeListBox( pParent, rId ), pDialog( pD ) {}
DropListBox_Impl( Window* pParent, WinBits nWinBits, SfxCommonTemplateDialog_Impl* pD ) :
SvTreeListBox( pParent, nWinBits ), pDialog( pD ) {}
virtual void MouseButtonDown( const MouseEvent& rMEvt );
virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
using SvLBox::ExecuteDrop;
virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
sal_uInt16 GetModifier() const { return nModifier; }
virtual long Notify( NotifyEvent& rNEvt );
};
// class SfxActionListBox ------------------------------------------------
class SfxActionListBox : public DropListBox_Impl
{
protected:
public:
SfxActionListBox( SfxCommonTemplateDialog_Impl* pParent, WinBits nWinBits );
SfxActionListBox( SfxCommonTemplateDialog_Impl* pParent, const ResId &rResId );
virtual PopupMenu* CreateContextMenu( void );
};
// class SfxCommonTemplateDialog_Impl ------------------------------------
struct Deleted
{
bool bDead;
Deleted() : bDead(false) {}
inline bool operator()() { return bDead; }
};
class SfxCommonTemplateDialog_Impl : public SfxListener
{
private:
class ISfxTemplateCommon_Impl : public ISfxTemplateCommon
{
private:
SfxCommonTemplateDialog_Impl* pDialog;
public:
ISfxTemplateCommon_Impl( SfxCommonTemplateDialog_Impl* pDialogP ) : pDialog( pDialogP ) {}
virtual SfxStyleFamily GetActualFamily() const { return pDialog->GetActualFamily(); }
virtual String GetSelectedEntry() const { return pDialog->GetSelectedEntry(); }
};
ISfxTemplateCommon_Impl aISfxTemplateCommon;
void ReadResource();
void ClearResource();
protected:
#define MAX_FAMILIES 5
#define COUNT_BOUND_FUNC 13
#define UPDATE_FAMILY_LIST 0x0001
#define UPDATE_FAMILY 0x0002
friend class DropListBox_Impl;
friend class SfxTemplateControllerItem;
friend class SfxTemplateDialogWrapper;
SfxBindings* pBindings;
SfxTemplateControllerItem* pBoundItems[COUNT_BOUND_FUNC];
Window* pWindow;
SfxModule* pModule;
Timer* pTimer;
ResId* m_pStyleFamiliesId;
SfxStyleFamilies* pStyleFamilies;
SfxTemplateItem* pFamilyState[MAX_FAMILIES];
SfxStyleSheetBasePool* pStyleSheetPool;
SvTreeListBox* pTreeBox;
SfxObjectShell* pCurObjShell;
::com::sun::star::uno::Reference< ::com::sun::star::frame::XModuleManager >
xModuleManager;
Deleted* pbDeleted;
SfxActionListBox aFmtLb;
ListBox aFilterLb;
Size aSize;
sal_uInt16 nActFamily; // Id in der ToolBox = Position - 1
sal_uInt16 nActFilter; // FilterIdx
sal_uInt16 nAppFilter; // Filter, den die Applikation gesetzt hat (fuer automatisch)
sal_Bool bDontUpdate :1,
bIsWater :1,
bEnabled :1,
bUpdate :1,
bUpdateFamily :1,
bCanEdit :1,
bCanDel :1,
bCanNew :1,
bWaterDisabled :1,
bNewByExampleDisabled :1,
bUpdateByExampleDisabled:1,
bTreeDrag :1,
bHierarchical :1,
bBindingUpdate :1;
DECL_LINK( FilterSelectHdl, ListBox * );
DECL_LINK( FmtSelectHdl, SvTreeListBox * );
DECL_LINK( ApplyHdl, Control * );
DECL_LINK( DropHdl, StyleTreeListBox_Impl * );
DECL_LINK( TimeOut, Timer * );
virtual void EnableItem( sal_uInt16 /*nMesId*/, sal_Bool /*bCheck*/ = sal_True ) {}
virtual void CheckItem( sal_uInt16 /*nMesId*/, sal_Bool /*bCheck*/ = sal_True ) {}
virtual sal_Bool IsCheckedItem( sal_uInt16 /*nMesId*/ ) { return sal_True; }
virtual void LoadedFamilies() {}
virtual void Update() { UpdateStyles_Impl(UPDATE_FAMILY_LIST); }
virtual void InvalidateBindings();
virtual void InsertFamilyItem( sal_uInt16 nId, const SfxStyleFamilyItem* pIten ) = 0;
virtual void EnableFamilyItem( sal_uInt16 nId, sal_Bool bEnabled = sal_True ) = 0;
virtual void ClearFamilyList() = 0;
virtual void ReplaceUpdateButtonByMenu();
void NewHdl( void* );
void EditHdl( void* );
void DeleteHdl( void* );
sal_Bool Execute_Impl( sal_uInt16 nId, const String& rStr, const String& rRefStr,
sal_uInt16 nFamily, sal_uInt16 nMask = 0,
sal_uInt16* pIdx = NULL, const sal_uInt16* pModifier = NULL );
void UpdateStyles_Impl(sal_uInt16 nFlags);
const SfxStyleFamilyItem* GetFamilyItem_Impl() const;
sal_Bool IsInitialized() { return nActFamily != 0xffff; }
void ResetFocus();
void EnableDelete();
void Initialize();
void FilterSelect( sal_uInt16 nFilterIdx, sal_Bool bForce = sal_False );
void SetFamilyState( sal_uInt16 nSlotId, const SfxTemplateItem* );
void SetWaterCanState( const SfxBoolItem* pItem );
void SelectStyle( const String& rStyle );
sal_Bool HasSelectedStyle() const;
void FillTreeBox();
void Update_Impl();
void UpdateFamily_Impl();
// In welchem FamilyState muss ich nachsehen, um die Info der i-ten
// Family in der pStyleFamilies zu bekommen.
sal_uInt16 StyleNrToInfoOffset( sal_uInt16 i );
sal_uInt16 InfoOffsetToStyleNr( sal_uInt16 i );
void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
void FamilySelect( sal_uInt16 nId );
void SetFamily( sal_uInt16 nId );
void ActionSelect( sal_uInt16 nId );
sal_Int32 LoadFactoryStyleFilter( SfxObjectShell* i_pObjSh );
void SaveFactoryStyleFilter( SfxObjectShell* i_pObjSh, sal_Int32 i_nFilter );
public:
TYPEINFO();
SfxCommonTemplateDialog_Impl( SfxBindings* pB, Window*, bool );
SfxCommonTemplateDialog_Impl( SfxBindings* pB, Window* );
virtual ~SfxCommonTemplateDialog_Impl();
DECL_LINK( MenuSelectHdl, Menu * );
virtual void EnableEdit( sal_Bool b = sal_True ) { bCanEdit = b; }
virtual void EnableDel( sal_Bool b = sal_True ) { bCanDel = b; }
virtual void EnableNew( sal_Bool b = sal_True ) { bCanNew = b; }
ISfxTemplateCommon* GetISfxTemplateCommon() { return &aISfxTemplateCommon; }
Window* GetWindow() { return pWindow; }
void EnableTreeDrag( sal_Bool b = sal_True );
void ExecuteContextMenu_Impl( const Point& rPos, Window* pWin );
void EnableExample_Impl( sal_uInt16 nId, sal_Bool bEnable );
SfxStyleFamily GetActualFamily() const;
String GetSelectedEntry() const;
SfxObjectShell* GetObjectShell() const { return pCurObjShell; }
virtual void PrepareDeleteAction(); // disable buttons, change button text, etc. when del is going to happen
inline sal_Bool CanEdit( void ) const { return bCanEdit; }
inline sal_Bool CanDel( void ) const { return bCanDel; }
inline sal_Bool CanNew( void ) const { return bCanNew; }
// normaly for derivates from SvTreeListBoxes, but in this case the dialog handles context menus
virtual PopupMenu* CreateContextMenu( void );
// Rechnet von den SFX_STYLE_FAMILY Ids auf 1-5 um
static sal_uInt16 SfxFamilyIdToNId( SfxStyleFamily nFamily );
void SetAutomaticFilter();
};
/* -----------------10.12.2003 11:42-----------------
--------------------------------------------------*/
class DropToolBox_Impl : public ToolBox, public DropTargetHelper
{
SfxTemplateDialog_Impl& rParent;
protected:
virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
public:
DropToolBox_Impl(Window* pParent, SfxTemplateDialog_Impl* pTemplateDialog);
~DropToolBox_Impl();
};
// class SfxTemplateDialog_Impl ------------------------------------------
class SfxTemplateDialog_Impl : public SfxCommonTemplateDialog_Impl
{
private:
friend class SfxTemplateControllerItem;
friend class SfxTemplateDialogWrapper;
friend class DropToolBox_Impl;
friend class SfxTemplatePanelControl;
Window* m_pFloat;
sal_Bool m_bZoomIn;
DropToolBox_Impl m_aActionTbL;
ToolBox m_aActionTbR;
DECL_LINK( ToolBoxLSelect, ToolBox * );
DECL_LINK( ToolBoxRSelect, ToolBox * );
DECL_LINK( ToolBoxRClick, ToolBox * );
DECL_LINK( MenuSelectHdl, Menu* );
protected:
virtual void Command( const CommandEvent& rMEvt );
virtual void EnableEdit( sal_Bool = sal_True );
virtual void EnableItem( sal_uInt16 nMesId, sal_Bool bCheck = sal_True );
virtual void CheckItem( sal_uInt16 nMesId, sal_Bool bCheck = sal_True );
virtual sal_Bool IsCheckedItem( sal_uInt16 nMesId );
virtual void LoadedFamilies();
virtual void InsertFamilyItem( sal_uInt16 nId, const SfxStyleFamilyItem* pIten );
virtual void EnableFamilyItem( sal_uInt16 nId, sal_Bool bEnabled = sal_True );
virtual void ClearFamilyList();
virtual void ReplaceUpdateButtonByMenu();
void Resize();
Size GetMinOutputSizePixel();
void updateFamilyImages();
void updateNonFamilyImages();
public:
friend class SfxTemplateDialog;
TYPEINFO();
SfxTemplateDialog_Impl( SfxBindings*, SfxTemplateDialog* pDlgWindow );
SfxTemplateDialog_Impl( SfxBindings*, SfxTemplatePanelControl* pDlgWindow );
~SfxTemplateDialog_Impl();
void Initialize (void);
};
// class SfxTemplateCatalog_Impl -----------------------------------------
class SfxTemplateCatalog_Impl : public SfxCommonTemplateDialog_Impl
{
private:
friend class SfxTemplateControllerItem;
friend class SfxCommonTemplateDialog_Impl;
ListBox aFamList;
OKButton aOkBtn;
CancelButton aCancelBtn;
PushButton aNewBtn;
PushButton aChangeBtn;
PushButton aDelBtn;
PushButton aOrgBtn;
HelpButton aHelpBtn;
SfxTemplateCatalog* pReal;
SvUShorts aFamIds;
SfxModalDefParentHelper aHelper;
protected:
virtual void EnableItem( sal_uInt16 nMesId, sal_Bool bCheck = sal_True );
virtual void CheckItem( sal_uInt16 nMesId, sal_Bool bCheck = sal_True );
virtual sal_Bool IsCheckedItem( sal_uInt16 nMesId );
virtual void InsertFamilyItem( sal_uInt16 nId, const SfxStyleFamilyItem* pIten );
virtual void EnableFamilyItem( sal_uInt16 nId, sal_Bool bEnabled = sal_True );
virtual void ClearFamilyList();
virtual void EnableEdit( sal_Bool = sal_True );
virtual void EnableDel( sal_Bool = sal_True );
virtual void EnableNew( sal_Bool = sal_True );
using SfxCommonTemplateDialog_Impl::NewHdl;
DECL_LINK( FamListSelect, ListBox * );
DECL_LINK( OkHdl, Button * );
DECL_LINK( CancelHdl, Button * );
DECL_LINK( NewHdl, Button * );
DECL_LINK( ChangeHdl, Button * );
DECL_LINK( DelHdl, Button * );
DECL_LINK( OrgHdl, Button * );
public:
TYPEINFO();
SfxTemplateCatalog_Impl( Window* pParent, SfxBindings*, SfxTemplateCatalog* pWindow );
~SfxTemplateCatalog_Impl();
friend class SfxTemplateCatalog;
virtual void PrepareDeleteAction();
};
#endif // #ifndef _SFX_TEMPDLGI_HXX