xref: /AOO41X/main/sc/workben/test.cxx (revision b3f79822e811ac3493b185030a72c3c5a51f32d8)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #include <tools/debug.hxx>
25 #include <svtools/libcall.hxx>
26 #include <vcl/msgbox.hxx>
27 #include <vcl/window.hxx>
28 #include <vcl/button.hxx>
29 #include <vcl/field.hxx>
30 #include <vcl/fixed.hxx>
31 #include <vcl/help.hxx>
32 #include <usr/conver.hxx>
33 #include <usr/uno.hxx>
34 #include <usr/refl.hxx>
35 #include <stardiv/one/frame/xcollect.hxx>
36 #include <stardiv/one/text/offfield.hxx>
37 #include <stardiv/one/offmisc.hxx>
38 #include <stardiv/one/sheet/offtable.hxx>
39 #include <stardiv/one/text/offtext.hxx>
40 #include <stardiv/one/offstyle.hxx>
41 #include <stardiv/one/offview.hxx>
42 #include <stardiv/uno/repos/serinfo.hxx>
43 #include <stardiv/one/sheet/sctypes.hxx>
44 #include <stardiv/one/sheet/scmodel.hxx>
45 #include <stardiv/one/sheet/sccells.hxx>
46 #include <stardiv/one/sheet/sctables.hxx>
47 #include <stardiv/one/sheet/sctable.hxx>
48 #include <stardiv/one/sheet/sccell.hxx>
49 #include <stardiv/one/sheet/scpostit.hxx>
50 #include <stardiv/one/sheet/scview.hxx>
51 #include <stardiv/one/sheet/scdata.hxx>
52 #include <stardiv/one/sheet/scattr.hxx>
53 
54 //! das muss als Konstante in irgendeine idl-Datei!!!!
55 #define TEXTCONTROLCHAR_PARAGRAPH_BREAK         0
56 
57 
58 class MyFixedText : public FixedText
59 {
60 protected:
61     void        RequestHelp( const HelpEvent& rHEvt );
62 public:
MyFixedText(Window * pParent)63                 MyFixedText(Window* pParent) : FixedText(pParent) {}
64 };
65 
66 class MyWindow : public Window
67 {
68 private:
69     NumericField    aCountField;
70     PushButton      aCountButton;
71     MyFixedText     aTimeText;
72     NumericField    aColField;
73     NumericField    aRowField;
74     NumericField    aPosField;
75     NumericField    aLenField;
76     Edit            aTextEdit;
77     PushButton      aTextButton;
78     PushButton      aBlaButton;
79     PushButton      aTabButton;
80     PushButton      aViewButton;
81 
82 public:
83             MyWindow( Window *pParent );
84 
85         DECL_LINK(CountHdl, PushButton*);
86         DECL_LINK(TextHdl, PushButton*);
87         DECL_LINK(BlaHdl, PushButton*);
88         DECL_LINK(TabHdl, PushButton*);
89         DECL_LINK(ViewHdl, PushButton*);
90 };
91 
92 //-----------------------------------------------------------------------
93 
94 class ScTestListener : public XSelectionChangeListener, public UsrObject
95 {
96 private:
97     FixedText*  pFixedText;
98 
99 public:
100                             ScTestListener(FixedText* pF);
101     virtual                 ~ScTestListener();
102 
103                             SMART_UNO_DECLARATION( ScTestListener, UsrObject );
104 
105     virtual XInterface *    queryInterface( UsrUik );
106     virtual XIdlClassRef    getIdlClass(void);
107 
108     virtual void            disposing(const EventObject& Source);
109 
110                             // XSelectionChangeListener
111     virtual void            selectionChanged(const EventObject& aEvent);
112 };
113 
114 //-----------------------------------------------------------------------
115 
116 static long nBla = 0;
117 
118 static XCellRef xGlobalCell;
119 
120 //-----------------------------------------------------------------------
121 
ScTestListener(FixedText * pF)122 ScTestListener::ScTestListener(FixedText* pF) :
123     pFixedText( pF )
124 {
125 }
126 
~ScTestListener()127 ScTestListener::~ScTestListener()
128 {
129 }
130 
queryInterface(UsrUik aUIK)131 XInterface* ScTestListener::queryInterface( UsrUik aUIK )
132 {
133     if ( aUIK == XSelectionChangeListener::getSmartUik() )
134         return (XSelectionChangeListener*) this;
135 
136     return UsrObject::queryInterface( aUIK );
137 }
138 
getIdlClass(void)139 XIdlClassRef ScTestListener::getIdlClass(void)
140 {
141     static XIdlClassRef xClass = createStandardClass( L"ScTestListener",
142         UsrObject::getUsrObjectIdlClass(),
143         1, XSelectionChangeListener_getReflection() );
144     return xClass;
145 }
146 
disposing(const EventObject & Source)147 void ScTestListener::disposing(const EventObject& Source)
148 {
149 }
150 
151 // XSelectionChangeListener
152 
selectionChanged(const EventObject & aEvent)153 void ScTestListener::selectionChanged(const EventObject& aEvent)
154 {
155     static USHORT nBla = 0;
156     pFixedText->SetText(++nBla);
157 
158     XInterfaceRef xInt = aEvent.Source;
159     if (!xInt) return;
160     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
161     if (!xView) return;
162     XInterfaceRef xSelInt = xView->getSelection();
163     if (!xSelInt) return;
164     XCellCollectionRef xCells = (XCellCollection*)
165                 xSelInt->queryInterface(XCellCollection::getSmartUik());
166     if (!xCells) return;
167 
168     String aStr = OUStringToString( xCells->getAddress(), CHARSET_SYSTEM );
169     pFixedText->SetText(aStr);
170 }
171 
172 
173 //-----------------------------------------------------------------------
174 
CreateWindow(Window * pParent,const String & rParam)175 extern "C" Window* __LOADONCALLAPI CreateWindow( Window *pParent, const String& rParam )
176 {
177     MyWindow *pWin = new MyWindow( pParent );
178     return pWin;
179 }
180 
RequestHelp(const HelpEvent & rHEvt)181 void MyFixedText::RequestHelp( const HelpEvent& rHEvt )
182 {
183     String  aTxtStr=GetText();
184     Size    aTxtSize=GetTextSize(aTxtStr);
185     Point   aShowPoint= OutputToScreenPixel(Point(0,0));
186     if ( ( rHEvt.GetMode() & HELPMODE_QUICK ) == HELPMODE_QUICK &&
187          aTxtSize.Width()>GetSizePixel().Width())
188         Help::ShowQuickHelp( Rectangle(aShowPoint,aTxtSize), aTxtStr, QUICKHELP_TOP|QUICKHELP_LEFT );
189     else
190         FixedText::RequestHelp( rHEvt );
191 }
192 
MyWindow(Window * pParent)193 MyWindow::MyWindow( Window *pParent ) :
194     Window( pParent ),
195     aCountField( this, WinBits(WB_SPIN | WB_REPEAT | WB_BORDER) ),
196     aCountButton( this ),
197     aTimeText( this ),
198     aColField( this, WinBits(WB_SPIN | WB_REPEAT | WB_BORDER) ),
199     aRowField( this, WinBits(WB_SPIN | WB_REPEAT | WB_BORDER) ),
200     aPosField( this, WinBits(WB_SPIN | WB_REPEAT | WB_BORDER) ),
201     aLenField( this, WinBits(WB_SPIN | WB_REPEAT | WB_BORDER) ),
202     aTextEdit( this, WinBits(WB_BORDER) ),
203     aTextButton( this ),
204     aBlaButton( this ),
205     aTabButton( this ),
206     aViewButton( this )
207 {
208     aCountField.SetPosSizePixel( Point(10,10), Size(40,20) );
209     aCountField.SetValue(1);
210 
211     aCountButton.SetPosSizePixel( Point(10,40), Size(100,30) );
212     aCountButton.SetText("hochzaehlen");
213 
214     aTimeText.SetPosSizePixel( Point(10,80), Size(100,20) );
215 
216     aColField.SetPosSizePixel( Point(10,120), Size(40,20) );
217     aRowField.SetPosSizePixel( Point(60,120), Size(40,20) );
218     aPosField.SetPosSizePixel( Point(10,150), Size(40,20) );
219     aLenField.SetPosSizePixel( Point(60,150), Size(40,20) );
220     aTextEdit.SetPosSizePixel( Point(10,180), Size(100,20) );
221 
222     aTextButton.SetPosSizePixel( Point(10,210), Size(100,30) );
223     aTextButton.SetText("col/row/pos/len");
224 
225     aBlaButton.SetPosSizePixel( Point(10,260), Size(100,30) );
226     aBlaButton.SetText("Bla");
227 
228     aTabButton.SetPosSizePixel( Point(10,310), Size(100,30) );
229     aTabButton.SetText("Tabellen");
230 
231     aViewButton.SetPosSizePixel( Point(10,360), Size(100,30) );
232     aViewButton.SetText("Pfui");
233 
234     aCountButton.SetClickHdl(LINK(this, MyWindow, CountHdl));
235     aTextButton.SetClickHdl(LINK(this, MyWindow, TextHdl));
236     aBlaButton.SetClickHdl(LINK(this, MyWindow, BlaHdl));
237     aTabButton.SetClickHdl(LINK(this, MyWindow, TabHdl));
238     aViewButton.SetClickHdl(LINK(this, MyWindow, ViewHdl));
239 
240     aCountField.Show();
241     aCountButton.Show();
242     aTimeText.Show();
243     aColField.Show();
244     aRowField.Show();
245     aPosField.Show();
246     aLenField.Show();
247     aTextEdit.Show();
248     aTextButton.Show();
249     aBlaButton.Show();
250     aTabButton.Show();
251     aViewButton.Show();
252 }
253 
254 //-----------------------------------------------------------------------
255 
lcl_GetDocument()256 XSpreadsheetDocumentRef lcl_GetDocument()
257 {
258     XServiceManagerRef xProv = getGlobalServiceManager();
259     DBG_ASSERT( xProv.is(), "Kein ServiceManager!" );
260 
261     XServiceRegistryRef xReg = (XServiceRegistry*)xProv->queryInterface(XServiceRegistry::getSmartUik());
262     if ( !xReg )
263         return NULL;
264 
265     Sequence<Uik> aIfaces( 1 );
266     aIfaces.getArray()[0] = XModelCollection::getSmartUik();
267     XServiceProviderRef xSSI = xProv->getServiceProvider( L"stardiv.desktop.ModelCollection",
268                                                             aIfaces, Sequence<Uik>() );
269 
270     XModelCollectionRef aCollRef = (XModelCollection*)
271                         xSSI->newInstance()->queryInterface( XModelCollection::getSmartUik() );
272     USHORT nCount = aCollRef->getCount();
273 
274     XSpreadsheetDocumentRef xModel;                         // Calc-Model
275     for (USHORT nMod=0; nMod<nCount && !xModel; nMod++)     // Calc-Doc suchen
276     {
277         XModelRef aRef = aCollRef->getItemByIndex( nMod );
278         if ( aRef )
279         {
280             aRef->acquire();
281             xModel = (XSpreadsheetDocument*) aRef->queryInterface( XSpreadsheetDocument::getSmartUik() );
282             aRef->release();
283         }
284     }
285     return xModel;
286 }
287 
lcl_GetView()288 XInterfaceRef lcl_GetView()
289 {
290     XInterfaceRef xView;
291     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
292     if (xDoc)
293         xView = xDoc->getDDELinks();        //! temporaer zum Testen !!!!!!!!!
294 
295     return xView;
296 }
297 
298 //-----------------------------------------------------------------------
299 
lcl_OutputNames(const XInterfaceRef & xSource,const XSpreadsheetDocumentRef & xDoc,USHORT nCol,USHORT nRow,USHORT nTab)300 void lcl_OutputNames( const XInterfaceRef& xSource,     // XNameAccess
301                         const XSpreadsheetDocumentRef& xDoc,
302                         USHORT nCol, USHORT nRow, USHORT nTab )
303 {
304     CellAddress aAdr;
305     aAdr.Sheet  = nTab;
306     aAdr.Column = nCol;
307     aAdr.Row    = nRow;
308 
309     XNameAccessRef xNames = (XNameAccess*)xSource->queryInterface(XNameAccess::getSmartUik());
310     if (!xNames) return;
311     Sequence<UString> aSeq = xNames->getElementNames();
312 
313     USHORT nLen = (USHORT)aSeq.getLen();
314 
315     XCellRef xCell = xDoc->getCell(aAdr);
316     if (!xCell) return;
317     xCell->setValue( nLen );
318     ++aAdr.Row;
319 
320     UString* pAry = aSeq.getArray();
321     for (USHORT i=0; i<nLen; i++)
322     {
323         xCell = xDoc->getCell(aAdr);
324         if (!xCell) return;
325         XTextRef xText = (XText*)xCell->queryInterface(XText::getSmartUik());
326         if (!xText) return;
327         xText->setText( pAry[i] );
328         ++aAdr.Row;
329     }
330 }
331 
332 //-----------------------------------------------------------------------
333 
lcl_SetText(const XTextRef & xText)334 void lcl_SetText( const XTextRef& xText )
335 {
336     if (!xText.is()) return;
337     XTextCursorRef xCursor = xText->createTextCursor();
338     if (!xCursor.is()) return;
339     XTextPositionRef xPos = (XTextPosition*)xCursor->queryInterface(XTextPosition::getSmartUik());
340     XPropertySetRef xProp = (XPropertySet*)xCursor->queryInterface(XPropertySet::getSmartUik());
341     XControlCharacterInsertableRef xControl = (XControlCharacterInsertable*)
342                             xCursor->queryInterface(XControlCharacterInsertable::getSmartUik());
343     XParagraphCursorRef xPara = (XParagraphCursor*)
344                             xCursor->queryInterface(XParagraphCursor::getSmartUik());
345 
346     if (!xPos.is() || !xControl.is() || !xPara.is()) return;    // PropertySet kann fehlen
347 
348     xText->setText(L"bla fasel");
349     xCursor->gotoEnd(FALSE);
350     xControl->insertControlCharacter( TEXTCONTROLCHAR_PARAGRAPH_BREAK );
351     xPos->collapseToEnd();
352     xPos->setText(L"s\xFClz");      // zweiter Absatz
353 
354     xCursor->gotoStart(FALSE);
355     xPara->gotoEndOfParagraph(FALSE);
356     xCursor->goLeft(5, TRUE);               // letzte 5 Zeichen im 1. Absatz
357     if (xProp.is())
358         xProp->setPropertyValue(L"Bold", UsrAny((BOOL)TRUE));
359 }
360 
361 //-----------------------------------------------------------------------
362 
lcl_DoCount()363 void lcl_DoCount()
364 {
365     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
366     if (xDoc)
367     {
368         XActionLockableRef xLock = (XActionLockable*)
369                             xDoc->queryInterface(XActionLockable::getSmartUik());
370         XCalculateRef xCalc = (XCalculate*)
371                             xDoc->queryInterface(XCalculate::getSmartUik());
372         if (xLock)
373             xLock->addActionLock();                         // nicht zwischendurch painten
374         if (xCalc)
375             xCalc->setAutomaticCalculation(FALSE);
376 
377         CellAddress aPos;
378         aPos.Sheet  = 0;
379 
380         for (USHORT nRow = 0; nRow < 20; nRow++)
381         {
382             aPos.Row = nRow;
383             for (USHORT nCol = 0; nCol < 10; nCol++)
384             {
385                 aPos.Column = nCol;
386                 XCellRef xCell = xDoc->getCell(aPos);
387                 if ( xCell )
388                 {
389                     //  Wert der Zelle um 1 hochzaehlen
390 
391                     double fVal = xCell->getValue();
392                     fVal += 1.0;
393                     xCell->setValue( fVal );
394                 }
395             }
396         }
397 
398         if (xCalc)
399             xCalc->setAutomaticCalculation(TRUE);
400         if (xLock)
401             xLock->removeActionLock();
402     }
403 }
404 
405 
lcl_GlobalCell()406 void lcl_GlobalCell()
407 {
408     if ( xGlobalCell )
409     {
410         String aStr = OUStringToString( xGlobalCell->getFormula(), CHARSET_SYSTEM );
411         aStr+='0';
412         xGlobalCell->setFormula( StringToOUString( aStr, CHARSET_SYSTEM ) );
413     }
414 }
415 
416 
lcl_Annotations(FixedText & aTimeText)417 void lcl_Annotations( FixedText& aTimeText )
418 {
419     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
420     if (xDoc)
421     {
422         CellAddress aPos;
423         aPos.Sheet  = 0;
424         aPos.Column = 1;
425         aPos.Row    = 2;
426         XCellRef xCell = xDoc->getCell(aPos);
427         if ( xCell )
428         {
429             XSheetAnnotationAnchorRef xAnchor =
430                 (XSheetAnnotationAnchor*)xCell->queryInterface(XSheetAnnotationAnchor::getSmartUik());
431             if ( xAnchor )
432             {
433                 XSheetAnnotationRef xAnnotation = xAnchor->getAnnotation();
434                 if ( xAnnotation )
435                 {
436                     String aBlubb = OUStringToString( xAnnotation->getAuthor(), CHARSET_SYSTEM )+
437                                     String(" - ")+
438                                     OUStringToString( xAnnotation->getDate(), CHARSET_SYSTEM );
439                     aTimeText.SetText(aBlubb);
440 
441                     XTextRef xAnnotationText =
442                         (XText*)xAnnotation->queryInterface(XText::getSmartUik());
443                     if ( xAnnotationText )
444                     {
445                         XTextCursorRef xCursor = xAnnotationText->createTextCursor();
446                         if (xCursor)
447                         {
448                             XTextPositionRef xPos = (XTextPosition*)
449                                 xCursor->queryInterface(XTextPosition::getSmartUik());
450                             XControlCharacterInsertableRef xControl = (XControlCharacterInsertable*)
451                                 xCursor->queryInterface(XControlCharacterInsertable::getSmartUik());
452 
453                             if (xPos && xControl)
454                             {
455                                 ULONG nStart = Time::GetSystemTicks();
456 
457                                 xAnnotationText->setText(L"bla");
458                                 xCursor->gotoEnd(FALSE);
459                                 xCursor->goLeft(1,TRUE);
460                                 xPos->setText(L"ubb");
461                                 for (USHORT i=0; i<10; i++)
462                                 {
463                                     xPos->collapseToEnd();
464                                     xControl->insertControlCharacter( TEXTCONTROLCHAR_PARAGRAPH_BREAK );
465                                     xPos->collapseToEnd();
466                                     xPos->setText(L"dumdi");
467                                 }
468 
469                                 ULONG nEnd = Time::GetSystemTicks();
470                                 aTimeText.SetText(String(nEnd-nStart)+String(" ms"));
471                             }
472                         }
473                     }
474                 }
475             }
476         }
477     }
478 }
479 
480 
lcl_Cursor(FixedText & aTimeText)481 void lcl_Cursor( FixedText& aTimeText )
482 {
483     aTimeText.SetText( "..." );
484     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
485     if (xDoc)
486     {
487         XActionLockableRef xLock = (XActionLockable*)
488                             xDoc->queryInterface(XActionLockable::getSmartUik());
489         if (xLock)
490             xLock->addActionLock();
491 
492         CellAddress aPos;
493         aPos.Sheet  = 0;
494         aPos.Column = 1;
495         aPos.Row    = 2;
496         XCellRef xCell = xDoc->getCell(aPos);
497         if ( xCell )
498         {
499             XTextRef xText = (XText*)xCell->queryInterface(XText::getSmartUik());
500             XCellCollectionRef xColl = (XCellCollection*)xCell->queryInterface(XCellCollection::getSmartUik());
501             if ( xText && xColl )
502             {
503                 xText->setText(L"bla");
504                 XLineCursorRef xCursor = xColl->createCursor();
505                 if ( xCursor )
506                 {
507                     XCellCursorRef xCC = (XCellCursor*)xCursor->queryInterface(XCellCursor::getSmartUik());
508                     XCellRangesCursorRef xRC = (XCellRangesCursor*)
509                                         xCursor->queryInterface(XCellRangesCursor::getSmartUik());
510 
511                     if ( xCC && xRC )
512                     {
513                         xCursor->goDown( 1, FALSE );
514 
515                         xColl = xCC->getRanges();
516                         if ( xColl )
517                         {
518                             //  XText ist drin, wenn's ne einzelne Zelle ist
519                             xText = (XText*)xColl->queryInterface(XText::getSmartUik());
520                             if ( xText )
521                             {
522                                 xText->setText(L"fasel");
523                             }
524                         }
525 
526                         CellRangeAddress aSecond;
527                         aSecond.Sheet       = 0;
528                         aSecond.StartColumn = 3;
529                         aSecond.StartRow    = 4;
530                         aSecond.EndColumn   = 3;
531                         aSecond.EndRow      = 4;
532                         xRC->gotoUnion(aSecond);
533 
534                         xColl = xCC->getRanges();
535                         if ( xColl )
536                         {
537                             XPropertySetRef xProp = (XPropertySet*)
538                                                 xColl->queryInterface(XPropertySet::getSmartUik());
539                             if ( xProp )
540                             {
541                                 UsrAny aAny;
542 
543                                 aAny = xProp->getPropertyValue(L"ShadowFormat");
544                                 if ( aAny.getReflection()->getName() ==
545                                      ShadowFormat_getReflection()->getName() )
546                                 {
547                                     //ShadowFormat* pOld = (ShadowFormat*)aAny.get();
548                                     ShadowFormat aNew;
549                                     aNew.Location       = SHADOWLOCATION_BOTTOMRIGHT;
550                                     aNew.ShadowWidth    = 100;
551                                     aNew.IsTransparent  = FALSE;
552                                     aNew.Color          = 0xff0000L;
553                                     aAny.set( &aNew, aAny.getReflection() );
554                                     xProp->setPropertyValue(L"ShadowFormat", aAny);
555                                 }
556 
557                                 aAny = xProp->getPropertyValue(L"RotationValue");
558                                 aAny.setINT32(4500);
559                                 xProp->setPropertyValue(L"RotationValue", aAny);
560 
561                                 aAny = xProp->getPropertyValue(L"FontHeight");
562                                 aAny.setUINT32(280);
563                                 xProp->setPropertyValue(L"FontHeight", aAny);
564 
565                                 aAny = xProp->getPropertyValue(L"TransparentBackground");
566                                 aAny.setBOOL(FALSE);
567                                 xProp->setPropertyValue(L"TransparentBackground", aAny);
568 
569                                 aAny = xProp->getPropertyValue(L"BackgroundColor");
570                                 aAny.setUINT32(0xffff00);
571                                 xProp->setPropertyValue(L"BackgroundColor", aAny);
572 
573                                 aAny = xProp->getPropertyValue(L"CellProtection");
574                                 if ( aAny.getReflection()->getName() ==
575                                      CellProtection_getReflection()->getName() )
576                                 {
577                                     //CellProtection* pOld = (CellProtection*)aAny.get();
578                                     CellProtection aNew;
579                                     aNew.Locked         = FALSE;
580                                     aNew.FormulaHidden  = FALSE;
581                                     aNew.Hidden         = FALSE;
582                                     aNew.PrintHidden    = FALSE;
583                                     aAny.set( &aNew, aAny.getReflection() );
584                                     xProp->setPropertyValue(L"CellProtection", aAny);
585                                 }
586                             }
587 
588                             // XIndexAccess gibts nur wenn's mehrere sind (??!??!)
589                             XIndexAccessRef xIndex = (XIndexAccess*)
590                                                 xColl->queryInterface(XIndexAccess::getSmartUik());
591                             if ( xIndex )
592                             {
593                                 USHORT nCount = (USHORT)xIndex->getCount();
594                                 aTimeText.SetText( String(nCount) );
595                             }
596                         }
597                     }
598                 }
599             }
600         }
601 
602         if (xLock)
603             xLock->removeActionLock();
604     }
605 }
606 
607 
lcl_Cells(FixedText & aTimeText)608 void lcl_Cells( FixedText& aTimeText )
609 {
610     aTimeText.SetText( "..." );
611     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
612     if (xDoc)
613     {
614         long nCount = 0;
615         ULONG nStart = Time::GetSystemTicks();
616 
617         XActionLockableRef xLock = (XActionLockable*)
618                             xDoc->queryInterface(XActionLockable::getSmartUik());
619 //      if (xLock)
620 //          xLock->addActionLock();
621 
622         CellRangeAddress aRngAddr;
623         aRngAddr.Sheet       = 0;
624         aRngAddr.StartColumn = 0;
625         aRngAddr.StartRow    = 0;
626         aRngAddr.EndColumn   = 9;
627         aRngAddr.EndRow      = 19;
628         XCellRangeRef xRange = xDoc->getCellRange(aRngAddr);
629         if (xRange)
630         {
631             XCellCollectionRef xColl = (XCellCollection*)
632                         xRange->queryInterface(XCellCollection::getSmartUik());
633             if (xColl)
634             {
635                 XEnumerationAccessRef xEnAcc = xColl->getCells();
636                 if (xEnAcc)
637                 {
638                     XEnumerationRef xEnum = xEnAcc->getEnumeration();
639                     if (xEnum)
640                     {
641                         while (xEnum->hasMoreElements())
642                         {
643                             XInterfaceRef xInt = xEnum->nextElement();
644                             if (xInt)
645                             {
646                                 ++nCount;
647                             }
648                         }
649                     }
650                 }
651             }
652         }
653 
654         ULONG nEnd = Time::GetSystemTicks();
655         aTimeText.SetText(String(nCount)+String(" ")+String(nEnd-nStart)+String(" ms"));
656 
657 
658 //      if (xLock)
659 //          xLock->removeActionLock();
660     }
661 }
662 
lcl_Sheet(FixedText & aTimeText)663 void lcl_Sheet( FixedText& aTimeText )
664 {
665     aTimeText.SetText( "..." );
666     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
667     if (!xDoc) return;
668     XSpreadsheetsRef xSheets = xDoc->getSheets();
669     if (!xSheets) return;
670     XTableSheetRef xSheet = xSheets->getSheetByIndex(0);
671     if (!xSheet) return;
672     XNamedRef xNamed = (XNamed*)xSheet->queryInterface(XNamed::getSmartUik());
673     if (!xNamed) return;
674 
675     String aName = OUStringToString( xNamed->getName(), CHARSET_SYSTEM );
676     aName += 'X';
677     xNamed->setName(StringToOUString( aName, CHARSET_SYSTEM ));
678 
679     XCellRangeRef xRange = (XCellRange*)xSheet->queryInterface(XCellRange::getSmartUik());
680     if (!xRange) return;
681     XCellRef xCell = xRange->getCell(2,1);
682     if (!xCell) return;
683     XTextRef xText = (XText*)xCell->queryInterface(XText::getSmartUik());
684     if (!xText) return;
685     String aBla = OUStringToString( xText->getText(), CHARSET_SYSTEM );
686     aBla += "bla";
687     xText->setText(StringToOUString( aBla, CHARSET_SYSTEM ));
688 
689     XColumnRowRangeRef xCRR = (XColumnRowRange*)xSheet->queryInterface(XColumnRowRange::getSmartUik());
690     if (!xCRR) return;
691 
692     XTableColumnsRef xCols = xCRR->getColumns();
693     if (!xCols) return;
694     XPropertySetRef xCol = xCols->getColumnByIndex(2);
695     if (!xCol) return;
696 
697     UINT16 nWidth = TypeConversion::toUINT16(xCol->getPropertyValue(L"Width"));
698 //  UINT16 nNewWidth = nWidth + 100;
699 //  xCol->setPropertyValue(L"Width", UsrAny(nNewWidth));
700 
701     xCol->setPropertyValue(L"OptimalWidth", UsrAny((BOOL)TRUE));
702     xCol->setPropertyValue(L"NewPage", UsrAny((BOOL)FALSE));
703 
704     UsrAny aAny = xCol->getPropertyValue(L"ShadowFormat");
705     if ( aAny.getReflection()->getName() ==
706          ShadowFormat_getReflection()->getName() )
707     {
708         //ShadowFormat* pOld = (ShadowFormat*)aAny.get();
709         ShadowFormat aNew;
710         aNew.Location       = SHADOWLOCATION_BOTTOMRIGHT;
711         aNew.ShadowWidth    = 100;
712         aNew.IsTransparent  = FALSE;
713         aNew.Color          = 0xff0000L;
714         aAny.set( &aNew, aAny.getReflection() );
715         xCol->setPropertyValue(L"ShadowFormat", aAny);
716     }
717 
718     XTableRowsRef xRows = xCRR->getRows();
719     if (!xRows) return;
720     XPropertySetRef xRow = xRows->getRowByIndex(1);
721     if (!xRow) return;
722 
723     xRows->removeRowsByIndex( 2, 1 );
724 
725     UINT16 nHeight = TypeConversion::toUINT16(xRow->getPropertyValue(L"Height"));
726     BOOL bOptH = TypeConversion::toBOOL(xRow->getPropertyValue(L"OptimalHeight"));
727 
728     UINT16 nNewHeight = nHeight + 100;
729     xRow->setPropertyValue(L"Height", UsrAny(nNewHeight));
730 
731     aTimeText.SetText(String("W:")+String(nWidth)+String(" H:")+String(nHeight)+
732                         String(" ")+String((USHORT)bOptH));
733 }
734 
lcl_Names(FixedText & aTimeText)735 void lcl_Names( FixedText& aTimeText )
736 {
737     aTimeText.SetText( "..." );
738     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
739     if (!xDoc) return;
740     XNamedRangesRef xNames = xDoc->getNamedRanges();
741     if (!xNames) return;
742     XNamedRangeRef xName = xNames->getRangeByName(L"bla");
743     if (!xName) return;
744     String aCont = OUStringToString( xName->getContent(), CHARSET_SYSTEM );
745     aTimeText.SetText(aCont);
746 
747     XCellRangeSourceRef xSource = (XCellRangeSource*)
748                             xName->queryInterface(XCellRangeSource::getSmartUik());
749     if (!xSource) return;
750     XCellRangeRef xRange = xSource->getReferredCells();
751     if (!xRange) return;
752     XPropertySetRef xProp = (XPropertySet*)xRange->queryInterface(XPropertySet::getSmartUik());
753     if (!xProp) return;
754     UsrAny aAny = xProp->getPropertyValue(L"RotationValue");
755     aAny.setINT32(3000);
756     xProp->setPropertyValue(L"RotationValue", aAny);
757 }
758 
lcl_Sheets(FixedText & aTimeText)759 void lcl_Sheets( FixedText& aTimeText )
760 {
761     aTimeText.SetText( "..." );
762     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
763     if (!xDoc) return;
764     XSpreadsheetsRef xSheets = xDoc->getSheets();
765     if (!xSheets) return;
766 
767 #if 0
768     xSheets->insertSheet( "hinten", 100 );
769     xSheets->insertSheet( "vorne", 0 );
770     xSheets->removeSheetByName( "hinten" );
771     xSheets->removeSheetByName( "vorne" );
772 #endif
773 
774     xSheets->moveSheet(0, 1, TRUE);
775     xSheets->moveSheet(0, 2, FALSE);
776 }
777 
lcl_Goal(FixedText & aTimeText)778 void lcl_Goal( FixedText& aTimeText )
779 {
780     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
781     if (!xDoc) return;
782     XGoalSeekRef xGoal = (XGoalSeek*)xDoc->queryInterface(XGoalSeek::getSmartUik());
783     if (!xGoal) return;
784 
785     double fResult;
786     CellAddress aFormula;   // A1
787     aFormula.Sheet  = 0;
788     aFormula.Column = 0;
789     aFormula.Row    = 0;
790     CellAddress aVar;       // A2
791     aVar.Sheet  = 0;
792     aVar.Column = 0;
793     aVar.Row    = 1;
794     BOOL bFound = xGoal->doGoalSeek(fResult, aFormula, aVar, L"42");
795 
796     if (bFound)
797     {
798         CellAddress aOut;       // A3
799         aOut.Sheet  = 0;
800         aOut.Column = 0;
801         aOut.Row    = 2;
802 
803         XCellRef xCell = xDoc->getCell(aOut);
804         if (!xCell) return;
805         xCell->setValue(fResult);
806     }
807 }
808 
lcl_TabOp(FixedText & aTimeText)809 void lcl_TabOp( FixedText& aTimeText )
810 {
811     //  Mehrfachoperation auf Tabelle2
812     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
813     if (!xDoc) return;
814 
815     XCellRangeRef xRange;
816     XTableOperationRef xGoal;
817     CellRangeAddress aRangeAddr;
818     CellRangeAddress aFormulaRange;
819     CellAddress aColumnCell;
820     CellAddress aRowCell;
821     TableOperationMode nMode;
822 
823     aRangeAddr.Sheet            = 1;    // c9:e11
824     aRangeAddr.StartColumn      = 2;
825     aRangeAddr.StartRow         = 8;
826     aRangeAddr.EndColumn        = 4;
827     aRangeAddr.EndRow           = 10;
828     aFormulaRange.Sheet         = 1;    // c6:c7
829     aFormulaRange.StartColumn   = 2;
830     aFormulaRange.StartRow      = 5;
831     aFormulaRange.EndColumn     = 2;
832     aFormulaRange.EndRow        = 6;
833     aColumnCell.Sheet           = 0;    // nicht benutzt
834     aColumnCell.Column          = 0;
835     aColumnCell.Row             = 0;
836     aRowCell.Sheet              = 1;    // c5
837     aRowCell.Column             = 2;
838     aRowCell.Row                = 4;
839     nMode = TABLEOP_ROW;
840 
841     xRange = xDoc->getCellRange(aRangeAddr);
842     if (!xRange) return;
843     xGoal = (XTableOperation*)xRange->queryInterface(XTableOperation::getSmartUik());
844     if (!xGoal) return;
845     xGoal->setTableOperation( nMode, aFormulaRange, aColumnCell, aRowCell );
846 
847     aRangeAddr.Sheet            = 1;    // b19:d21
848     aRangeAddr.StartColumn      = 1;
849     aRangeAddr.StartRow         = 18;
850     aRangeAddr.EndColumn        = 3;
851     aRangeAddr.EndRow           = 20;
852     aFormulaRange.Sheet         = 1;    // c16:d16
853     aFormulaRange.StartColumn   = 2;
854     aFormulaRange.StartRow      = 15;
855     aFormulaRange.EndColumn     = 3;
856     aFormulaRange.EndRow        = 15;
857     aColumnCell.Sheet           = 1;    // b16
858     aColumnCell.Column          = 1;
859     aColumnCell.Row             = 15;
860     aRowCell.Sheet              = 0;    // nicht benutzt
861     aRowCell.Column             = 0;
862     aRowCell.Row                = 0;
863     nMode = TABLEOP_COLUMN;
864 
865     xRange = xDoc->getCellRange(aRangeAddr);
866     if (!xRange) return;
867     xGoal = (XTableOperation*)xRange->queryInterface(XTableOperation::getSmartUik());
868     if (!xGoal) return;
869     xGoal->setTableOperation( nMode, aFormulaRange, aColumnCell, aRowCell );
870 
871     aRangeAddr.Sheet            = 1;    // b29:e32
872     aRangeAddr.StartColumn      = 1;
873     aRangeAddr.StartRow         = 28;
874     aRangeAddr.EndColumn        = 4;
875     aRangeAddr.EndRow           = 31;
876     aFormulaRange.Sheet         = 1;    // c27:c27
877     aFormulaRange.StartColumn   = 2;
878     aFormulaRange.StartRow      = 26;
879     aFormulaRange.EndColumn     = 2;
880     aFormulaRange.EndRow        = 26;
881     aColumnCell.Sheet           = 1;    // c25
882     aColumnCell.Column          = 2;
883     aColumnCell.Row             = 24;
884     aRowCell.Sheet              = 1;    // c26
885     aRowCell.Column             = 2;
886     aRowCell.Row                = 25;
887     nMode = TABLEOP_BOTH;
888 
889     xRange = xDoc->getCellRange(aRangeAddr);
890     if (!xRange) return;
891     xGoal = (XTableOperation*)xRange->queryInterface(XTableOperation::getSmartUik());
892     if (!xGoal) return;
893     xGoal->setTableOperation( nMode, aFormulaRange, aColumnCell, aRowCell );
894 }
895 
lcl_Fill(FixedText & aTimeText)896 void lcl_Fill( FixedText& aTimeText )
897 {
898     XInterfaceRef xInt = lcl_GetView();
899     if (!xInt) return;
900     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
901     if (!xView) return;
902 
903     XInterfaceRef xSelInt = xView->getSelection();
904     if (!xSelInt) return;
905 
906     XCellSeriesRef xFill = (XCellSeries*)xSelInt->queryInterface(XCellSeries::getSmartUik());
907     if (!xFill) return;
908 
909 //  xFill->fillAuto( FILL_DIRECTION_TO_BOTTOM, 2 );
910 
911     xFill->fillSeries( FILL_DIRECTION_TO_LEFT, FILL_MODE_GROWTH, FILL_DATE_DAY,
912                         2.0, 1000.0 );
913 }
914 
lcl_Audi(FixedText & aTimeText)915 void lcl_Audi( FixedText& aTimeText )
916 {
917     aTimeText.SetText( "..." );
918     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
919     if (!xDoc) return;
920     XSpreadsheetsRef xSheets = xDoc->getSheets();
921     if (!xSheets) return;
922     XTableSheetRef xSheet = xSheets->getSheetByIndex(0);
923     if (!xSheet) return;
924 
925     XSheetAuditingRef xAudi = (XSheetAuditing*)xSheet->queryInterface(XSheetAuditing::getSmartUik());
926     if (!xAudi) return;
927 
928     CellAddress aPosition;
929     aPosition.Sheet     = 0;
930     aPosition.Column    = 0;
931     aPosition.Row       = 0;
932     xAudi->showDependents(aPosition);
933 }
934 
lcl_Consoli(FixedText & aTimeText)935 void lcl_Consoli( FixedText& aTimeText )
936 {
937     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
938     if (!xDoc) return;
939     XConsolidationRef xCons = (XConsolidation*)xDoc->queryInterface(XConsolidation::getSmartUik());
940     if (!xCons) return;
941     XConsolidationDescriptorRef xDesc = xCons->createConsolidationDescriptor(FALSE);
942     if (!xDesc) return;
943     xDesc->setFunction(SUMMARY_COUNTNUMS);
944     xCons->consolidate(xDesc);
945 }
946 
lcl_Sort(FixedText & aTimeText)947 void lcl_Sort( FixedText& aTimeText )
948 {
949     XInterfaceRef xInt = lcl_GetView();
950     if (!xInt) return;
951     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
952     if (!xView) return;
953     XInterfaceRef xSelInt = xView->getSelection();
954     if (!xSelInt) return;
955     XSortableRef xSort = (XSortable*)xSelInt->queryInterface(XSortable::getSmartUik());
956     if (!xSort) return;
957     XSortDescriptorRef xDesc = xSort->createSortDescriptor(FALSE);
958     if (!xDesc) return;
959     Sequence<SortField> aFields = xDesc->getSortFields();
960     if (aFields.getLen())
961     {
962         //  1.Feld umkehren
963         SortField* pAry = aFields.getArray();
964         if (!pAry) return;
965         pAry[0].Ascending = !pAry[0].Ascending;
966     }
967     else    // neue Sequence, 1. Spalte aufsteigend
968     {
969         aFields = Sequence<SortField>(1);
970         SortField* pAry = aFields.getArray();
971         if (!pAry) return;
972         pAry[0].Field     = 0;
973         pAry[0].Ascending = TRUE;
974         pAry[0].Type      = SORT_FIELD_AUTOMATIC;
975     }
976     xDesc->setSortFields(aFields);
977 
978     XTableSortDescriptorRef xTableSort = (XTableSortDescriptor*)
979                             xDesc->queryInterface(XTableSortDescriptor::getSmartUik());
980     if (!xTableSort) return;
981     CellAddress aOutPos;
982     aOutPos.Sheet  = 2;
983     aOutPos.Column = 0;
984     aOutPos.Row    = 0;
985     xTableSort->setUseOutputPosition(TRUE);
986     xTableSort->setOutputPosition(aOutPos);
987 
988     XPropertySetRef xPropSet = (XPropertySet*)
989                             xDesc->queryInterface(XPropertySet::getSmartUik());
990     if (!xPropSet) return;
991     xPropSet->setPropertyValue(L"IncludeFormats", UsrAny((BOOL)FALSE));
992 
993     xSort->sort(xDesc);
994 }
995 
lcl_Filter(FixedText & aTimeText)996 void lcl_Filter( FixedText& aTimeText )
997 {
998     aTimeText.SetText("...");
999 
1000     XInterfaceRef xInt = lcl_GetView();
1001     if (!xInt) return;
1002     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
1003     if (!xView) return;
1004     XInterfaceRef xSelInt = xView->getSelection();
1005     if (!xSelInt) return;
1006     XFilterableRef xFilter = (XFilterable*)xSelInt->queryInterface(XFilterable::getSmartUik());
1007     if (!xFilter) return;
1008 
1009 #if 0
1010     XTableFilterDescriptorRef xDesc = xFilter->createFilterDescriptor(FALSE);
1011     if (!xDesc) return;
1012     Sequence<TableFilterField> aFields = xDesc->getFilterFields();
1013     if (aFields.getLen())
1014     {
1015         //  1.Feld zwischen 1. und 2. Spalte toggeln
1016         TableFilterField* pAry = aFields.getArray();
1017         if (!pAry) return;
1018         pAry[0].Field = pAry[0].Field ? 0 : 1;
1019     }
1020     xDesc->setFilterFields(aFields);
1021     xFilter->filter(xDesc);
1022 #endif
1023 
1024     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1025     if (!xDoc) return;
1026     CellRangeAddress aAddress;
1027     aAddress.Sheet       = 3;
1028     aAddress.StartColumn = 0;
1029     aAddress.StartRow    = 0;
1030     aAddress.EndColumn   = 1;
1031     aAddress.EndRow      = 2;
1032     XCellRangeRef xRange = xDoc->getCellRange(aAddress);
1033     if (!xRange) return;
1034     XAdvancedFilterSourceRef xSource = (XAdvancedFilterSource*)
1035                             xRange->queryInterface(XAdvancedFilterSource::getSmartUik());
1036     if (!xSource) return;
1037 
1038     XTableFilterDescriptorRef xDesc = xSource->createAdvancedFilter(xFilter);
1039     if (!xDesc)
1040     {
1041         aTimeText.SetText("kein Filter");
1042         return;
1043     }
1044     aTimeText.SetText("Filter gefunden");
1045     xFilter->filter(xDesc);
1046 }
1047 
lcl_AutoFilter(FixedText & aTimeText)1048 void lcl_AutoFilter( FixedText& aTimeText )
1049 {
1050     XInterfaceRef xInt = lcl_GetView();
1051     if (!xInt) return;
1052     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
1053     if (!xView) return;
1054     XInterfaceRef xSelInt = xView->getSelection();
1055     if (!xSelInt) return;
1056     XFilterableRef xFilter = (XFilterable*)xSelInt->queryInterface(XFilterable::getSmartUik());
1057     if (!xFilter) return;
1058 
1059     BOOL bAuto = xFilter->getAutoFilter();
1060     xFilter->setAutoFilter(!bAuto);
1061 }
1062 
lcl_Merge(FixedText & aTimeText)1063 void lcl_Merge( FixedText& aTimeText )
1064 {
1065     static BOOL bMerged = FALSE;
1066 
1067     XInterfaceRef xInt = lcl_GetView();
1068     if (!xInt) return;
1069     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
1070     if (!xView) return;
1071     XInterfaceRef xSelInt = xView->getSelection();
1072     if (!xSelInt) return;
1073     XMergeableRef xMerge = (XMergeable*)xSelInt->queryInterface(XMergeable::getSmartUik());
1074     if (!xMerge) return;
1075 
1076     if (bMerged)
1077         xMerge->unmergeCells();
1078     else
1079         xMerge->mergeCells();
1080     bMerged = !bMerged;
1081 }
1082 
lcl_Outline(FixedText & aTimeText)1083 void lcl_Outline( FixedText& aTimeText )
1084 {
1085     static BOOL bOutline = FALSE;
1086 
1087     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1088     if (!xDoc) return;
1089     XSpreadsheetsRef xSheets = xDoc->getSheets();
1090     if (!xSheets) return;
1091     XTableSheetRef xSheet = xSheets->getSheetByIndex(0);
1092     if (!xSheet) return;
1093     XSheetOutlineRef xOut = (XSheetOutline*)xSheet->queryInterface(XSheetOutline::getSmartUik());
1094     if (!xOut) return;
1095 
1096     XInterfaceRef xInt = lcl_GetView();
1097     if (!xInt) return;
1098     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
1099     if (!xView) return;
1100     XInterfaceRef xSelInt = xView->getSelection();
1101     if (!xSelInt) return;
1102     XAddressableCellRangeRef xRange = (XAddressableCellRange*)
1103                                 xSelInt->queryInterface(XAddressableCellRange::getSmartUik());
1104     if (!xRange) return;
1105     CellRangeAddress aRange = xRange->getRangeAddress();
1106 
1107     if (bOutline)
1108         xOut->showDetail( aRange );
1109     else
1110         xOut->hideDetail( aRange );
1111 
1112     bOutline = !bOutline;
1113 }
1114 
lcl_Bla(FixedText & aTimeText)1115 void lcl_Bla( FixedText& aTimeText )
1116 {
1117     aTimeText.SetText("...");
1118 
1119     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1120     if (!xDoc) return;
1121     XActionLockableRef xLock = (XActionLockable*)xDoc->queryInterface(XActionLockable::getSmartUik());
1122     if (!xLock) return;
1123     xLock->addActionLock();
1124     xLock->addActionLock();
1125     USHORT nCount = xLock->resetActionLocks();      // sollte 2 sein
1126     String aBla = nCount;
1127     xLock->setActionLocks(nCount);
1128     xLock->removeActionLock();
1129     xLock->removeActionLock();
1130 
1131     aBla += '/'; aBla += xLock->resetActionLocks(); // sollte 0 sein
1132 
1133     aTimeText.SetText(aBla);
1134 }
1135 
lcl_CellCursor(FixedText & aTimeText)1136 void lcl_CellCursor( FixedText& aTimeText )
1137 {
1138     static int nCursorCount = 0;
1139 
1140     XInterfaceRef xInt = lcl_GetView();
1141     if (!xInt) return;
1142     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
1143     if (!xView) return;
1144     XInterfaceRef xSelInt = xView->getSelection();
1145     if (!xSelInt) return;
1146     XCellCollectionRef xColl = (XCellCollection*)xSelInt->queryInterface(XCellCollection::getSmartUik());
1147     if (!xColl) return;
1148 
1149     XLineCursorRef xCursor = xColl->createCursor();
1150     if (!xCursor) return;
1151     XCellCursorRef xCC = (XCellCursor*)xCursor->queryInterface(XCellCursor::getSmartUik());
1152     if (!xCC) return;
1153     XCellRangesCursorRef xCRC = (XCellRangesCursor*)xCursor->queryInterface(XCellRangesCursor::getSmartUik());
1154     if (!xCRC) return;
1155     XCellRangeCursorRef xCR = (XCellRangeCursor*)xCursor->queryInterface(XCellRangeCursor::getSmartUik());
1156     if (!xCR) return;
1157     XCellContentCursorRef xCCC = (XCellContentCursor*)xCursor->queryInterface(XCellContentCursor::getSmartUik());
1158     if (!xCCC) return;
1159     XFormulaCursorRef xFC = (XFormulaCursor*)xCursor->queryInterface(XFormulaCursor::getSmartUik());
1160     if (!xFC) return;
1161 
1162     CellAddress aPos;
1163     aPos.Sheet  = 0;        // ignored
1164     aPos.Row    = 3;
1165     aPos.Column = 2;
1166 
1167     switch (nCursorCount++)
1168     {
1169         case 0:
1170             xFC->gotoDependents(FALSE);
1171             break;
1172         case 1:
1173             xFC->gotoDependents(TRUE);
1174             break;
1175         case 2:
1176             xFC->gotoPrecedents(FALSE);
1177             break;
1178         case 3:
1179             xFC->gotoPrecedents(TRUE);
1180 
1181             nCursorCount = 0;
1182             break;
1183     }
1184 
1185     XCellCollectionRef xNew = xCC->getRanges();
1186     if (!xNew) return;
1187     xView->select( xNew );
1188 }
1189 
lcl_Notes(FixedText & aTimeText)1190 void lcl_Notes( FixedText& aTimeText )
1191 {
1192     aTimeText.SetText( "..." );
1193     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1194     if (!xDoc) return;
1195     XSpreadsheetsRef xSheets = xDoc->getSheets();
1196     if (!xSheets) return;
1197     XTableSheetRef xSheet = xSheets->getSheetByIndex(0);
1198     if (!xSheet) return;
1199 
1200     XSheetAnnotationsRef xNotes = xSheet->getAnnotations();
1201     if (!xNotes) return;
1202     XIndexAccessRef xNIndex = (XIndexAccess*)xNotes->queryInterface(XIndexAccess::getSmartUik());
1203     if (!xNIndex) return;
1204 
1205     CellAddress aPos;
1206     aPos.Column = 0;
1207     aPos.Row    = 0;
1208     aPos.Sheet  = 0;
1209     xNotes->addAnnotation( L"neu", aPos );
1210 
1211     ULONG nCount = xNIndex->getCount();
1212     for (ULONG i=0; i<nCount; i++)
1213     {
1214         XSheetAnnotationRef xAnn = xNotes->getAnnotationByIndex((UINT16)i);
1215         XTextRef xText = (XText*)xAnn->queryInterface(XText::getSmartUik());
1216         if (xText)
1217         {
1218             String aStr = OUStringToString( xText->getText(), CHARSET_SYSTEM );
1219             aStr += "x";
1220             xText->setText(StringToOUString( aStr, CHARSET_SYSTEM ));
1221         }
1222     }
1223 }
1224 
lcl_Scenario(FixedText & aTimeText)1225 void lcl_Scenario( FixedText& aTimeText )
1226 {
1227     aTimeText.SetText( "..." );
1228     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1229     if (!xDoc) return;
1230     XSpreadsheetsRef xSheets = xDoc->getSheets();
1231     if (!xSheets) return;
1232     XTableSheetRef xSheet = xSheets->getSheetByIndex(0);
1233     if (!xSheet) return;
1234 
1235     XScenariosRef xColl = xSheet->getScenarios();
1236     if (!xColl) return;
1237 
1238     Sequence<CellRangeAddress> aRanges(2);
1239     CellRangeAddress* pAry = aRanges.getArray();
1240     if (!pAry) return;
1241     pAry[0].Sheet       = 0;
1242     pAry[0].StartColumn = 0;
1243     pAry[0].StartRow    = 0;
1244     pAry[0].EndColumn   = 1;
1245     pAry[0].EndRow      = 1;
1246     pAry[1].Sheet       = 0;
1247     pAry[1].StartColumn = 3;
1248     pAry[1].StartRow    = 3;
1249     pAry[1].EndColumn   = 4;
1250     pAry[1].EndRow      = 4;
1251 
1252     xColl->addScenario( aRanges, L"bla", L"bla blubb" );
1253 
1254     XIndexAccessRef xIndex = (XIndexAccess*)xColl->queryInterface(XIndexAccess::getSmartUik());
1255     if (!xIndex) return;
1256     ULONG nCount = xIndex->getCount();
1257     aTimeText.SetText( nCount );
1258 
1259     XScenarioRef xScen = xColl->getScenarioByIndex(0);
1260     if (!xScen) return;
1261 
1262     aRanges = Sequence<CellRangeAddress>(1);
1263     pAry = aRanges.getArray();
1264     if (!pAry) return;
1265     pAry[0].Sheet       = 0;
1266     pAry[0].StartColumn = 6;
1267     pAry[0].StartRow    = 6;
1268     pAry[0].EndColumn   = 7;
1269     pAry[0].EndRow      = 7;
1270 
1271     xScen->addRanges( aRanges );
1272 
1273     XTableSheetRef xSh2 = xSheets->getSheetByIndex(1);
1274     if (!xSh2) return;
1275 
1276     xSh2->setVisible( TRUE );
1277     xSh2->setVisible( FALSE );
1278 }
1279 
lcl_Formula(FixedText & aTimeText)1280 void lcl_Formula( FixedText& aTimeText )
1281 {
1282     aTimeText.SetText("...");
1283 
1284     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1285     if (!xDoc) return;
1286     CellAddress aPos;
1287     aPos.Sheet  = 0;
1288     aPos.Column = 0;
1289     aPos.Row    = 0;
1290     XCellRef xCell = xDoc->getCell(aPos);
1291     if (!xCell) return;
1292 
1293 //  String aStr = OUStringToString( xCell->getFormula(), CHARSET_SYSTEM );
1294 //  aTimeText.SetText(aStr);
1295 
1296     XTextRef xText = (XText*)xCell->queryInterface(XText::getSmartUik());
1297     if (!xText) return;
1298     String aStr = OUStringToString( xText->getText(), CHARSET_SYSTEM );
1299     aTimeText.SetText(aStr);
1300 }
1301 
lcl_DBRange(FixedText & aTimeText)1302 void lcl_DBRange( FixedText& aTimeText )    // 23
1303 {
1304     aTimeText.SetText("...");
1305 
1306     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1307     if (!xDoc) return;
1308     XDatabaseRangesRef xDBs = xDoc->getDatabaseRanges();
1309     if (!xDBs) return;
1310 
1311     CellRangeAddress aRange;
1312     aRange.Sheet        = 0;
1313     aRange.StartColumn  = 1;
1314     aRange.StartRow     = 1;
1315     aRange.EndColumn    = 3;
1316     aRange.EndRow       = 10;
1317 
1318     xDBs->addRange( L"blubb", aRange );
1319 
1320     xDBs->removeRangeByName( L"gaga" );
1321 
1322     XDatabaseRangeRef xDB = xDBs->getRangeByName( L"blubb" );
1323     if (!xDB) return;
1324 
1325     String aName = OUStringToString( xDB->getName(), CHARSET_SYSTEM );
1326     aTimeText.SetText(aName);
1327 
1328     xDB->setName( L"gaga" );
1329 
1330     CellRangeAddress aDBRange = xDB->getDataArea();
1331     ++aDBRange.Sheet;
1332     xDB->setDataArea(aDBRange);
1333 }
1334 
lcl_FillTab(FixedText & aTimeText)1335 void lcl_FillTab( FixedText& aTimeText )    // 24
1336 {
1337     aTimeText.SetText("...");
1338 
1339     XInterfaceRef xInt = lcl_GetView();
1340     if (!xInt) return;
1341     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
1342     if (!xView) return;
1343     XInterfaceRef xSelInt = xView->getSelection();
1344     if (!xSelInt) return;
1345 
1346     XCellRangesRef xRanges = (XCellRanges*)xSelInt->queryInterface(XCellRanges::getSmartUik());
1347     XIndexAccessRef xIndex = (XIndexAccess*)xSelInt->queryInterface(XIndexAccess::getSmartUik());
1348     if (!xRanges || !xIndex) return;
1349 
1350     ULONG nCount = xIndex->getCount();
1351     aTimeText.SetText(nCount);
1352 }
1353 
lcl_Listener(FixedText & aTimeText)1354 void lcl_Listener( FixedText& aTimeText )   // 25
1355 {
1356     XInterfaceRef xInt = lcl_GetView();
1357     if (!xInt) return;
1358     XStarCalcViewRef xView = (XStarCalcView*)xInt->queryInterface(XStarCalcView::getSmartUik());
1359     if (!xView) return;
1360     xView->addSelectionChangeListener( new ScTestListener(&aTimeText) );
1361 }
1362 
lcl_CellAttrib(FixedText & aTimeText)1363 void lcl_CellAttrib( FixedText& aTimeText ) // 26
1364 {
1365     XInterfaceRef xInt = lcl_GetView();
1366     if (!xInt) return;
1367     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
1368     if (!xView) return;
1369     XInterfaceRef xSelInt = xView->getSelection();
1370     if (!xSelInt) return;
1371     XTextRef xText = (XText*)xSelInt->queryInterface(XText::getSmartUik());
1372     if (!xText) return;
1373 
1374     XTextCursorRef xCursor = xText->createTextCursor();
1375     if (!xCursor) return;
1376 
1377     XTextPositionRef xPos = (XTextPosition*)xCursor->queryInterface(XTextPosition::getSmartUik());
1378     XPropertySetRef xProp = (XPropertySet*)xCursor->queryInterface(XPropertySet::getSmartUik());
1379     XParagraphCursorRef xPar = (XParagraphCursor*)xCursor->queryInterface(XParagraphCursor::getSmartUik());
1380     if (!xPos || !xProp || !xPar) return;
1381 
1382     xCursor->gotoStart(FALSE);
1383     xCursor->goRight(1,FALSE);
1384     xCursor->goRight(1,TRUE);
1385 
1386     UsrAny aAny = xProp->getPropertyValue(L"FontHeight");
1387     UINT32 nOld = aAny.getUINT32();
1388     aAny.setUINT32(nOld*11/10);
1389     xProp->setPropertyValue(L"FontHeight", aAny);
1390 
1391     xPos->collapseToEnd();
1392     xCursor->goRight(1,TRUE);
1393 
1394     xProp->setPropertyValue(L"Bold", UsrAny((BOOL)TRUE));
1395 
1396     xPos->setText(L"x");
1397 
1398     xPos->collapseToEnd();
1399     xPar->gotoNextParagraph(FALSE,TRUE);
1400     xProp->setPropertyValue(L"Italic", UsrAny((BOOL)TRUE));
1401     xProp->setPropertyValue(L"Underlined", UsrAny((BOOL)TRUE));
1402 }
1403 
lcl_Styles(FixedText & aTimeText)1404 void lcl_Styles( FixedText& aTimeText ) // 27
1405 {
1406     aTimeText.SetText("...");
1407     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1408     if (!xDoc) return;
1409     XStyleFamiliesRef xFamilies = xDoc->getStyleFamilies();
1410     if (!xFamilies) return;
1411     XStyleFamilyRef xFamily = xFamilies->getStyleFamilyByType( STYLE_FAMILY_CELL );
1412 //  XStyleFamilyRef xFamily = xFamilies->getStyleFamilyByType( STYLE_FAMILY_PAGE );
1413     if (!xFamily) return;
1414     long nCount = xFamily->getCount();
1415     aTimeText.SetText(nCount);
1416 
1417     XStyleRef xStyle = xFamily->getStyleByName(L"rot");
1418     if (!xStyle) return;
1419 //  XPropertySetRef xProp = (XPropertySet*)xStyle->queryInterface(XPropertySet::getSmartUik());
1420 //  if (!xProp) return;
1421 
1422     XStyleRef xNew = xFamily->addStyle( L"gaga", xStyle );
1423     if (!xNew) return;
1424     XPropertySetRef xProp = (XPropertySet*)xNew->queryInterface(XPropertySet::getSmartUik());
1425     if (!xProp) return;
1426 
1427     UsrAny aAny;
1428     aAny = xProp->getPropertyValue(L"TransparentBackground");
1429     aAny.setBOOL(FALSE);
1430     xProp->setPropertyValue(L"TransparentBackground", aAny);
1431     aAny = xProp->getPropertyValue(L"BackgroundColor");
1432     aAny.setUINT32(0xffff00);
1433     xProp->setPropertyValue(L"BackgroundColor", aAny);
1434 
1435     xFamily->removeStyle( L"rot" );
1436 }
1437 
lcl_PageStyle(FixedText & aTimeText)1438 void lcl_PageStyle( FixedText& aTimeText )  // 28
1439 {
1440     aTimeText.SetText("...");
1441 
1442     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1443     if (!xDoc) return;
1444     XStyleFamiliesRef xFamilies = xDoc->getStyleFamilies();
1445     if (!xFamilies) return;
1446     XStyleFamilyRef xFamily = xFamilies->getStyleFamilyByType( STYLE_FAMILY_PAGE );
1447     if (!xFamily) return;
1448     XStyleRef xStyle = xFamily->getStyleByName(L"Standard");
1449     if (!xStyle) return;
1450     XPropertySetRef xProp = (XPropertySet*)xStyle->queryInterface(XPropertySet::getSmartUik());
1451     if (!xProp) return;
1452 
1453     UsrAny aAny;
1454     aAny = xProp->getPropertyValue(L"RightPageHeaderContent");
1455 
1456     // geht nicht:
1457 //  if ( !XHeaderFooterContent_getReflection()->equals(*aAny.getReflection()) )
1458 //      return;
1459 
1460     XHeaderFooterContentRef* pxContent = (XHeaderFooterContentRef*)aAny.get();
1461     if (!pxContent || !pxContent->is()) return;
1462 
1463     XTextRef xText = (*pxContent)->getCenterText();
1464     if (!xText) return;
1465 
1466     String aVal = OUStringToString(xText->getText(), CHARSET_SYSTEM);
1467     aTimeText.SetText(aVal);
1468 
1469 //  xText->setText(L"Bla fasel s\xFClz");
1470     lcl_SetText(xText);
1471 
1472     xProp->setPropertyValue(L"RightPageHeaderContent", aAny);
1473 }
1474 
lcl_AutoForm(FixedText & aTimeText)1475 void lcl_AutoForm( FixedText& aTimeText )   // 29
1476 {
1477     XInterfaceRef xInt = lcl_GetView();
1478     if (!xInt) return;
1479 
1480 #if 0
1481     //! Test - AutoFormat muss von der App kommen
1482     XStarCalcViewRef xView = (XStarCalcView*)xInt->queryInterface(XStarCalcView::getSmartUik());
1483     if (!xView) return;
1484     XTableAutoFormatsRef xFormats = xView->getTableAutoFormats();
1485     if (!xFormats) return;
1486     //! Test
1487 #endif
1488     XTableAutoFormatsRef xFormats;
1489 
1490     XTableAutoFormatRef xFormat = xFormats->getAutoFormatByName(L"gaga");
1491     if (!xFormat) return;
1492     XPropertySetRef xProp = (XPropertySet*)xFormat->queryInterface(XPropertySet::getSmartUik());
1493     if (!xProp) return;
1494 
1495     BOOL bVal = TypeConversion::toBOOL(xProp->getPropertyValue(L"IncludeBackground"));
1496     xProp->setPropertyValue(L"IncludeBackground", UsrAny(BOOL(!bVal)));
1497 
1498     XNamedRef xNamed = (XNamed*)xFormat->queryInterface(XNamed::getSmartUik());
1499     if (!xNamed) return;
1500     xNamed->setName(L"zzz");
1501 
1502     xFormats->addAutoFormat(L"gaga");
1503     XTableAutoFormatRef xNew = xFormats->getAutoFormatByName(L"gaga");
1504     if (!xNew) return;
1505 
1506     for (USHORT i=0; i<16; i++)
1507     {
1508         XPropertySetRef xNewProp = xNew->getFieldByIndex(i);
1509         if (!xNewProp) return;
1510 
1511         xNewProp->setPropertyValue(L"TransparentBackground", UsrAny(BOOL(FALSE)));
1512         UINT32 nColor = 0x111100 * i;
1513         xNewProp->setPropertyValue(L"BackgroundColor", UsrAny(nColor));
1514     }
1515 }
1516 
lcl_Pivot(FixedText & aTimeText)1517 void lcl_Pivot( FixedText& aTimeText )  // 30
1518 {
1519     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1520     if (!xDoc) return;
1521 
1522     XSpreadsheetsRef xSheets = xDoc->getSheets();
1523     if (!xSheets) return;
1524     XIndexAccessRef xInd = (XIndexAccess*)xSheets->queryInterface(XIndexAccess::getSmartUik());
1525     if (!xInd) return;
1526     USHORT nCount = (USHORT)xInd->getCount();
1527 
1528     for (USHORT nTab=0; nTab<nCount; nTab++)
1529     {
1530         XTableSheetRef xSheet = xSheets->getSheetByIndex(nTab);
1531         if (!xSheet) return;
1532         XDataPilotTablesRef xPivots = xSheet->getDataPilotTables();
1533         if (!xPivots) return;
1534         lcl_OutputNames( xPivots, xDoc, nTab,0,0 );
1535         XIndexAccessRef xPInd = (XIndexAccess*)xPivots->queryInterface(XIndexAccess::getSmartUik());
1536         if (!xPInd) return;
1537         USHORT nPCount = (USHORT)xPInd->getCount();
1538         for (USHORT nP=0; nP<nPCount; nP++)
1539         {
1540             XDataPilotTableRef xTable = xPivots->getTableByIndex(nP);
1541             if (!xTable) return;
1542 
1543 //          xTable->refreshTable();
1544 
1545             XDataPilotDescriptorRef xDesc = (XDataPilotDescriptor*)
1546                             xTable->queryInterface(XDataPilotDescriptor::getSmartUik());
1547             if (!xDesc) return;
1548             CellRangeAddress aSource = xDesc->getSourceRange();
1549             ++aSource.Sheet;
1550             xDesc->setSourceRange(aSource);
1551 
1552             CellRangeAddress aAddr = xTable->getOutputRange();
1553             XCellRangeRef xRange = xDoc->getCellRange(aAddr);
1554             if (!xRange) return;
1555             XPropertySetRef xProp = (XPropertySet*)xRange->queryInterface(XPropertySet::getSmartUik());
1556             if (!xProp) return;
1557             xProp->setPropertyValue(L"TransparentBackground", UsrAny(BOOL(FALSE)));
1558             xProp->setPropertyValue(L"BackgroundColor", UsrAny((UINT32)0x00FF00));
1559         }
1560     }
1561 }
1562 
IMPL_LINK(MyWindow,CountHdl,PushButton *,EMPTYARG)1563 IMPL_LINK(MyWindow, CountHdl, PushButton*, EMPTYARG)
1564 {
1565 #if 0
1566 
1567     long nCount = aCountField.GetValue();
1568     if (nCount < 1)
1569         nCount = 1;
1570 
1571     ULONG nStart = Time::GetSystemTicks();
1572     for (long i=0; i<nCount; i++)
1573         lcl_DoCount();
1574     ULONG nEnd = Time::GetSystemTicks();
1575     aTimeText.SetText(String(nCount)+String(" x Count: ")+String(nEnd-nStart)+String(" ms"));
1576 
1577 #else
1578 
1579     long nCount = aCountField.GetValue();
1580     switch ( nCount )
1581     {
1582         case 0:
1583             {
1584                 ULONG nStart = Time::GetSystemTicks();
1585                 lcl_DoCount();
1586                 ULONG nEnd = Time::GetSystemTicks();
1587                 aTimeText.SetText(String("Count: ")+String(nEnd-nStart)+String(" ms"));
1588             }
1589             break;
1590         case 1:
1591             lcl_GlobalCell();
1592             break;
1593         case 2:
1594             lcl_Annotations(aTimeText);
1595             break;
1596         case 3:
1597             lcl_Cursor(aTimeText);
1598             break;
1599         case 4:
1600             lcl_Cells(aTimeText);
1601             break;
1602         case 5:
1603             lcl_Sheet(aTimeText);
1604             break;
1605         case 6:
1606             lcl_Names(aTimeText);
1607             break;
1608         case 7:
1609             lcl_Sheets(aTimeText);
1610             break;
1611         case 8:
1612             lcl_Goal(aTimeText);
1613             break;
1614         case 9:
1615             lcl_TabOp(aTimeText);
1616             break;
1617         case 10:
1618             lcl_Fill(aTimeText);
1619             break;
1620         case 11:
1621             lcl_Audi(aTimeText);
1622             break;
1623         case 12:
1624             lcl_Consoli(aTimeText);
1625             break;
1626         case 13:
1627             lcl_Sort(aTimeText);
1628             break;
1629         case 14:
1630             lcl_Filter(aTimeText);
1631             break;
1632         case 15:
1633             lcl_AutoFilter(aTimeText);
1634             break;
1635         case 16:
1636             lcl_Merge(aTimeText);
1637             break;
1638         case 17:
1639             lcl_Outline(aTimeText);
1640             break;
1641         case 18:
1642             lcl_Bla(aTimeText);
1643             break;
1644         case 19:
1645             lcl_CellCursor(aTimeText);
1646             break;
1647         case 20:
1648             lcl_Notes(aTimeText);
1649             break;
1650         case 21:
1651             lcl_Scenario(aTimeText);
1652             break;
1653         case 22:
1654             lcl_Formula(aTimeText);
1655             break;
1656         case 23:
1657             lcl_DBRange(aTimeText);
1658             break;
1659         case 24:
1660             lcl_FillTab(aTimeText);
1661             break;
1662         case 25:
1663             lcl_Listener(aTimeText);
1664             break;
1665         case 26:
1666             lcl_CellAttrib(aTimeText);
1667             break;
1668         case 27:
1669             lcl_Styles(aTimeText);
1670             break;
1671         case 28:
1672             lcl_PageStyle(aTimeText);
1673             break;
1674         case 29:
1675             lcl_AutoForm(aTimeText);
1676             break;
1677         case 30:
1678             lcl_Pivot(aTimeText);
1679             break;
1680     }
1681 
1682 #endif
1683 
1684     return 0;
1685 }
1686 
1687 //-----------------------------------------------------------------------
1688 
IMPL_LINK(MyWindow,TextHdl,PushButton *,EMPTYARG)1689 IMPL_LINK(MyWindow, TextHdl, PushButton*, EMPTYARG)
1690 {
1691     USHORT nTab = 0;
1692     USHORT nCol = (USHORT)aColField.GetValue();
1693     USHORT nRow = (USHORT)aRowField.GetValue();
1694     USHORT nPos = (USHORT)aPosField.GetValue();
1695     USHORT nLen = (USHORT)aLenField.GetValue();
1696     String aStr = aTextEdit.GetText();
1697 
1698     aTimeText.SetText("...");
1699 
1700     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1701     if (xDoc)
1702     {
1703         CellAddress aPos;
1704         aPos.Sheet  = nTab;
1705         aPos.Column = nCol;
1706         aPos.Row    = nRow;
1707         XCellRef xCell = xDoc->getCell(aPos);
1708         if ( xCell )
1709         {
1710             XTextRef xCellText = (XText*)xCell->queryInterface(XText::getSmartUik());
1711             if (xCellText)
1712             {
1713                 XTextCursorRef xCursor = xCellText->createTextCursor();
1714                 if (xCursor)
1715                 {
1716                     XTextPositionRef xPos = (XTextPosition*)
1717                         xCursor->queryInterface(XTextPosition::getSmartUik());
1718                     XControlCharacterInsertableRef xControl = (XControlCharacterInsertable*)
1719                         xCursor->queryInterface(XControlCharacterInsertable::getSmartUik());
1720 
1721                     if (xPos && xControl)
1722                     {
1723                         xCursor->gotoStart(FALSE);
1724                         xCursor->goRight(11,TRUE);
1725                         String aVal = OUStringToString( xPos->getText(), CHARSET_SYSTEM );
1726                         aTimeText.SetText(aVal);
1727                     }
1728                 }
1729             }
1730         }
1731     }
1732 
1733     return 0;
1734 }
1735 
1736 //-----------------------------------------------------------------------
1737 
IMPL_LINK(MyWindow,BlaHdl,PushButton *,EMPTYARG)1738 IMPL_LINK(MyWindow, BlaHdl, PushButton*, EMPTYARG)
1739 {
1740     aTimeText.SetText("...");
1741 
1742     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1743     if (xDoc)
1744     {
1745         CellAddress aPos;
1746         aPos.Sheet  = 0;
1747         aPos.Column = 1;
1748         aPos.Row    = 2;
1749         XCellRef xCell = xDoc->getCell(aPos);
1750         if ( xCell )
1751         {
1752             XTextRef xText = (XText*)xCell->queryInterface(XText::getSmartUik());
1753             XFieldContainerRef xCont = (XFieldContainer*)
1754                                 xCell->queryInterface(XFieldContainer::getSmartUik());
1755 
1756             if ( xText && xCont )
1757             {
1758                 XFieldTypesRef xTypes = xCont->getFieldTypes();
1759                 if ( xTypes )
1760                 {
1761                     XTextFieldTypeRef xType = xTypes->getFieldType( FIELDTYPE_INTERNET );
1762                     XTextCursorRef xCursor = xText->createTextCursor();
1763                     if ( xCursor && xType )
1764                     {
1765 #if 0
1766                         //  Feld einfuegen
1767                         XTextPositionRef xPos = (XTextPosition*)
1768                                     xCursor->queryInterface(XTextPosition::getSmartUik());
1769                         if ( xPos )
1770                         {
1771                             xCursor->gotoEnd(FALSE);
1772                             XTextFieldRef xField = xTypes->insertTextField( xType, xPos );
1773                             if (xField)
1774                             {
1775                                 //  Eigenschaften setzen
1776                                 XPropertySetRef xProp = (XPropertySet*)xField->
1777                                                 queryInterface(XPropertySet::getSmartUik());
1778                                 if ( xProp )
1779                                 {
1780                                     xProp->setPropertyValue(L"URL",
1781                                                 UsrAny(String("http://www.mopo.de/")));
1782                                     xProp->setPropertyValue(L"Representation",
1783                                                 UsrAny(String("ein Hyperlink")));
1784                                 }
1785                             }
1786                         }
1787 #endif
1788 
1789                         //  letztes Feld loeschen
1790                         XIndexAccessRef xIndex = (XIndexAccess*)
1791                                     xType->queryInterface(XIndexAccess::getSmartUik());
1792                         if (xIndex)
1793                         {
1794                             String aBla;
1795                             ULONG nCount = xIndex->getCount();
1796                             for (ULONG i=0; i<nCount; i++)
1797                             {
1798                                 XInterfaceRef xInt = xIndex->getElementByIndex(i);
1799                                 if (xInt)
1800                                 {
1801                                     XPropertySetRef xProp = (XPropertySet*)xInt->
1802                                                     queryInterface(XPropertySet::getSmartUik());
1803                                     if ( xProp )
1804                                     {
1805                                         if (aBla.Len()) aBla += ',';
1806                                         aBla += OUStringToString(
1807                                                     TypeConversion::toString(
1808                                                         xProp->getPropertyValue(L"URL") ),
1809                                                     CHARSET_SYSTEM );
1810                                     }
1811                                     if ( i+1 == nCount )        // letztes
1812                                     {
1813                                         XTextFieldRef xField = (XTextField*)xInt->
1814                                                     queryInterface(XTextField::getSmartUik());
1815                                         if (xField)
1816                                             xTypes->removeTextField(xField);
1817                                     }
1818                                 }
1819                             }
1820                             aTimeText.SetText(aBla);
1821                         }
1822                     }
1823                 }
1824             }
1825         }
1826 
1827         xGlobalCell = xCell;
1828     }
1829     return 0;
1830 }
1831 
1832 
1833 //-----------------------------------------------------------------------
1834 
IMPL_LINK(MyWindow,TabHdl,PushButton *,EMPTYARG)1835 IMPL_LINK(MyWindow, TabHdl, PushButton*, EMPTYARG)
1836 {
1837     String aResult;
1838 
1839     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1840     if (xDoc)
1841     {
1842         XSpreadsheetsRef xSheets = xDoc->getSheets();
1843         if (xSheets)
1844         {
1845             XIndexAccessRef xIndex = (XIndexAccess*)xSheets->queryInterface(XIndexAccess::getSmartUik());
1846             if (xIndex)
1847             {
1848                 USHORT nCount = (USHORT) xIndex->getCount();
1849                 for (USHORT nTab=0; nTab<nCount; nTab++)
1850                 {
1851                     XInterfaceRef xInt = xIndex->getElementByIndex(nTab);
1852                     if (xInt)
1853                     {
1854                         XNamedRef xNamed = (XNamed*)xInt->queryInterface(XNamed::getSmartUik());
1855                         if (xNamed)
1856                         {
1857                             if (nTab)
1858                                 aResult += ",";
1859                             aResult += OUStringToString( xNamed->getName(), CHARSET_SYSTEM );
1860                         }
1861                     }
1862                 }
1863             }
1864 
1865             CellAddress aPos;
1866             aPos.Sheet  = 0;
1867             aPos.Column = 0;
1868             aPos.Row    = 0;
1869 
1870             XEnumerationAccessRef xEAcc = (XEnumerationAccess*)
1871                             xSheets->queryInterface(XEnumerationAccess::getSmartUik());
1872             if (xEAcc)
1873             {
1874                 XEnumerationRef xEnum = xEAcc->getEnumeration();
1875                 if (xEnum)
1876                 {
1877                     while (xEnum->hasMoreElements())
1878                     {
1879                         XInterfaceRef xInt = xEnum->nextElement();
1880                         if (xInt)
1881                         {
1882                             XNamedRef xNamed = (XNamed*)xInt->queryInterface(XNamed::getSmartUik());
1883                             if (xNamed)
1884                             {
1885                                 UString aName = xNamed->getName();
1886                                 XCellRef xCell = xDoc->getCell(aPos);
1887                                 if ( xCell )
1888                                 {
1889                                     XTextRef xText = (XText*)xCell->queryInterface(XText::getSmartUik());
1890                                     xText->setText( aName );
1891                                     ++aPos.Row;
1892                                 }
1893                             }
1894                         }
1895                     }
1896                 }
1897             }
1898         }
1899     }
1900 
1901     aTimeText.SetText(aResult);
1902 
1903     return 0;
1904 }
1905 
1906 //-----------------------------------------------------------------------
1907 
lcl_FillCells(XCellCollectionRef xColl)1908 void lcl_FillCells(XCellCollectionRef xColl)
1909 {
1910     XEnumerationAccessRef xEnAcc = xColl->getCells();
1911     if (!xEnAcc) return;
1912     XEnumerationRef xEnum = xEnAcc->getEnumeration();
1913     if (!xEnum) return;
1914     while (xEnum->hasMoreElements())
1915     {
1916         XInterfaceRef xInt = xEnum->nextElement();
1917         if (xInt)
1918         {
1919             XCellRef xCell = (XCell*)xInt->queryInterface(XCell::getSmartUik());
1920             if (xCell)
1921             {
1922                 xCell->setValue(42.0);
1923             }
1924         }
1925     }
1926 }
1927 
IMPL_LINK(MyWindow,ViewHdl,PushButton *,EMPTYARG)1928 IMPL_LINK(MyWindow, ViewHdl, PushButton*, EMPTYARG)
1929 {
1930     XSpreadsheetDocumentRef xDoc = lcl_GetDocument();           // Calc-Model
1931     XInterfaceRef xInt = lcl_GetView();
1932     if (!xInt) return 0;
1933     XDocumentViewRef xView = (XDocumentView*)xInt->queryInterface(XDocumentView::getSmartUik());
1934     if (!xView) return 0;
1935 
1936     XInterfaceRef xSelInt = xView->getSelection();
1937     if (!xSelInt) return 0;
1938 
1939 #if 0
1940     XPropertySetRef xProp = (XPropertySet*)xSelInt->queryInterface(XPropertySet::getSmartUik());
1941     if ( xProp )
1942     {
1943         UsrAny aAny;
1944 
1945         aAny = xProp->getPropertyValue(L"TransparentBackground");
1946         aAny.setBOOL(FALSE);
1947         xProp->setPropertyValue(L"TransparentBackground", aAny);
1948 
1949         aAny = xProp->getPropertyValue(L"BackgroundColor");
1950         aAny.setUINT32(0xffff00);
1951         xProp->setPropertyValue(L"BackgroundColor", aAny);
1952     }
1953     XIndentRef xInd = (XIndent*)xSelInt->queryInterface(XIndent::getSmartUik());
1954     if ( xInd )
1955     {
1956         xInd->incrementIndent();
1957     }
1958 #endif
1959 
1960     XAutoFormattableRef xAuto = (XAutoFormattable*)xSelInt->
1961                                     queryInterface(XAutoFormattable::getSmartUik());
1962     if ( xAuto )
1963         xAuto->applyAutoFormat( L"gaga" );
1964 
1965     XFormulaArrayRef xArr = (XFormulaArray*)xSelInt->queryInterface(XFormulaArray::getSmartUik());
1966     if ( xArr )
1967     {
1968 //      xArr->setFormulaArray( "123" );
1969         String aFormula = OUStringToString( xArr->getFormulaArray(), CHARSET_SYSTEM );
1970         aTimeText.SetText(aFormula);
1971     }
1972     else
1973         aTimeText.SetText("...");
1974 
1975     XTextRef xText = (XText*)xSelInt->queryInterface(XText::getSmartUik());
1976     if ( xText )
1977     {
1978         String aStr = OUStringToString( xText->getText(), CHARSET_SYSTEM );
1979         aStr += 'X';
1980         xText->setText(StringToOUString(aStr, CHARSET_SYSTEM));
1981     }
1982 
1983     //  Zelle selektieren
1984 
1985 #if 0
1986     if (xDoc)
1987     {
1988         CellAddress aPos;
1989         aPos.Sheet  = 0;
1990         aPos.Column = 1;
1991         aPos.Row    = 2;
1992         XCellRef xCell = xDoc->getCell(aPos);
1993         if ( xCell )
1994             xView->select( xCell );
1995     }
1996 #endif
1997 
1998     XPrintableRef xPrint = (XPrintable*)xInt->queryInterface(XPrintable::getSmartUik());
1999     String aName = OUStringToString( xPrint->getPrinterName(), CHARSET_SYSTEM );
2000 //  aTimeText.SetText(aName);
2001 
2002     xPrint->setPrinterName(L"HP5_2");
2003 //  xPrint->setPrinterName(L"blubb");
2004 
2005 //  XPropertySetRef xOptions;
2006 //  xPrint->print(xOptions);
2007 
2008 /*  XViewPaneRef xPane = (XViewPane*)xInt->queryInterface(XViewPane::getSmartUik());
2009     if (!xPane) return 0;
2010     xPane->setScrollRow( 2 );
2011 */
2012 
2013     XCellRangeSourceRef xSrc = (XCellRangeSource*)
2014                                     xInt->queryInterface(XCellRangeSource::getSmartUik());
2015     if (!xSrc) return 0;
2016     XCellRangeRef xRange = xSrc->getReferredCells();
2017     if (!xRange) return 0;
2018     XCellCollectionRef xColl = (XCellCollection*)
2019                                     xRange->queryInterface(XCellCollection::getSmartUik());
2020     if (!xColl) return 0;
2021 
2022     XActionLockableRef xLock = (XActionLockable*)
2023                         xDoc->queryInterface(XActionLockable::getSmartUik());
2024     if (xLock)
2025         xLock->addActionLock();                         // nicht zwischendurch painten
2026 
2027 //  lcl_FillCells(xColl);
2028 
2029     if (xLock)
2030         xLock->removeActionLock();                          // nicht zwischendurch painten
2031 
2032     XStarCalcViewRef xCalc = (XStarCalcView*)xInt->queryInterface(XStarCalcView::getSmartUik());
2033     if (!xCalc) return 0;
2034 
2035     return 0;
2036 }
2037 
2038