xref: /AOO41X/main/soldep/source/objwin.cxx (revision d9e04f7d457e8d4292f3a8dc854ee7656a676fbb)
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/list.hxx>
25 #include <tools/debug.hxx>
26 #include <vcl/svapp.hxx>
27 #include <vcl/help.hxx>
28 #include <vcl/wall.hxx>
29 
30 #include <soldep/objwin.hxx>
31 #include <soldep/depwin.hxx>
32 //#include "depapp.hxx"
33 #include <soldep/depper.hxx>
34 //#include "prjdep.hxx"
35 #include <soldep/connctr.hxx>
36 #include <stdio.h>
37 
38 static Color aDefaultColor = 0L;
39 static Wallpaper* pDefaultWallpaper = 0L;
40 
41 // Initialize static class member
42 sal_Bool ObjectWin::msbHideMode = sal_False;
43 sal_uIntPtr ObjectWin::msnGlobalViewMask = 0;
44 
45 
46 sal_uInt32 aColorMap[] = {
47     RGB_COLORDATA( 0xFF, 0xFF, 0x80 ),             //MARKMODE_DEFAULT    0
48     COL_GREEN,              //MARKMODE_DEPENDING  1
49     COL_RED,                //MARKMODE_NEEDED     2
50     COL_MAGENTA,            //1+2
51     COL_GRAY,               //MARKMODE_ACTIVATED  4
52     COL_LIGHTGREEN,         //1+4
53     COL_LIGHTRED,           //2+4
54     COL_LIGHTMAGENTA,       //1+2+4
55     COL_BLUE,               //MARKMODE_SELECTED   8
56     COL_LIGHTGRAY,          //1+8
57     COL_CYAN,               //2+8
58     COL_LIGHTCYAN,          //1+2+8
59     COL_LIGHTBLUE,          //4+8
60     COL_BROWN,              //1+4+8
61     COL_BLACK,              //2+4+8
62     COL_BLUE                //1+2+4+8
63 };
64 
65 
66 //
67 // class ObjectWin
68 //
69 
70 /*****************************************************************************/
ObjectWin(Window * pParent,WinBits nWinStyle)71 ObjectWin::ObjectWin( Window* pParent, WinBits nWinStyle )
72 /*****************************************************************************/
73                 : Window( pParent, nWinStyle ),
74                 msBodyText( "" ),
75                 msTipText( "" ),
76                 mnObjectId( 0 ),
77                 mnMarkMode( 0 ),
78                 mnViewMask( 0 ),
79                 mbVisible( sal_False ),
80                 mbMenuExecute( sal_False ),
81                 mbVisited( sal_False ),
82                 mnRootDist( 0 ),
83                 mnHeadDist( 0 ),
84                 mbFixed( sal_False )
85 {
86     SetBackground( Wallpaper( aColorMap[0] ));
87 
88     aTipTimer.SetTimeout( 500 );
89     aTipTimer.SetTimeoutHdl(
90     LINK( this, ObjectWin, TipHdl ));
91 
92     SetFont( Font( GetFont() ) );
93     Font aFont( GetFont() );
94     Size aSize = aFont.GetSize();
95     aFont.SetSize( aSize );
96     SetFont( aFont );
97 
98     EnableClipSiblings();
99     SetZOrder( NULL, WINDOW_ZORDER_FIRST );
100     mpPopup = new PopupMenu();
101     mpPopup->InsertItem( OBJWIN_EDIT_TEXT, String::CreateFromAscii( "Details" ));
102     mpPopup->InsertItem( OBJWIN_ADD_CONNECTOR, String::CreateFromAscii( "New connection" ));
103     mpPopup->InsertItem( OBJWIN_REMOVE_WIN, String::CreateFromAscii( "Remove object" ));
104     mpPopup->InsertItem( OBJWIN_VIEW_CONTENT, String::CreateFromAscii( "View content" ));
105 //  mpPopup->InsertSeparator();
106     mpPopup->SetSelectHdl( LINK( this, ObjectWin, PopupSelected ));
107     mpPopup->SetDeactivateHdl( LINK( this, ObjectWin, PopupDeactivated ));
108     mnPopupStaticItems = mpPopup->GetItemCount();
109 
110     if ( ! pDefaultWallpaper )
111     {
112         pDefaultWallpaper = new Wallpaper( GetBackground() );
113         aDefaultColor = GetTextColor();
114     }
115     Hide();
116 }
117 
118 /*****************************************************************************/
~ObjectWin()119 ObjectWin::~ObjectWin()
120 /*****************************************************************************/
121 {
122     while ( mConnections.Count() > 0 )
123     {
124         delete mConnections.GetObject( 0 );
125     }
126 }
127 
SetHideMode(sal_Bool bHide)128 void ObjectWin::SetHideMode(sal_Bool bHide)
129 {
130     msbHideMode = bHide;
131     mConnections.GetObject(0)->SetHideMode(msbHideMode);
132 }
133 
ToggleHideMode()134 sal_Bool ObjectWin::ToggleHideMode()
135 {
136     msbHideMode = !msbHideMode;
137     mConnections.GetObject(0)->SetHideMode(msbHideMode);
138     return msbHideMode;
139 }
140 
141 /*****************************************************************************/
SetViewMask(sal_uIntPtr nMask)142 void ObjectWin::SetViewMask( sal_uIntPtr nMask )
143 /*****************************************************************************/
144 {
145     mnViewMask = nMask;
146     // Compares
147     if ( mnViewMask & msnGlobalViewMask) {
148         mbVisible = sal_True;
149         Show();
150     }
151     else {
152         Hide();
153         mbVisible = sal_False;
154     }
155     for ( sal_uIntPtr i = 0; i < mConnections.Count(); i++ )
156         mConnections.GetObject( i )->UpdateVisibility();
157 }
158 
159 /*****************************************************************************/
SetBodyText(const ByteString & rNewString)160 void ObjectWin::SetBodyText( const ByteString& rNewString )
161 /*****************************************************************************/
162 {
163     msBodyText = rNewString;
164 }
165 
166 /*****************************************************************************/
GetBodyText()167 ByteString& ObjectWin::GetBodyText()
168 /*****************************************************************************/
169 {
170     return msBodyText;
171 }
172 
173 /*****************************************************************************/
SetTipText(const ByteString & rNewString)174 void ObjectWin::SetTipText( const ByteString& rNewString )
175 /*****************************************************************************/
176 {
177     msTipText = rNewString;
178 }
179 
180 /*****************************************************************************/
GetTipText()181 ByteString& ObjectWin::GetTipText()
182 /*****************************************************************************/
183 {
184     return msTipText;
185 }
186 
187 /*****************************************************************************/
GetFixPoint(const Point & rRefPoint,sal_Bool bUseRealPos)188 Point ObjectWin::GetFixPoint( const Point& rRefPoint, sal_Bool bUseRealPos )
189 /*****************************************************************************/
190 {
191     Point aLocalPoint;
192     if ( bUseRealPos )
193         aLocalPoint = GetPosPixel();
194     else
195         aLocalPoint = GetCalcPosPixel();
196 
197     Size aLocalSize = GetSizePixel();
198     Point aRetPoint;
199 
200     sal_uInt16 nRefX = aLocalPoint.X() + aLocalSize.Width() / 2 ;
201     sal_uInt16 nRefY = aLocalPoint.Y() + aLocalSize.Height() / 2 ;
202 
203     // always false...
204     //if ( nRefX < 0 ) nRefX = 0;
205     //if ( nRefY < 0 ) nRefY = 0;
206 
207     if ( rRefPoint.X() > nRefX )
208     {
209         if ( rRefPoint.Y() > nRefY )
210         {
211             if  ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY ))
212             {
213                 aRetPoint.X() = aLocalPoint.X() + aLocalSize.Width();
214                 aRetPoint.Y() = nRefY;
215             }
216             else
217             {
218                 aRetPoint.X() = nRefX;
219                 aRetPoint.Y() = aLocalPoint.Y() + aLocalSize.Height();
220             }
221         }
222         else
223         {
224             if  ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY ))
225             {
226                 aRetPoint.X() = aLocalPoint.X() + aLocalSize.Width();
227                 aRetPoint.Y() = nRefY;
228             }
229             else
230             {
231                 aRetPoint.X() = nRefX;
232                 aRetPoint.Y() = aLocalPoint.Y();
233             }
234         }
235     }
236     else
237     {
238         if ( rRefPoint.Y() > nRefY )
239         {
240             if  ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY ))
241             {
242                 aRetPoint.X() = aLocalPoint.X();
243                 aRetPoint.Y() = nRefY;
244             }
245             else
246             {
247                 aRetPoint.X() = nRefX;
248                 aRetPoint.Y() = aLocalPoint.Y() + aLocalSize.Height();
249             }
250         }
251         else
252         {
253             if  ( Abs( rRefPoint.X() - nRefX ) > Abs( rRefPoint.Y() - nRefY ))
254             {
255                 aRetPoint.X() = aLocalPoint.X();
256                 aRetPoint.Y() = nRefY;
257             }
258             else
259             {
260                 aRetPoint.X() = nRefX;
261                 aRetPoint.Y() = aLocalPoint.Y();
262             }
263         }
264     }
265 
266     return PixelToLogic(aRetPoint);
267 
268 }
269 
270 /*****************************************************************************/
AddConnector(Connector * pNewCon)271 void ObjectWin::AddConnector( Connector* pNewCon )
272 /*****************************************************************************/
273 {
274     mConnections.Insert( pNewCon );
275 }
276 
277 /*****************************************************************************/
ConnectionExistsInAnyDirection(ObjectWin * pWin)278 sal_Bool ObjectWin::ConnectionExistsInAnyDirection( ObjectWin *pWin )
279 /*****************************************************************************/
280 {
281     for ( sal_uIntPtr i = 0; i < mConnections.Count(); i++ )
282         if ( mConnections.GetObject( i )->GetOtherWin( this ) == pWin )
283             return sal_True;
284 
285     return sal_False;
286 }
287 
288 /*****************************************************************************/
RemoveConnector(Connector * pOldCon)289 void ObjectWin::RemoveConnector( Connector* pOldCon )
290 /*****************************************************************************/
291 {
292     mConnections.Remove( pOldCon );
293 }
294 
295 /*****************************************************************************/
GetConnector(sal_uIntPtr nIndex)296 Connector* ObjectWin::GetConnector( sal_uIntPtr nIndex )
297 /*****************************************************************************/
298 {
299     sal_uIntPtr nConCount = mConnections.Count();
300 
301     if ( nIndex < nConCount )
302         return mConnections.GetObject( nIndex );
303     return NULL;
304 }
305 
306 /*****************************************************************************/
GetConnector(sal_uIntPtr nStartId,sal_uIntPtr nEndId)307 Connector* ObjectWin::GetConnector( sal_uIntPtr nStartId, sal_uIntPtr nEndId )
308 /*****************************************************************************/
309 {
310     if ( mnObjectId != nStartId )
311         return NULL;
312 
313     sal_uInt16 i;
314     Connector* pCon;
315     sal_uIntPtr nConCount = mConnections.Count();
316 
317     for ( i = 0; i < nConCount; i++ )
318     {
319         pCon = mConnections.GetObject( i );
320         if ( pCon->GetOtherWin( this )->GetId() == nEndId )
321             return pCon;
322     }
323     return NULL;
324 }
325 
SetAllConnectorsUnvisible()326 void ObjectWin::SetAllConnectorsUnvisible()
327 {
328     Connector* pCon;
329     sal_uIntPtr nConCount = mConnections.Count();
330     for ( sal_uIntPtr i = 0; i < nConCount; i++ )
331     {
332         pCon = mConnections.GetObject( i );
333         if (pCon) pCon->SetVisibility( sal_False );
334     }
335 }
336 
337 /*****************************************************************************/
SetMarkMode(sal_uIntPtr nMarkMode)338 void ObjectWin::SetMarkMode( sal_uIntPtr nMarkMode )
339 /*****************************************************************************/
340 {
341     //Wallpaper aWallpaper;
342 
343     if ( nMarkMode == MARKMODE_DEFAULT )
344     {
345         if ( pDefaultWallpaper )
346         {
347             maObjWallpaper = GetBackground();
348             maObjWallpaper.SetColor( pDefaultWallpaper->GetColor() );
349             SetBackground( maObjWallpaper );
350             SetTextColor( aDefaultColor );
351         }
352     }
353     else
354     {
355         mnMarkMode |= nMarkMode;
356         maObjWallpaper = GetBackground();
357         maObjWallpaper.SetColor( aColorMap[ mnMarkMode ] );
358         SetBackground( maObjWallpaper );
359         SetTextColor( COL_WHITE );
360     }
361 
362     Invalidate();
363 }
364 
365 /*****************************************************************************/
UnsetMarkMode(sal_uIntPtr nMarkMode)366 void ObjectWin::UnsetMarkMode( sal_uIntPtr nMarkMode )
367 /*****************************************************************************/
368 {
369     //Wallpaper aWallpaper;
370 
371     sal_uIntPtr nOldMode = mnMarkMode;
372     mnMarkMode &= ( !nMarkMode );
373 
374     if ( nOldMode != mnMarkMode ) {
375         if ( mnMarkMode == MARKMODE_DEFAULT )
376         {
377             if ( pDefaultWallpaper )
378             {
379                 maObjWallpaper = GetBackground();
380                 maObjWallpaper.SetColor( pDefaultWallpaper->GetColor() );
381                 SetBackground( maObjWallpaper );
382                 SetTextColor( aDefaultColor );
383             }
384         }
385         else
386         {
387             maObjWallpaper = GetBackground();
388             maObjWallpaper.SetColor( aColorMap[ mnMarkMode ] ); //mnMarkMode
389             SetBackground( maObjWallpaper );
390             SetTextColor( COL_WHITE );
391         }
392         Invalidate();
393     }
394 }
395 
396 /*****************************************************************************/
MarkNeeded(sal_Bool bReset)397 void ObjectWin::MarkNeeded( sal_Bool bReset )
398 /*****************************************************************************/
399 {
400     Connector* pCon;
401     ObjectWin* pWin;
402 
403     sal_uIntPtr nConCount = mConnections.Count();
404     sal_uIntPtr i;
405 
406     for ( i = 0; i < nConCount; i++ )
407     {
408         pCon = mConnections.GetObject( i );
409         if ( pCon && !pCon->IsStart( this))
410         {
411             pWin = pCon->GetOtherWin( this );
412             if ( pWin )
413             {
414                 if ( bReset )
415                     pWin->UnsetMarkMode( MARKMODE_NEEDED );
416                 else
417                     pWin->SetMarkMode( MARKMODE_NEEDED );
418                 pWin->MarkNeeded( bReset );                    // recursive call
419             }
420         }
421     }
422 }
423 
424 /*****************************************************************************/
MarkDepending(sal_Bool bReset)425 void ObjectWin::MarkDepending( sal_Bool bReset )
426 /*****************************************************************************/
427 {
428     //if ( !bReset )
429     //  return;
430 
431     Connector* pCon;
432     ObjectWin* pWin;
433 
434     sal_uIntPtr nConCount = mConnections.Count();
435     sal_uIntPtr i;
436 
437     for ( i = 0; i < nConCount; i++ )
438     {
439         pCon = mConnections.GetObject( i );
440         if ( pCon && pCon->IsStart( this) )
441         {
442             pWin = pCon->GetOtherWin( this );
443             if ( pWin )
444             {
445                 if ( bReset )
446                     pWin->UnsetMarkMode( MARKMODE_DEPENDING );
447                 else
448                     pWin->SetMarkMode( MARKMODE_DEPENDING );
449                 pWin->MarkDepending( bReset );                  // recursive call
450             }
451         }
452     }
453 }
454 
455 /*****************************************************************************/
Paint(const Rectangle & rRect)456 void ObjectWin::Paint( const Rectangle& rRect )
457 /*****************************************************************************/
458 {
459     Size  aWinSize  = PixelToLogic( GetOutputSizePixel() );
460     Size  aTextSize;
461     ByteString sbt = msBodyText;                         //debug
462     //sbt += " ";                                         //debug
463     //sbt += ByteString::CreateFromInt32(mnMarkMode);     //debug
464     aTextSize.Width() = GetTextWidth( String( msBodyText, RTL_TEXTENCODING_UTF8 ));
465     aTextSize.Height() = GetTextHeight();
466     Point aPos( aWinSize.Width() / 2  - aTextSize.Width() / 2,
467                 aWinSize.Height() / 2 - aTextSize.Height() / 2 );
468 
469     //DrawText( aPos , String( sBodyText, RTL_TEXTENCODING_UTF8 ));
470     if (msBodyText =="null") //don't paint this "window"
471     {
472         Hide();
473         Invalidate();
474     } else
475         DrawText( aPos , String( sbt, RTL_TEXTENCODING_UTF8 )); //debug
476 }
477 
DrawOutput(OutputDevice * pDevice,const Point & rOffset)478 void ObjectWin::DrawOutput( OutputDevice* pDevice, const Point& rOffset )
479 /*****************************************************************************/
480 {
481     Size aWinSize  = PixelToLogic( GetSizePixel() );
482     Size aTextSize;
483     ByteString sbt = msBodyText;
484     aTextSize.Width() = GetTextWidth( String( msBodyText, RTL_TEXTENCODING_UTF8 ));
485     aTextSize.Height() = GetTextHeight();
486     Point aPos = GetPosPixel();
487     Point aTextPos( aWinSize.Width() / 2  - aTextSize.Width() / 2,
488                 aWinSize.Height() / 2 - aTextSize.Height() / 2 );
489     aTextPos += aPos;
490     aPos = pDevice->PixelToLogic( aPos ) - rOffset;
491     aTextPos = pDevice->PixelToLogic( aTextPos ) - rOffset;
492     if ( msBodyText !="null" )
493     {
494         pDevice->SetFillColor( GetBackground().GetColor() );
495         pDevice->DrawRect( Rectangle( aPos, pDevice->PixelToLogic( GetSizePixel() ) ) );
496         Font aFont( GetFont() );
497         Size aSize = aFont.GetSize();
498         aSize = pDevice->PixelToLogic( aSize );
499         aFont.SetSize( aSize );
500         pDevice->SetFont( aFont );
501         pDevice->SetTextColor( GetTextColor() );
502         pDevice->DrawText( aTextPos, String( sbt, RTL_TEXTENCODING_UTF8 ) );
503     }
504 }
505 
506 /*****************************************************************************/
MouseButtonDown(const MouseEvent & rMEvt)507 void ObjectWin::MouseButtonDown( const MouseEvent& rMEvt )
508 /*****************************************************************************/
509 {
510     //Notify Soldep to clear ObjectList
511     SetZOrder( NULL, WINDOW_ZORDER_FIRST );
512     GrabFocus();
513 
514     // workaround fuer vcl-bug
515 //  GetWindow( WINDOW_REALPARENT)->Invalidate();
516 //    MyApp *pApp = (MyApp*)GetpApp();
517 //    SolDep *pSoldep = pApp->GetSolDep();
518 
519     maMouseOffset = rMEvt.GetPosPixel();
520     if ( rMEvt.IsLeft() )
521     {
522 
523         if ( rMEvt.IsMod2() )               // alt + mouse click left
524         {
525             CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_DOWN_ALT, this );
526         }
527         else {
528             CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_DOWN, this );
529         }
530         if( rMEvt.GetClicks() == 2 )
531             CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_DOWN_DBLCLICK, this );
532         else if ( !rMEvt.IsShift() && !((DepWin*)GetParent())->IsStartNewCon())
533         {
534             //((DepWin*)GetParent())->SaveSelectedObjWin(&this);
535             CaptureMouse();
536         }
537     }
538 }
539 
540 /*****************************************************************************/
MouseButtonUp(const MouseEvent & rMEvt)541 void ObjectWin::MouseButtonUp( const MouseEvent& rMEvt )
542 /*****************************************************************************/
543 {
544     fprintf(stdout,"ObjectWin::MouseButtonUp\n");
545     if ( rMEvt.IsLeft() )
546     {
547         if ( rMEvt.IsShift() || ((DepWin*)GetParent())->IsStartNewCon())
548             CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_UP_SHFT, this );
549 //          ((DepWin*)GetParent())->NewConnector( this );
550         else
551         {
552             CallEventListeners( VCLEVENT_USER_MOUSEBUTTON_UP, this );
553             if ( IsMouseCaptured() ) ReleaseMouse();
554         }
555     }
556     else if ( rMEvt.IsRight() )
557     {
558         sal_uInt16 i;
559 
560         while ( mnPopupStaticItems < mpPopup->GetItemCount() )
561         {
562             mpPopup->RemoveItem( mnPopupStaticItems );
563         }
564 
565         if ( mConnections.Count()) {
566             mpPopup->InsertSeparator();
567 
568             for( i = 0; i < mConnections.Count() ; i++ )
569             {
570                 mpPopup->InsertItem( mnPopupStaticItems + i + 1, String( ((mConnections.GetObject( i ))->GetOtherWin( this ))->GetBodyText(), RTL_TEXTENCODING_UTF8 ));
571             }
572         }
573         mbMenuExecute = sal_True;
574         mpPopup->Execute( GetParent(), rMEvt.GetPosPixel() + GetPosPixel());
575     }
576 }
577 
578 /*****************************************************************************/
MouseMove(const MouseEvent & rMEvt)579 void ObjectWin::MouseMove( const MouseEvent& rMEvt )
580 /*****************************************************************************/
581 {
582     if ( IsMouseCaptured() )
583     {
584         sal_uInt16 i;
585 
586         Point aNewWinPos( GetPosPixel() + rMEvt.GetPosPixel() - maMouseOffset );
587 
588         aNewWinPos.X() = Max( 0L, aNewWinPos.X());
589         aNewWinPos.Y() = Max( 0L, aNewWinPos.Y());
590         SetPosPixel( aNewWinPos );
591         //int t = mConnections.Count();
592 
593         for ( i=0; i < mConnections.Count();i++)
594         {
595             mConnections.GetObject( i )->UpdatePosition( this );
596         }
597     }
598     else // !IsMouseCaptured()
599     {
600         if ( rMEvt.IsLeaveWindow() )
601             aTipTimer.Stop();
602         else
603             aTipTimer.Start();
604 
605         MouseEvent aNewMEvt( rMEvt.GetPosPixel() + GetPosPixel());
606 
607         GetParent()->MouseMove( aNewMEvt ); //call to DepWin::MouseMove
608     }
609 }
610 
611 /*****************************************************************************/
Save(SvFileStream & rOutFile)612 sal_uInt16 ObjectWin::Save( SvFileStream& rOutFile )
613 /*****************************************************************************/
614 {
615     return 0;
616 }
617 
618 /*****************************************************************************/
Load(SvFileStream & rInFile)619 sal_uInt16 ObjectWin::Load( SvFileStream& rInFile )
620 /*****************************************************************************/
621 {
622     return 0;
623 }
624 
625 /*****************************************************************************/
SetId(sal_uIntPtr nId)626 void ObjectWin::SetId( sal_uIntPtr nId )
627 /*****************************************************************************/
628 {
629     mnObjectId = nId;
630 }
631 
632 /*****************************************************************************/
GetId()633 sal_uIntPtr ObjectWin::GetId()
634 /*****************************************************************************/
635 {
636     return mnObjectId;
637 }
638 
639 /*****************************************************************************/
UpdateConnectors()640 void ObjectWin::UpdateConnectors()
641 /*****************************************************************************/
642 {
643     sal_uInt16 i;
644 
645     for ( i = 0; i < mConnections.Count(); i++ )
646     {
647         mConnections.GetObject( i )->UpdatePosition( this );
648     }
649 }
650 
IMPL_LINK(ObjectWin,PopupSelected,PopupMenu *,mpPopup_l)651 IMPL_LINK( ObjectWin, PopupSelected, PopupMenu*, mpPopup_l )
652 {
653     sal_uInt16 nItemId = mpPopup_l->GetCurItemId();
654 
655     switch( nItemId )
656     {
657         case OBJWIN_EDIT_TEXT :
658             DBG_ASSERT( sal_False,"edit");
659                 break;
660         case OBJWIN_REMOVE_WIN :
661 //          DBG_ASSERT( FALSE,"remove");
662 //          DBG_ASSERT( mpDepperDontuseme,"remove");
663             //mpDepperDontuseme->RemoveObject(mpDepperDontuseme->mpObjectList, ( sal_uInt16 ) GetId());
664                 break;
665         case OBJWIN_ADD_CONNECTOR :
666 //          DBG_ASSERT( FALSE,"add con");
667             ((DepWin*)GetParent())->NewConnector( this );
668                 break;
669         case OBJWIN_VIEW_CONTENT :
670 //          DBG_ASSERT( FALSE,"view cnt");
671 //          mpDepperDontuseme->ViewContent( msBodyText );
672 //          TBD: CallEventListener
673                 break;
674         default :
675 //          DBG_ASSERT( sal_False, String (nItemId) );
676             Connector* pCon = mConnections.GetObject( nItemId - mnPopupStaticItems - 1);
677             pCon = 0;
678 //          delete pCon;
679 //          mpDepperDontuseme->RemoveConnector( pCon->GetStartId(), pCon->GetEndId());
680 //          TBD: CallEventListener
681 
682                 break;
683     }
684     return 0;
685 }
686 
687 /*****************************************************************************/
IMPL_LINK(ObjectWin,TipHdl,void *,EMTY_ARG)688 IMPL_LINK( ObjectWin, TipHdl, void *, EMTY_ARG )
689 /*****************************************************************************/
690 {
691     aTipTimer.Stop();
692 
693     if ( msTipText.Len()) {
694         Point aPos( GetpApp()->GetAppWindow()->GetPointerPosPixel());
695         Help::ShowBalloon( GetpApp()->GetAppWindow(),
696             Point( aPos.X(), aPos.Y()),
697             String( msTipText, RTL_TEXTENCODING_UTF8 ));
698     }
699     return 0;
700 }
701 
702 /*****************************************************************************/
703 //void ObjectWin::GetFocus()
704 /*****************************************************************************/
705 //{
706     //SetMarkMode( MARKMODE_SELECTED );
707 //}
708 
709 /*****************************************************************************/
LoseFocus()710 void ObjectWin::LoseFocus()
711 /*****************************************************************************/
712 {
713     if ( !mbMenuExecute && !msbHideMode ) {
714         UnsetMarkMode( MARKMODE_SELECTED );
715         UnsetMarkMode( MARKMODE_ACTIVATED );
716         MarkNeeded( sal_True );
717         MarkDepending( sal_True );
718     }
719     else
720         mbMenuExecute = sal_False;
721 }
722 
723 /*****************************************************************************/
IMPL_LINK(ObjectWin,PopupDeactivated,PopupMenu *,mpPopup_l)724 IMPL_LINK( ObjectWin, PopupDeactivated, PopupMenu*, mpPopup_l )
725 /*****************************************************************************/
726 {
727     mbMenuExecute = sal_False;
728 
729     if ( !HasFocus()) {
730         UnsetMarkMode( MARKMODE_SELECTED );
731         UnsetMarkMode( MARKMODE_ACTIVATED );
732         MarkNeeded( sal_True );
733         MarkDepending( sal_True );
734     }
735 
736     return 0;
737 }
738 
739 /*****************************************************************************/
Command(const CommandEvent & rEvent)740 void ObjectWin::Command( const CommandEvent& rEvent)
741 /*****************************************************************************/
742 {
743     fprintf(stdout, "ObjectWin::Command");
744 //  mpDepperDontuseme->GetGraphWin()->Command( rEvent );
745 //          TBD: CallEventListener
746 
747 }
748 
749 /*****************************************************************************/
750 /*****************************************************************************/
751 
ObjectList()752 ObjectList::ObjectList() : ObjWinList()
753 {
754 }
755 
756 /*****************************************************************************/
ResetSelectedObject()757 void ObjectList::ResetSelectedObject()
758 /*****************************************************************************/
759 {
760 //    return;
761 
762     sal_uIntPtr nCount_l = Count();
763     ObjectWin* pObjectWin = NULL;
764     for (sal_uIntPtr i=0; i < nCount_l; i++ )
765     {
766         pObjectWin = GetObject( i );
767         pObjectWin->UnsetMarkMode( MARKMODE_SELECTED );
768         pObjectWin->UnsetMarkMode( MARKMODE_NEEDED );
769         pObjectWin->UnsetMarkMode( MARKMODE_DEPENDING );
770         pObjectWin->SetActualWallpaper(*pDefaultWallpaper);
771         pObjectWin->SetAllConnectorsUnvisible();
772     }
773     return;
774 }
775 
776 /*****************************************************************************/
GetPtrByName(const ByteString & rText)777 ObjectWin* ObjectList::GetPtrByName( const ByteString& rText )
778 /*****************************************************************************/
779 {
780     sal_uIntPtr i = 0;
781     sal_uIntPtr nCount_l = Count();
782     ObjectWin* pObjectWin = NULL;
783     while ( i < nCount_l )
784     {
785        pObjectWin = GetObject( i );
786        ByteString sPrj = pObjectWin->GetBodyText();
787        if (sPrj == rText) return pObjectWin;
788        i++;
789     }
790     return 0;
791 }
792 
FindTopLevelModules()793 ObjectList* ObjectList::FindTopLevelModules()
794 {
795     ObjectList* pList = new ObjectList;
796     for ( sal_uInt16 i=0; i<Count(); i++ )
797     {
798        ObjectWin* pObjectWin = GetObject( i );
799        if ( pObjectWin->IsTop() )
800            pList->Insert( pObjectWin );
801     }
802 
803     return pList;
804 }
805 
IsTop()806 sal_Bool ObjectWin::IsTop()
807 {
808     sal_uIntPtr nConCount = mConnections.Count();
809     for ( sal_uIntPtr i = 0; i < nConCount; i++ )
810     {
811         Connector* pCon = mConnections.GetObject( i );
812         if ( pCon && pCon->IsStart( this) )
813             return sal_False;
814     }
815 
816     return sal_True;
817 }
818