Lines 14-20
Link Here
|
14 |
* |
14 |
* |
15 |
* GNU Lesser General Public License Version 2.1 |
15 |
* GNU Lesser General Public License Version 2.1 |
16 |
* ============================================= |
16 |
* ============================================= |
17 |
* Copyright 2005 by Sun Microsystems, Inc. |
17 |
* Copyright 2005, 2010 by Sun Microsystems, Inc. |
18 |
* 901 San Antonio Road, Palo Alto, CA 94303, USA |
18 |
* 901 San Antonio Road, Palo Alto, CA 94303, USA |
19 |
* |
19 |
* |
20 |
* This library is free software; you can redistribute it and/or |
20 |
* This library is free software; you can redistribute it and/or |
Lines 36-42
Link Here
|
36 |
#include "vbauserform.hxx" |
36 |
#include "vbauserform.hxx" |
37 |
#include <com/sun/star/awt/XControl.hpp> |
37 |
#include <com/sun/star/awt/XControl.hpp> |
38 |
#include <com/sun/star/awt/XControlContainer.hpp> |
38 |
#include <com/sun/star/awt/XControlContainer.hpp> |
|
|
39 |
#include <com/sun/star/awt/XTopWindow.hpp> |
39 |
#include <com/sun/star/beans/PropertyConcept.hpp> |
40 |
#include <com/sun/star/beans/PropertyConcept.hpp> |
|
|
41 |
#include <vcl/svapp.hxx> |
40 |
#include <basic/sbx.hxx> |
42 |
#include <basic/sbx.hxx> |
41 |
#include <basic/sbstar.hxx> |
43 |
#include <basic/sbstar.hxx> |
42 |
#include <basic/sbmeth.hxx> |
44 |
#include <basic/sbmeth.hxx> |
Lines 44-49
Link Here
|
44 |
|
46 |
|
45 |
using namespace ::ooo::vba; |
47 |
using namespace ::ooo::vba; |
46 |
using namespace ::com::sun::star; |
48 |
using namespace ::com::sun::star; |
|
|
49 |
|
50 |
// backdoor access keys ( note these are names not legal in OLE/IDL ) |
51 |
const static rtl::OUString ISMODAL( RTL_CONSTASCII_USTRINGPARAM("_IsModal") ); |
47 |
|
52 |
|
48 |
// some little notes |
53 |
// some little notes |
49 |
// XDialog implementation has the following interesting bits |
54 |
// XDialog implementation has the following interesting bits |
Lines 55-61
Link Here
|
55 |
// the models in ControlModels can be accessed by name |
60 |
// the models in ControlModels can be accessed by name |
56 |
// also the XDialog is a XControl ( to access the model above |
61 |
// also the XDialog is a XControl ( to access the model above |
57 |
|
62 |
|
58 |
ScVbaUserForm::ScVbaUserForm( uno::Sequence< uno::Any > const& aArgs, uno::Reference< uno::XComponentContext >const& xContext ) throw ( lang::IllegalArgumentException ) : ScVbaUserForm_BASE( getXSomethingFromArgs< XHelperInterface >( aArgs, 0 ), xContext, getXSomethingFromArgs< uno::XInterface >( aArgs, 1 ), getXSomethingFromArgs< frame::XModel >( aArgs, 2 ), static_cast< ooo::vba::AbstractGeometryAttributes* >(0) ), mbDispose( true ) |
63 |
ScVbaUserForm::ScVbaUserForm( uno::Sequence< uno::Any > const& aArgs, uno::Reference< uno::XComponentContext >const& xContext ) throw ( lang::IllegalArgumentException ) : ScVbaUserForm_BASE( getXSomethingFromArgs< XHelperInterface >( aArgs, 0 ), xContext, getXSomethingFromArgs< uno::XInterface >( aArgs, 1 ), getXSomethingFromArgs< frame::XModel >( aArgs, 2 ), static_cast< ooo::vba::AbstractGeometryAttributes* >(0) ), mbDispose( true ), mbModal( false ) |
59 |
{ |
64 |
{ |
60 |
m_xDialog.set( m_xControl, uno::UNO_QUERY_THROW ); |
65 |
m_xDialog.set( m_xControl, uno::UNO_QUERY_THROW ); |
61 |
uno::Reference< awt::XControl > xControl( m_xDialog, uno::UNO_QUERY_THROW ); |
66 |
uno::Reference< awt::XControl > xControl( m_xDialog, uno::UNO_QUERY_THROW ); |
Lines 70-95
Link Here
|
70 |
} |
75 |
} |
71 |
|
76 |
|
72 |
void SAL_CALL |
77 |
void SAL_CALL |
73 |
ScVbaUserForm::Show( ) throw (uno::RuntimeException) |
78 |
ScVbaUserForm::Show( const uno::Any& modal ) throw (uno::RuntimeException) |
74 |
{ |
79 |
{ |
75 |
OSL_TRACE("ScVbaUserForm::Show( )"); |
80 |
OSL_TRACE("***** !!!!!! *(************** ScVbaUserForm::Show( new and improved )"); |
76 |
short aRet = 0; |
81 |
|
77 |
mbDispose = true; |
82 |
sal_Bool isModal = sal_True; |
78 |
if ( m_xDialog.is() ) |
83 |
// Convert the parameter. |
79 |
aRet = m_xDialog->execute(); |
84 |
uno::Reference< script::XTypeConverter > xConverter = getTypeConverter( mxContext ); |
80 |
OSL_TRACE("ScVbaUserForm::Show() execute returned %d", aRet); |
85 |
if ( modal.hasValue() && xConverter.is() ) |
81 |
if ( mbDispose ) |
|
|
82 |
{ |
86 |
{ |
|
|
87 |
uno::Any aConverted; |
83 |
try |
88 |
try |
84 |
{ |
89 |
{ |
85 |
uno::Reference< lang::XComponent > xComp( m_xDialog, uno::UNO_QUERY_THROW ); |
90 |
aConverted = xConverter->convertTo( modal, getCppuType( (const sal_Bool*) 0 ) ); |
86 |
m_xDialog = NULL; |
91 |
aConverted >>= isModal; |
87 |
xComp->dispose(); |
|
|
88 |
mbDispose = false; |
89 |
} |
92 |
} |
90 |
catch( uno::Exception& ) |
93 |
catch( const uno::Exception& ex ) |
91 |
{ |
94 |
{ |
92 |
} |
95 |
} |
|
|
96 |
} |
97 |
|
98 |
mbDispose = true; |
99 |
if ( isModal ) // Show the dialog in modal mode. |
100 |
{ |
101 |
short aRet = 0; |
102 |
mbModal = true; |
103 |
if ( m_xDialog.is() ) |
104 |
{ |
105 |
aRet = m_xDialog->execute(); |
106 |
} |
107 |
OSL_TRACE("ScVbaUserForm::Show() execute returned %d", aRet); |
108 |
if ( mbDispose ) |
109 |
{ |
110 |
try |
111 |
{ |
112 |
uno::Reference< lang::XComponent > xComponent( m_xDialog, uno::UNO_QUERY_THROW ); |
113 |
m_xDialog = NULL; |
114 |
xComponent->dispose(); |
115 |
mbDispose = false; |
116 |
} |
117 |
catch( const uno::Exception& ex ) |
118 |
{ |
119 |
} |
120 |
} |
121 |
mbModal = false; |
122 |
} |
123 |
else // Show the dialog in modeless mode. |
124 |
{ |
125 |
mbModal = false; |
126 |
uno::Reference< awt::XWindow > xWindow( getDialogWindow() ); |
127 |
if ( xWindow.is() ) |
128 |
xWindow->setVisible( sal_True ); |
93 |
} |
129 |
} |
94 |
} |
130 |
} |
95 |
|
131 |
|
Lines 111-117
Link Here
|
111 |
{ |
147 |
{ |
112 |
mbDispose = false; // hide not dispose |
148 |
mbDispose = false; // hide not dispose |
113 |
if ( m_xDialog.is() ) |
149 |
if ( m_xDialog.is() ) |
114 |
m_xDialog->endExecute(); |
150 |
{ |
|
|
151 |
if ( mbModal ) // Hide the Modal Dialog. |
152 |
{ |
153 |
m_xDialog->endExecute(); |
154 |
} |
155 |
else // Hide the Modeless Dialog. |
156 |
{ |
157 |
uno::Reference< awt::XWindow > xWindow ( getDialogWindow() ); |
158 |
if ( xWindow.is() ) |
159 |
xWindow->setVisible( sal_False ); |
160 |
} |
161 |
} |
162 |
} |
163 |
|
164 |
uno::Reference< awt::XWindow > |
165 |
ScVbaUserForm::getDialogWindow() |
166 |
{ |
167 |
uno::Reference< awt::XWindow > xWindow; |
168 |
uno::Reference< awt::XControl > xCntrl( m_xDialog, uno::UNO_QUERY ); |
169 |
if ( xCntrl.is() ) |
170 |
xWindow.set( xCntrl->getPeer(), uno::UNO_QUERY ); |
171 |
return xWindow; |
115 |
} |
172 |
} |
116 |
|
173 |
|
117 |
void SAL_CALL |
174 |
void SAL_CALL |
Lines 125-131
Link Here
|
125 |
{ |
182 |
{ |
126 |
mbDispose = true; |
183 |
mbDispose = true; |
127 |
if ( m_xDialog.is() ) |
184 |
if ( m_xDialog.is() ) |
128 |
m_xDialog->endExecute(); |
185 |
{ |
|
|
186 |
if ( mbModal ) // End the Modal Dialog. |
187 |
{ |
188 |
m_xDialog->endExecute(); |
189 |
} |
190 |
else // Hide the Modeless Dialog and dispose it. |
191 |
{ |
192 |
uno::Reference< awt::XWindow > xWindow( getDialogWindow() ); |
193 |
if ( xWindow.is() ) |
194 |
xWindow->setVisible( sal_False ); |
195 |
try |
196 |
{ |
197 |
uno::Reference< lang::XComponent > xComponent( m_xDialog, uno::UNO_QUERY_THROW ); |
198 |
xComponent->dispose(); |
199 |
} |
200 |
catch( const uno::Exception& ex ) |
201 |
{ |
202 |
} |
203 |
m_xDialog = NULL; |
204 |
} |
205 |
} |
129 |
} |
206 |
} |
130 |
|
207 |
|
131 |
rtl::OUString& |
208 |
rtl::OUString& |
Lines 177-182
Link Here
|
177 |
uno::Any SAL_CALL |
254 |
uno::Any SAL_CALL |
178 |
ScVbaUserForm::getValue( const ::rtl::OUString& aPropertyName ) throw (beans::UnknownPropertyException, uno::RuntimeException) |
255 |
ScVbaUserForm::getValue( const ::rtl::OUString& aPropertyName ) throw (beans::UnknownPropertyException, uno::RuntimeException) |
179 |
{ |
256 |
{ |
|
|
257 |
// Some back door access to allow basic runtime to query various states |
258 |
if ( aPropertyName.equals( ISMODAL ) ) |
259 |
return uno::makeAny( mbModal ); |
260 |
|
180 |
uno::Reference< awt::XControl > xDialogControl( m_xDialog, uno::UNO_QUERY_THROW ); |
261 |
uno::Reference< awt::XControl > xDialogControl( m_xDialog, uno::UNO_QUERY_THROW ); |
181 |
uno::Reference< awt::XControlContainer > xContainer( m_xDialog, uno::UNO_QUERY_THROW ); |
262 |
uno::Reference< awt::XControlContainer > xContainer( m_xDialog, uno::UNO_QUERY_THROW ); |
182 |
uno::Reference< awt::XControl > xControl = xContainer->getControl( aPropertyName ); |
263 |
uno::Reference< awt::XControl > xControl = xContainer->getControl( aPropertyName ); |