Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <vcl/wrkwin.hxx>
21 : #include <vcl/svapp.hxx>
22 : #include <svtools/transfer.hxx>
23 : #include "runtime.hxx"
24 : #include <basic/sbstdobj.hxx>
25 :
26 : #define ATTR_IMP_TYPE 1
27 : #define ATTR_IMP_WIDTH 2
28 : #define ATTR_IMP_HEIGHT 3
29 : #define ATTR_IMP_BOLD 4
30 : #define ATTR_IMP_ITALIC 5
31 : #define ATTR_IMP_STRIKETHROUGH 6
32 : #define ATTR_IMP_UNDERLINE 7
33 : #define ATTR_IMP_WEIGHT 8
34 : #define ATTR_IMP_SIZE 9
35 : #define ATTR_IMP_NAME 10
36 :
37 : #define METH_CLEAR 20
38 : #define METH_GETDATA 21
39 : #define METH_GETFORMAT 22
40 : #define METH_GETTEXT 23
41 : #define METH_SETDATA 24
42 : #define METH_SETTEXT 25
43 :
44 : //------------------------------------------------------------------------------
45 265 : SbStdFactory::SbStdFactory()
46 : {
47 265 : }
48 :
49 0 : SbxObject* SbStdFactory::CreateObject( const OUString& rClassName )
50 : {
51 0 : if( rClassName.equalsIgnoreAsciiCase("Picture") )
52 0 : return new SbStdPicture;
53 0 : else if( rClassName.equalsIgnoreAsciiCase("Font") )
54 0 : return new SbStdFont;
55 : else
56 0 : return NULL;
57 : }
58 :
59 : //------------------------------------------------------------------------------
60 :
61 :
62 :
63 0 : void SbStdPicture::PropType( SbxVariable* pVar, SbxArray*, sal_Bool bWrite )
64 : {
65 0 : if( bWrite )
66 : {
67 0 : StarBASIC::Error( SbERR_PROP_READONLY );
68 0 : return;
69 : }
70 :
71 0 : GraphicType eType = aGraphic.GetType();
72 0 : sal_Int16 nType = 0;
73 :
74 0 : if( eType == GRAPHIC_BITMAP )
75 0 : nType = 1;
76 : else
77 0 : if( eType != GRAPHIC_NONE )
78 0 : nType = 2;
79 :
80 0 : pVar->PutInteger( nType );
81 : }
82 :
83 :
84 0 : void SbStdPicture::PropWidth( SbxVariable* pVar, SbxArray*, sal_Bool bWrite )
85 : {
86 0 : if( bWrite )
87 : {
88 0 : StarBASIC::Error( SbERR_PROP_READONLY );
89 0 : return;
90 : }
91 :
92 0 : Size aSize = aGraphic.GetPrefSize();
93 0 : aSize = GetpApp()->GetAppWindow()->LogicToPixel( aSize, aGraphic.GetPrefMapMode() );
94 0 : aSize = GetpApp()->GetAppWindow()->PixelToLogic( aSize, MapMode( MAP_TWIP ) );
95 :
96 0 : pVar->PutInteger( (sal_Int16)aSize.Width() );
97 : }
98 :
99 0 : void SbStdPicture::PropHeight( SbxVariable* pVar, SbxArray*, sal_Bool bWrite )
100 : {
101 0 : if( bWrite )
102 : {
103 0 : StarBASIC::Error( SbERR_PROP_READONLY );
104 0 : return;
105 : }
106 :
107 0 : Size aSize = aGraphic.GetPrefSize();
108 0 : aSize = GetpApp()->GetAppWindow()->LogicToPixel( aSize, aGraphic.GetPrefMapMode() );
109 0 : aSize = GetpApp()->GetAppWindow()->PixelToLogic( aSize, MapMode( MAP_TWIP ) );
110 :
111 0 : pVar->PutInteger( (sal_Int16)aSize.Height() );
112 : }
113 :
114 :
115 0 : TYPEINIT1( SbStdPicture, SbxObject );
116 :
117 0 : SbStdPicture::SbStdPicture() :
118 0 : SbxObject( OUString("Picture"))
119 : {
120 : // Properties
121 0 : SbxVariable* p = Make( OUString("Type"), SbxCLASS_PROPERTY, SbxVARIANT );
122 0 : p->SetFlags( SBX_READ | SBX_DONTSTORE );
123 0 : p->SetUserData( ATTR_IMP_TYPE );
124 0 : p = Make( OUString("Width"), SbxCLASS_PROPERTY, SbxVARIANT );
125 0 : p->SetFlags( SBX_READ | SBX_DONTSTORE );
126 0 : p->SetUserData( ATTR_IMP_WIDTH );
127 0 : p = Make( OUString("Height"), SbxCLASS_PROPERTY, SbxVARIANT );
128 0 : p->SetFlags( SBX_READ | SBX_DONTSTORE );
129 0 : p->SetUserData( ATTR_IMP_HEIGHT );
130 0 : }
131 :
132 0 : SbStdPicture::~SbStdPicture()
133 : {
134 0 : }
135 :
136 :
137 0 : SbxVariable* SbStdPicture::Find( const OUString& rName, SbxClassType t )
138 : {
139 : // entered already?
140 0 : return SbxObject::Find( rName, t );
141 : }
142 :
143 :
144 :
145 0 : void SbStdPicture::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
146 : const SfxHint& rHint, const TypeId& rHintType )
147 :
148 : {
149 0 : const SbxHint* pHint = PTR_CAST( SbxHint, &rHint );
150 :
151 0 : if( pHint )
152 : {
153 0 : if( pHint->GetId() == SBX_HINT_INFOWANTED )
154 : {
155 0 : SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
156 0 : return;
157 : }
158 :
159 0 : SbxVariable* pVar = pHint->GetVar();
160 0 : SbxArray* pPar_ = pVar->GetParameters();
161 0 : sal_uInt16 nWhich = (sal_uInt16)pVar->GetUserData();
162 0 : sal_Bool bWrite = pHint->GetId() == SBX_HINT_DATACHANGED;
163 :
164 : // Propteries
165 0 : switch( nWhich )
166 : {
167 0 : case ATTR_IMP_TYPE: PropType( pVar, pPar_, bWrite ); return;
168 0 : case ATTR_IMP_WIDTH: PropWidth( pVar, pPar_, bWrite ); return;
169 0 : case ATTR_IMP_HEIGHT: PropHeight( pVar, pPar_, bWrite ); return;
170 : }
171 :
172 0 : SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
173 : }
174 : }
175 :
176 : //-----------------------------------------------------------------------------
177 :
178 0 : void SbStdFont::PropBold( SbxVariable* pVar, SbxArray*, sal_Bool bWrite )
179 : {
180 0 : if( bWrite )
181 0 : SetBold( pVar->GetBool() );
182 : else
183 0 : pVar->PutBool( IsBold() );
184 0 : }
185 :
186 0 : void SbStdFont::PropItalic( SbxVariable* pVar, SbxArray*, sal_Bool bWrite )
187 : {
188 0 : if( bWrite )
189 0 : SetItalic( pVar->GetBool() );
190 : else
191 0 : pVar->PutBool( IsItalic() );
192 0 : }
193 :
194 0 : void SbStdFont::PropStrikeThrough( SbxVariable* pVar, SbxArray*, sal_Bool bWrite )
195 : {
196 0 : if( bWrite )
197 0 : SetStrikeThrough( pVar->GetBool() );
198 : else
199 0 : pVar->PutBool( IsStrikeThrough() );
200 0 : }
201 :
202 0 : void SbStdFont::PropUnderline( SbxVariable* pVar, SbxArray*, sal_Bool bWrite )
203 : {
204 0 : if( bWrite )
205 0 : SetUnderline( pVar->GetBool() );
206 : else
207 0 : pVar->PutBool( IsUnderline() );
208 0 : }
209 :
210 0 : void SbStdFont::PropSize( SbxVariable* pVar, SbxArray*, sal_Bool bWrite )
211 : {
212 0 : if( bWrite )
213 0 : SetSize( (sal_uInt16)pVar->GetInteger() );
214 : else
215 0 : pVar->PutInteger( (sal_Int16)GetSize() );
216 0 : }
217 :
218 0 : void SbStdFont::PropName( SbxVariable* pVar, SbxArray*, sal_Bool bWrite )
219 : {
220 0 : if( bWrite )
221 : {
222 0 : SetFontName( pVar->GetOUString() );
223 : }
224 : else
225 : {
226 0 : pVar->PutString( GetFontName() );
227 : }
228 0 : }
229 :
230 :
231 0 : TYPEINIT1( SbStdFont, SbxObject );
232 :
233 0 : SbStdFont::SbStdFont() :
234 0 : SbxObject( OUString("Font") )
235 : {
236 : // Properties
237 0 : SbxVariable* p = Make( OUString("Bold"), SbxCLASS_PROPERTY, SbxVARIANT );
238 0 : p->SetFlags( SBX_READWRITE | SBX_DONTSTORE );
239 0 : p->SetUserData( ATTR_IMP_BOLD );
240 0 : p = Make( OUString("Italic"), SbxCLASS_PROPERTY, SbxVARIANT );
241 0 : p->SetFlags( SBX_READWRITE | SBX_DONTSTORE );
242 0 : p->SetUserData( ATTR_IMP_ITALIC );
243 0 : p = Make( OUString("StrikeThrough"), SbxCLASS_PROPERTY, SbxVARIANT );
244 0 : p->SetFlags( SBX_READWRITE | SBX_DONTSTORE );
245 0 : p->SetUserData( ATTR_IMP_STRIKETHROUGH );
246 0 : p = Make( OUString("Underline"), SbxCLASS_PROPERTY, SbxVARIANT );
247 0 : p->SetFlags( SBX_READWRITE | SBX_DONTSTORE );
248 0 : p->SetUserData( ATTR_IMP_UNDERLINE );
249 0 : p = Make( OUString("Size"), SbxCLASS_PROPERTY, SbxVARIANT );
250 0 : p->SetFlags( SBX_READWRITE | SBX_DONTSTORE );
251 0 : p->SetUserData( ATTR_IMP_SIZE );
252 :
253 : // handle name property yourself
254 0 : p = Find( OUString("Name"), SbxCLASS_PROPERTY );
255 : DBG_ASSERT( p, "Keine Name Property" );
256 0 : p->SetUserData( ATTR_IMP_NAME );
257 0 : }
258 :
259 0 : SbStdFont::~SbStdFont()
260 : {
261 0 : }
262 :
263 :
264 0 : SbxVariable* SbStdFont::Find( const OUString& rName, SbxClassType t )
265 : {
266 0 : return SbxObject::Find( rName, t );
267 : }
268 :
269 :
270 :
271 0 : void SbStdFont::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
272 : const SfxHint& rHint, const TypeId& rHintType )
273 : {
274 0 : const SbxHint* pHint = PTR_CAST( SbxHint, &rHint );
275 :
276 0 : if( pHint )
277 : {
278 0 : if( pHint->GetId() == SBX_HINT_INFOWANTED )
279 : {
280 0 : SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
281 0 : return;
282 : }
283 :
284 0 : SbxVariable* pVar = pHint->GetVar();
285 0 : SbxArray* pPar_ = pVar->GetParameters();
286 0 : sal_uInt16 nWhich = (sal_uInt16)pVar->GetUserData();
287 0 : sal_Bool bWrite = pHint->GetId() == SBX_HINT_DATACHANGED;
288 :
289 : // Propteries
290 0 : switch( nWhich )
291 : {
292 0 : case ATTR_IMP_BOLD: PropBold( pVar, pPar_, bWrite ); return;
293 0 : case ATTR_IMP_ITALIC: PropItalic( pVar, pPar_, bWrite ); return;
294 0 : case ATTR_IMP_STRIKETHROUGH:PropStrikeThrough( pVar, pPar_, bWrite ); return;
295 0 : case ATTR_IMP_UNDERLINE: PropUnderline( pVar, pPar_, bWrite ); return;
296 0 : case ATTR_IMP_SIZE: PropSize( pVar, pPar_, bWrite ); return;
297 0 : case ATTR_IMP_NAME: PropName( pVar, pPar_, bWrite ); return;
298 : }
299 :
300 0 : SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
301 : }
302 : }
303 :
304 :
305 : //-----------------------------------------------------------------------------
306 :
307 :
308 0 : void SbStdClipboard::MethClear( SbxVariable*, SbxArray* pPar_, sal_Bool )
309 : {
310 0 : if( pPar_ && (pPar_->Count() > 1) )
311 : {
312 0 : StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
313 0 : return;
314 : }
315 :
316 : }
317 :
318 0 : void SbStdClipboard::MethGetData( SbxVariable* pVar, SbxArray* pPar_, sal_Bool )
319 : {
320 : (void)pVar;
321 :
322 0 : if( !pPar_ || (pPar_->Count() != 2) )
323 : {
324 0 : StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
325 0 : return;
326 : }
327 :
328 0 : sal_uInt16 nFormat = pPar_->Get(1)->GetInteger();
329 0 : if( !nFormat || nFormat > 3 )
330 : {
331 0 : StarBASIC::Error( SbERR_BAD_ARGUMENT );
332 0 : return;
333 : }
334 :
335 : }
336 :
337 0 : void SbStdClipboard::MethGetFormat( SbxVariable* pVar, SbxArray* pPar_, sal_Bool )
338 : {
339 0 : if( !pPar_ || (pPar_->Count() != 2) )
340 : {
341 0 : StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
342 0 : return;
343 : }
344 :
345 0 : sal_uInt16 nFormat = pPar_->Get(1)->GetInteger();
346 0 : if( !nFormat || nFormat > 3 )
347 : {
348 0 : StarBASIC::Error( SbERR_BAD_ARGUMENT );
349 0 : return;
350 : }
351 :
352 0 : pVar->PutBool( sal_False );
353 : }
354 :
355 0 : void SbStdClipboard::MethGetText( SbxVariable* pVar, SbxArray* pPar_, sal_Bool )
356 : {
357 0 : if( pPar_ && (pPar_->Count() > 1) )
358 : {
359 0 : StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
360 0 : return;
361 : }
362 :
363 0 : pVar->PutString( OUString() );
364 : }
365 :
366 0 : void SbStdClipboard::MethSetData( SbxVariable* pVar, SbxArray* pPar_, sal_Bool )
367 : {
368 : (void)pVar;
369 :
370 0 : if( !pPar_ || (pPar_->Count() != 3) )
371 : {
372 0 : StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
373 0 : return;
374 : }
375 :
376 0 : sal_uInt16 nFormat = pPar_->Get(2)->GetInteger();
377 0 : if( !nFormat || nFormat > 3 )
378 : {
379 0 : StarBASIC::Error( SbERR_BAD_ARGUMENT );
380 0 : return;
381 : }
382 :
383 : }
384 :
385 0 : void SbStdClipboard::MethSetText( SbxVariable* pVar, SbxArray* pPar_, sal_Bool )
386 : {
387 : (void)pVar;
388 :
389 0 : if( !pPar_ || (pPar_->Count() != 2) )
390 : {
391 0 : StarBASIC::Error( SbERR_BAD_NUMBER_OF_ARGS );
392 0 : return;
393 : }
394 :
395 : }
396 :
397 :
398 0 : TYPEINIT1( SbStdClipboard, SbxObject );
399 :
400 265 : SbStdClipboard::SbStdClipboard() :
401 265 : SbxObject( OUString("Clipboard") )
402 : {
403 265 : SbxVariable* p = Find( OUString("Name"), SbxCLASS_PROPERTY );
404 : DBG_ASSERT( p, "Keine Name Property" );
405 265 : p->SetUserData( ATTR_IMP_NAME );
406 :
407 : // register methods
408 265 : p = Make( OUString("Clear"), SbxCLASS_METHOD, SbxEMPTY );
409 265 : p->SetFlag( SBX_DONTSTORE );
410 265 : p->SetUserData( METH_CLEAR );
411 265 : p = Make( OUString("GetData"), SbxCLASS_METHOD, SbxEMPTY );
412 265 : p->SetFlag( SBX_DONTSTORE );
413 265 : p->SetUserData( METH_GETDATA );
414 265 : p = Make( OUString("GetFormat"), SbxCLASS_METHOD, SbxEMPTY );
415 265 : p->SetFlag( SBX_DONTSTORE );
416 265 : p->SetUserData( METH_GETFORMAT );
417 265 : p = Make( OUString("GetText"), SbxCLASS_METHOD, SbxEMPTY );
418 265 : p->SetFlag( SBX_DONTSTORE );
419 265 : p->SetUserData( METH_GETTEXT );
420 265 : p = Make( OUString("SetData"), SbxCLASS_METHOD, SbxEMPTY );
421 265 : p->SetFlag( SBX_DONTSTORE );
422 265 : p->SetUserData( METH_SETDATA );
423 265 : p = Make( OUString("SetText"), SbxCLASS_METHOD, SbxEMPTY );
424 265 : p->SetFlag( SBX_DONTSTORE );
425 265 : p->SetUserData( METH_SETTEXT );
426 265 : }
427 :
428 426 : SbStdClipboard::~SbStdClipboard()
429 : {
430 426 : }
431 :
432 :
433 265 : SbxVariable* SbStdClipboard::Find( const OUString& rName, SbxClassType t )
434 : {
435 265 : return SbxObject::Find( rName, t );
436 : }
437 :
438 :
439 :
440 0 : void SbStdClipboard::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
441 : const SfxHint& rHint, const TypeId& rHintType )
442 : {
443 0 : const SbxHint* pHint = PTR_CAST( SbxHint, &rHint );
444 :
445 0 : if( pHint )
446 : {
447 0 : if( pHint->GetId() == SBX_HINT_INFOWANTED )
448 : {
449 0 : SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
450 0 : return;
451 : }
452 :
453 0 : SbxVariable* pVar = pHint->GetVar();
454 0 : SbxArray* pPar_ = pVar->GetParameters();
455 0 : sal_uInt16 nWhich = (sal_uInt16)pVar->GetUserData();
456 0 : sal_Bool bWrite = pHint->GetId() == SBX_HINT_DATACHANGED;
457 :
458 : // Methods
459 0 : switch( nWhich )
460 : {
461 0 : case METH_CLEAR: MethClear( pVar, pPar_, bWrite ); return;
462 0 : case METH_GETDATA: MethGetData( pVar, pPar_, bWrite ); return;
463 0 : case METH_GETFORMAT: MethGetFormat( pVar, pPar_, bWrite ); return;
464 0 : case METH_GETTEXT: MethGetText( pVar, pPar_, bWrite ); return;
465 0 : case METH_SETDATA: MethSetData( pVar, pPar_, bWrite ); return;
466 0 : case METH_SETTEXT: MethSetText( pVar, pPar_, bWrite ); return;
467 : }
468 :
469 0 : SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
470 : }
471 : }
472 :
473 :
474 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|