/************************************************************** * * 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 _SV_SVDATA_HXX #define _SV_SVDATA_HXX #include "rtl/ref.hxx" #include "vos/thread.hxx" #include "tools/string.hxx" #include "tools/gen.hxx" #include "tools/shl.hxx" #include "tools/link.hxx" #include "tools/fldunit.hxx" #include "tools/color.hxx" #include "tools/debug.hxx" #include "vcl/vclevent.hxx" #include "vcl/sv.h" #include "vcl/dllapi.h" #include "unotools/options.hxx" #include "xconnection.hxx" #include "com/sun/star/uno/Reference.hxx" #include namespace com { namespace sun { namespace star { namespace lang { class XMultiServiceFactory; } namespace frame { class XSessionManagerClient; } }}} struct ImplTimerData; struct ImplFileImageCacheData; struct ImplConfigData; class ImplDirectFontSubstitution; struct ImplHotKey; struct ImplEventHook; class Point; class Rectangle; class ImpResMgr; class ResMgr; class UniqueIndex; class ImplAccelManager; class ImplDevFontList; class ImplFontCache; class HelpTextWindow; class ImplTBDragMgr; class ImplButtonList; class ImplIdleMgr; class DbgWindow; class FloatingWindow; class AllSettings; class KeyCode; class NotifyEvent; class Timer; class AutoTimer; class Help; class ImageList; class Image; class PopupMenu; class Application; class OutputDevice; class Window; class SystemWindow; class WorkWindow; class Dialog; class VirtualDevice; class Printer; class SalFrame; class SalInstance; class SalSystem; class SalProcessWindowList; class SalTrayList; class UniqueIdContainer; class List; class ImplPrnQueueList; class ImplVDevCache; class UnoWrapperBase; class GraphicConverter; class ImplWheelWindow; class SalTimer; class SalI18NImeStatus; class DockingManager; class VclEventListeners2; namespace vos { class OMutex; } namespace vos { class OCondition; } namespace vcl { class DisplayConnection; class SettingsConfigItem; class DeleteOnDeinitBase; } namespace utl { class DefaultFontConfiguration; class FontSubstConfiguration; } // ----------------- // - ImplSVAppData - // ----------------- class LocaleConfigurationListener : public utl::ConfigurationListener { public: virtual void ConfigurationChanged( utl::ConfigurationBroadcaster*, sal_uInt32 ); }; struct ImplSVAppData { enum ImeStatusWindowMode { ImeStatusWindowMode_UNKNOWN, ImeStatusWindowMode_HIDE, ImeStatusWindowMode_SHOW }; ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMSF; String* mpMSFTempFileName; AllSettings* mpSettings; // Application settings LocaleConfigurationListener* mpCfgListener; VclEventListeners* mpEventListeners; // listeners for vcl events (eg, extended toolkit) VclEventListeners* mpKeyListeners; // listeners for key events only (eg, extended toolkit) ImplAccelManager* mpAccelMgr; // Accelerator Manager XubString* mpAppName; // Application name XubString* mpAppFileName; // Abs. Application FileName XubString* mpDisplayName; // Application Display Name String* mpFontPath; // Additional Fontpath Help* mpHelp; // Application help PopupMenu* mpActivePopupMenu; // Actives Popup-Menu (in Execute) UniqueIdContainer* mpUniqueIdCont; // Fuer Eindeutige Id's ImplIdleMgr* mpIdleMgr; // Idle-Manager ImplWheelWindow* mpWheelWindow; // WheelWindow ImplHotKey* mpFirstHotKey; // HotKey-Verwaltung ImplEventHook* mpFirstEventHook; // Event-Hooks VclEventListeners2* mpPostYieldListeners; // post yield listeners sal_uLong mnLastInputTime; // GetLastInputTime() sal_uInt16 mnDispatchLevel; // DispatchLevel sal_uInt16 mnModalMode; // ModalMode Count sal_uInt16 mnModalDialog; // ModalDialog Count sal_uInt16 mnAccessCount; // AccessHdl Count sal_uInt16 mnSysWinMode; // Modus, wann SystemWindows erzeugt werden sollen sal_uInt16 mnLayout; // --- RTL-Flags --- currently not used, only for testing short mnDialogScaleX; // Scale X-Positions and sizes in Dialogs sal_Bool mbInAppMain; // is Application::Main() on stack sal_Bool mbInAppExecute; // is Application::Execute() on stack sal_Bool mbAppQuit; // is Application::Quit() called sal_Bool mbSettingsInit; // sal_True: Settings are initialized sal_Bool mbDialogCancel; // sal_True: Alle Dialog::Execute()-Aufrufe werden mit return sal_False sofort beendet sal_Bool mbNoYield; // Application::Yield will not wait for events if the queue is empty // essentially that makes it the same as Application::Reschedule long mnDefaultLayoutBorder; // default value in pixel for layout distances used // in window arrangers bool mbConversionMode; // true allows further optimizations during document conversion in different code areas. /** Controls whether showing any IME status window is toggled on or off. Only meaningful if showing IME status windows can be toggled on and off externally (see Application::CanToggleImeStatusWindow). */ ImeStatusWindowMode meShowImeStatusWindow; DECL_STATIC_LINK( ImplSVAppData, ImplQuitMsg, void* ); }; // ----------------- // - ImplSVGDIData - // ----------------- struct ImplSVGDIData { OutputDevice* mpFirstWinGraphics; // First OutputDevice with a Frame Graphics OutputDevice* mpLastWinGraphics; // Last OutputDevice with a Frame Graphics OutputDevice* mpFirstVirGraphics; // First OutputDevice with a VirtualDevice Graphics OutputDevice* mpLastVirGraphics; // Last OutputDevice with a VirtualDevice Graphics OutputDevice* mpFirstPrnGraphics; // First OutputDevice with a InfoPrinter Graphics OutputDevice* mpLastPrnGraphics; // Last OutputDevice with a InfoPrinter Graphics VirtualDevice* mpFirstVirDev; // First VirtualDevice VirtualDevice* mpLastVirDev; // Last VirtualDevice Printer* mpFirstPrinter; // First Printer Printer* mpLastPrinter; // Last Printer ImplPrnQueueList* mpPrinterQueueList; // List of all printer queue ImplDevFontList* mpScreenFontList; // Screen-Font-List ImplFontCache* mpScreenFontCache; // Screen-Font-Cache ImplDirectFontSubstitution* mpDirectFontSubst;// Font-Substitutons defined in Tools->Options->Fonts GraphicConverter* mpGrfConverter; // Converter for graphics long mnRealAppFontX; // AppFont X-Numenator for 40/tel Width long mnAppFontX; // AppFont X-Numenator for 40/tel Width + DialogScaleX long mnAppFontY; // AppFont Y-Numenator for 80/tel Height sal_Bool mbFontSubChanged; // sal_True: FontSubstitution wurde zwischen Begin/End geaendert utl::DefaultFontConfiguration* mpDefaultFontConfiguration; utl::FontSubstConfiguration* mpFontSubstConfiguration; bool mbNativeFontConfig; // true: do not override UI font bool mbNoXORClipping; // true: do not use XOR to achieve clipping effects }; // ----------------- // - ImplSVWinData - // ----------------- struct ImplSVWinData { Window* mpFirstFrame; // First FrameWindow Window* mpDefDialogParent; // Default Dialog Parent WorkWindow* mpAppWin; // Application-Window Window* mpFocusWin; // window, that has the focus Window* mpActiveApplicationFrame; // the last active application frame, can be used as DefModalDialogParent if no focuswin set Window* mpCaptureWin; // window, that has the mouse capture Window* mpLastDeacWin; // Window, that need a deactivate (FloatingWindow-Handling) DbgWindow* mpDbgWin; // debug window FloatingWindow* mpFirstFloat; // First FloatingWindow in PopupMode Dialog* mpLastExecuteDlg; // Erster Dialog, der sich in Execute befindet Window* mpExtTextInputWin; // Window, which is in ExtTextInput Window* mpTrackWin; // window, that is in tracking mode AutoTimer* mpTrackTimer; // tracking timer ImageList* mpMsgBoxImgList; // ImageList for MessageBox ImageList* mpMsgBoxHCImgList; // ImageList for MessageBox (high contrast mode) Window* mpAutoScrollWin; // window, that is in AutoScrollMode mode sal_uInt16 mnTrackFlags; // tracking flags sal_uInt16 mnAutoScrollFlags; // auto scroll flags sal_Bool mbNoDeactivate; // sal_True: keine Deactivate durchfuehren sal_Bool mbNoSaveFocus; // sal_True: menues must not save/restore focus sal_Bool mbNoSaveBackground; // sal_True: save background is unnecessary or even less performant }; // ------------------ // - ImplSVCtrlData - // ------------------ typedef std::vector< std::pair< String, FieldUnit > > FieldUnitStringList; struct ImplSVCtrlData { ImageList* mpCheckImgList; // ImageList for CheckBoxes ImageList* mpRadioImgList; // ImageList for RadioButtons ImageList* mpPinImgList; // ImageList for PIN ImageList* mpSplitHPinImgList; // ImageList for Horizontale SplitWindows ImageList* mpSplitVPinImgList; // ImageList for Vertikale SplitWindows (PIN's) ImageList* mpSplitHArwImgList; // ImageList for Horizontale SplitWindows (Arrows) ImageList* mpSplitVArwImgList; // ImageList for Vertikale SplitWindows (Arrows) Image* mpDisclosurePlus; Image* mpDisclosurePlusHC; Image* mpDisclosureMinus; Image* mpDisclosureMinusHC; ImplTBDragMgr* mpTBDragMgr; // DragMgr for ToolBox sal_uInt16 mnCheckStyle; // CheckBox-Style for ImageList-Update sal_uInt16 mnRadioStyle; // Radio-Style for ImageList-Update sal_uLong mnLastCheckFColor; // Letzte FaceColor fuer CheckImage sal_uLong mnLastCheckWColor; // Letzte WindowColor fuer CheckImage sal_uLong mnLastCheckWTextColor; // Letzte WindowTextColor fuer CheckImage sal_uLong mnLastCheckLColor; // Letzte LightColor fuer CheckImage sal_uLong mnLastRadioFColor; // Letzte FaceColor fuer RadioImage sal_uLong mnLastRadioWColor; // Letzte WindowColor fuer RadioImage sal_uLong mnLastRadioLColor; // Letzte LightColor fuer RadioImage FieldUnitStringList* mpFieldUnitStrings; // list with field units FieldUnitStringList* mpCleanUnitStrings; // same list but with some "fluff" like spaces removed }; // ------------------ // - ImplSVHelpData - // ------------------ struct ImplSVHelpData { sal_Bool mbContextHelp : 1; // is ContextHelp enabled sal_Bool mbExtHelp : 1; // is ExtendedHelp enabled sal_Bool mbExtHelpMode : 1; // is in ExtendedHelp Mode sal_Bool mbOldBalloonMode : 1; // BallonMode, befor ExtHelpMode started sal_Bool mbBalloonHelp : 1; // is BalloonHelp enabled sal_Bool mbQuickHelp : 1; // is QuickHelp enabled sal_Bool mbSetKeyboardHelp : 1; // tiphelp was activated by keyboard sal_Bool mbKeyboardHelp : 1; // tiphelp was activated by keyboard sal_Bool mbAutoHelpId : 1; // generate HelpIds sal_Bool mbRequestingHelp : 1; // In Window::RequestHelp HelpTextWindow* mpHelpWin; // HelpWindow sal_uLong mnLastHelpHideTime; // ticks of last show }; struct ImplSVNWFData { bool mbMenuBarDockingAreaCommonBG; // e.g. WinXP default theme bool mbDockingAreaSeparateTB; // individual toolbar backgrounds // instead of one for docking area bool mbToolboxDropDownSeparate; // two adjacent buttons for // toolbox dropdown buttons int mnMenuFormatExtraBorder; // inner popup menu border bool mbFlatMenu; // no popup 3D border Color maMenuBarHighlightTextColor; // override higlight text color // in menubar if not transparent bool mbOpenMenuOnF10; // on gnome the first menu opens on F10 bool mbNoFocusRects; // on Aqua focus rects are not used bool mbNoBoldTabFocus; // on Aqua and Gnome the focused tab has not bold text bool mbCenteredTabs; // on Aqua, tabs are centered bool mbNoActiveTabTextRaise; // on Aqua the text for the selected tab // should not "jump up" a pixel bool mbProgressNeedsErase; // set true for platforms that should draw the // window background before drawing the native // progress bar bool mbCheckBoxNeedsErase; // set true for platforms that should draw the // window background before drawing the native // checkbox bool mbScrollbarJumpPage; // true for "jump to here" behavior int mnStatusBarLowerRightOffset; // amount in pixel to avoid in the lower righthand corner bool mbCanDrawWidgetAnySize; // set to true currently on gtk }; // -------------- // - ImplSVData - // -------------- struct ImplSVData { void* mpSalData; // SalData SalInstance* mpDefInst; // Default SalInstance Application* mpApp; // pApp WorkWindow* mpDefaultWin; // Default-Window sal_Bool mbDeInit; // Is VCL deinitializing sal_uLong mnThreadCount; // is VCL MultiThread enabled ImplConfigData* mpFirstConfigData; // Zeiger auf ersten Config-Block ImplTimerData* mpFirstTimerData; // list of all running timers SalTimer* mpSalTimer; // interface to sal event loop/timers SalI18NImeStatus* mpImeStatus; // interface to ime status window SalSystem* mpSalSystem; // SalSystem interface ResMgr* mpResMgr; // SV-Resource-Manager sal_uLong mnTimerPeriod; // current timer period sal_uLong mnTimerUpdate; // TimerCallbackProcs on stack sal_Bool mbNotAllTimerCalled;// sal_True: Es muessen noch Timer abgearbeitet werden sal_Bool mbNoCallTimer; // sal_True: No Timeout calls ImplSVAppData maAppData; // indepen data for class Application ImplSVGDIData maGDIData; // indepen data for Output classes ImplSVWinData maWinData; // indepen data for Windows classes ImplSVCtrlData maCtrlData; // indepen data for Control classes ImplSVHelpData maHelpData; // indepen data for Help classes ImplSVNWFData maNWFData; UnoWrapperBase* mpUnoWrapper; Window* mpIntroWindow; // the splash screen DockingManager* mpDockingManager; sal_Bool mbIsTestTool; vos::OThread::TThreadIdentifier mnMainThreadId; rtl::Reference< vcl::DisplayConnection > mxDisplayConnection; ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxAccessBridge; com::sun::star::uno::Reference< com::sun::star::frame::XSessionManagerClient > xSMClient; ::vcl::SettingsConfigItem* mpSettingsConfigItem; std::list< vcl::DeleteOnDeinitBase* >* mpDeinitDeleteList; std::hash_map< int, rtl::OUString >* mpPaperNames; }; void ImplInitSVData(); void ImplDeInitSVData(); void ImplDestroySVData(); Window* ImplGetDefaultWindow(); VCL_PLUGIN_PUBLIC ResMgr* ImplGetResMgr(); VCL_PLUGIN_PUBLIC ResId VclResId( sal_Int32 nId ); // throws std::bad_alloc if no res mgr DockingManager* ImplGetDockingManager(); void ImplWindowAutoMnemonic( Window* pWindow ); void ImplUpdateSystemProcessWindow(); Window* ImplFindWindow( const SalFrame* pFrame, Point& rSalFramePos ); // SVAPP.CXX sal_Bool ImplCallHotKey( const KeyCode& rKeyCode ); void ImplFreeHotKeyData(); void ImplFreeEventHookData(); // WINPROC.CXX long ImplCallPreNotify( NotifyEvent& rEvt ); long ImplCallEvent( NotifyEvent& rEvt ); extern VCL_PLUGIN_PUBLIC ImplSVData* pImplSVData; inline VCL_PLUGIN_PUBLIC ImplSVData* ImplGetSVData() { return pImplSVData; } inline ImplSVData* ImplGetAppSVData() { return ImplGetSVData(); } bool ImplInitAccessBridge( sal_Bool bAllowCancel, sal_Bool &rCancelled ); FieldUnitStringList* ImplGetFieldUnits(); FieldUnitStringList* ImplGetCleanedFieldUnits(); // ----------------------------------------------------------------------- // ----------------- // - ImplSVEmpyStr - // ----------------- // Empty-SV-String inline const String& ImplGetSVEmptyStr() { return String::EmptyString(); } inline const ByteString& ImplGetSVEmptyByteStr() { return ByteString::EmptyString(); } // ----------------------------------------------------------------------- // ---------------------- // - struct ImplDelData - // ---------------------- // ImplDelData is used as a "dog tag" by a window when it // does something that could indirectly destroy the window // TODO: wild destruction of a window should not be possible struct ImplDelData { ImplDelData* mpNext; const Window* mpWindow; sal_Bool mbDel; ImplDelData( const Window* pWindow = NULL ) : mpNext( NULL ), mpWindow( NULL ), mbDel( sal_False ) { if( pWindow ) AttachToWindow( pWindow ); } virtual ~ImplDelData(); bool IsDead() const { DBG_ASSERT( mbDel == sal_False, "object deleted while in use !" ); return (mbDel!=sal_False); } sal_Bool /*deprecated */IsDelete() const { return (sal_Bool)IsDead(); } private: void AttachToWindow( const Window* ); }; // --------------- // - ImplSVEvent - // --------------- struct ImplSVEvent { sal_uLong mnEvent; void* mpData; Link* mpLink; Window* mpWindow; ImplDelData maDelData; sal_Bool mbCall; }; #endif // _SV_SVDATA_HXX