1b0724fc6SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3b0724fc6SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4b0724fc6SAndrew Rist * or more contributor license agreements. See the NOTICE file 5b0724fc6SAndrew Rist * distributed with this work for additional information 6b0724fc6SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7b0724fc6SAndrew Rist * to you under the Apache License, Version 2.0 (the 8b0724fc6SAndrew Rist * "License"); you may not use this file except in compliance 9b0724fc6SAndrew Rist * with the License. You may obtain a copy of the License at 10b0724fc6SAndrew Rist * 11b0724fc6SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12b0724fc6SAndrew Rist * 13b0724fc6SAndrew Rist * Unless required by applicable law or agreed to in writing, 14b0724fc6SAndrew Rist * software distributed under the License is distributed on an 15b0724fc6SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16b0724fc6SAndrew Rist * KIND, either express or implied. See the License for the 17b0724fc6SAndrew Rist * specific language governing permissions and limitations 18b0724fc6SAndrew Rist * under the License. 19b0724fc6SAndrew Rist * 20b0724fc6SAndrew Rist *************************************************************/ 21b0724fc6SAndrew Rist 22b0724fc6SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_toolkit.hxx" 26cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp> 27cdf0e10cSrcweir 28cdf0e10cSrcweir #ifndef _SVWIN_HXX 29cdf0e10cSrcweir #include <tools/svwin.h> 30cdf0e10cSrcweir #endif 31cdf0e10cSrcweir #include <stdio.h> 32cdf0e10cSrcweir #include <com/sun/star/awt/ImageScaleMode.hpp> 33cdf0e10cSrcweir #include <com/sun/star/awt/WindowAttribute.hpp> 34cdf0e10cSrcweir #include <com/sun/star/awt/VclWindowPeerAttribute.hpp> 35cdf0e10cSrcweir #include <com/sun/star/awt/WindowClass.hpp> 36cdf0e10cSrcweir #include <com/sun/star/awt/MessageBoxButtons.hpp> 37cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 38cdf0e10cSrcweir #include <com/sun/star/lang/SystemDependent.hpp> 39cdf0e10cSrcweir #include <com/sun/star/awt/FocusEvent.hpp> 40cdf0e10cSrcweir #include <com/sun/star/awt/KeyEvent.hpp> 41cdf0e10cSrcweir #include <com/sun/star/awt/KeyModifier.hpp> 42cdf0e10cSrcweir #include <com/sun/star/lang/EventObject.hpp> 43cdf0e10cSrcweir #include <com/sun/star/uno/Reference.hxx> 44cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx> 45cdf0e10cSrcweir #include <com/sun/star/uno/XInterface.hpp> 46cdf0e10cSrcweir #include <com/sun/star/beans/NamedValue.hpp> 47cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx> 48cdf0e10cSrcweir #include <osl/conditn.hxx> 49cdf0e10cSrcweir #include <rtl/memory.h> 50cdf0e10cSrcweir #include <rtl/uuid.h> 51cdf0e10cSrcweir #include <rtl/process.h> 52cdf0e10cSrcweir 53cdf0e10cSrcweir #ifdef WNT 54cdf0e10cSrcweir #include <tools/prewin.h> 55cdf0e10cSrcweir #include <windows.h> 56cdf0e10cSrcweir #include <tools/postwin.h> 5727ead02aSPedro Giffuni #elif defined ( OS2 ) 5827ead02aSPedro Giffuni #include <svpm.h> 59cdf0e10cSrcweir #elif (defined QUARTZ) 60cdf0e10cSrcweir #include "premac.h" 61cdf0e10cSrcweir #include <Cocoa/Cocoa.h> 62cdf0e10cSrcweir #include "postmac.h" 63cdf0e10cSrcweir #endif 64cdf0e10cSrcweir #include <vcl/sysdata.hxx> 65cdf0e10cSrcweir 66cdf0e10cSrcweir #include <toolkit/awt/vclxwindows.hxx> 67cdf0e10cSrcweir #include <toolkit/awt/vclxsystemdependentwindow.hxx> 68cdf0e10cSrcweir #include <toolkit/awt/vclxregion.hxx> 69cdf0e10cSrcweir #include <toolkit/awt/vclxtoolkit.hxx> 70cdf0e10cSrcweir #include <toolkit/awt/vclxtabpagecontainer.hxx> 71cdf0e10cSrcweir #include <toolkit/awt/vclxtabpagemodel.hxx> 72cdf0e10cSrcweir 73cdf0e10cSrcweir #include <toolkit/awt/xsimpleanimation.hxx> 74cdf0e10cSrcweir #include <toolkit/awt/xthrobber.hxx> 75cdf0e10cSrcweir #include <toolkit/awt/animatedimagespeer.hxx> 76cdf0e10cSrcweir #include <toolkit/awt/vclxtopwindow.hxx> 77cdf0e10cSrcweir #include <toolkit/awt/vclxwindow.hxx> 78cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx> 79cdf0e10cSrcweir #include <toolkit/helper/unowrapper.hxx> 80cdf0e10cSrcweir #include <toolkit/helper/servicenames.hxx> 81cdf0e10cSrcweir 82cdf0e10cSrcweir 83cdf0e10cSrcweir #include <toolkit/helper/macros.hxx> 84cdf0e10cSrcweir #include <toolkit/helper/convert.hxx> 85cdf0e10cSrcweir #include <vcl/unohelp.hxx> 86cdf0e10cSrcweir #include <vcl/btndlg.hxx> 87cdf0e10cSrcweir #ifndef _SV_BUTTON_HXX 88cdf0e10cSrcweir #include <vcl/button.hxx> 89cdf0e10cSrcweir #endif 90cdf0e10cSrcweir #include <vcl/combobox.hxx> 91cdf0e10cSrcweir #include <vcl/ctrl.hxx> 92cdf0e10cSrcweir #include <vcl/dialog.hxx> 93cdf0e10cSrcweir #include <vcl/dockingarea.hxx> 94cdf0e10cSrcweir #include <vcl/dockwin.hxx> 95cdf0e10cSrcweir #include <vcl/edit.hxx> 96cdf0e10cSrcweir #include <vcl/field.hxx> 97cdf0e10cSrcweir #include <vcl/fixed.hxx> 98cdf0e10cSrcweir #include <vcl/floatwin.hxx> 99cdf0e10cSrcweir #include <vcl/group.hxx> 100cdf0e10cSrcweir #include <vcl/imgctrl.hxx> 101cdf0e10cSrcweir #include <vcl/longcurr.hxx> 102cdf0e10cSrcweir #include <vcl/lstbox.hxx> 103cdf0e10cSrcweir #include <vcl/menubtn.hxx> 104cdf0e10cSrcweir #include <vcl/morebtn.hxx> 105cdf0e10cSrcweir #include <vcl/msgbox.hxx> 106cdf0e10cSrcweir #include <vcl/scrbar.hxx> 107cdf0e10cSrcweir #include <vcl/spin.hxx> 108cdf0e10cSrcweir #include <vcl/split.hxx> 109cdf0e10cSrcweir #include <vcl/splitwin.hxx> 110cdf0e10cSrcweir #include <vcl/status.hxx> 111cdf0e10cSrcweir #include <vcl/svapp.hxx> 112cdf0e10cSrcweir #include <vcl/syschild.hxx> 113cdf0e10cSrcweir #include <vcl/tabctrl.hxx> 114cdf0e10cSrcweir #include <vcl/tabdlg.hxx> 115cdf0e10cSrcweir #include <vcl/tabpage.hxx> 116cdf0e10cSrcweir #include <vcl/toolbox.hxx> 117cdf0e10cSrcweir #include <vcl/virdev.hxx> 118cdf0e10cSrcweir #include <vcl/window.hxx> 119cdf0e10cSrcweir #include <vcl/wrkwin.hxx> 120cdf0e10cSrcweir #include <vcl/throbber.hxx> 121cdf0e10cSrcweir #include "toolkit/awt/vclxspinbutton.hxx" 122cdf0e10cSrcweir 123cdf0e10cSrcweir #include <tools/debug.hxx> 124cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 125cdf0e10cSrcweir 126cdf0e10cSrcweir namespace css = ::com::sun::star; 127cdf0e10cSrcweir 128cdf0e10cSrcweir #define VCLWINDOW_FRAMEWINDOW 0x1000 129cdf0e10cSrcweir #define VCLWINDOW_SYSTEMCHILDWINDOW 0x1001 130cdf0e10cSrcweir 131cdf0e10cSrcweir #if (defined WNT) 132cdf0e10cSrcweir #define SYSTEM_DEPENDENT_TYPE ::com::sun::star::lang::SystemDependent::SYSTEM_WIN32 133cdf0e10cSrcweir #elif (defined OS2) 134cdf0e10cSrcweir #define SYSTEM_DEPENDENT_TYPE ::com::sun::star::lang::SystemDependent::SYSTEM_OS2 135cdf0e10cSrcweir #elif (defined QUARTZ) 136cdf0e10cSrcweir #define SYSTEM_DEPENDENT_TYPE ::com::sun::star::lang::SystemDependent::SYSTEM_MAC 137cdf0e10cSrcweir #elif (defined UNX) 138cdf0e10cSrcweir #define SYSTEM_DEPENDENT_TYPE ::com::sun::star::lang::SystemDependent::SYSTEM_XWINDOW 139cdf0e10cSrcweir #endif 140cdf0e10cSrcweir 141cdf0e10cSrcweir TOOLKIT_DLLPUBLIC WinBits ImplGetWinBits( sal_uInt32 nComponentAttribs, sal_uInt16 nCompType ) 142cdf0e10cSrcweir { 143cdf0e10cSrcweir WinBits nWinBits = 0; 144cdf0e10cSrcweir 145cdf0e10cSrcweir sal_Bool bMessBox = sal_False; 146cdf0e10cSrcweir if ( ( nCompType == WINDOW_INFOBOX ) || 147cdf0e10cSrcweir ( nCompType == WINDOW_MESSBOX ) || 148cdf0e10cSrcweir ( nCompType == WINDOW_QUERYBOX ) || 149cdf0e10cSrcweir ( nCompType == WINDOW_WARNINGBOX ) || 150cdf0e10cSrcweir ( nCompType == WINDOW_ERRORBOX ) ) 151cdf0e10cSrcweir { 152cdf0e10cSrcweir bMessBox = sal_True; 153cdf0e10cSrcweir } 154cdf0e10cSrcweir 155cdf0e10cSrcweir bool bDecoratedWindow = false; 156cdf0e10cSrcweir if ( bMessBox 157cdf0e10cSrcweir || ( nCompType == WINDOW_DIALOG ) 158cdf0e10cSrcweir || ( nCompType == WINDOW_MODELESSDIALOG ) 159cdf0e10cSrcweir || ( nCompType == WINDOW_MODALDIALOG ) 160cdf0e10cSrcweir || ( nCompType == WINDOW_SYSTEMDIALOG ) 161cdf0e10cSrcweir || ( nCompType == WINDOW_PATHDIALOG ) 162cdf0e10cSrcweir || ( nCompType == WINDOW_FILEDIALOG ) 163cdf0e10cSrcweir || ( nCompType == WINDOW_PRINTERSETUPDIALOG ) 164cdf0e10cSrcweir || ( nCompType == WINDOW_PRINTDIALOG ) 165cdf0e10cSrcweir || ( nCompType == WINDOW_COLORDIALOG ) 166cdf0e10cSrcweir || ( nCompType == WINDOW_FONTDIALOG ) 167cdf0e10cSrcweir || ( nCompType == WINDOW_DOCKINGWINDOW ) 168cdf0e10cSrcweir || ( nCompType == WINDOW_TABDIALOG ) 169cdf0e10cSrcweir || ( nCompType == WINDOW_BUTTONDIALOG ) 170cdf0e10cSrcweir || ( nCompType == WINDOW_SYSTEMCHILDWINDOW ) 171cdf0e10cSrcweir ) 172cdf0e10cSrcweir { 173cdf0e10cSrcweir bDecoratedWindow = true; 174cdf0e10cSrcweir } 175cdf0e10cSrcweir 176cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::WindowAttribute::BORDER ) 177cdf0e10cSrcweir nWinBits |= WB_BORDER; 178cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::NOBORDER ) 179cdf0e10cSrcweir nWinBits |= WB_NOBORDER; 180cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::WindowAttribute::SIZEABLE ) 181cdf0e10cSrcweir nWinBits |= WB_SIZEABLE; 182cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::WindowAttribute::MOVEABLE ) 183cdf0e10cSrcweir nWinBits |= WB_MOVEABLE; 184cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::WindowAttribute::CLOSEABLE ) 185cdf0e10cSrcweir nWinBits |= WB_CLOSEABLE; 186cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::HSCROLL ) 187cdf0e10cSrcweir nWinBits |= WB_HSCROLL; 188cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::VSCROLL ) 189cdf0e10cSrcweir nWinBits |= WB_VSCROLL; 190cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::LEFT ) 191cdf0e10cSrcweir nWinBits |= WB_LEFT; 192cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::CENTER ) 193cdf0e10cSrcweir nWinBits |= WB_CENTER; 194cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::RIGHT ) 195cdf0e10cSrcweir nWinBits |= WB_RIGHT; 196cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::SPIN ) 197cdf0e10cSrcweir nWinBits |= WB_SPIN; 198cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::SORT ) 199cdf0e10cSrcweir nWinBits |= WB_SORT; 200cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::DROPDOWN ) 201cdf0e10cSrcweir nWinBits |= WB_DROPDOWN; 202cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::DEFBUTTON ) 203cdf0e10cSrcweir nWinBits |= WB_DEFBUTTON; 204cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::READONLY ) 205cdf0e10cSrcweir nWinBits |= WB_READONLY; 206cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::CLIPCHILDREN ) 207cdf0e10cSrcweir nWinBits |= WB_CLIPCHILDREN; 208cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::GROUP ) 209cdf0e10cSrcweir nWinBits |= WB_GROUP; 210cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::NOLABEL ) //added for issue79712 211cdf0e10cSrcweir nWinBits |= WB_NOLABEL; 212cdf0e10cSrcweir 213cdf0e10cSrcweir // These bits are not uniqe 214cdf0e10cSrcweir if ( bMessBox ) 215cdf0e10cSrcweir { 216cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::OK ) 217cdf0e10cSrcweir nWinBits |= WB_OK; 218cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::OK_CANCEL ) 219cdf0e10cSrcweir nWinBits |= WB_OK_CANCEL; 220cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::YES_NO ) 221cdf0e10cSrcweir nWinBits |= WB_YES_NO; 222cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::YES_NO_CANCEL ) 223cdf0e10cSrcweir nWinBits |= WB_YES_NO_CANCEL; 224cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::RETRY_CANCEL ) 225cdf0e10cSrcweir nWinBits |= WB_RETRY_CANCEL; 226cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::DEF_OK ) 227cdf0e10cSrcweir nWinBits |= WB_DEF_OK; 228cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::DEF_CANCEL ) 229cdf0e10cSrcweir nWinBits |= WB_DEF_CANCEL; 230cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::DEF_RETRY ) 231cdf0e10cSrcweir nWinBits |= WB_DEF_RETRY; 232cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::DEF_YES ) 233cdf0e10cSrcweir nWinBits |= WB_DEF_YES; 234cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::DEF_NO ) 235cdf0e10cSrcweir nWinBits |= WB_DEF_NO; 236cdf0e10cSrcweir } 237cdf0e10cSrcweir if ( nCompType == WINDOW_MULTILINEEDIT ) 238cdf0e10cSrcweir { 239cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::AUTOHSCROLL ) 240cdf0e10cSrcweir nWinBits |= WB_AUTOHSCROLL; 241cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::VclWindowPeerAttribute::AUTOVSCROLL ) 242cdf0e10cSrcweir nWinBits |= WB_AUTOVSCROLL; 243cdf0e10cSrcweir } 244cdf0e10cSrcweir 245cdf0e10cSrcweir 246cdf0e10cSrcweir if ( bDecoratedWindow ) 247cdf0e10cSrcweir { 248cdf0e10cSrcweir if( nComponentAttribs & ::com::sun::star::awt::WindowAttribute::NODECORATION ) 249cdf0e10cSrcweir { 250cdf0e10cSrcweir // No decoration removes several window attributes and must 251cdf0e10cSrcweir // set WB_NOBORDER! 252cdf0e10cSrcweir nWinBits &= ~WB_BORDER; 253cdf0e10cSrcweir nWinBits &= ~WB_SIZEABLE; 254cdf0e10cSrcweir nWinBits &= ~WB_MOVEABLE; 255cdf0e10cSrcweir nWinBits &= ~WB_CLOSEABLE; 256cdf0e10cSrcweir nWinBits |= WB_NOBORDER; 257cdf0e10cSrcweir } 258cdf0e10cSrcweir } 259cdf0e10cSrcweir 260cdf0e10cSrcweir return nWinBits; 261cdf0e10cSrcweir } 262cdf0e10cSrcweir 263cdf0e10cSrcweir struct ComponentInfo 264cdf0e10cSrcweir { 265cdf0e10cSrcweir const char* pName; 266cdf0e10cSrcweir WindowType nWinType; 267cdf0e10cSrcweir }; 268cdf0e10cSrcweir 269cdf0e10cSrcweir static ComponentInfo __FAR_DATA aComponentInfos [] = 270cdf0e10cSrcweir { 271cdf0e10cSrcweir { "buttondialog", WINDOW_BUTTONDIALOG }, 272cdf0e10cSrcweir { "cancelbutton", WINDOW_CANCELBUTTON }, 273cdf0e10cSrcweir { "checkbox", WINDOW_CHECKBOX }, 274cdf0e10cSrcweir { "combobox", WINDOW_COMBOBOX }, 275cdf0e10cSrcweir { "control", WINDOW_CONTROL }, 276cdf0e10cSrcweir { "currencybox", WINDOW_CURRENCYBOX }, 277cdf0e10cSrcweir { "currencyfield", WINDOW_CURRENCYFIELD }, 278cdf0e10cSrcweir { "datebox", WINDOW_DATEBOX }, 279cdf0e10cSrcweir { "datefield", WINDOW_DATEFIELD }, 280cdf0e10cSrcweir { "dialog", WINDOW_DIALOG }, 281cdf0e10cSrcweir { "dockingarea", WINDOW_DOCKINGAREA }, 282cdf0e10cSrcweir { "dockingwindow", WINDOW_DOCKINGWINDOW }, 283cdf0e10cSrcweir { "edit", WINDOW_EDIT }, 284cdf0e10cSrcweir { "errorbox", WINDOW_ERRORBOX }, 285cdf0e10cSrcweir { "fixedbitmap", WINDOW_FIXEDBITMAP }, 286cdf0e10cSrcweir { "fixedimage", WINDOW_FIXEDIMAGE }, 287cdf0e10cSrcweir { "fixedline", WINDOW_FIXEDLINE }, 288cdf0e10cSrcweir { "fixedtext", WINDOW_FIXEDTEXT }, 289cdf0e10cSrcweir { "floatingwindow", WINDOW_FLOATINGWINDOW }, 290cdf0e10cSrcweir { "framewindow", VCLWINDOW_FRAMEWINDOW }, 291cdf0e10cSrcweir { "groupbox", WINDOW_GROUPBOX }, 292cdf0e10cSrcweir { "helpbutton", WINDOW_HELPBUTTON }, 293cdf0e10cSrcweir { "imagebutton", WINDOW_IMAGEBUTTON }, 294cdf0e10cSrcweir { "imageradiobutton", WINDOW_IMAGERADIOBUTTON }, 295cdf0e10cSrcweir { "infobox", WINDOW_INFOBOX }, 296cdf0e10cSrcweir { "listbox", WINDOW_LISTBOX }, 297cdf0e10cSrcweir { "longcurrencybox", WINDOW_LONGCURRENCYBOX }, 298cdf0e10cSrcweir { "longcurrencyfield", WINDOW_LONGCURRENCYFIELD }, 299cdf0e10cSrcweir { "menubutton", WINDOW_MENUBUTTON }, 300cdf0e10cSrcweir { "messbox", WINDOW_MESSBOX }, 301cdf0e10cSrcweir { "metricbox", WINDOW_METRICBOX }, 302cdf0e10cSrcweir { "metricfield", WINDOW_METRICFIELD }, 303cdf0e10cSrcweir { "modaldialog", WINDOW_MODALDIALOG }, 304cdf0e10cSrcweir { "modelessdialog", WINDOW_MODELESSDIALOG }, 305cdf0e10cSrcweir { "morebutton", WINDOW_MOREBUTTON }, 306cdf0e10cSrcweir { "multilineedit", WINDOW_MULTILINEEDIT }, 307cdf0e10cSrcweir { "multilistbox", WINDOW_MULTILISTBOX }, 308cdf0e10cSrcweir { "numericbox", WINDOW_NUMERICBOX }, 309cdf0e10cSrcweir { "numericfield", WINDOW_NUMERICFIELD }, 310cdf0e10cSrcweir { "okbutton", WINDOW_OKBUTTON }, 311cdf0e10cSrcweir { "patternbox", WINDOW_PATTERNBOX }, 312cdf0e10cSrcweir { "patternfield", WINDOW_PATTERNFIELD }, 313cdf0e10cSrcweir { "pushbutton", WINDOW_PUSHBUTTON }, 314cdf0e10cSrcweir { "querybox", WINDOW_QUERYBOX }, 315cdf0e10cSrcweir { "radiobutton", WINDOW_RADIOBUTTON }, 316cdf0e10cSrcweir { "scrollbar", WINDOW_SCROLLBAR }, 317cdf0e10cSrcweir { "scrollbarbox", WINDOW_SCROLLBARBOX }, 318cdf0e10cSrcweir { "simpleanimation", WINDOW_CONTROL }, 319cdf0e10cSrcweir { "animatedimages", WINDOW_CONTROL }, 320cdf0e10cSrcweir { "spinbutton", WINDOW_SPINBUTTON }, 321cdf0e10cSrcweir { "spinfield", WINDOW_SPINFIELD }, 322cdf0e10cSrcweir { "throbber", WINDOW_CONTROL }, 323cdf0e10cSrcweir { "splitter", WINDOW_SPLITTER }, 324cdf0e10cSrcweir { "splitwindow", WINDOW_SPLITWINDOW }, 325cdf0e10cSrcweir { "statusbar", WINDOW_STATUSBAR }, 326cdf0e10cSrcweir { "systemchildwindow", VCLWINDOW_SYSTEMCHILDWINDOW }, 327cdf0e10cSrcweir { "tabcontrol", WINDOW_TABCONTROL }, 328cdf0e10cSrcweir { "tabdialog", WINDOW_TABDIALOG }, 329cdf0e10cSrcweir { "tabpage", WINDOW_TABPAGE }, 330cdf0e10cSrcweir { "timebox", WINDOW_TIMEBOX }, 331cdf0e10cSrcweir { "timefield", WINDOW_TIMEFIELD }, 332cdf0e10cSrcweir { "toolbox", WINDOW_TOOLBOX }, 333cdf0e10cSrcweir { "tristatebox", WINDOW_TRISTATEBOX }, 334cdf0e10cSrcweir { "warningbox", WINDOW_WARNINGBOX }, 335cdf0e10cSrcweir { "window", WINDOW_WINDOW }, 336cdf0e10cSrcweir { "workwindow", WINDOW_WORKWINDOW }, 337cdf0e10cSrcweir { "tabpagecontainer", WINDOW_CONTROL }, 338cdf0e10cSrcweir { "tabpagemodel", WINDOW_TABPAGE } 339cdf0e10cSrcweir }; 340cdf0e10cSrcweir 341cdf0e10cSrcweir extern "C" 342cdf0e10cSrcweir { 343cdf0e10cSrcweir static int 344cdf0e10cSrcweir #if defined( WNT ) 345cdf0e10cSrcweir __cdecl 346cdf0e10cSrcweir #endif 347cdf0e10cSrcweir #if defined( ICC ) && defined( OS2 ) 348cdf0e10cSrcweir _Optlink 349cdf0e10cSrcweir #endif 350cdf0e10cSrcweir ComponentInfoCompare( const void* pFirst, const void* pSecond) 351cdf0e10cSrcweir { 352cdf0e10cSrcweir return( strcmp( ((ComponentInfo*)pFirst)->pName, 353cdf0e10cSrcweir ((ComponentInfo*)pSecond)->pName ) ); 354cdf0e10cSrcweir } 355cdf0e10cSrcweir } 356cdf0e10cSrcweir 357cdf0e10cSrcweir sal_uInt16 ImplGetComponentType( const String& rServiceName ) 358cdf0e10cSrcweir { 359cdf0e10cSrcweir static sal_Bool bSorted = sal_False; 360cdf0e10cSrcweir if( !bSorted ) 361cdf0e10cSrcweir { 362cdf0e10cSrcweir qsort( (void*) aComponentInfos, 363cdf0e10cSrcweir sizeof( aComponentInfos ) / sizeof( ComponentInfo ), 364cdf0e10cSrcweir sizeof( ComponentInfo ), 365cdf0e10cSrcweir ComponentInfoCompare ); 366cdf0e10cSrcweir bSorted = sal_True; 367cdf0e10cSrcweir } 368cdf0e10cSrcweir 369cdf0e10cSrcweir 370cdf0e10cSrcweir ComponentInfo aSearch; 371cdf0e10cSrcweir ByteString aServiceName( rServiceName, gsl_getSystemTextEncoding() ); 372cdf0e10cSrcweir aServiceName.ToLowerAscii(); 373cdf0e10cSrcweir if ( aServiceName.Len() ) 374cdf0e10cSrcweir aSearch.pName = aServiceName.GetBuffer(); 375cdf0e10cSrcweir else 376cdf0e10cSrcweir aSearch.pName = "window"; 377cdf0e10cSrcweir 378cdf0e10cSrcweir ComponentInfo* pInf = (ComponentInfo*) bsearch( &aSearch, 379cdf0e10cSrcweir (void*) aComponentInfos, 380cdf0e10cSrcweir sizeof( aComponentInfos ) / sizeof( ComponentInfo ), 381cdf0e10cSrcweir sizeof( ComponentInfo ), 382cdf0e10cSrcweir ComponentInfoCompare ); 383cdf0e10cSrcweir 384cdf0e10cSrcweir return pInf ? pInf->nWinType : 0; 385cdf0e10cSrcweir } 386cdf0e10cSrcweir 387cdf0e10cSrcweir 388cdf0e10cSrcweir // ---------------------------------------------------- 389cdf0e10cSrcweir // class VCLXToolkit 390cdf0e10cSrcweir // ---------------------------------------------------- 391cdf0e10cSrcweir 392cdf0e10cSrcweir static sal_Int32 nVCLToolkitInstanceCount = 0; 393cdf0e10cSrcweir static sal_Bool bInitedByVCLToolkit = sal_False; 394cdf0e10cSrcweir //static cppu::OInterfaceContainerHelper * pToolkits = 0; 395cdf0e10cSrcweir 396cdf0e10cSrcweir static osl::Mutex & getInitMutex() 397cdf0e10cSrcweir { 398cdf0e10cSrcweir static osl::Mutex * pM; 399cdf0e10cSrcweir if( !pM ) 400cdf0e10cSrcweir { 401cdf0e10cSrcweir osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); 402cdf0e10cSrcweir if( !pM ) 403cdf0e10cSrcweir { 404cdf0e10cSrcweir static osl::Mutex aMutex; 405cdf0e10cSrcweir pM = &aMutex; 406cdf0e10cSrcweir } 407cdf0e10cSrcweir } 408cdf0e10cSrcweir return *pM; 409cdf0e10cSrcweir } 410cdf0e10cSrcweir 411cdf0e10cSrcweir static osl::Condition & getInitCondition() 412cdf0e10cSrcweir { 413cdf0e10cSrcweir static osl::Condition * pC = 0; 414cdf0e10cSrcweir if( !pC ) 415cdf0e10cSrcweir { 416cdf0e10cSrcweir osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); 417cdf0e10cSrcweir if( !pC ) 418cdf0e10cSrcweir { 419cdf0e10cSrcweir static osl::Condition aCondition; 420cdf0e10cSrcweir pC = &aCondition; 421cdf0e10cSrcweir } 422cdf0e10cSrcweir } 423cdf0e10cSrcweir return *pC; 424cdf0e10cSrcweir } 425cdf0e10cSrcweir 426cdf0e10cSrcweir struct ToolkitThreadData 427cdf0e10cSrcweir { 428cdf0e10cSrcweir VCLXToolkit * pTk; 429cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xSMgr; 430cdf0e10cSrcweir 431cdf0e10cSrcweir ToolkitThreadData( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & rSMgr, VCLXToolkit * pTk_ ) 432cdf0e10cSrcweir : pTk( pTk_ ) 433cdf0e10cSrcweir , xSMgr( rSMgr ) 434cdf0e10cSrcweir { 435cdf0e10cSrcweir } 436cdf0e10cSrcweir }; 437cdf0e10cSrcweir 438cdf0e10cSrcweir extern "C" 439cdf0e10cSrcweir { 440cdf0e10cSrcweir static void SAL_CALL ToolkitWorkerFunction( void* pArgs ) 441cdf0e10cSrcweir { 442cdf0e10cSrcweir ToolkitThreadData * pTTD = (ToolkitThreadData *)pArgs; 443cdf0e10cSrcweir bInitedByVCLToolkit = InitVCL( pTTD->xSMgr ); 444cdf0e10cSrcweir if( bInitedByVCLToolkit ) 445cdf0e10cSrcweir { 446cdf0e10cSrcweir UnoWrapper* pUnoWrapper = new UnoWrapper( pTTD->pTk ); 447cdf0e10cSrcweir Application::SetUnoWrapper( pUnoWrapper ); 448cdf0e10cSrcweir } 449cdf0e10cSrcweir getInitCondition().set(); 450cdf0e10cSrcweir if( bInitedByVCLToolkit ) 451cdf0e10cSrcweir { 452cdf0e10cSrcweir { 453cdf0e10cSrcweir osl::Guard< vos::IMutex > aGuard( Application::GetSolarMutex() ); 454cdf0e10cSrcweir Application::Execute(); 455cdf0e10cSrcweir } 456cdf0e10cSrcweir try 457cdf0e10cSrcweir { 458cdf0e10cSrcweir pTTD->pTk->dispose(); 459cdf0e10cSrcweir } 460cdf0e10cSrcweir catch( com::sun::star::uno::Exception & ) 461cdf0e10cSrcweir { 462cdf0e10cSrcweir } 463cdf0e10cSrcweir /* 464cdf0e10cSrcweir if( pToolkits ) 465cdf0e10cSrcweir { 466cdf0e10cSrcweir cppu::OInterfaceIteratorHelper aIt( *pToolkits ); 467cdf0e10cSrcweir ::com::sun::star::uno::XInterface * pI; 468cdf0e10cSrcweir while( pI = aIt.next() ) 469cdf0e10cSrcweir ((::com::sun::star::lang::XComponent *)pI)->dispose(); 470cdf0e10cSrcweir 471cdf0e10cSrcweir // delete toolkit container 472cdf0e10cSrcweir osl::Guard< osl::Mutex > aGuard( getInitMutex() ); 473cdf0e10cSrcweir delete pToolkits; 474cdf0e10cSrcweir pToolkits = 0; 475cdf0e10cSrcweir } 476cdf0e10cSrcweir */ 477cdf0e10cSrcweir DeInitVCL(); 478cdf0e10cSrcweir } 479cdf0e10cSrcweir else 480cdf0e10cSrcweir { 481cdf0e10cSrcweir JoinMainLoopThread(); 482cdf0e10cSrcweir } 483cdf0e10cSrcweir delete pTTD; 484cdf0e10cSrcweir } 485cdf0e10cSrcweir } 486cdf0e10cSrcweir 487cdf0e10cSrcweir // contructor, which might initialize VCL 488cdf0e10cSrcweir VCLXToolkit::VCLXToolkit( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & rSMgr ): 489cdf0e10cSrcweir cppu::WeakComponentImplHelper7< 490cdf0e10cSrcweir ::com::sun::star::awt::XToolkit, 491cdf0e10cSrcweir ::com::sun::star::lang::XServiceInfo, 492cdf0e10cSrcweir ::com::sun::star::awt::XSystemChildFactory, 493cdf0e10cSrcweir ::com::sun::star::awt::XMessageBoxFactory, 494cdf0e10cSrcweir ::com::sun::star::awt::XDataTransferProviderAccess, 495cdf0e10cSrcweir ::com::sun::star::awt::XExtendedToolkit, 496cdf0e10cSrcweir ::com::sun::star::awt::XReschedule>( GetMutex() ), 497cdf0e10cSrcweir m_aTopWindowListeners(rBHelper.rMutex), 498cdf0e10cSrcweir m_aKeyHandlers(rBHelper.rMutex), 499cdf0e10cSrcweir m_aFocusListeners(rBHelper.rMutex), 500cdf0e10cSrcweir m_aEventListenerLink(LINK(this, VCLXToolkit, eventListenerHandler)), 501cdf0e10cSrcweir m_aKeyListenerLink(LINK(this, VCLXToolkit, keyListenerHandler)), 502cdf0e10cSrcweir m_bEventListener(false), 503cdf0e10cSrcweir m_bKeyListener(false) 504cdf0e10cSrcweir { 505cdf0e10cSrcweir hSvToolsLib = NULL; 506cdf0e10cSrcweir fnSvtCreateWindow = NULL; 507cdf0e10cSrcweir 508cdf0e10cSrcweir osl::Guard< osl::Mutex > aGuard( getInitMutex() ); 509cdf0e10cSrcweir nVCLToolkitInstanceCount++; 510cdf0e10cSrcweir if( ( nVCLToolkitInstanceCount == 1 ) && ( !Application::IsInMain() ) ) 511cdf0e10cSrcweir { 512cdf0e10cSrcweir // setup execute thread 513cdf0e10cSrcweir CreateMainLoopThread( ToolkitWorkerFunction, new ToolkitThreadData( rSMgr, this ) ); 514cdf0e10cSrcweir getInitCondition().wait(); 515cdf0e10cSrcweir /* 516cdf0e10cSrcweir if( bInitedByVCLToolkit ) 517cdf0e10cSrcweir { 518cdf0e10cSrcweir // insert in disposing list 519cdf0e10cSrcweir if( !pToolkits ) 520cdf0e10cSrcweir pToolkits = new cppu::OInterfaceContainerHelper( getInitMutex() ); 521cdf0e10cSrcweir pToolkits->addInterface( (::com::sun::star::lang::XComponent *)this ); 522cdf0e10cSrcweir } 523cdf0e10cSrcweir */ 524cdf0e10cSrcweir } 525cdf0e10cSrcweir } 526cdf0e10cSrcweir 527cdf0e10cSrcweir VCLXToolkit::~VCLXToolkit() 528cdf0e10cSrcweir { 529cdf0e10cSrcweir } 530cdf0e10cSrcweir 531cdf0e10cSrcweir 532cdf0e10cSrcweir void SAL_CALL VCLXToolkit::disposing() 533cdf0e10cSrcweir { 534cdf0e10cSrcweir if ( hSvToolsLib ) 535cdf0e10cSrcweir { 536cdf0e10cSrcweir osl_unloadModule( hSvToolsLib ); 537cdf0e10cSrcweir hSvToolsLib = NULL; 538cdf0e10cSrcweir fnSvtCreateWindow = NULL; 539cdf0e10cSrcweir } 540cdf0e10cSrcweir 541cdf0e10cSrcweir { 542cdf0e10cSrcweir osl::Guard< osl::Mutex > aGuard( getInitMutex() ); 543cdf0e10cSrcweir if( --nVCLToolkitInstanceCount == 0 ) 544cdf0e10cSrcweir { 545cdf0e10cSrcweir if( bInitedByVCLToolkit ) 546cdf0e10cSrcweir { 547cdf0e10cSrcweir Application::Quit(); 548cdf0e10cSrcweir JoinMainLoopThread(); 549cdf0e10cSrcweir bInitedByVCLToolkit = sal_False; 550cdf0e10cSrcweir } 551cdf0e10cSrcweir } 552cdf0e10cSrcweir } 553cdf0e10cSrcweir 554cdf0e10cSrcweir if (m_bEventListener) 555cdf0e10cSrcweir { 556cdf0e10cSrcweir ::Application::RemoveEventListener(m_aEventListenerLink); 557cdf0e10cSrcweir m_bEventListener = false; 558cdf0e10cSrcweir } 559cdf0e10cSrcweir if (m_bKeyListener) 560cdf0e10cSrcweir { 561cdf0e10cSrcweir ::Application::RemoveKeyListener(m_aKeyListenerLink); 562cdf0e10cSrcweir m_bKeyListener = false; 563cdf0e10cSrcweir } 564cdf0e10cSrcweir ::css::lang::EventObject aEvent( 565cdf0e10cSrcweir static_cast< ::cppu::OWeakObject * >(this)); 566cdf0e10cSrcweir m_aTopWindowListeners.disposeAndClear(aEvent); 567cdf0e10cSrcweir m_aKeyHandlers.disposeAndClear(aEvent); 568cdf0e10cSrcweir m_aFocusListeners.disposeAndClear(aEvent); 569cdf0e10cSrcweir 570cdf0e10cSrcweir /* 571cdf0e10cSrcweir osl::Guard< osl::Mutex > aGuard( getInitMutex() ); 572cdf0e10cSrcweir // insert in disposing list 573cdf0e10cSrcweir if( pToolkits ) 574cdf0e10cSrcweir { 575cdf0e10cSrcweir // remove from the disposing list 576cdf0e10cSrcweir pToolkits->removeInterface( (::com::sun::star::lang::XComponent *)this ); 577cdf0e10cSrcweir } 578cdf0e10cSrcweir */ 579cdf0e10cSrcweir } 580cdf0e10cSrcweir 581cdf0e10cSrcweir 582cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > VCLXToolkit::getDesktopWindow( ) throw(::com::sun::star::uno::RuntimeException) 583cdf0e10cSrcweir { 584cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > xRef; 585cdf0e10cSrcweir // 07/00: AppWindow doesn't exist anymore... 586cdf0e10cSrcweir return xRef; 587cdf0e10cSrcweir } 588cdf0e10cSrcweir 589cdf0e10cSrcweir ::com::sun::star::awt::Rectangle VCLXToolkit::getWorkArea( ) throw(::com::sun::star::uno::RuntimeException) 590cdf0e10cSrcweir { 591cdf0e10cSrcweir ::com::sun::star::awt::Rectangle aRect; 592cdf0e10cSrcweir // 07/00: AppWindow doesn't exist anymore... 593cdf0e10cSrcweir return aRect; 594cdf0e10cSrcweir } 595cdf0e10cSrcweir 596cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > VCLXToolkit::createWindow( const ::com::sun::star::awt::WindowDescriptor& rDescriptor ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException) 597cdf0e10cSrcweir { 598*ff7e158dSSteve Yin //IAccessibility2 Implementation 2009----- 599*ff7e158dSSteve Yin #ifdef WNT 600*ff7e158dSSteve Yin CEnableAccessInterface e; 601*ff7e158dSSteve Yin #endif 602*ff7e158dSSteve Yin //-----IAccessibility2 Implementation 2009 603cdf0e10cSrcweir return ImplCreateWindow( rDescriptor, WinBits(0) ); 604cdf0e10cSrcweir } 605cdf0e10cSrcweir 606cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDevice > VCLXToolkit::createScreenCompatibleDevice( sal_Int32 Width, sal_Int32 Height ) throw(::com::sun::star::uno::RuntimeException) 607cdf0e10cSrcweir { 608cdf0e10cSrcweir ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); 609cdf0e10cSrcweir 610cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDevice > xRef; 611cdf0e10cSrcweir VCLXVirtualDevice* pVDev = new VCLXVirtualDevice; 612cdf0e10cSrcweir 613cdf0e10cSrcweir osl::Guard< vos::IMutex > aSolarGuard( Application::GetSolarMutex() ); 614cdf0e10cSrcweir 615cdf0e10cSrcweir VirtualDevice* pV = new VirtualDevice; 616cdf0e10cSrcweir pV->SetOutputSizePixel( Size( Width, Height ) ); 617cdf0e10cSrcweir pVDev->SetVirtualDevice( pV ); 618cdf0e10cSrcweir 619cdf0e10cSrcweir xRef = pVDev; 620cdf0e10cSrcweir return xRef; 621cdf0e10cSrcweir } 622cdf0e10cSrcweir 623cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XRegion > VCLXToolkit::createRegion( ) throw(::com::sun::star::uno::RuntimeException) 624cdf0e10cSrcweir { 625cdf0e10cSrcweir ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); 626cdf0e10cSrcweir 627cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XRegion > xRef = new VCLXRegion; 628cdf0e10cSrcweir return xRef; 629cdf0e10cSrcweir } 630cdf0e10cSrcweir 631cdf0e10cSrcweir Window* VCLXToolkit::ImplCreateWindow( VCLXWindow** ppNewComp, 632cdf0e10cSrcweir const ::com::sun::star::awt::WindowDescriptor& rDescriptor, 633cdf0e10cSrcweir Window* pParent, WinBits nWinBits ) 634cdf0e10cSrcweir { 635cdf0e10cSrcweir String aServiceName( rDescriptor.WindowServiceName ); 636cdf0e10cSrcweir aServiceName.ToLowerAscii(); 637cdf0e10cSrcweir 638cdf0e10cSrcweir Window* pNewWindow = NULL; 639cdf0e10cSrcweir sal_uInt16 nType = ImplGetComponentType( aServiceName ); 640cdf0e10cSrcweir 641cdf0e10cSrcweir if ( !pParent ) 642cdf0e10cSrcweir { 643cdf0e10cSrcweir // Wenn die Component einen Parent braucht, dann NULL zurueckgeben, 644cdf0e10cSrcweir // spaeter mal ::com::sun::star::uno::Exception... 645cdf0e10cSrcweir sal_Bool bException = sal_True; 646cdf0e10cSrcweir if ( ( nType == WINDOW_DIALOG ) 647cdf0e10cSrcweir || ( nType == WINDOW_MODALDIALOG ) 648cdf0e10cSrcweir || ( nType == WINDOW_MODELESSDIALOG ) 649cdf0e10cSrcweir || ( nType == WINDOW_MESSBOX ) 650cdf0e10cSrcweir || ( nType == WINDOW_INFOBOX ) 651cdf0e10cSrcweir || ( nType == WINDOW_WARNINGBOX ) 652cdf0e10cSrcweir || ( nType == WINDOW_ERRORBOX ) 653cdf0e10cSrcweir || ( nType == WINDOW_QUERYBOX ) 654cdf0e10cSrcweir ) 655cdf0e10cSrcweir bException = sal_False; 656cdf0e10cSrcweir else if ( ( nType == WINDOW_WINDOW ) || 657cdf0e10cSrcweir ( nType == WINDOW_WORKWINDOW ) || 658cdf0e10cSrcweir ( nType == VCLWINDOW_FRAMEWINDOW ) ) 659cdf0e10cSrcweir { 660cdf0e10cSrcweir if ( rDescriptor.Type == ::com::sun::star::awt::WindowClass_TOP ) 661cdf0e10cSrcweir bException = sal_False; 662cdf0e10cSrcweir } 663cdf0e10cSrcweir 664cdf0e10cSrcweir if ( bException ) 665cdf0e10cSrcweir { 666cdf0e10cSrcweir *ppNewComp = NULL; 667cdf0e10cSrcweir return NULL; 668cdf0e10cSrcweir } 669cdf0e10cSrcweir } 670cdf0e10cSrcweir 671cdf0e10cSrcweir if ( nType ) 672cdf0e10cSrcweir { 673cdf0e10cSrcweir vos::OGuard aVclGuard( Application::GetSolarMutex() ); 674cdf0e10cSrcweir switch ( (WindowType)nType ) 675cdf0e10cSrcweir { 676cdf0e10cSrcweir case WINDOW_CANCELBUTTON: 677cdf0e10cSrcweir pNewWindow = new CancelButton( pParent, nWinBits ); 678cdf0e10cSrcweir *ppNewComp = new VCLXButton; 679cdf0e10cSrcweir break; 680cdf0e10cSrcweir case WINDOW_CHECKBOX: 681cdf0e10cSrcweir pNewWindow = new CheckBox( pParent, nWinBits ); 682cdf0e10cSrcweir *ppNewComp = new VCLXCheckBox; 683cdf0e10cSrcweir break; 684cdf0e10cSrcweir case WINDOW_COMBOBOX: 685cdf0e10cSrcweir pNewWindow = new ComboBox( pParent, nWinBits|WB_AUTOHSCROLL ); 686cdf0e10cSrcweir ((ComboBox*)pNewWindow)->EnableAutoSize( sal_False ); 687cdf0e10cSrcweir *ppNewComp = new VCLXComboBox; 688cdf0e10cSrcweir break; 689cdf0e10cSrcweir case WINDOW_CURRENCYBOX: 690cdf0e10cSrcweir pNewWindow = new CurrencyBox( pParent, nWinBits ); 691cdf0e10cSrcweir break; 692cdf0e10cSrcweir case WINDOW_CURRENCYFIELD: 693cdf0e10cSrcweir pNewWindow = new CurrencyField( pParent, nWinBits ); 694cdf0e10cSrcweir static_cast<CurrencyField*>(pNewWindow)->EnableEmptyFieldValue( sal_True ); 695cdf0e10cSrcweir *ppNewComp = new VCLXNumericField; 696cdf0e10cSrcweir ((VCLXFormattedSpinField*)*ppNewComp)->SetFormatter( (FormatterBase*)(CurrencyField*)pNewWindow ); 697cdf0e10cSrcweir break; 698cdf0e10cSrcweir case WINDOW_DATEBOX: 699cdf0e10cSrcweir pNewWindow = new DateBox( pParent, nWinBits ); 700cdf0e10cSrcweir break; 701cdf0e10cSrcweir case WINDOW_DATEFIELD: 702cdf0e10cSrcweir pNewWindow = new DateField( pParent, nWinBits ); 703cdf0e10cSrcweir static_cast<DateField*>(pNewWindow)->EnableEmptyFieldValue( sal_True ); 704cdf0e10cSrcweir *ppNewComp = new VCLXDateField; 705cdf0e10cSrcweir ((VCLXFormattedSpinField*)*ppNewComp)->SetFormatter( (FormatterBase*)(DateField*)pNewWindow ); 706cdf0e10cSrcweir break; 707cdf0e10cSrcweir case WINDOW_DOCKINGAREA: 708cdf0e10cSrcweir pNewWindow = new DockingAreaWindow( pParent ); 709cdf0e10cSrcweir break; 710cdf0e10cSrcweir case WINDOW_MULTILINEEDIT: 711cdf0e10cSrcweir case WINDOW_EDIT: 712cdf0e10cSrcweir pNewWindow = new Edit( pParent, nWinBits ); 713cdf0e10cSrcweir *ppNewComp = new VCLXEdit; 714cdf0e10cSrcweir break; 715cdf0e10cSrcweir case WINDOW_ERRORBOX: 716cdf0e10cSrcweir pNewWindow = new ErrorBox( pParent, nWinBits, String() ); 717cdf0e10cSrcweir *ppNewComp = new VCLXMessageBox; 718cdf0e10cSrcweir break; 719cdf0e10cSrcweir case WINDOW_FIXEDBITMAP: 720cdf0e10cSrcweir pNewWindow = new FixedBitmap( pParent, nWinBits ); 721cdf0e10cSrcweir break; 722cdf0e10cSrcweir case WINDOW_FIXEDIMAGE: 723cdf0e10cSrcweir pNewWindow = new ImageControl( pParent, nWinBits ); 724cdf0e10cSrcweir *ppNewComp = new VCLXImageControl; 725cdf0e10cSrcweir break; 726cdf0e10cSrcweir case WINDOW_FIXEDLINE: 727cdf0e10cSrcweir pNewWindow = new FixedLine( pParent, nWinBits ); 728cdf0e10cSrcweir break; 729cdf0e10cSrcweir case WINDOW_FIXEDTEXT: 730cdf0e10cSrcweir pNewWindow = new FixedText( pParent, nWinBits ); 731cdf0e10cSrcweir *ppNewComp = new VCLXFixedText; 732cdf0e10cSrcweir break; 733cdf0e10cSrcweir case WINDOW_FLOATINGWINDOW: 734cdf0e10cSrcweir pNewWindow = new FloatingWindow( pParent, nWinBits ); 735cdf0e10cSrcweir break; 736cdf0e10cSrcweir case WINDOW_GROUPBOX: 737cdf0e10cSrcweir pNewWindow = new GroupBox( pParent, nWinBits ); 738cdf0e10cSrcweir break; 739cdf0e10cSrcweir case WINDOW_HELPBUTTON: 740cdf0e10cSrcweir pNewWindow = new HelpButton( pParent, nWinBits ); 741cdf0e10cSrcweir *ppNewComp = new VCLXButton; 742cdf0e10cSrcweir break; 743cdf0e10cSrcweir case WINDOW_IMAGEBUTTON: 744cdf0e10cSrcweir pNewWindow = new ImageButton( pParent, nWinBits ); 745cdf0e10cSrcweir *ppNewComp = new VCLXButton; 746cdf0e10cSrcweir break; 747cdf0e10cSrcweir case WINDOW_IMAGERADIOBUTTON: 748cdf0e10cSrcweir pNewWindow = new ImageRadioButton( pParent, nWinBits ); 749cdf0e10cSrcweir *ppNewComp = new VCLXButton; 750cdf0e10cSrcweir break; 751cdf0e10cSrcweir case WINDOW_INFOBOX: 752cdf0e10cSrcweir pNewWindow = new InfoBox( pParent, String() ); 753cdf0e10cSrcweir *ppNewComp = new VCLXMessageBox; 754cdf0e10cSrcweir break; 755cdf0e10cSrcweir case WINDOW_LISTBOX: 756cdf0e10cSrcweir pNewWindow = new ListBox( pParent, nWinBits|WB_SIMPLEMODE|WB_AUTOHSCROLL ); 757cdf0e10cSrcweir ((ListBox*)pNewWindow)->EnableAutoSize( sal_False ); 758cdf0e10cSrcweir *ppNewComp = new VCLXListBox; 759cdf0e10cSrcweir break; 760cdf0e10cSrcweir case WINDOW_LONGCURRENCYBOX: 761cdf0e10cSrcweir pNewWindow = new LongCurrencyBox( pParent, nWinBits ); 762cdf0e10cSrcweir break; 763cdf0e10cSrcweir case WINDOW_LONGCURRENCYFIELD: 764cdf0e10cSrcweir pNewWindow = new LongCurrencyField( pParent, nWinBits ); 765cdf0e10cSrcweir *ppNewComp = new VCLXCurrencyField; 766cdf0e10cSrcweir ((VCLXFormattedSpinField*)*ppNewComp)->SetFormatter( (FormatterBase*)(LongCurrencyField*)pNewWindow ); 767cdf0e10cSrcweir break; 768cdf0e10cSrcweir case WINDOW_MENUBUTTON: 769cdf0e10cSrcweir pNewWindow = new MenuButton( pParent, nWinBits ); 770cdf0e10cSrcweir *ppNewComp = new VCLXButton; 771cdf0e10cSrcweir break; 772cdf0e10cSrcweir case WINDOW_MESSBOX: 773cdf0e10cSrcweir pNewWindow = new MessBox( pParent, nWinBits, String(), String() ); 774cdf0e10cSrcweir *ppNewComp = new VCLXMessageBox; 775cdf0e10cSrcweir break; 776cdf0e10cSrcweir case WINDOW_METRICBOX: 777cdf0e10cSrcweir pNewWindow = new MetricBox( pParent, nWinBits ); 778cdf0e10cSrcweir break; 779cdf0e10cSrcweir case WINDOW_METRICFIELD: 780cdf0e10cSrcweir pNewWindow = new MetricField( pParent, nWinBits ); 781cdf0e10cSrcweir *ppNewComp = new VCLXMetricField; 782cdf0e10cSrcweir ((VCLXFormattedSpinField*)*ppNewComp)->SetFormatter( (FormatterBase*)(MetricField*)pNewWindow ); 783cdf0e10cSrcweir break; 784cdf0e10cSrcweir case WINDOW_DIALOG: 785cdf0e10cSrcweir case WINDOW_MODALDIALOG: 786cdf0e10cSrcweir case WINDOW_MODELESSDIALOG: 787cdf0e10cSrcweir { 788cdf0e10cSrcweir // Modal/Modeless nur durch Show/Execute 789cdf0e10cSrcweir if ( (pParent == NULL ) && ( rDescriptor.ParentIndex == -1 ) ) 790cdf0e10cSrcweir pParent = DIALOG_NO_PARENT; 791cdf0e10cSrcweir pNewWindow = new Dialog( pParent, nWinBits ); 792cdf0e10cSrcweir // #i70217# Don't always create a new component object. It's possible that VCL has called 793cdf0e10cSrcweir // GetComponentInterface( sal_True ) in the Dialog ctor itself (see Window::IsTopWindow() ) 794cdf0e10cSrcweir // which creates a component object. 795cdf0e10cSrcweir css::uno::Reference< css::awt::XWindowPeer > xWinPeer = pNewWindow->GetComponentInterface( sal_False ); 796cdf0e10cSrcweir if ( xWinPeer.is() ) 797cdf0e10cSrcweir *ppNewComp = dynamic_cast< VCLXDialog* >( xWinPeer.get() ); 798cdf0e10cSrcweir else 799cdf0e10cSrcweir *ppNewComp = new VCLXDialog; 800cdf0e10cSrcweir } 801cdf0e10cSrcweir break; 802cdf0e10cSrcweir case WINDOW_MOREBUTTON: 803cdf0e10cSrcweir pNewWindow = new MoreButton( pParent, nWinBits ); 804cdf0e10cSrcweir *ppNewComp = new VCLXButton; 805cdf0e10cSrcweir break; 806cdf0e10cSrcweir case WINDOW_MULTILISTBOX: 807cdf0e10cSrcweir pNewWindow = new MultiListBox( pParent, nWinBits ); 808cdf0e10cSrcweir *ppNewComp = new VCLXListBox; 809cdf0e10cSrcweir break; 810cdf0e10cSrcweir case WINDOW_NUMERICBOX: 811cdf0e10cSrcweir pNewWindow = new NumericBox( pParent, nWinBits ); 812cdf0e10cSrcweir break; 813cdf0e10cSrcweir case WINDOW_NUMERICFIELD: 814cdf0e10cSrcweir pNewWindow = new NumericField( pParent, nWinBits ); 815cdf0e10cSrcweir static_cast<NumericField*>(pNewWindow)->EnableEmptyFieldValue( sal_True ); 816cdf0e10cSrcweir *ppNewComp = new VCLXNumericField; 817cdf0e10cSrcweir ((VCLXFormattedSpinField*)*ppNewComp)->SetFormatter( (FormatterBase*)(NumericField*)pNewWindow ); 818cdf0e10cSrcweir break; 819cdf0e10cSrcweir case WINDOW_OKBUTTON: 820cdf0e10cSrcweir pNewWindow = new OKButton( pParent, nWinBits ); 821cdf0e10cSrcweir *ppNewComp = new VCLXButton; 822cdf0e10cSrcweir break; 823cdf0e10cSrcweir case WINDOW_PATTERNBOX: 824cdf0e10cSrcweir pNewWindow = new PatternBox( pParent, nWinBits ); 825cdf0e10cSrcweir break; 826cdf0e10cSrcweir case WINDOW_PATTERNFIELD: 827cdf0e10cSrcweir pNewWindow = new PatternField( pParent, nWinBits ); 828cdf0e10cSrcweir *ppNewComp = new VCLXPatternField; 829cdf0e10cSrcweir ((VCLXFormattedSpinField*)*ppNewComp)->SetFormatter( (FormatterBase*)(PatternField*)pNewWindow ); 830cdf0e10cSrcweir break; 831cdf0e10cSrcweir case WINDOW_PUSHBUTTON: 832cdf0e10cSrcweir pNewWindow = new PushButton( pParent, nWinBits ); 833cdf0e10cSrcweir *ppNewComp = new VCLXButton; 834cdf0e10cSrcweir break; 835cdf0e10cSrcweir case WINDOW_QUERYBOX: 836cdf0e10cSrcweir pNewWindow = new QueryBox( pParent, nWinBits, String() ); 837cdf0e10cSrcweir *ppNewComp = new VCLXMessageBox; 838cdf0e10cSrcweir break; 839cdf0e10cSrcweir case WINDOW_RADIOBUTTON: 840cdf0e10cSrcweir pNewWindow = new RadioButton( pParent, nWinBits ); 841cdf0e10cSrcweir *ppNewComp = new VCLXRadioButton; 842cdf0e10cSrcweir 843cdf0e10cSrcweir // by default, disable RadioCheck 844cdf0e10cSrcweir // Since the VCLXRadioButton really cares for it's RadioCheck settings, this is important: 845cdf0e10cSrcweir // if we enable it, the VCLXRadioButton will use RadioButton::Check instead of RadioButton::SetState 846cdf0e10cSrcweir // This leads to a strange behaviour if the control is newly created: when settings the initial 847cdf0e10cSrcweir // state to "checked", the RadioButton::Check (called because RadioCheck=sal_True) will uncheck 848cdf0e10cSrcweir // _all_other_ radio buttons in the same group. However, at this moment the grouping of the controls 849cdf0e10cSrcweir // is not really valid: the controls are grouped after they have been created, but we're still in 850cdf0e10cSrcweir // the creation process, so the RadioButton::Check relies on invalid grouping information. 851cdf0e10cSrcweir // 07.08.2001 - #87254# - frank.schoenheit@sun.com 852cdf0e10cSrcweir static_cast<RadioButton*>(pNewWindow)->EnableRadioCheck( sal_False ); 853cdf0e10cSrcweir break; 854cdf0e10cSrcweir case WINDOW_SCROLLBAR: 855cdf0e10cSrcweir pNewWindow = new ScrollBar( pParent, nWinBits ); 856cdf0e10cSrcweir *ppNewComp = new VCLXScrollBar; 857cdf0e10cSrcweir break; 858cdf0e10cSrcweir case WINDOW_SCROLLBARBOX: 859cdf0e10cSrcweir pNewWindow = new ScrollBarBox( pParent, nWinBits ); 860cdf0e10cSrcweir break; 861cdf0e10cSrcweir case WINDOW_SPINBUTTON: 862cdf0e10cSrcweir pNewWindow = new SpinButton( pParent, nWinBits ); 863cdf0e10cSrcweir *ppNewComp = new ::toolkit::VCLXSpinButton; 864cdf0e10cSrcweir break; 865cdf0e10cSrcweir case WINDOW_SPINFIELD: 866cdf0e10cSrcweir pNewWindow = new SpinField( pParent, nWinBits ); 867cdf0e10cSrcweir *ppNewComp = new VCLXNumericField; 868cdf0e10cSrcweir break; 869cdf0e10cSrcweir case WINDOW_SPLITTER: 870cdf0e10cSrcweir pNewWindow = new Splitter( pParent, nWinBits ); 871cdf0e10cSrcweir break; 872cdf0e10cSrcweir case WINDOW_SPLITWINDOW: 873cdf0e10cSrcweir pNewWindow = new SplitWindow( pParent, nWinBits ); 874cdf0e10cSrcweir break; 875cdf0e10cSrcweir case WINDOW_STATUSBAR: 876cdf0e10cSrcweir pNewWindow = new StatusBar( pParent, nWinBits ); 877cdf0e10cSrcweir break; 878cdf0e10cSrcweir case VCLWINDOW_SYSTEMCHILDWINDOW: 879cdf0e10cSrcweir pNewWindow = new SystemChildWindow( pParent, nWinBits ); 880cdf0e10cSrcweir *ppNewComp = new VCLXSystemDependentWindow(); 881cdf0e10cSrcweir break; 882cdf0e10cSrcweir case WINDOW_TABCONTROL: 883cdf0e10cSrcweir pNewWindow = new TabControl( pParent, nWinBits ); 884cdf0e10cSrcweir *ppNewComp = new VCLXTabPageContainer; 885cdf0e10cSrcweir break; 886cdf0e10cSrcweir case WINDOW_TABDIALOG: 887cdf0e10cSrcweir pNewWindow = new TabDialog( pParent, nWinBits ); 888cdf0e10cSrcweir break; 889cdf0e10cSrcweir case WINDOW_TABPAGE: 890cdf0e10cSrcweir /* 891cdf0e10cSrcweir if ( rDescriptor.WindowServiceName.equalsIgnoreAsciiCase( 892cdf0e10cSrcweir ::rtl::OUString::createFromAscii("tabpagemodel") ) ) 893cdf0e10cSrcweir { 894cdf0e10cSrcweir pNewWindow = new TabControl( pParent, nWinBits ); 895cdf0e10cSrcweir *ppNewComp = new VCLXTabPageContainer; 896cdf0e10cSrcweir } 897cdf0e10cSrcweir else 898cdf0e10cSrcweir */ 899cdf0e10cSrcweir { 900cdf0e10cSrcweir pNewWindow = new TabPage( pParent, nWinBits ); 901cdf0e10cSrcweir *ppNewComp = new VCLXTabPage; 902cdf0e10cSrcweir } 903cdf0e10cSrcweir break; 904cdf0e10cSrcweir case WINDOW_TIMEBOX: 905cdf0e10cSrcweir pNewWindow = new TimeBox( pParent, nWinBits ); 906cdf0e10cSrcweir break; 907cdf0e10cSrcweir case WINDOW_TIMEFIELD: 908cdf0e10cSrcweir pNewWindow = new TimeField( pParent, nWinBits ); 909cdf0e10cSrcweir static_cast<TimeField*>(pNewWindow)->EnableEmptyFieldValue( sal_True ); 910cdf0e10cSrcweir *ppNewComp = new VCLXTimeField; 911cdf0e10cSrcweir ((VCLXFormattedSpinField*)*ppNewComp)->SetFormatter( (FormatterBase*)(TimeField*)pNewWindow ); 912cdf0e10cSrcweir break; 913cdf0e10cSrcweir case WINDOW_TOOLBOX: 914cdf0e10cSrcweir pNewWindow = new ToolBox( pParent, nWinBits ); 915cdf0e10cSrcweir *ppNewComp = new VCLXToolBox; 916cdf0e10cSrcweir break; 917cdf0e10cSrcweir case WINDOW_TRISTATEBOX: 918cdf0e10cSrcweir pNewWindow = new TriStateBox( pParent, nWinBits ); 919cdf0e10cSrcweir break; 920cdf0e10cSrcweir case WINDOW_WARNINGBOX: 921cdf0e10cSrcweir pNewWindow = new WarningBox( pParent, nWinBits, String() ); 922cdf0e10cSrcweir *ppNewComp = new VCLXMessageBox; 923cdf0e10cSrcweir break; 924cdf0e10cSrcweir case WINDOW_WORKWINDOW: 925cdf0e10cSrcweir case WINDOW_WINDOW: 926cdf0e10cSrcweir case VCLWINDOW_FRAMEWINDOW: 927cdf0e10cSrcweir case WINDOW_DOCKINGWINDOW: 928cdf0e10cSrcweir if ( rDescriptor.Type == ::com::sun::star::awt::WindowClass_TOP ) 929cdf0e10cSrcweir { 930cdf0e10cSrcweir if (nType == WINDOW_DOCKINGWINDOW ) 931cdf0e10cSrcweir pNewWindow = new DockingWindow( pParent, nWinBits ); 932cdf0e10cSrcweir else 933cdf0e10cSrcweir { 934cdf0e10cSrcweir if ((pParent == NULL) && rDescriptor.Parent.is()) 935cdf0e10cSrcweir { 936cdf0e10cSrcweir // try to get a system dependent window handle 937cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XSystemDependentWindowPeer > xSystemDepParent(rDescriptor.Parent, ::com::sun::star::uno::UNO_QUERY); 938cdf0e10cSrcweir 939cdf0e10cSrcweir if (xSystemDepParent.is()) 940cdf0e10cSrcweir { 941cdf0e10cSrcweir sal_Int8 processID[16]; 942cdf0e10cSrcweir 943cdf0e10cSrcweir rtl_getGlobalProcessId( (sal_uInt8*)processID ); 944cdf0e10cSrcweir 945cdf0e10cSrcweir ::com::sun::star::uno::Sequence<sal_Int8> processIdSeq(processID, 16); 946cdf0e10cSrcweir 947cdf0e10cSrcweir ::com::sun::star::uno::Any anyHandle = xSystemDepParent->getWindowHandle(processIdSeq, SYSTEM_DEPENDENT_TYPE); 948cdf0e10cSrcweir 949cdf0e10cSrcweir // use sal_Int64 here to accomodate all int types 950cdf0e10cSrcweir // uno::Any shift operator whill upcast if necessary 951cdf0e10cSrcweir sal_Int64 nWindowHandle = 0; 952cdf0e10cSrcweir sal_Bool bXEmbed = sal_False; 953cdf0e10cSrcweir 954cdf0e10cSrcweir bool bUseParentData = true; 955cdf0e10cSrcweir if( ! (anyHandle >>= nWindowHandle) ) 956cdf0e10cSrcweir { 957cdf0e10cSrcweir css::uno::Sequence< css::beans::NamedValue > aProps; 958cdf0e10cSrcweir if( anyHandle >>= aProps ) 959cdf0e10cSrcweir { 960cdf0e10cSrcweir const int nProps = aProps.getLength(); 961cdf0e10cSrcweir const css::beans::NamedValue* pProps = aProps.getConstArray(); 962cdf0e10cSrcweir for( int i = 0; i < nProps; i++ ) 963cdf0e10cSrcweir { 964cdf0e10cSrcweir if( pProps[i].Name.equalsAscii( "WINDOW" ) ) 965cdf0e10cSrcweir pProps[i].Value >>= nWindowHandle; 966cdf0e10cSrcweir else if( pProps[i].Name.equalsAscii( "XEMBED" ) ) 967cdf0e10cSrcweir pProps[i].Value >>= bXEmbed; 968cdf0e10cSrcweir } 969cdf0e10cSrcweir } 970cdf0e10cSrcweir else 971cdf0e10cSrcweir bUseParentData = false; 972cdf0e10cSrcweir } 973cdf0e10cSrcweir 974cdf0e10cSrcweir if( bUseParentData ) 975cdf0e10cSrcweir { 976cdf0e10cSrcweir SystemParentData aParentData; 977cdf0e10cSrcweir aParentData.nSize = sizeof( aParentData ); 978cdf0e10cSrcweir #if defined QUARTZ 979cdf0e10cSrcweir aParentData.pView = reinterpret_cast<NSView*>(nWindowHandle); 980cdf0e10cSrcweir #elif defined UNX 981cdf0e10cSrcweir aParentData.aWindow = nWindowHandle; 982cdf0e10cSrcweir aParentData.bXEmbedSupport = bXEmbed; 983cdf0e10cSrcweir #elif defined WNT 984cdf0e10cSrcweir aParentData.hWnd = reinterpret_cast<HWND>(nWindowHandle); 985cdf0e10cSrcweir #elif defined OS2 986cdf0e10cSrcweir aParentData.hWnd = (HWND)nWindowHandle; 987cdf0e10cSrcweir #endif 988cdf0e10cSrcweir pNewWindow = new WorkWindow( &aParentData ); 989cdf0e10cSrcweir } 990cdf0e10cSrcweir } 991cdf0e10cSrcweir } 992cdf0e10cSrcweir 993cdf0e10cSrcweir if (!pNewWindow) 994cdf0e10cSrcweir pNewWindow = new WorkWindow( pParent, nWinBits ); 995cdf0e10cSrcweir } 996cdf0e10cSrcweir 997cdf0e10cSrcweir *ppNewComp = new VCLXTopWindow( pNewWindow->GetType() == WINDOW_WORKWINDOW ); 998cdf0e10cSrcweir } 999cdf0e10cSrcweir else if ( rDescriptor.Type == ::com::sun::star::awt::WindowClass_CONTAINER ) 1000cdf0e10cSrcweir { 1001cdf0e10cSrcweir if (nType == WINDOW_DOCKINGWINDOW ) 1002cdf0e10cSrcweir pNewWindow = new DockingWindow( pParent, nWinBits ); 1003cdf0e10cSrcweir else 1004cdf0e10cSrcweir pNewWindow = new Window( pParent, nWinBits ); 1005cdf0e10cSrcweir *ppNewComp = new VCLXContainer; 1006cdf0e10cSrcweir } 1007cdf0e10cSrcweir else 1008cdf0e10cSrcweir { 1009cdf0e10cSrcweir if (nType == WINDOW_DOCKINGWINDOW ) 1010cdf0e10cSrcweir pNewWindow = new DockingWindow( pParent, nWinBits ); 1011cdf0e10cSrcweir else 1012cdf0e10cSrcweir pNewWindow = new Window( pParent, nWinBits ); 1013cdf0e10cSrcweir *ppNewComp = new VCLXWindow; 1014cdf0e10cSrcweir } 1015cdf0e10cSrcweir break; 1016cdf0e10cSrcweir case WINDOW_CONTROL: 1017cdf0e10cSrcweir if ( aServiceName.EqualsAscii( "simpleanimation" ) ) 1018cdf0e10cSrcweir { 1019cdf0e10cSrcweir pNewWindow = new Throbber( pParent, nWinBits, Throbber::IMAGES_NONE ); 1020cdf0e10cSrcweir ((Throbber*)pNewWindow)->SetScaleMode( css::awt::ImageScaleMode::Anisotropic ); 1021cdf0e10cSrcweir // (compatibility) 1022cdf0e10cSrcweir *ppNewComp = new ::toolkit::XSimpleAnimation; 1023cdf0e10cSrcweir } 1024cdf0e10cSrcweir else if ( aServiceName.EqualsAscii( "throbber" ) ) 1025cdf0e10cSrcweir { 1026cdf0e10cSrcweir pNewWindow = new Throbber( pParent, nWinBits, Throbber::IMAGES_NONE ); 1027cdf0e10cSrcweir ((Throbber*)pNewWindow)->SetScaleMode( css::awt::ImageScaleMode::Anisotropic ); 1028cdf0e10cSrcweir // (compatibility) 1029cdf0e10cSrcweir *ppNewComp = new ::toolkit::XThrobber; 1030cdf0e10cSrcweir } 1031cdf0e10cSrcweir else if ( rDescriptor.WindowServiceName.equalsIgnoreAsciiCase( 1032cdf0e10cSrcweir ::rtl::OUString::createFromAscii("tabpagecontainer") ) ) 1033cdf0e10cSrcweir { 1034cdf0e10cSrcweir pNewWindow = new TabControl( pParent, nWinBits ); 1035cdf0e10cSrcweir *ppNewComp = new VCLXTabPageContainer; 1036cdf0e10cSrcweir } 1037cdf0e10cSrcweir else if ( aServiceName.EqualsAscii( "animatedimages" ) ) 1038cdf0e10cSrcweir { 1039cdf0e10cSrcweir pNewWindow = new Throbber( pParent, nWinBits ); 1040cdf0e10cSrcweir *ppNewComp = new ::toolkit::AnimatedImagesPeer; 1041cdf0e10cSrcweir } 1042cdf0e10cSrcweir break; 1043cdf0e10cSrcweir default: 1044cdf0e10cSrcweir OSL_ENSURE( false, "VCLXToolkit::ImplCreateWindow: unknown window type!" ); 1045cdf0e10cSrcweir break; 1046cdf0e10cSrcweir } 1047cdf0e10cSrcweir } 1048cdf0e10cSrcweir 1049cdf0e10cSrcweir return pNewWindow; 1050cdf0e10cSrcweir } 1051cdf0e10cSrcweir 1052cdf0e10cSrcweir extern "C" { static void SAL_CALL thisModule() {} } 1053cdf0e10cSrcweir 1054cdf0e10cSrcweir css::uno::Reference< css::awt::XWindowPeer > VCLXToolkit::ImplCreateWindow( 1055cdf0e10cSrcweir const css::awt::WindowDescriptor& rDescriptor, 1056cdf0e10cSrcweir WinBits nForceWinBits ) 1057cdf0e10cSrcweir { 1058cdf0e10cSrcweir ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); 1059cdf0e10cSrcweir 1060cdf0e10cSrcweir osl::Guard< vos::IMutex > aSolarGuard( Application::GetSolarMutex() ); 1061cdf0e10cSrcweir 1062cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > xRef; 1063cdf0e10cSrcweir 1064cdf0e10cSrcweir Window* pParent = NULL; 1065cdf0e10cSrcweir if ( rDescriptor.Parent.is() ) 1066cdf0e10cSrcweir { 1067cdf0e10cSrcweir VCLXWindow* pParentComponent = VCLXWindow::GetImplementation( rDescriptor.Parent ); 1068cdf0e10cSrcweir 1069cdf0e10cSrcweir // #103939# Don't through assertion, may be it's a system dependend window, used in ImplCreateWindow. 1070cdf0e10cSrcweir // DBG_ASSERT( pParentComponent, "ParentComponent not valid" ); 1071cdf0e10cSrcweir 1072cdf0e10cSrcweir if ( pParentComponent ) 1073cdf0e10cSrcweir pParent = pParentComponent->GetWindow(); 1074cdf0e10cSrcweir } 1075cdf0e10cSrcweir 1076cdf0e10cSrcweir WinBits nWinBits = ImplGetWinBits( rDescriptor.WindowAttributes, 1077cdf0e10cSrcweir ImplGetComponentType( rDescriptor.WindowServiceName ) ); 1078cdf0e10cSrcweir nWinBits |= nForceWinBits; 1079cdf0e10cSrcweir 1080cdf0e10cSrcweir VCLXWindow* pNewComp = NULL; 1081cdf0e10cSrcweir 1082cdf0e10cSrcweir Window* pNewWindow = NULL; 1083cdf0e10cSrcweir // Try to create the window with SvTools 1084cdf0e10cSrcweir // (do this _before_ creating it on our own: The old mechanism (extended toolkit in SvTools) did it this way, 1085cdf0e10cSrcweir // and we need to stay compatible) 1086cdf0e10cSrcweir // try to load the lib 1087cdf0e10cSrcweir if ( !fnSvtCreateWindow && !hSvToolsLib ) 1088cdf0e10cSrcweir { 1089cdf0e10cSrcweir ::rtl::OUString aLibName = ::vcl::unohelper::CreateLibraryName( "svt", sal_True ); 1090cdf0e10cSrcweir hSvToolsLib = osl_loadModuleRelative( 1091cdf0e10cSrcweir &thisModule, aLibName.pData, SAL_LOADMODULE_DEFAULT ); 1092cdf0e10cSrcweir if ( hSvToolsLib ) 1093cdf0e10cSrcweir { 1094cdf0e10cSrcweir ::rtl::OUString aFunctionName( RTL_CONSTASCII_USTRINGPARAM( "CreateWindow" ) ); 1095cdf0e10cSrcweir fnSvtCreateWindow = (FN_SvtCreateWindow)osl_getFunctionSymbol( hSvToolsLib, aFunctionName.pData ); 1096cdf0e10cSrcweir } 1097cdf0e10cSrcweir } 1098cdf0e10cSrcweir // ask the SvTool creation function 1099cdf0e10cSrcweir if ( fnSvtCreateWindow ) 1100cdf0e10cSrcweir pNewWindow = fnSvtCreateWindow( &pNewComp, &rDescriptor, pParent, nWinBits ); 1101cdf0e10cSrcweir 1102cdf0e10cSrcweir // if SvTools could not provide a window, create it ourself 1103cdf0e10cSrcweir if ( !pNewWindow ) 1104cdf0e10cSrcweir pNewWindow = ImplCreateWindow( &pNewComp, rDescriptor, pParent, nWinBits ); 1105cdf0e10cSrcweir 1106cdf0e10cSrcweir DBG_ASSERT( pNewWindow, "createWindow: Unknown Component!" ); 1107cdf0e10cSrcweir DBG_ASSERTWARNING( pNewComp, "createWindow: No special Interface!" ); 1108cdf0e10cSrcweir 1109cdf0e10cSrcweir if ( pNewWindow ) 1110cdf0e10cSrcweir { 1111cdf0e10cSrcweir pNewWindow->SetCreatedWithToolkit( sal_True ); 1112cdf0e10cSrcweir //pNewWindow->SetPosPixel( Point() ); // do not force (0,0) position, keep default pos instead 1113cdf0e10cSrcweir 1114cdf0e10cSrcweir if ( rDescriptor.WindowAttributes & ::com::sun::star::awt::WindowAttribute::MINSIZE ) 1115cdf0e10cSrcweir { 1116cdf0e10cSrcweir pNewWindow->SetSizePixel( Size() ); 1117cdf0e10cSrcweir } 1118cdf0e10cSrcweir else if ( rDescriptor.WindowAttributes & ::com::sun::star::awt::WindowAttribute::FULLSIZE ) 1119cdf0e10cSrcweir { 1120cdf0e10cSrcweir if ( pParent ) 1121cdf0e10cSrcweir pNewWindow->SetSizePixel( pParent->GetOutputSizePixel() ); 1122cdf0e10cSrcweir } 1123cdf0e10cSrcweir else if ( !VCLUnoHelper::IsZero( rDescriptor.Bounds ) ) 1124cdf0e10cSrcweir { 1125cdf0e10cSrcweir Rectangle aRect = VCLRectangle( rDescriptor.Bounds ); 1126cdf0e10cSrcweir pNewWindow->SetPosSizePixel( aRect.TopLeft(), aRect.GetSize() ); 1127cdf0e10cSrcweir } 1128cdf0e10cSrcweir 1129cdf0e10cSrcweir if ( !pNewComp ) 1130cdf0e10cSrcweir { 1131cdf0e10cSrcweir // Default-Interface 1132cdf0e10cSrcweir xRef = pNewWindow->GetComponentInterface( sal_True ); 1133cdf0e10cSrcweir } 1134cdf0e10cSrcweir else 1135cdf0e10cSrcweir { 1136cdf0e10cSrcweir pNewComp->SetCreatedWithToolkit( sal_True ); 1137cdf0e10cSrcweir xRef = pNewComp; 1138cdf0e10cSrcweir pNewWindow->SetComponentInterface( xRef ); 1139cdf0e10cSrcweir } 1140cdf0e10cSrcweir DBG_ASSERT( pNewWindow->GetComponentInterface( sal_False ) == xRef, 1141cdf0e10cSrcweir "VCLXToolkit::createWindow: did #133706# resurge?" ); 1142cdf0e10cSrcweir 1143cdf0e10cSrcweir if ( rDescriptor.WindowAttributes & ::com::sun::star::awt::WindowAttribute::SHOW ) 1144cdf0e10cSrcweir pNewWindow->Show(); 1145cdf0e10cSrcweir } 1146cdf0e10cSrcweir 1147cdf0e10cSrcweir return xRef; 1148cdf0e10cSrcweir } 1149cdf0e10cSrcweir 1150cdf0e10cSrcweir ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > > VCLXToolkit::createWindows( const ::com::sun::star::uno::Sequence< ::com::sun::star::awt::WindowDescriptor >& rDescriptors ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException) 1151cdf0e10cSrcweir { 1152cdf0e10cSrcweir ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() ); 1153cdf0e10cSrcweir 1154cdf0e10cSrcweir sal_uInt32 nComponents = rDescriptors.getLength(); 1155cdf0e10cSrcweir ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > > aSeq( nComponents ); 1156cdf0e10cSrcweir for ( sal_uInt32 n = 0; n < nComponents; n++ ) 1157cdf0e10cSrcweir { 1158cdf0e10cSrcweir ::com::sun::star::awt::WindowDescriptor aDescr = rDescriptors.getConstArray()[n]; 1159cdf0e10cSrcweir 1160cdf0e10cSrcweir if ( aDescr.ParentIndex == (-1) ) 1161cdf0e10cSrcweir aDescr.Parent = NULL; 1162cdf0e10cSrcweir else if ( ( aDescr.ParentIndex >= 0 ) && ( aDescr.ParentIndex < (short)n ) ) 1163cdf0e10cSrcweir aDescr.Parent = aSeq.getConstArray()[aDescr.ParentIndex]; 1164cdf0e10cSrcweir aSeq.getArray()[n] = createWindow( aDescr ); 1165cdf0e10cSrcweir } 1166cdf0e10cSrcweir return aSeq; 1167cdf0e10cSrcweir } 1168cdf0e10cSrcweir 1169cdf0e10cSrcweir // ::com::sun::star::awt::XSystemChildFactory 1170cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > VCLXToolkit::createSystemChild( const ::com::sun::star::uno::Any& Parent, const ::com::sun::star::uno::Sequence< sal_Int8 >& /*ProcessId*/, sal_Int16 nSystemType ) throw(::com::sun::star::uno::RuntimeException) 1171cdf0e10cSrcweir { 1172cdf0e10cSrcweir Window* pChildWindow = NULL; 1173cdf0e10cSrcweir if ( nSystemType == SYSTEM_DEPENDENT_TYPE ) 1174cdf0e10cSrcweir { 1175cdf0e10cSrcweir // use sal_Int64 here to accomodate all int types 1176cdf0e10cSrcweir // uno::Any shift operator whill upcast if necessary 1177cdf0e10cSrcweir sal_Int64 nWindowHandle = 0; 1178cdf0e10cSrcweir sal_Bool bXEmbed = sal_False; 1179cdf0e10cSrcweir 1180cdf0e10cSrcweir bool bUseParentData = true; 1181cdf0e10cSrcweir if( ! (Parent >>= nWindowHandle) ) 1182cdf0e10cSrcweir { 1183cdf0e10cSrcweir css::uno::Sequence< css::beans::NamedValue > aProps; 1184cdf0e10cSrcweir if( Parent >>= aProps ) 1185cdf0e10cSrcweir { 1186cdf0e10cSrcweir const int nProps = aProps.getLength(); 1187cdf0e10cSrcweir const css::beans::NamedValue* pProps = aProps.getConstArray(); 1188cdf0e10cSrcweir for( int i = 0; i < nProps; i++ ) 1189cdf0e10cSrcweir { 1190cdf0e10cSrcweir if( pProps[i].Name.equalsAscii( "WINDOW" ) ) 1191cdf0e10cSrcweir pProps[i].Value >>= nWindowHandle; 1192cdf0e10cSrcweir else if( pProps[i].Name.equalsAscii( "XEMBED" ) ) 1193cdf0e10cSrcweir pProps[i].Value >>= bXEmbed; 1194cdf0e10cSrcweir } 1195cdf0e10cSrcweir } 1196cdf0e10cSrcweir else 1197cdf0e10cSrcweir bUseParentData = false; 1198cdf0e10cSrcweir } 1199cdf0e10cSrcweir 1200cdf0e10cSrcweir if( bUseParentData ) 1201cdf0e10cSrcweir { 1202cdf0e10cSrcweir SystemParentData aParentData; 1203cdf0e10cSrcweir aParentData.nSize = sizeof( aParentData ); 1204cdf0e10cSrcweir #if defined QUARTZ 1205cdf0e10cSrcweir aParentData.pView = reinterpret_cast<NSView*>(nWindowHandle); 1206cdf0e10cSrcweir #elif defined UNX 1207cdf0e10cSrcweir aParentData.aWindow = nWindowHandle; 1208cdf0e10cSrcweir aParentData.bXEmbedSupport = bXEmbed; 1209cdf0e10cSrcweir #elif defined WNT 1210cdf0e10cSrcweir aParentData.hWnd = reinterpret_cast<HWND>(nWindowHandle); 1211cdf0e10cSrcweir #elif defined OS2 1212cdf0e10cSrcweir aParentData.hWnd = (HWND)nWindowHandle; 1213cdf0e10cSrcweir #endif 1214cdf0e10cSrcweir osl::Guard< vos::IMutex > aGuard( Application::GetSolarMutex() ); 1215cdf0e10cSrcweir try 1216cdf0e10cSrcweir { 1217cdf0e10cSrcweir pChildWindow = new WorkWindow( &aParentData ); 1218cdf0e10cSrcweir } 1219cdf0e10cSrcweir catch ( ::com::sun::star::uno::RuntimeException & rEx ) 1220cdf0e10cSrcweir { 1221cdf0e10cSrcweir // system child window could not be created 1222cdf0e10cSrcweir OSL_TRACE( 1223cdf0e10cSrcweir "VCLXToolkit::createSystemChild: caught %s\n", 1224cdf0e10cSrcweir ::rtl::OUStringToOString( 1225cdf0e10cSrcweir rEx.Message, RTL_TEXTENCODING_UTF8).getStr()); 1226cdf0e10cSrcweir pChildWindow = NULL; 1227cdf0e10cSrcweir } 1228cdf0e10cSrcweir } 1229cdf0e10cSrcweir } 1230cdf0e10cSrcweir else if (nSystemType == com::sun::star::lang::SystemDependent::SYSTEM_JAVA) 1231cdf0e10cSrcweir { 1232cdf0e10cSrcweir osl::Guard< vos::IMutex > aGuard(Application::GetSolarMutex()); 1233cdf0e10cSrcweir pChildWindow = new WorkWindow(0, Parent); 1234cdf0e10cSrcweir } 1235cdf0e10cSrcweir 1236cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > xPeer; 1237cdf0e10cSrcweir if ( pChildWindow ) 1238cdf0e10cSrcweir { 1239cdf0e10cSrcweir VCLXTopWindow* pPeer = new VCLXTopWindow(true); 1240cdf0e10cSrcweir osl::Guard< vos::IMutex > aGuard( Application::GetSolarMutex() ); 1241cdf0e10cSrcweir pPeer->SetWindow( pChildWindow ); 1242cdf0e10cSrcweir xPeer = pPeer; 1243cdf0e10cSrcweir } 1244cdf0e10cSrcweir 1245cdf0e10cSrcweir return xPeer; 1246cdf0e10cSrcweir } 1247cdf0e10cSrcweir 1248cdf0e10cSrcweir // ::com::sun::star::awt::XMessageBoxFactory 1249cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMessageBox > SAL_CALL VCLXToolkit::createMessageBox( 1250cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& aParent, 1251cdf0e10cSrcweir const ::com::sun::star::awt::Rectangle& aPosSize, 1252cdf0e10cSrcweir const ::rtl::OUString& aType, 1253cdf0e10cSrcweir ::sal_Int32 aButtons, 1254cdf0e10cSrcweir const ::rtl::OUString& aTitle, 1255cdf0e10cSrcweir const ::rtl::OUString& aMessage ) throw (::com::sun::star::uno::RuntimeException) 1256cdf0e10cSrcweir { 1257cdf0e10cSrcweir ::com::sun::star::awt::WindowDescriptor aDescriptor; 1258cdf0e10cSrcweir 1259cdf0e10cSrcweir sal_Int32 nWindowAttributes = css::awt::WindowAttribute::BORDER|css::awt::WindowAttribute::MOVEABLE|css::awt::WindowAttribute::CLOSEABLE; 1260cdf0e10cSrcweir 1261cdf0e10cSrcweir // Map button definitions to window attributes 1262cdf0e10cSrcweir if (( aButtons & 0x0000ffffL ) == css::awt::MessageBoxButtons::BUTTONS_OK ) 1263cdf0e10cSrcweir nWindowAttributes |= css::awt::VclWindowPeerAttribute::OK; 1264cdf0e10cSrcweir else if (( aButtons & 0x0000ffffL ) == css::awt::MessageBoxButtons::BUTTONS_OK_CANCEL ) 1265cdf0e10cSrcweir nWindowAttributes |= css::awt::VclWindowPeerAttribute::OK_CANCEL; 1266cdf0e10cSrcweir else if (( aButtons & 0x0000ffffL ) == css::awt::MessageBoxButtons::BUTTONS_YES_NO ) 1267cdf0e10cSrcweir nWindowAttributes |= css::awt::VclWindowPeerAttribute::YES_NO; 1268cdf0e10cSrcweir else if (( aButtons & 0x0000ffffL ) == css::awt::MessageBoxButtons::BUTTONS_YES_NO_CANCEL ) 1269cdf0e10cSrcweir nWindowAttributes |= css::awt::VclWindowPeerAttribute::YES_NO_CANCEL; 1270cdf0e10cSrcweir else if (( aButtons & 0x0000ffffL ) == css::awt::MessageBoxButtons::BUTTONS_RETRY_CANCEL ) 1271cdf0e10cSrcweir nWindowAttributes |= css::awt::VclWindowPeerAttribute::RETRY_CANCEL; 1272cdf0e10cSrcweir 1273cdf0e10cSrcweir // Map default button definitions to window attributes 1274cdf0e10cSrcweir if (sal_Int32( aButtons & 0xffff0000L ) == css::awt::MessageBoxButtons::DEFAULT_BUTTON_OK ) 1275cdf0e10cSrcweir nWindowAttributes |= css::awt::VclWindowPeerAttribute::DEF_OK; 1276cdf0e10cSrcweir else if (sal_Int32( aButtons & 0xffff0000L ) == css::awt::MessageBoxButtons::DEFAULT_BUTTON_CANCEL ) 1277cdf0e10cSrcweir nWindowAttributes |= css::awt::VclWindowPeerAttribute::DEF_CANCEL; 1278cdf0e10cSrcweir else if (sal_Int32( aButtons & 0xffff0000L ) == css::awt::MessageBoxButtons::DEFAULT_BUTTON_YES ) 1279cdf0e10cSrcweir nWindowAttributes |= css::awt::VclWindowPeerAttribute::DEF_YES; 1280cdf0e10cSrcweir else if (sal_Int32( aButtons & 0xffff0000L ) == css::awt::MessageBoxButtons::DEFAULT_BUTTON_NO ) 1281cdf0e10cSrcweir nWindowAttributes |= css::awt::VclWindowPeerAttribute::DEF_NO; 1282cdf0e10cSrcweir else if (sal_Int32( aButtons & 0xffff0000L ) == css::awt::MessageBoxButtons::DEFAULT_BUTTON_RETRY ) 1283cdf0e10cSrcweir nWindowAttributes |= css::awt::VclWindowPeerAttribute::DEF_RETRY; 1284cdf0e10cSrcweir 1285cdf0e10cSrcweir // No more bits for VclWindowPeerAttribute possible. Mapping must be 1286cdf0e10cSrcweir // done explicitly using VCL methods 1287cdf0e10cSrcweir WinBits nAddWinBits( 0 ); 1288cdf0e10cSrcweir if (( aButtons & 0x0000ffffL ) == css::awt::MessageBoxButtons::BUTTONS_ABORT_IGNORE_RETRY ) 1289cdf0e10cSrcweir nAddWinBits |= WB_ABORT_RETRY_IGNORE; 1290cdf0e10cSrcweir if ( sal_Int32( aButtons & 0xffff0000L ) == css::awt::MessageBoxButtons::DEFAULT_BUTTON_IGNORE ) 1291cdf0e10cSrcweir nAddWinBits |= WB_DEF_IGNORE; 1292cdf0e10cSrcweir 1293cdf0e10cSrcweir aDescriptor.Type = css::awt::WindowClass_MODALTOP; 1294cdf0e10cSrcweir aDescriptor.WindowServiceName = aType; 1295cdf0e10cSrcweir aDescriptor.ParentIndex = -1; 1296cdf0e10cSrcweir aDescriptor.Parent = aParent; 1297cdf0e10cSrcweir aDescriptor.Bounds = aPosSize; 1298cdf0e10cSrcweir aDescriptor.WindowAttributes = nWindowAttributes; 1299cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMessageBox > xMsgBox( 1300cdf0e10cSrcweir ImplCreateWindow( aDescriptor, nAddWinBits ), css::uno::UNO_QUERY ); 1301cdf0e10cSrcweir css::uno::Reference< css::awt::XWindow > xWindow( xMsgBox, css::uno::UNO_QUERY ); 1302cdf0e10cSrcweir if ( xMsgBox.is() && xWindow.is() ) 1303cdf0e10cSrcweir { 1304cdf0e10cSrcweir Window * pWindow = VCLUnoHelper::GetWindow( xWindow ); 1305cdf0e10cSrcweir if ( pWindow ) 1306cdf0e10cSrcweir { 1307cdf0e10cSrcweir osl::Guard< vos::IMutex > aGuard(Application::GetSolarMutex()); 1308cdf0e10cSrcweir xMsgBox->setCaptionText( aTitle ); 1309cdf0e10cSrcweir xMsgBox->setMessageText( aMessage ); 1310cdf0e10cSrcweir } 1311cdf0e10cSrcweir } 1312cdf0e10cSrcweir 1313cdf0e10cSrcweir return xMsgBox; 1314cdf0e10cSrcweir } 1315cdf0e10cSrcweir 1316cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragGestureRecognizer > SAL_CALL VCLXToolkit::getDragGestureRecognizer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow >& window ) throw(::com::sun::star::uno::RuntimeException) 1317cdf0e10cSrcweir { 1318cdf0e10cSrcweir Window * pWindow = VCLUnoHelper::GetWindow( window ); 1319cdf0e10cSrcweir 1320cdf0e10cSrcweir if( pWindow ) 1321cdf0e10cSrcweir return pWindow->GetDragGestureRecognizer(); 1322cdf0e10cSrcweir 1323cdf0e10cSrcweir return ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragGestureRecognizer >(); 1324cdf0e10cSrcweir } 1325cdf0e10cSrcweir 1326cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragSource > SAL_CALL VCLXToolkit::getDragSource( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow >& window ) throw(::com::sun::star::uno::RuntimeException) 1327cdf0e10cSrcweir { 1328cdf0e10cSrcweir Window * pWindow = VCLUnoHelper::GetWindow( window ); 1329cdf0e10cSrcweir 1330cdf0e10cSrcweir if( pWindow ) 1331cdf0e10cSrcweir return pWindow->GetDragSource(); 1332cdf0e10cSrcweir 1333cdf0e10cSrcweir return ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragSource >(); 1334cdf0e10cSrcweir } 1335cdf0e10cSrcweir 1336cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTarget > SAL_CALL VCLXToolkit::getDropTarget( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow >& window ) throw(::com::sun::star::uno::RuntimeException) 1337cdf0e10cSrcweir { 1338cdf0e10cSrcweir Window * pWindow = VCLUnoHelper::GetWindow( window ); 1339cdf0e10cSrcweir 1340cdf0e10cSrcweir if( pWindow ) 1341cdf0e10cSrcweir return pWindow->GetDropTarget(); 1342cdf0e10cSrcweir 1343cdf0e10cSrcweir return ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTarget >(); 1344cdf0e10cSrcweir } 1345cdf0e10cSrcweir 1346cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard > SAL_CALL VCLXToolkit::getClipboard( const ::rtl::OUString& clipboardName ) throw(::com::sun::star::uno::RuntimeException) 1347cdf0e10cSrcweir { 1348cdf0e10cSrcweir if( clipboardName.getLength() == 0 ) 1349cdf0e10cSrcweir { 1350cdf0e10cSrcweir if( !mxClipboard.is() ) 1351cdf0e10cSrcweir { 1352cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); 1353cdf0e10cSrcweir if ( xFactory.is() ) 1354cdf0e10cSrcweir { 1355cdf0e10cSrcweir // remember clipboard here 1356cdf0e10cSrcweir mxClipboard = ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard > ( 1357cdf0e10cSrcweir xFactory->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.datatransfer.clipboard.SystemClipboard" ) ), ::com::sun::star::uno::UNO_QUERY ); 1358cdf0e10cSrcweir } 1359cdf0e10cSrcweir } 1360cdf0e10cSrcweir 1361cdf0e10cSrcweir return mxClipboard; 1362cdf0e10cSrcweir } 1363cdf0e10cSrcweir 1364cdf0e10cSrcweir else if( clipboardName.equals( ::rtl::OUString::createFromAscii("Selection") ) ) 1365cdf0e10cSrcweir { 1366cdf0e10cSrcweir return mxSelection; 1367cdf0e10cSrcweir } 1368cdf0e10cSrcweir 1369cdf0e10cSrcweir return ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard >(); 1370cdf0e10cSrcweir } 1371cdf0e10cSrcweir 1372cdf0e10cSrcweir // XServiceInfo 1373cdf0e10cSrcweir ::rtl::OUString VCLXToolkit::getImplementationName() throw(::com::sun::star::uno::RuntimeException) 1374cdf0e10cSrcweir { 1375cdf0e10cSrcweir return rtl::OUString::createFromAscii( "stardiv.Toolkit.VCLXToolkit" ); 1376cdf0e10cSrcweir } 1377cdf0e10cSrcweir 1378cdf0e10cSrcweir sal_Bool VCLXToolkit::supportsService( const ::rtl::OUString& rServiceName ) throw(::com::sun::star::uno::RuntimeException) 1379cdf0e10cSrcweir { 1380cdf0e10cSrcweir ::osl::MutexGuard aGuard( GetMutex() ); 1381cdf0e10cSrcweir 1382cdf0e10cSrcweir ::com::sun::star::uno::Sequence< ::rtl::OUString > aSNL = getSupportedServiceNames(); 1383cdf0e10cSrcweir const ::rtl::OUString* pArray = aSNL.getConstArray(); 1384cdf0e10cSrcweir const ::rtl::OUString* pArrayEnd = aSNL.getConstArray(); 1385cdf0e10cSrcweir for (; pArray != pArrayEnd; ++pArray ) 1386cdf0e10cSrcweir if( *pArray == rServiceName ) 1387cdf0e10cSrcweir break; 1388cdf0e10cSrcweir 1389cdf0e10cSrcweir return pArray != pArrayEnd; 1390cdf0e10cSrcweir } 1391cdf0e10cSrcweir 1392cdf0e10cSrcweir ::com::sun::star::uno::Sequence< ::rtl::OUString > VCLXToolkit::getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException) 1393cdf0e10cSrcweir { 1394cdf0e10cSrcweir ::rtl::OUString aServiceName( ::rtl::OUString::createFromAscii( szServiceName2_Toolkit ) ); 1395cdf0e10cSrcweir return ::com::sun::star::uno::Sequence< ::rtl::OUString >( &aServiceName, 1); 1396cdf0e10cSrcweir } 1397cdf0e10cSrcweir 1398cdf0e10cSrcweir // css::awt::XExtendedToolkit: 1399cdf0e10cSrcweir 1400cdf0e10cSrcweir // virtual 1401cdf0e10cSrcweir ::sal_Int32 SAL_CALL VCLXToolkit::getTopWindowCount() 1402cdf0e10cSrcweir throw (::css::uno::RuntimeException) 1403cdf0e10cSrcweir { 1404cdf0e10cSrcweir return static_cast< ::sal_Int32 >(::Application::GetTopWindowCount()); 1405cdf0e10cSrcweir // XXX numeric overflow 1406cdf0e10cSrcweir } 1407cdf0e10cSrcweir 1408cdf0e10cSrcweir // virtual 1409cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XTopWindow > SAL_CALL 1410cdf0e10cSrcweir VCLXToolkit::getTopWindow(::sal_Int32 nIndex) 1411cdf0e10cSrcweir throw (::css::uno::RuntimeException) 1412cdf0e10cSrcweir { 1413cdf0e10cSrcweir ::Window * p = ::Application::GetTopWindow(static_cast< long >(nIndex)); 1414cdf0e10cSrcweir // XXX numeric overflow 1415cdf0e10cSrcweir return ::css::uno::Reference< ::css::awt::XTopWindow >( 1416cdf0e10cSrcweir p == 0 ? 0 : static_cast< ::css::awt::XWindow * >(p->GetWindowPeer()), 1417cdf0e10cSrcweir ::css::uno::UNO_QUERY); 1418cdf0e10cSrcweir } 1419cdf0e10cSrcweir 1420cdf0e10cSrcweir // virtual 1421cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XTopWindow > SAL_CALL 1422cdf0e10cSrcweir VCLXToolkit::getActiveTopWindow() throw (::css::uno::RuntimeException) 1423cdf0e10cSrcweir { 1424cdf0e10cSrcweir ::Window * p = ::Application::GetActiveTopWindow(); 1425cdf0e10cSrcweir return ::css::uno::Reference< ::css::awt::XTopWindow >( 1426cdf0e10cSrcweir p == 0 ? 0 : static_cast< ::css::awt::XWindow * >(p->GetWindowPeer()), 1427cdf0e10cSrcweir ::css::uno::UNO_QUERY); 1428cdf0e10cSrcweir } 1429cdf0e10cSrcweir 1430cdf0e10cSrcweir // virtual 1431cdf0e10cSrcweir void SAL_CALL VCLXToolkit::addTopWindowListener( 1432cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XTopWindowListener > const & rListener) 1433cdf0e10cSrcweir throw (::css::uno::RuntimeException) 1434cdf0e10cSrcweir { 1435cdf0e10cSrcweir OSL_ENSURE(rListener.is(), "Null rListener"); 1436cdf0e10cSrcweir ::osl::ClearableMutexGuard aGuard(rBHelper.rMutex); 1437cdf0e10cSrcweir if (rBHelper.bDisposed || rBHelper.bInDispose) 1438cdf0e10cSrcweir { 1439cdf0e10cSrcweir aGuard.clear(); 1440cdf0e10cSrcweir rListener->disposing( 1441cdf0e10cSrcweir ::css::lang::EventObject( 1442cdf0e10cSrcweir static_cast< ::cppu::OWeakObject * >(this))); 1443cdf0e10cSrcweir } 1444cdf0e10cSrcweir else if (m_aTopWindowListeners.addInterface(rListener) == 1 1445cdf0e10cSrcweir && !m_bEventListener) 1446cdf0e10cSrcweir { 1447cdf0e10cSrcweir m_bEventListener = true; 1448cdf0e10cSrcweir ::Application::AddEventListener(m_aEventListenerLink); 1449cdf0e10cSrcweir } 1450cdf0e10cSrcweir } 1451cdf0e10cSrcweir 1452cdf0e10cSrcweir // virtual 1453cdf0e10cSrcweir void SAL_CALL VCLXToolkit::removeTopWindowListener( 1454cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XTopWindowListener > const & rListener) 1455cdf0e10cSrcweir throw (::css::uno::RuntimeException) 1456cdf0e10cSrcweir { 1457cdf0e10cSrcweir ::osl::MutexGuard aGuard(rBHelper.rMutex); 1458cdf0e10cSrcweir if (!(rBHelper.bDisposed || rBHelper.bInDispose) 1459cdf0e10cSrcweir && m_aTopWindowListeners.removeInterface(rListener) == 0 1460cdf0e10cSrcweir && m_aFocusListeners.getLength() == 0 && m_bEventListener) 1461cdf0e10cSrcweir { 1462cdf0e10cSrcweir ::Application::RemoveEventListener(m_aEventListenerLink); 1463cdf0e10cSrcweir m_bEventListener = false; 1464cdf0e10cSrcweir } 1465cdf0e10cSrcweir } 1466cdf0e10cSrcweir 1467cdf0e10cSrcweir // virtual 1468cdf0e10cSrcweir void SAL_CALL VCLXToolkit::addKeyHandler( 1469cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XKeyHandler > const & rHandler) 1470cdf0e10cSrcweir throw (::css::uno::RuntimeException) 1471cdf0e10cSrcweir { 1472cdf0e10cSrcweir OSL_ENSURE(rHandler.is(), "Null rHandler"); 1473cdf0e10cSrcweir ::osl::ClearableMutexGuard aGuard(rBHelper.rMutex); 1474cdf0e10cSrcweir if (rBHelper.bDisposed || rBHelper.bInDispose) 1475cdf0e10cSrcweir { 1476cdf0e10cSrcweir aGuard.clear(); 1477cdf0e10cSrcweir rHandler->disposing( 1478cdf0e10cSrcweir ::css::lang::EventObject( 1479cdf0e10cSrcweir static_cast< ::cppu::OWeakObject * >(this))); 1480cdf0e10cSrcweir } 1481cdf0e10cSrcweir else if (m_aKeyHandlers.addInterface(rHandler) == 1 && !m_bKeyListener) 1482cdf0e10cSrcweir { 1483cdf0e10cSrcweir m_bKeyListener = true; 1484cdf0e10cSrcweir ::Application::AddKeyListener(m_aKeyListenerLink); 1485cdf0e10cSrcweir } 1486cdf0e10cSrcweir } 1487cdf0e10cSrcweir 1488cdf0e10cSrcweir // virtual 1489cdf0e10cSrcweir void SAL_CALL VCLXToolkit::removeKeyHandler( 1490cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XKeyHandler > const & rHandler) 1491cdf0e10cSrcweir throw (::css::uno::RuntimeException) 1492cdf0e10cSrcweir { 1493cdf0e10cSrcweir ::osl::MutexGuard aGuard(rBHelper.rMutex); 1494cdf0e10cSrcweir if (!(rBHelper.bDisposed || rBHelper.bInDispose) 1495cdf0e10cSrcweir && m_aKeyHandlers.removeInterface(rHandler) == 0 && m_bKeyListener) 1496cdf0e10cSrcweir { 1497cdf0e10cSrcweir ::Application::RemoveKeyListener(m_aKeyListenerLink); 1498cdf0e10cSrcweir m_bKeyListener = false; 1499cdf0e10cSrcweir } 1500cdf0e10cSrcweir } 1501cdf0e10cSrcweir 1502cdf0e10cSrcweir // virtual 1503cdf0e10cSrcweir void SAL_CALL VCLXToolkit::addFocusListener( 1504cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XFocusListener > const & rListener) 1505cdf0e10cSrcweir throw (::css::uno::RuntimeException) 1506cdf0e10cSrcweir { 1507cdf0e10cSrcweir OSL_ENSURE(rListener.is(), "Null rListener"); 1508cdf0e10cSrcweir ::osl::ClearableMutexGuard aGuard(rBHelper.rMutex); 1509cdf0e10cSrcweir if (rBHelper.bDisposed || rBHelper.bInDispose) 1510cdf0e10cSrcweir { 1511cdf0e10cSrcweir aGuard.clear(); 1512cdf0e10cSrcweir rListener->disposing( 1513cdf0e10cSrcweir ::css::lang::EventObject( 1514cdf0e10cSrcweir static_cast< ::cppu::OWeakObject * >(this))); 1515cdf0e10cSrcweir } 1516cdf0e10cSrcweir else if (m_aFocusListeners.addInterface(rListener) == 1 1517cdf0e10cSrcweir && !m_bEventListener) 1518cdf0e10cSrcweir { 1519cdf0e10cSrcweir m_bEventListener = true; 1520cdf0e10cSrcweir ::Application::AddEventListener(m_aEventListenerLink); 1521cdf0e10cSrcweir } 1522cdf0e10cSrcweir } 1523cdf0e10cSrcweir 1524cdf0e10cSrcweir // virtual 1525cdf0e10cSrcweir void SAL_CALL VCLXToolkit::removeFocusListener( 1526cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XFocusListener > const & rListener) 1527cdf0e10cSrcweir throw (::css::uno::RuntimeException) 1528cdf0e10cSrcweir { 1529cdf0e10cSrcweir ::osl::MutexGuard aGuard(rBHelper.rMutex); 1530cdf0e10cSrcweir if (!(rBHelper.bDisposed || rBHelper.bInDispose) 1531cdf0e10cSrcweir && m_aFocusListeners.removeInterface(rListener) == 0 1532cdf0e10cSrcweir && m_aTopWindowListeners.getLength() == 0 && m_bEventListener) 1533cdf0e10cSrcweir { 1534cdf0e10cSrcweir ::Application::RemoveEventListener(m_aEventListenerLink); 1535cdf0e10cSrcweir m_bEventListener = false; 1536cdf0e10cSrcweir } 1537cdf0e10cSrcweir } 1538cdf0e10cSrcweir 1539cdf0e10cSrcweir // virtual 1540cdf0e10cSrcweir void SAL_CALL VCLXToolkit::fireFocusGained( 1541cdf0e10cSrcweir ::com::sun::star::uno::Reference< 1542cdf0e10cSrcweir ::com::sun::star::uno::XInterface > const &) 1543cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException) 1544cdf0e10cSrcweir { 1545cdf0e10cSrcweir } 1546cdf0e10cSrcweir 1547cdf0e10cSrcweir // virtual 1548cdf0e10cSrcweir void SAL_CALL VCLXToolkit::fireFocusLost( 1549cdf0e10cSrcweir ::com::sun::star::uno::Reference< 1550cdf0e10cSrcweir ::com::sun::star::uno::XInterface > const &) 1551cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException) 1552cdf0e10cSrcweir { 1553cdf0e10cSrcweir } 1554cdf0e10cSrcweir 1555cdf0e10cSrcweir 1556cdf0e10cSrcweir IMPL_LINK(VCLXToolkit, eventListenerHandler, ::VclSimpleEvent const *, pEvent) 1557cdf0e10cSrcweir { 1558cdf0e10cSrcweir switch (pEvent->GetId()) 1559cdf0e10cSrcweir { 1560cdf0e10cSrcweir case VCLEVENT_WINDOW_SHOW: 1561cdf0e10cSrcweir callTopWindowListeners( 1562cdf0e10cSrcweir pEvent, &::css::awt::XTopWindowListener::windowOpened); 1563cdf0e10cSrcweir break; 1564cdf0e10cSrcweir case VCLEVENT_WINDOW_HIDE: 1565cdf0e10cSrcweir callTopWindowListeners( 1566cdf0e10cSrcweir pEvent, &::css::awt::XTopWindowListener::windowClosed); 1567cdf0e10cSrcweir break; 1568cdf0e10cSrcweir case VCLEVENT_WINDOW_ACTIVATE: 1569cdf0e10cSrcweir callTopWindowListeners( 1570cdf0e10cSrcweir pEvent, &::css::awt::XTopWindowListener::windowActivated); 1571cdf0e10cSrcweir break; 1572cdf0e10cSrcweir case VCLEVENT_WINDOW_DEACTIVATE: 1573cdf0e10cSrcweir callTopWindowListeners( 1574cdf0e10cSrcweir pEvent, &::css::awt::XTopWindowListener::windowDeactivated); 1575cdf0e10cSrcweir break; 1576cdf0e10cSrcweir case VCLEVENT_WINDOW_CLOSE: 1577cdf0e10cSrcweir callTopWindowListeners( 1578cdf0e10cSrcweir pEvent, &::css::awt::XTopWindowListener::windowClosing); 1579cdf0e10cSrcweir break; 1580cdf0e10cSrcweir case VCLEVENT_WINDOW_GETFOCUS: 1581cdf0e10cSrcweir callFocusListeners(pEvent, true); 1582cdf0e10cSrcweir break; 1583cdf0e10cSrcweir case VCLEVENT_WINDOW_LOSEFOCUS: 1584cdf0e10cSrcweir callFocusListeners(pEvent, false); 1585cdf0e10cSrcweir break; 1586cdf0e10cSrcweir case VCLEVENT_WINDOW_MINIMIZE: 1587cdf0e10cSrcweir callTopWindowListeners( 1588cdf0e10cSrcweir pEvent, &::css::awt::XTopWindowListener::windowMinimized); 1589cdf0e10cSrcweir break; 1590cdf0e10cSrcweir case VCLEVENT_WINDOW_NORMALIZE: 1591cdf0e10cSrcweir callTopWindowListeners( 1592cdf0e10cSrcweir pEvent, &::css::awt::XTopWindowListener::windowNormalized); 1593cdf0e10cSrcweir break; 1594cdf0e10cSrcweir } 1595cdf0e10cSrcweir return 0; 1596cdf0e10cSrcweir } 1597cdf0e10cSrcweir 1598cdf0e10cSrcweir IMPL_LINK(VCLXToolkit, keyListenerHandler, ::VclSimpleEvent const *, pEvent) 1599cdf0e10cSrcweir { 1600cdf0e10cSrcweir switch (pEvent->GetId()) 1601cdf0e10cSrcweir { 1602cdf0e10cSrcweir case VCLEVENT_WINDOW_KEYINPUT: 1603cdf0e10cSrcweir return callKeyHandlers(pEvent, true); 1604cdf0e10cSrcweir case VCLEVENT_WINDOW_KEYUP: 1605cdf0e10cSrcweir return callKeyHandlers(pEvent, false); 1606cdf0e10cSrcweir } 1607cdf0e10cSrcweir return 0; 1608cdf0e10cSrcweir } 1609cdf0e10cSrcweir 1610cdf0e10cSrcweir void VCLXToolkit::callTopWindowListeners( 1611cdf0e10cSrcweir ::VclSimpleEvent const * pEvent, 1612cdf0e10cSrcweir void (SAL_CALL ::css::awt::XTopWindowListener::* pFn)( 1613cdf0e10cSrcweir ::css::lang::EventObject const &)) 1614cdf0e10cSrcweir { 1615cdf0e10cSrcweir ::Window * pWindow 1616cdf0e10cSrcweir = static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow(); 1617cdf0e10cSrcweir if (pWindow->IsTopWindow()) 1618cdf0e10cSrcweir { 1619cdf0e10cSrcweir ::css::uno::Sequence< ::css::uno::Reference< ::css::uno::XInterface > > 1620cdf0e10cSrcweir aListeners(m_aTopWindowListeners.getElements()); 1621cdf0e10cSrcweir if (aListeners.hasElements()) 1622cdf0e10cSrcweir { 1623cdf0e10cSrcweir ::css::lang::EventObject aAwtEvent( 1624cdf0e10cSrcweir static_cast< ::css::awt::XWindow * >(pWindow->GetWindowPeer())); 1625cdf0e10cSrcweir for (::sal_Int32 i = 0; i < aListeners.getLength(); ++i) 1626cdf0e10cSrcweir { 1627cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XTopWindowListener > 1628cdf0e10cSrcweir xListener(aListeners[i], ::css::uno::UNO_QUERY); 1629cdf0e10cSrcweir try 1630cdf0e10cSrcweir { 1631cdf0e10cSrcweir (xListener.get()->*pFn)(aAwtEvent); 1632cdf0e10cSrcweir } 1633cdf0e10cSrcweir catch (::css::uno::RuntimeException & rEx) 1634cdf0e10cSrcweir { 1635cdf0e10cSrcweir OSL_TRACE( 1636cdf0e10cSrcweir "VCLXToolkit::callTopWindowListeners: caught %s\n", 1637cdf0e10cSrcweir ::rtl::OUStringToOString( 1638cdf0e10cSrcweir rEx.Message, RTL_TEXTENCODING_UTF8).getStr()); 1639cdf0e10cSrcweir } 1640cdf0e10cSrcweir } 1641cdf0e10cSrcweir } 1642cdf0e10cSrcweir } 1643cdf0e10cSrcweir } 1644cdf0e10cSrcweir 1645cdf0e10cSrcweir long VCLXToolkit::callKeyHandlers(::VclSimpleEvent const * pEvent, 1646cdf0e10cSrcweir bool bPressed) 1647cdf0e10cSrcweir { 1648cdf0e10cSrcweir ::css::uno::Sequence< ::css::uno::Reference< ::css::uno::XInterface > > 1649cdf0e10cSrcweir aHandlers(m_aKeyHandlers.getElements()); 1650cdf0e10cSrcweir 1651cdf0e10cSrcweir if (aHandlers.hasElements()) 1652cdf0e10cSrcweir { 1653cdf0e10cSrcweir ::Window * pWindow = static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow(); 1654cdf0e10cSrcweir 1655cdf0e10cSrcweir // See implementation in vclxwindow.cxx for mapping between VCL and UNO AWT event 1656cdf0e10cSrcweir ::KeyEvent * pKeyEvent = static_cast< ::KeyEvent * >( 1657cdf0e10cSrcweir static_cast< ::VclWindowEvent const * >(pEvent)->GetData()); 1658cdf0e10cSrcweir ::css::awt::KeyEvent aAwtEvent( 1659cdf0e10cSrcweir static_cast< ::css::awt::XWindow * >(pWindow->GetWindowPeer()), 1660cdf0e10cSrcweir (pKeyEvent->GetKeyCode().IsShift() 1661cdf0e10cSrcweir ? ::css::awt::KeyModifier::SHIFT : 0) 1662cdf0e10cSrcweir | (pKeyEvent->GetKeyCode().IsMod1() 1663cdf0e10cSrcweir ? ::css::awt::KeyModifier::MOD1 : 0) 1664cdf0e10cSrcweir | (pKeyEvent->GetKeyCode().IsMod2() 1665cdf0e10cSrcweir ? ::css::awt::KeyModifier::MOD2 : 0) 1666cdf0e10cSrcweir | (pKeyEvent->GetKeyCode().IsMod3() 1667cdf0e10cSrcweir ? ::css::awt::KeyModifier::MOD3 : 0), 1668cdf0e10cSrcweir pKeyEvent->GetKeyCode().GetCode(), pKeyEvent->GetCharCode(), 1669cdf0e10cSrcweir sal::static_int_cast< sal_Int16 >( 1670cdf0e10cSrcweir pKeyEvent->GetKeyCode().GetFunction())); 1671cdf0e10cSrcweir for (::sal_Int32 i = 0; i < aHandlers.getLength(); ++i) 1672cdf0e10cSrcweir { 1673cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XKeyHandler > xHandler( 1674cdf0e10cSrcweir aHandlers[i], ::css::uno::UNO_QUERY); 1675cdf0e10cSrcweir try 1676cdf0e10cSrcweir { 1677cdf0e10cSrcweir if ((bPressed ? xHandler->keyPressed(aAwtEvent) 1678cdf0e10cSrcweir : xHandler->keyReleased(aAwtEvent))) 1679cdf0e10cSrcweir return 1; 1680cdf0e10cSrcweir } 1681cdf0e10cSrcweir catch (::css::uno::RuntimeException & rEx) 1682cdf0e10cSrcweir { 1683cdf0e10cSrcweir OSL_TRACE( 1684cdf0e10cSrcweir "VCLXToolkit::callKeyHandlers: caught %s\n", 1685cdf0e10cSrcweir ::rtl::OUStringToOString( 1686cdf0e10cSrcweir rEx.Message, RTL_TEXTENCODING_UTF8).getStr()); 1687cdf0e10cSrcweir } 1688cdf0e10cSrcweir } 1689cdf0e10cSrcweir } 1690cdf0e10cSrcweir return 0; 1691cdf0e10cSrcweir } 1692cdf0e10cSrcweir 1693cdf0e10cSrcweir void VCLXToolkit::callFocusListeners(::VclSimpleEvent const * pEvent, 1694cdf0e10cSrcweir bool bGained) 1695cdf0e10cSrcweir { 1696cdf0e10cSrcweir ::Window * pWindow 1697cdf0e10cSrcweir = static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow(); 1698cdf0e10cSrcweir if (pWindow->IsTopWindow()) 1699cdf0e10cSrcweir { 1700cdf0e10cSrcweir ::css::uno::Sequence< ::css::uno::Reference< ::css::uno::XInterface > > 1701cdf0e10cSrcweir aListeners(m_aFocusListeners.getElements()); 1702cdf0e10cSrcweir if (aListeners.hasElements()) 1703cdf0e10cSrcweir { 1704cdf0e10cSrcweir // Ignore the interior of compound controls when determining the 1705cdf0e10cSrcweir // window that gets the focus next (see implementation in 1706cdf0e10cSrcweir // vclxwindow.cxx for mapping between VCL and UNO AWT event): 1707cdf0e10cSrcweir ::css::uno::Reference< css::uno::XInterface > xNext; 1708cdf0e10cSrcweir ::Window * pFocus = ::Application::GetFocusWindow(); 1709cdf0e10cSrcweir for (::Window * p = pFocus; p != 0; p = p->GetParent()) 1710cdf0e10cSrcweir if (!p->IsCompoundControl()) 1711cdf0e10cSrcweir { 1712cdf0e10cSrcweir pFocus = p; 1713cdf0e10cSrcweir break; 1714cdf0e10cSrcweir } 1715cdf0e10cSrcweir if (pFocus != 0) 1716cdf0e10cSrcweir xNext = pFocus->GetComponentInterface(true); 1717cdf0e10cSrcweir ::css::awt::FocusEvent aAwtEvent( 1718cdf0e10cSrcweir static_cast< ::css::awt::XWindow * >(pWindow->GetWindowPeer()), 1719cdf0e10cSrcweir pWindow->GetGetFocusFlags(), xNext, false); 1720cdf0e10cSrcweir for (::sal_Int32 i = 0; i < aListeners.getLength(); ++i) 1721cdf0e10cSrcweir { 1722cdf0e10cSrcweir ::css::uno::Reference< ::css::awt::XFocusListener > xListener( 1723cdf0e10cSrcweir aListeners[i], ::css::uno::UNO_QUERY); 1724cdf0e10cSrcweir try 1725cdf0e10cSrcweir { 1726cdf0e10cSrcweir bGained ? xListener->focusGained(aAwtEvent) 1727cdf0e10cSrcweir : xListener->focusLost(aAwtEvent); 1728cdf0e10cSrcweir } 1729cdf0e10cSrcweir catch (::css::uno::RuntimeException & rEx) 1730cdf0e10cSrcweir { 1731cdf0e10cSrcweir OSL_TRACE( 1732cdf0e10cSrcweir "VCLXToolkit::callFocusListeners: caught %s\n", 1733cdf0e10cSrcweir ::rtl::OUStringToOString( 1734cdf0e10cSrcweir rEx.Message, RTL_TEXTENCODING_UTF8).getStr()); 1735cdf0e10cSrcweir } 1736cdf0e10cSrcweir } 1737cdf0e10cSrcweir } 1738cdf0e10cSrcweir } 1739cdf0e10cSrcweir } 1740cdf0e10cSrcweir 1741cdf0e10cSrcweir // css::awt::XReschedule: 1742cdf0e10cSrcweir 1743cdf0e10cSrcweir void SAL_CALL VCLXToolkit::reschedule() 1744cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException) 1745cdf0e10cSrcweir { 1746cdf0e10cSrcweir Application::Reschedule(true); 1747cdf0e10cSrcweir } 1748cdf0e10cSrcweir 1749