xref: /aoo4110/main/soldep/source/depper.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski #include <stdio.h>
26*b1cdbd2cSJim Jagielski #include <tools/stream.hxx>
27*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
28*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
29*b1cdbd2cSJim Jagielski #include <svtools/prgsbar.hxx>
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include <soldep/depper.hxx>
32*b1cdbd2cSJim Jagielski #include <soldep/objwin.hxx>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #include "math.h"
35*b1cdbd2cSJim Jagielski #include "time.h"
36*b1cdbd2cSJim Jagielski #include "stdlib.h"
37*b1cdbd2cSJim Jagielski #include "dtsodcmp.hrc"
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski #define MIN(a,b) (a)<(b)?(a):(b)
42*b1cdbd2cSJim Jagielski #define MAX(a,b) (a)>(b)?(a):(b)
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski ByteString sDelimiterLine("#==========================================================================");
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski 
Depper(Window * pBaseWindow)49*b1cdbd2cSJim Jagielski Depper::Depper( Window* pBaseWindow ):
50*b1cdbd2cSJim Jagielski 	Window( pBaseWindow ),
51*b1cdbd2cSJim Jagielski     mbIsPrjView(sal_False),
52*b1cdbd2cSJim Jagielski 	maDefPos( 50, 50 ),
53*b1cdbd2cSJim Jagielski 	maDefSize( 60, 25 ),
54*b1cdbd2cSJim Jagielski 	mnViewMask( 1 ),
55*b1cdbd2cSJim Jagielski 	pSubBar( NULL ),
56*b1cdbd2cSJim Jagielski 	pMainBar( NULL ),
57*b1cdbd2cSJim Jagielski 	pSubText( NULL ),
58*b1cdbd2cSJim Jagielski 	pMainText( NULL ),
59*b1cdbd2cSJim Jagielski     maArrangeDlg( pBaseWindow ),
60*b1cdbd2cSJim Jagielski     mpPrjIdMapper( NULL ),
61*b1cdbd2cSJim Jagielski 	maToolBox( pBaseWindow, DtSodResId(TID_SOLDEP_MAIN) ),
62*b1cdbd2cSJim Jagielski     maTaskBarFrame( pBaseWindow, 0)
63*b1cdbd2cSJim Jagielski {
64*b1cdbd2cSJim Jagielski     maArrangeDlg.Hide();
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski 	mpProcessWin = pBaseWindow;
67*b1cdbd2cSJim Jagielski 	mpGraphWin = new GraphWin( mpProcessWin, this );
68*b1cdbd2cSJim Jagielski     mpGraphPrjWin = new GraphWin( mpProcessWin, this );
69*b1cdbd2cSJim Jagielski     //mpBaseWin paints into virtual OutputDevice
70*b1cdbd2cSJim Jagielski 	mpBaseWin = new DepWin( mpGraphWin->GetBufferWindow(), WB_NOBORDER | WB_SIZEABLE | WB_AUTOSIZE );
71*b1cdbd2cSJim Jagielski     mpBasePrjWin = new DepWin( mpGraphPrjWin->GetBufferWindow(), WB_NOBORDER | WB_SIZEABLE | WB_AUTOSIZE );
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski     mpGraphWin->SetBackground( Wallpaper( Color( COL_RED )));
74*b1cdbd2cSJim Jagielski     mpGraphPrjWin->SetBackground( Wallpaper( Color( COL_BLUE )));
75*b1cdbd2cSJim Jagielski 	mpGraphPrjWin->Hide();
76*b1cdbd2cSJim Jagielski     mpBaseWin->SetBackground( Wallpaper( Color( COL_WHITE )));
77*b1cdbd2cSJim Jagielski     mpBasePrjWin->SetBackground( Wallpaper( Color( COL_LIGHTGRAY )));
78*b1cdbd2cSJim Jagielski /*
79*b1cdbd2cSJim Jagielski 	mpGraphWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST );
80*b1cdbd2cSJim Jagielski     mpGraphPrjWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST );
81*b1cdbd2cSJim Jagielski 	mpBaseWin->SetZOrder( NULL, WINDOW_ZORDER_FIRST );
82*b1cdbd2cSJim Jagielski */
83*b1cdbd2cSJim Jagielski 	mpGraphWin->EnableClipSiblings();
84*b1cdbd2cSJim Jagielski     mpGraphPrjWin->EnableClipSiblings();
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski     mpParentProcessWin = mpProcessWin->GetParent();
87*b1cdbd2cSJim Jagielski 	mpBaseWin->Show();
88*b1cdbd2cSJim Jagielski 	nZoomed = 0;
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 	mpBaseWin->SetPopupHdl( this );
91*b1cdbd2cSJim Jagielski     mpBasePrjWin->SetPopupHdl( this );
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski     mpObjectList = new ObjectList(); //ObjectList unbekannt
94*b1cdbd2cSJim Jagielski     mpObjectPrjList = new ObjectList();
95*b1cdbd2cSJim Jagielski }
96*b1cdbd2cSJim Jagielski 
~Depper()97*b1cdbd2cSJim Jagielski Depper::~Depper()
98*b1cdbd2cSJim Jagielski {
99*b1cdbd2cSJim Jagielski //	delete mpObjectList;
100*b1cdbd2cSJim Jagielski 	delete mpBaseWin;
101*b1cdbd2cSJim Jagielski 	delete mpGraphWin;
102*b1cdbd2cSJim Jagielski }
103*b1cdbd2cSJim Jagielski 
TogglePrjViewStatus()104*b1cdbd2cSJim Jagielski sal_Bool Depper::TogglePrjViewStatus()
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski     GetDepWin()->Hide();            //Hide old content window
107*b1cdbd2cSJim Jagielski 	GetGraphWin()->Hide();
108*b1cdbd2cSJim Jagielski     mbIsPrjView = !mbIsPrjView;     //switch now
109*b1cdbd2cSJim Jagielski 	GetDepWin()->Invalidate();
110*b1cdbd2cSJim Jagielski 	GetGraphWin()->Show();
111*b1cdbd2cSJim Jagielski     GetDepWin()->Show();            //Show new content window
112*b1cdbd2cSJim Jagielski     return mbIsPrjView;
113*b1cdbd2cSJim Jagielski }
114*b1cdbd2cSJim Jagielski 
HideObjectsAndConnections(ObjectList * pObjLst)115*b1cdbd2cSJim Jagielski void Depper::HideObjectsAndConnections( ObjectList* pObjLst )
116*b1cdbd2cSJim Jagielski {
117*b1cdbd2cSJim Jagielski 	for ( sal_uIntPtr i = 0; i < pObjLst->Count(); i ++ ) {
118*b1cdbd2cSJim Jagielski 		ObjectWin *pWin = pObjLst->GetObject( i );
119*b1cdbd2cSJim Jagielski 		pWin->Hide();
120*b1cdbd2cSJim Jagielski 	}
121*b1cdbd2cSJim Jagielski     mpGraphWin->Hide();
122*b1cdbd2cSJim Jagielski     mpBaseWin->Hide();
123*b1cdbd2cSJim Jagielski     mpGraphPrjWin->Show();
124*b1cdbd2cSJim Jagielski     mpBasePrjWin->Show();
125*b1cdbd2cSJim Jagielski }
126*b1cdbd2cSJim Jagielski 
ShowObjectsAndConnections(ObjectList * pObjLst)127*b1cdbd2cSJim Jagielski void Depper::ShowObjectsAndConnections( ObjectList* pObjLst )
128*b1cdbd2cSJim Jagielski {
129*b1cdbd2cSJim Jagielski 	for ( sal_uIntPtr i = 0; i < pObjLst->Count(); i ++ ) {
130*b1cdbd2cSJim Jagielski 		ObjectWin *pWin = pObjLst->GetObject( i );
131*b1cdbd2cSJim Jagielski 		pWin->Show();
132*b1cdbd2cSJim Jagielski 	}
133*b1cdbd2cSJim Jagielski     mpBasePrjWin->Hide();
134*b1cdbd2cSJim Jagielski     mpGraphPrjWin->Hide();
135*b1cdbd2cSJim Jagielski     mpGraphWin->Show();
136*b1cdbd2cSJim Jagielski     mpBaseWin->Show();
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 
RemoveAllObjects(ObjectList * pObjLst)140*b1cdbd2cSJim Jagielski void Depper::RemoveAllObjects( ObjectList* pObjLst )
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski 	sal_uIntPtr i;
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski 	for ( i = pObjLst->Count(); i > 0; i-- )
145*b1cdbd2cSJim Jagielski 		delete pObjLst->GetObject( i - 1 );
146*b1cdbd2cSJim Jagielski 	pObjLst->Clear();
147*b1cdbd2cSJim Jagielski }
148*b1cdbd2cSJim Jagielski 
Save(const ByteString & rFileName)149*b1cdbd2cSJim Jagielski sal_uInt16 Depper::Save( const ByteString& rFileName )
150*b1cdbd2cSJim Jagielski {
151*b1cdbd2cSJim Jagielski 	DBG_ASSERT( sal_False , "you are dead!" );
152*b1cdbd2cSJim Jagielski 	SvFileStream aOutFile( String( rFileName, RTL_TEXTENCODING_UTF8 ), STREAM_WRITE );
153*b1cdbd2cSJim Jagielski 	depper_head dh;
154*b1cdbd2cSJim Jagielski 	sal_uInt16 i;
155*b1cdbd2cSJim Jagielski 	sal_uIntPtr nObjCount = mpObjectList->Count();
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 	ConnectorList* pConList = GetDepWin()->GetConnectorList();
158*b1cdbd2cSJim Jagielski 	sal_uIntPtr nCnctrCount = pConList->Count();
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 	dh.nID = DEPPER_ID;
161*b1cdbd2cSJim Jagielski 	dh.nObjectCount = nObjCount;
162*b1cdbd2cSJim Jagielski 	dh.nCnctrCount = nCnctrCount;
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 	aOutFile.Write( &dh, sizeof( dh ));
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 	for ( i=0; i < nObjCount ; i++ )
167*b1cdbd2cSJim Jagielski 	{
168*b1cdbd2cSJim Jagielski 		mpObjectList->GetObject( i )->Save( aOutFile );
169*b1cdbd2cSJim Jagielski 	}
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski 	for ( i=0; i < nCnctrCount ; i++ )
172*b1cdbd2cSJim Jagielski 	{
173*b1cdbd2cSJim Jagielski 		pConList->GetObject( i )->Save( aOutFile );
174*b1cdbd2cSJim Jagielski 	}
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 	return 0;
177*b1cdbd2cSJim Jagielski }
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 
WriteSource()180*b1cdbd2cSJim Jagielski sal_uInt16	Depper::WriteSource()
181*b1cdbd2cSJim Jagielski {
182*b1cdbd2cSJim Jagielski 	DBG_ASSERT( sal_False , "overload it!" );
183*b1cdbd2cSJim Jagielski 	return 0;
184*b1cdbd2cSJim Jagielski };
185*b1cdbd2cSJim Jagielski 
ReadSource(sal_Bool bUpdater)186*b1cdbd2cSJim Jagielski sal_uInt16	Depper::ReadSource( sal_Bool bUpdater )
187*b1cdbd2cSJim Jagielski {
188*b1cdbd2cSJim Jagielski 	DBG_ASSERT( sal_False , "overload it!" );
189*b1cdbd2cSJim Jagielski 	return 0;
190*b1cdbd2cSJim Jagielski };
191*b1cdbd2cSJim Jagielski 
OpenSource()192*b1cdbd2cSJim Jagielski sal_uInt16	Depper::OpenSource()
193*b1cdbd2cSJim Jagielski {
194*b1cdbd2cSJim Jagielski 	DBG_ASSERT( sal_False , "overload it!" );
195*b1cdbd2cSJim Jagielski 	return 0;
196*b1cdbd2cSJim Jagielski };
197*b1cdbd2cSJim Jagielski 
ObjIdToPtr(ObjectList * pObjLst,sal_uIntPtr nId)198*b1cdbd2cSJim Jagielski ObjectWin* Depper::ObjIdToPtr( ObjectList* pObjLst, sal_uIntPtr nId )
199*b1cdbd2cSJim Jagielski {
200*b1cdbd2cSJim Jagielski 	sal_uIntPtr nObjCount = pObjLst->Count();
201*b1cdbd2cSJim Jagielski 	sal_uIntPtr i = 0;
202*b1cdbd2cSJim Jagielski 	ObjectWin* pWin;
203*b1cdbd2cSJim Jagielski     sal_uIntPtr nWinId = 0;
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski 	do
206*b1cdbd2cSJim Jagielski 	{
207*b1cdbd2cSJim Jagielski 		pWin = pObjLst->GetObject( i );
208*b1cdbd2cSJim Jagielski         nWinId = pWin->GetId();
209*b1cdbd2cSJim Jagielski 		i++;
210*b1cdbd2cSJim Jagielski 	}
211*b1cdbd2cSJim Jagielski 	while( i < nObjCount && pWin->GetId() != nId );
212*b1cdbd2cSJim Jagielski 	if ( pWin->GetId() == nId )
213*b1cdbd2cSJim Jagielski 		return pWin;
214*b1cdbd2cSJim Jagielski 	else
215*b1cdbd2cSJim Jagielski 		return NULL;
216*b1cdbd2cSJim Jagielski }
217*b1cdbd2cSJim Jagielski 
SetMainProgressBar(sal_uInt16 i)218*b1cdbd2cSJim Jagielski void Depper::SetMainProgressBar( sal_uInt16 i)
219*b1cdbd2cSJim Jagielski {
220*b1cdbd2cSJim Jagielski     if ( pMainBar ) {
221*b1cdbd2cSJim Jagielski 		pMainBar->SetValue( 100 );
222*b1cdbd2cSJim Jagielski 		pMainBar->Update();
223*b1cdbd2cSJim Jagielski 	}
224*b1cdbd2cSJim Jagielski }
225*b1cdbd2cSJim Jagielski 
UpdateMainProgressBar(sal_uInt16 i,sal_uInt16 nScaleVal,sal_uInt16 & nStep,sal_Bool bCountingDown)226*b1cdbd2cSJim Jagielski void Depper::UpdateMainProgressBar(sal_uInt16 i, sal_uInt16 nScaleVal, sal_uInt16 &nStep, sal_Bool bCountingDown )
227*b1cdbd2cSJim Jagielski {
228*b1cdbd2cSJim Jagielski     sal_uIntPtr val = 0;
229*b1cdbd2cSJim Jagielski     if ( pMainBar ) {
230*b1cdbd2cSJim Jagielski  //       val = i * 50 / nScaleVal + 1;
231*b1cdbd2cSJim Jagielski         val = bCountingDown ? 50 + ( nScaleVal - i ) * 50 / nScaleVal : i * 50 / nScaleVal;
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski         pMainBar->SetValue( val );
234*b1cdbd2cSJim Jagielski 		pMainBar->Update();
235*b1cdbd2cSJim Jagielski 		String sText( String::CreateFromAscii( "Optimize step " ));
236*b1cdbd2cSJim Jagielski 		sText += String::CreateFromInt32( ++nStep );
237*b1cdbd2cSJim Jagielski 		pSubText->SetText( sText );
238*b1cdbd2cSJim Jagielski 	}
239*b1cdbd2cSJim Jagielski }
240*b1cdbd2cSJim Jagielski 
UpdateSubProgrssBar(sal_uIntPtr i)241*b1cdbd2cSJim Jagielski void Depper::UpdateSubProgrssBar(sal_uIntPtr i)
242*b1cdbd2cSJim Jagielski {
243*b1cdbd2cSJim Jagielski     if ( pSubBar )
244*b1cdbd2cSJim Jagielski     {
245*b1cdbd2cSJim Jagielski 		pSubBar->SetValue( i );
246*b1cdbd2cSJim Jagielski 		pSubBar->Update();
247*b1cdbd2cSJim Jagielski 		GetpApp()->Reschedule();
248*b1cdbd2cSJim Jagielski 	}
249*b1cdbd2cSJim Jagielski }
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 
AutoArrangeDlgStart()252*b1cdbd2cSJim Jagielski sal_uInt16 Depper::AutoArrangeDlgStart()
253*b1cdbd2cSJim Jagielski {
254*b1cdbd2cSJim Jagielski 	pSubBar = maArrangeDlg.GetSubBar();
255*b1cdbd2cSJim Jagielski 	pMainBar = maArrangeDlg.GetMainBar();
256*b1cdbd2cSJim Jagielski 	pSubText = maArrangeDlg.GetSubText();
257*b1cdbd2cSJim Jagielski 	pMainText = maArrangeDlg.GetMainText();
258*b1cdbd2cSJim Jagielski 	pMainText->SetText( String::CreateFromAscii( "Overall status" ));
259*b1cdbd2cSJim Jagielski     maArrangeDlg.Show();
260*b1cdbd2cSJim Jagielski 	GetDepWin()->Enable( sal_False );
261*b1cdbd2cSJim Jagielski     GetDepWin()->Hide();
262*b1cdbd2cSJim Jagielski 	return 0;
263*b1cdbd2cSJim Jagielski }
264*b1cdbd2cSJim Jagielski 
AutoArrangeDlgStop()265*b1cdbd2cSJim Jagielski sal_uInt16 Depper::AutoArrangeDlgStop()
266*b1cdbd2cSJim Jagielski {
267*b1cdbd2cSJim Jagielski     maArrangeDlg.Hide();
268*b1cdbd2cSJim Jagielski     GetDepWin()->Enable( sal_True );
269*b1cdbd2cSJim Jagielski     GetDepWin()->Show();
270*b1cdbd2cSJim Jagielski 	pSubBar = NULL;
271*b1cdbd2cSJim Jagielski 	pMainBar = NULL;
272*b1cdbd2cSJim Jagielski 	pSubText = NULL;
273*b1cdbd2cSJim Jagielski 	pMainText = NULL;
274*b1cdbd2cSJim Jagielski 	return 0;
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski 
Zoom(MapMode & rMapMode)279*b1cdbd2cSJim Jagielski sal_uInt16 Depper::Zoom( MapMode& rMapMode )
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski 	sal_uIntPtr i;
282*b1cdbd2cSJim Jagielski 	ObjectWin* pWin;
283*b1cdbd2cSJim Jagielski 	Point aPos;
284*b1cdbd2cSJim Jagielski 	Size aSize;
285*b1cdbd2cSJim Jagielski     ObjectList* pObjList;
286*b1cdbd2cSJim Jagielski     pObjList = GetObjectList();
287*b1cdbd2cSJim Jagielski //	aSize = mpBaseWin->GetSizePixel();
288*b1cdbd2cSJim Jagielski //	mpGraphWin->SetTotalSize( aSize );
289*b1cdbd2cSJim Jagielski //	mpGraphWin->EndScroll( 0, 0 );
290*b1cdbd2cSJim Jagielski 
291*b1cdbd2cSJim Jagielski 	for ( i = pObjList->Count(); i > 0; i-- )
292*b1cdbd2cSJim Jagielski 	{
293*b1cdbd2cSJim Jagielski 		pWin = pObjList->GetObject( i - 1 );
294*b1cdbd2cSJim Jagielski 		aPos = pWin->PixelToLogic( pWin->GetPosPixel());
295*b1cdbd2cSJim Jagielski 		aSize = pWin->PixelToLogic( pWin->GetSizePixel());
296*b1cdbd2cSJim Jagielski 		pWin->SetMapMode( rMapMode );
297*b1cdbd2cSJim Jagielski 		aPos = pWin->LogicToPixel( aPos );
298*b1cdbd2cSJim Jagielski 		aSize = pWin->LogicToPixel( aSize );
299*b1cdbd2cSJim Jagielski 		pWin->SetPosSizePixel( aPos, aSize );
300*b1cdbd2cSJim Jagielski 	}
301*b1cdbd2cSJim Jagielski 	GetDepWin()->Invalidate();
302*b1cdbd2cSJim Jagielski 	return 0;
303*b1cdbd2cSJim Jagielski }
304*b1cdbd2cSJim Jagielski 
AddObjectToList(DepWin * pParentWin,ObjectList * pObjLst,sal_uIntPtr & LastID,sal_uIntPtr & WinCount,ByteString & rBodyText,sal_Bool bInteract)305*b1cdbd2cSJim Jagielski sal_uIntPtr Depper::AddObjectToList( DepWin* pParentWin, ObjectList* pObjLst, sal_uIntPtr &LastID, sal_uIntPtr &WinCount, ByteString& rBodyText, sal_Bool bInteract )
306*b1cdbd2cSJim Jagielski {
307*b1cdbd2cSJim Jagielski 	Point aPos;
308*b1cdbd2cSJim Jagielski 	Size aSize = GetDefSize();
309*b1cdbd2cSJim Jagielski 
310*b1cdbd2cSJim Jagielski 	aPos = GetDepWin()->LogicToPixel( aPos );
311*b1cdbd2cSJim Jagielski 	aSize = GetDepWin()->LogicToPixel( aSize );
312*b1cdbd2cSJim Jagielski 	return AddObjectToList( pParentWin, pObjLst, LastID, WinCount, rBodyText, aPos, aSize );
313*b1cdbd2cSJim Jagielski }
314*b1cdbd2cSJim Jagielski 
AddObjectToList(DepWin * pParentWin,ObjectList * pObjLst,sal_uIntPtr & LastID,sal_uIntPtr & WinCount,ByteString & rBodyText,Point & rPos,Size & rSize)315*b1cdbd2cSJim Jagielski sal_uIntPtr Depper::AddObjectToList( DepWin* pParentWin, ObjectList* pObjLst, sal_uIntPtr &LastID, sal_uIntPtr &WinCount, ByteString& rBodyText, Point& rPos, Size& rSize )
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski 	ObjectWin* pWin = new ObjectWin( pParentWin, WB_BORDER );
318*b1cdbd2cSJim Jagielski 	//pWin->mpDepperDontuseme = this;
319*b1cdbd2cSJim Jagielski 	pWin->SetGlobalViewMask(mnViewMask);	// Set ViewMask for all ObjectWin and Connector objects
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski 	Size aNewSize;
322*b1cdbd2cSJim Jagielski 	aNewSize.Width() = pWin->GetTextWidth( String( rBodyText, RTL_TEXTENCODING_UTF8 ));
323*b1cdbd2cSJim Jagielski 	aNewSize.Height() = pWin->GetTextHeight();
324*b1cdbd2cSJim Jagielski 	if ( aNewSize.Width() > rSize.Width() - 8 )
325*b1cdbd2cSJim Jagielski 	{
326*b1cdbd2cSJim Jagielski 		aNewSize.Width() = aNewSize.Width() + 8;
327*b1cdbd2cSJim Jagielski 		aNewSize.Height() = rSize.Height();
328*b1cdbd2cSJim Jagielski 	}
329*b1cdbd2cSJim Jagielski 	else
330*b1cdbd2cSJim Jagielski 		aNewSize = rSize;
331*b1cdbd2cSJim Jagielski 	pWin->SetPosSizePixel( rPos,aNewSize);
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski 	MapMode aMapMode = mpBaseWin->GetMapMode();
334*b1cdbd2cSJim Jagielski 	pWin->SetMapMode( aMapMode );
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski 	pObjLst->Insert( pWin, LIST_APPEND );
337*b1cdbd2cSJim Jagielski 	pWin->SetId( LastID );
338*b1cdbd2cSJim Jagielski 	LastID++;
339*b1cdbd2cSJim Jagielski 	WinCount++;
340*b1cdbd2cSJim Jagielski 	pWin->SetBodyText( rBodyText );
341*b1cdbd2cSJim Jagielski //	pWin->Show();
342*b1cdbd2cSJim Jagielski 	return pWin->GetId();
343*b1cdbd2cSJim Jagielski }
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski /*void Depper::DrawOutput( OutputDevice* pDevice )
346*b1cdbd2cSJim Jagielski {
347*b1cdbd2cSJim Jagielski 	GetDepWin()->DrawOutput( pDevice );
348*b1cdbd2cSJim Jagielski 	ObjectList* pObjList = GetObjectList();
349*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = pObjList->Count(); i > 0; i-- )
350*b1cdbd2cSJim Jagielski 	{
351*b1cdbd2cSJim Jagielski 		ObjectWin* pWin = pObjList->GetObject( i - 1 );
352*b1cdbd2cSJim Jagielski 		pWin->DrawOutput( pDevice );
353*b1cdbd2cSJim Jagielski 	}
354*b1cdbd2cSJim Jagielski }*/
355*b1cdbd2cSJim Jagielski 
RemoveObjectFromList(ObjectList * pObjLst,sal_uIntPtr & WinCount,sal_uInt16 nId,sal_Bool bDelete)356*b1cdbd2cSJim Jagielski ObjectWin* Depper::RemoveObjectFromList( ObjectList* pObjLst, sal_uIntPtr &WinCount, sal_uInt16 nId, sal_Bool bDelete )
357*b1cdbd2cSJim Jagielski {
358*b1cdbd2cSJim Jagielski 	ObjectWin* pWin = ObjIdToPtr( pObjLst, nId );
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski 	if ( pWin )
361*b1cdbd2cSJim Jagielski 	{
362*b1cdbd2cSJim Jagielski 		pObjLst->Remove( pWin );
363*b1cdbd2cSJim Jagielski 		WinCount--;
364*b1cdbd2cSJim Jagielski 		if( bDelete )
365*b1cdbd2cSJim Jagielski 			delete pWin;
366*b1cdbd2cSJim Jagielski 		return pWin;
367*b1cdbd2cSJim Jagielski 	}
368*b1cdbd2cSJim Jagielski 	else
369*b1cdbd2cSJim Jagielski 		return NULL;
370*b1cdbd2cSJim Jagielski }
AddConnectorToObjects(ObjectList * pObjLst,sal_uIntPtr nStartId,sal_uIntPtr nEndId)371*b1cdbd2cSJim Jagielski sal_uInt16 Depper::AddConnectorToObjects( ObjectList* pObjLst, sal_uIntPtr nStartId, sal_uIntPtr nEndId )
372*b1cdbd2cSJim Jagielski {
373*b1cdbd2cSJim Jagielski 	ObjectWin* pStartWin = ObjIdToPtr( pObjLst, nStartId );
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski 	if ( !pStartWin )
376*b1cdbd2cSJim Jagielski 		return DEP_STARTID_NOT_FOUND;
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 	ObjectWin* pEndWin = ObjIdToPtr( pObjLst, nEndId );
379*b1cdbd2cSJim Jagielski 
380*b1cdbd2cSJim Jagielski 	if ( !pEndWin )
381*b1cdbd2cSJim Jagielski 		return DEP_STARTID_NOT_FOUND;
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski 	return AddConnectorToObjects( pStartWin, pEndWin );
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski 
RemoveConnectorFromObjects(ObjectList * pObjLst,sal_uIntPtr nStartId,sal_uIntPtr nEndId)386*b1cdbd2cSJim Jagielski sal_uInt16 Depper::RemoveConnectorFromObjects( ObjectList* pObjLst, sal_uIntPtr nStartId, sal_uIntPtr nEndId )
387*b1cdbd2cSJim Jagielski {
388*b1cdbd2cSJim Jagielski //	DBG_ASSERT( FALSE , "noch nicht" );
389*b1cdbd2cSJim Jagielski 	ObjectWin* pStartWin = ObjIdToPtr( pObjLst, nStartId );
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski 	if ( !pStartWin )
392*b1cdbd2cSJim Jagielski 		return DEP_STARTID_NOT_FOUND;
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski 	ObjectWin* pEndWin = ObjIdToPtr( pObjLst, nEndId );
395*b1cdbd2cSJim Jagielski 
396*b1cdbd2cSJim Jagielski 	if ( !pEndWin )
397*b1cdbd2cSJim Jagielski 		return DEP_STARTID_NOT_FOUND;
398*b1cdbd2cSJim Jagielski 
399*b1cdbd2cSJim Jagielski 	return RemoveConnectorFromObjects( pStartWin, pEndWin );
400*b1cdbd2cSJim Jagielski }
401*b1cdbd2cSJim Jagielski 
AddConnectorToObjects(ObjectWin * pStartWin,ObjectWin * pEndWin)402*b1cdbd2cSJim Jagielski sal_uInt16 Depper::AddConnectorToObjects( ObjectWin* pStartWin, ObjectWin* pEndWin )
403*b1cdbd2cSJim Jagielski {
404*b1cdbd2cSJim Jagielski 	if ( pStartWin->ConnectionExistsInAnyDirection( pEndWin ))
405*b1cdbd2cSJim Jagielski 		return 0;
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski 	Connector* pCon = new Connector( GetDepWin(), WB_NOBORDER );
408*b1cdbd2cSJim Jagielski //	pCon->Initialize( pStartWin, pEndWin );
409*b1cdbd2cSJim Jagielski 	if (pStartWin->IsNullObject()) //null_project
410*b1cdbd2cSJim Jagielski         pCon->Initialize( pStartWin, pEndWin, sal_False );
411*b1cdbd2cSJim Jagielski     else
412*b1cdbd2cSJim Jagielski         pCon->Initialize( pStartWin, pEndWin, sal_True );
413*b1cdbd2cSJim Jagielski 	return 0;
414*b1cdbd2cSJim Jagielski }
415*b1cdbd2cSJim Jagielski 
RemoveConnectorFromObjects(ObjectWin * pStartWin,ObjectWin * pEndWin)416*b1cdbd2cSJim Jagielski sal_uInt16 Depper::RemoveConnectorFromObjects( ObjectWin* pStartWin, ObjectWin* pEndWin )
417*b1cdbd2cSJim Jagielski {
418*b1cdbd2cSJim Jagielski 	Connector* pCon = pStartWin->GetConnector( pStartWin->GetId(), pEndWin->GetId() );
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski 	if ( !pCon )
421*b1cdbd2cSJim Jagielski 		return DEP_CONNECTOR_NOT_FOUND;
422*b1cdbd2cSJim Jagielski 	else
423*b1cdbd2cSJim Jagielski 	{
424*b1cdbd2cSJim Jagielski 		delete pCon;
425*b1cdbd2cSJim Jagielski 		return DEP_OK;
426*b1cdbd2cSJim Jagielski 	}
427*b1cdbd2cSJim Jagielski }
428*b1cdbd2cSJim Jagielski 
HandleNewPrjDialog(ByteString & rBodyText)429*b1cdbd2cSJim Jagielski sal_uIntPtr Depper::HandleNewPrjDialog( ByteString &rBodyText )
430*b1cdbd2cSJim Jagielski {
431*b1cdbd2cSJim Jagielski         SolNewProjectDlg aNewProjectDlg( GetDepWin(), DtSodResId( RID_SD_DIALOG_NEWPROJECT ));
432*b1cdbd2cSJim Jagielski 		if ( aNewProjectDlg.Execute() )
433*b1cdbd2cSJim Jagielski 		{
434*b1cdbd2cSJim Jagielski 			rBodyText = ByteString( aNewProjectDlg.maEName.GetText(), RTL_TEXTENCODING_UTF8);
435*b1cdbd2cSJim Jagielski //hashtable auf stand halten
436*b1cdbd2cSJim Jagielski 			MyHashObject* pHObject;
437*b1cdbd2cSJim Jagielski 			sal_uIntPtr nObjectId = AddObjectToList( mpBaseWin, mpObjectList, mnSolLastId, mnSolWinCount, rBodyText, sal_False );
438*b1cdbd2cSJim Jagielski 			pHObject = new MyHashObject( nObjectId, ObjIdToPtr( mpObjectList, nObjectId ));
439*b1cdbd2cSJim Jagielski 			mpSolIdMapper->Insert( rBodyText, pHObject );
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski 			ByteString sTokenLine( aNewProjectDlg.maEShort.GetText(), RTL_TEXTENCODING_UTF8 );
442*b1cdbd2cSJim Jagielski 			sTokenLine += '\t';
443*b1cdbd2cSJim Jagielski 			sTokenLine += ByteString( aNewProjectDlg.maEName.GetText(), RTL_TEXTENCODING_UTF8 );
444*b1cdbd2cSJim Jagielski 			sTokenLine += "\t:\t";
445*b1cdbd2cSJim Jagielski 
446*b1cdbd2cSJim Jagielski 			ByteString sDeps = ByteString( aNewProjectDlg.maEDeps.GetText(), RTL_TEXTENCODING_UTF8 );
447*b1cdbd2cSJim Jagielski 
448*b1cdbd2cSJim Jagielski 			if ( sDeps != "" )
449*b1cdbd2cSJim Jagielski 			{
450*b1cdbd2cSJim Jagielski 				sal_uInt16 i;
451*b1cdbd2cSJim Jagielski 				ByteString sDepName;
452*b1cdbd2cSJim Jagielski 				sal_uInt16 nToken = sDeps.GetTokenCount(' ');
453*b1cdbd2cSJim Jagielski 				for ( i = 0 ; i < nToken ; i++)
454*b1cdbd2cSJim Jagielski 				{
455*b1cdbd2cSJim Jagielski 					sDepName =  sDeps.GetToken( i, ' ' );
456*b1cdbd2cSJim Jagielski 					sTokenLine += sDepName;
457*b1cdbd2cSJim Jagielski 					sTokenLine +='\t';
458*b1cdbd2cSJim Jagielski 				}
459*b1cdbd2cSJim Jagielski 			}
460*b1cdbd2cSJim Jagielski 			sTokenLine +="NULL";
461*b1cdbd2cSJim Jagielski 
462*b1cdbd2cSJim Jagielski 			mpStarWriter->InsertTokenLine( sTokenLine );
463*b1cdbd2cSJim Jagielski 			mpStarWriter->InsertTokenLine( sDelimiterLine );
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 			if ( sDeps != "" )
466*b1cdbd2cSJim Jagielski 			{
467*b1cdbd2cSJim Jagielski 				sal_uInt16 i;
468*b1cdbd2cSJim Jagielski 				ByteString sDepName;
469*b1cdbd2cSJim Jagielski 				sal_uIntPtr nObjectId_l, nHashedId;
470*b1cdbd2cSJim Jagielski 				MyHashObject* pHObject_l;
471*b1cdbd2cSJim Jagielski 				sal_uInt16 nToken = sDeps.GetTokenCount(' ');
472*b1cdbd2cSJim Jagielski 				for ( i = 0 ; i < nToken ; i++)
473*b1cdbd2cSJim Jagielski 				{
474*b1cdbd2cSJim Jagielski 					sDepName =  sDeps.GetToken( i, ' ' );
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski 					pHObject_l = mpSolIdMapper->Find( sDepName );
477*b1cdbd2cSJim Jagielski 					if ( !pHObject_l )
478*b1cdbd2cSJim Jagielski 					{
479*b1cdbd2cSJim Jagielski 						String sMessage;
480*b1cdbd2cSJim Jagielski 						sMessage += String::CreateFromAscii("can't find ");
481*b1cdbd2cSJim Jagielski 						sMessage += String( sDepName, RTL_TEXTENCODING_UTF8 );
482*b1cdbd2cSJim Jagielski 						sMessage += String::CreateFromAscii(".\ndependency ignored");
483*b1cdbd2cSJim Jagielski 						WarningBox aBox( GetDepWin(), WB_OK, sMessage);
484*b1cdbd2cSJim Jagielski 						aBox.Execute();
485*b1cdbd2cSJim Jagielski 					}
486*b1cdbd2cSJim Jagielski 					else
487*b1cdbd2cSJim Jagielski 					{
488*b1cdbd2cSJim Jagielski 						nHashedId = pHObject_l->GetId();
489*b1cdbd2cSJim Jagielski 						pHObject_l = mpSolIdMapper->Find( rBodyText );
490*b1cdbd2cSJim Jagielski 						nObjectId_l = pHObject_l->GetId();
491*b1cdbd2cSJim Jagielski 						AddConnectorToObjects( mpObjectList, nHashedId, nObjectId_l );
492*b1cdbd2cSJim Jagielski 					}
493*b1cdbd2cSJim Jagielski 				}
494*b1cdbd2cSJim Jagielski 			}
495*b1cdbd2cSJim Jagielski 			return nObjectId;
496*b1cdbd2cSJim Jagielski 		}
497*b1cdbd2cSJim Jagielski 		return 0;
498*b1cdbd2cSJim Jagielski }
499*b1cdbd2cSJim Jagielski 
HandleNewDirectoryDialog(ByteString & rBodyText)500*b1cdbd2cSJim Jagielski sal_uIntPtr Depper::HandleNewDirectoryDialog(ByteString &rBodyText)
501*b1cdbd2cSJim Jagielski {
502*b1cdbd2cSJim Jagielski 		SolNewDirectoryDlg aNewDirectoryDlg( GetDepWin(), DtSodResId( RID_SD_DIALOG_NEWDIRECTORY ));
503*b1cdbd2cSJim Jagielski //todo: set defaults
504*b1cdbd2cSJim Jagielski 		if ( aNewDirectoryDlg.Execute() )
505*b1cdbd2cSJim Jagielski 		{
506*b1cdbd2cSJim Jagielski 			rBodyText = ByteString( aNewDirectoryDlg.maEFlag.GetText(), RTL_TEXTENCODING_UTF8 );
507*b1cdbd2cSJim Jagielski //hashtable auf stand halten
508*b1cdbd2cSJim Jagielski 			MyHashObject* pHObject;
509*b1cdbd2cSJim Jagielski 			sal_uIntPtr nObjectId = AddObjectToList( GetDepWin(), mpObjectPrjList, mnSolLastId, mnSolWinCount, rBodyText );
510*b1cdbd2cSJim Jagielski 			pHObject = new MyHashObject( nObjectId, ObjIdToPtr( mpObjectPrjList, nObjectId ));
511*b1cdbd2cSJim Jagielski 			mpPrjIdMapper->Insert( rBodyText, pHObject ); // mpPrjIdMapper
512*b1cdbd2cSJim Jagielski 
513*b1cdbd2cSJim Jagielski 			String sTokenLine;
514*b1cdbd2cSJim Jagielski 			sTokenLine = String( mpPrj->GetPreFix(), RTL_TEXTENCODING_UTF8 );
515*b1cdbd2cSJim Jagielski 			sTokenLine += '\t';
516*b1cdbd2cSJim Jagielski 			String sNameConvert = aNewDirectoryDlg.maEName.GetText();
517*b1cdbd2cSJim Jagielski 			sNameConvert.SearchAndReplaceAll( '/', '\\' );
518*b1cdbd2cSJim Jagielski 			if ( sNameConvert.GetToken( 0, 0x5c ) != String( mpPrj->GetProjectName(), RTL_TEXTENCODING_UTF8 ))
519*b1cdbd2cSJim Jagielski 			{
520*b1cdbd2cSJim Jagielski 				sTokenLine += String( mpPrj->GetProjectName(), RTL_TEXTENCODING_UTF8 );
521*b1cdbd2cSJim Jagielski 				sTokenLine += String("\\", RTL_TEXTENCODING_UTF8 );
522*b1cdbd2cSJim Jagielski 				sTokenLine += sNameConvert;
523*b1cdbd2cSJim Jagielski 			}
524*b1cdbd2cSJim Jagielski 			else
525*b1cdbd2cSJim Jagielski 				sTokenLine += sNameConvert;
526*b1cdbd2cSJim Jagielski 			sTokenLine += '\t';
527*b1cdbd2cSJim Jagielski 			sTokenLine += aNewDirectoryDlg.maEAction.GetText();
528*b1cdbd2cSJim Jagielski 			sTokenLine += String( "\t-\t", RTL_TEXTENCODING_UTF8 );
529*b1cdbd2cSJim Jagielski 			sTokenLine += aNewDirectoryDlg.maEEnv.GetText();
530*b1cdbd2cSJim Jagielski 			sTokenLine += '\t';
531*b1cdbd2cSJim Jagielski 			sTokenLine += aNewDirectoryDlg.maEFlag.GetText();
532*b1cdbd2cSJim Jagielski 			sTokenLine += '\t';
533*b1cdbd2cSJim Jagielski 
534*b1cdbd2cSJim Jagielski 			sTokenLine += String( "NULL", RTL_TEXTENCODING_UTF8 );
535*b1cdbd2cSJim Jagielski 
536*b1cdbd2cSJim Jagielski 			ByteString bsTokenLine = ByteString( sTokenLine, RTL_TEXTENCODING_UTF8 );
537*b1cdbd2cSJim Jagielski 			mpStarWriter->InsertTokenLine( bsTokenLine );
538*b1cdbd2cSJim Jagielski 
539*b1cdbd2cSJim Jagielski 			if ( aNewDirectoryDlg.maEDeps.GetText() != String( "", RTL_TEXTENCODING_UTF8 ))
540*b1cdbd2cSJim Jagielski 			{
541*b1cdbd2cSJim Jagielski 				sal_uInt16 i;
542*b1cdbd2cSJim Jagielski 				ByteString sDeps = ByteString( aNewDirectoryDlg.maEDeps.GetText(), RTL_TEXTENCODING_UTF8 );
543*b1cdbd2cSJim Jagielski 				ByteString sDepName;
544*b1cdbd2cSJim Jagielski 				sal_uIntPtr nObjectId_l, nHashedId;
545*b1cdbd2cSJim Jagielski 				MyHashObject* pHObject_l;
546*b1cdbd2cSJim Jagielski 				sal_uInt16 nToken = sDeps.GetTokenCount(' ');
547*b1cdbd2cSJim Jagielski 				for ( i = 0 ; i < nToken ; i++)
548*b1cdbd2cSJim Jagielski 				{
549*b1cdbd2cSJim Jagielski 					sDepName =  sDeps.GetToken( i, ' ' );
550*b1cdbd2cSJim Jagielski 
551*b1cdbd2cSJim Jagielski 					pHObject_l = mpPrjIdMapper->Find( sDepName ); // mpPrjIdMapper
552*b1cdbd2cSJim Jagielski 					if ( !pHObject_l )
553*b1cdbd2cSJim Jagielski 					{
554*b1cdbd2cSJim Jagielski 						String sMessage;
555*b1cdbd2cSJim Jagielski 						sMessage += String::CreateFromAscii("can't find ");
556*b1cdbd2cSJim Jagielski 						sMessage += String( sDepName, RTL_TEXTENCODING_UTF8 );
557*b1cdbd2cSJim Jagielski 						sMessage += String::CreateFromAscii(".\ndependency ignored");
558*b1cdbd2cSJim Jagielski 						WarningBox aBox( mpBaseWin, WB_OK, sMessage);
559*b1cdbd2cSJim Jagielski 						aBox.Execute();
560*b1cdbd2cSJim Jagielski 					}
561*b1cdbd2cSJim Jagielski 					else
562*b1cdbd2cSJim Jagielski 					{
563*b1cdbd2cSJim Jagielski 						sTokenLine += String( sDepName, RTL_TEXTENCODING_UTF8 );
564*b1cdbd2cSJim Jagielski 						sTokenLine +='\t';
565*b1cdbd2cSJim Jagielski 						nHashedId = pHObject_l->GetId();
566*b1cdbd2cSJim Jagielski 						pHObject_l = mpPrjIdMapper->Find( rBodyText ); // mpPrjIdMapper
567*b1cdbd2cSJim Jagielski 						nObjectId_l = pHObject_l->GetId();
568*b1cdbd2cSJim Jagielski 						AddConnectorToObjects( mpObjectPrjList, nHashedId, nObjectId_l );
569*b1cdbd2cSJim Jagielski 					}
570*b1cdbd2cSJim Jagielski 				}
571*b1cdbd2cSJim Jagielski 			}
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski 			if ( mpPrj->Count() > 1 )
574*b1cdbd2cSJim Jagielski 			{
575*b1cdbd2cSJim Jagielski 				CommandData* pData = mpPrj->GetObject( mpPrj->Count() - 1 );
576*b1cdbd2cSJim Jagielski 				pData = mpPrj->Replace( pData, mpPrj->Count() - 2 );
577*b1cdbd2cSJim Jagielski 				mpPrj->Replace( pData, mpPrj->Count() - 1 );
578*b1cdbd2cSJim Jagielski 			}
579*b1cdbd2cSJim Jagielski 
580*b1cdbd2cSJim Jagielski 			return nObjectId;
581*b1cdbd2cSJim Jagielski 		}
582*b1cdbd2cSJim Jagielski 		return 0;
583*b1cdbd2cSJim Jagielski }
584*b1cdbd2cSJim Jagielski 
585*b1cdbd2cSJim Jagielski // Context-Menue
IMPL_LINK(Depper,PopupSelected,PopupMenu *,mpPopup)586*b1cdbd2cSJim Jagielski IMPL_LINK( Depper, PopupSelected, PopupMenu*, mpPopup )
587*b1cdbd2cSJim Jagielski {
588*b1cdbd2cSJim Jagielski 	sal_uInt16 nItemId = mpPopup->GetCurItemId();
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski 	switch( nItemId )
591*b1cdbd2cSJim Jagielski 	{
592*b1cdbd2cSJim Jagielski 		case DEPPOPUP_NEW :
593*b1cdbd2cSJim Jagielski 				{
594*b1cdbd2cSJim Jagielski 					ByteString sNewItem = ByteString("new");
595*b1cdbd2cSJim Jagielski  					//AddObject( mpObjectList, sNewItem , sal_True );
596*b1cdbd2cSJim Jagielski 			 	}
597*b1cdbd2cSJim Jagielski 				break;
598*b1cdbd2cSJim Jagielski 		case DEPPOPUP_AUTOARRANGE :
599*b1cdbd2cSJim Jagielski 				//AutoArrange( mpObjectList, mpObjectList, GetStart(), 0 );
600*b1cdbd2cSJim Jagielski 				break;
601*b1cdbd2cSJim Jagielski 		case DEPPOPUP_LOAD :
602*b1cdbd2cSJim Jagielski 				//Load( ByteString("test.dep"));
603*b1cdbd2cSJim Jagielski 				break;
604*b1cdbd2cSJim Jagielski 		case DEPPOPUP_SAVE :
605*b1cdbd2cSJim Jagielski 				Save( ByteString("test.dep"));
606*b1cdbd2cSJim Jagielski 				break;
607*b1cdbd2cSJim Jagielski 		case DEPPOPUP_WRITE_SOURCE :
608*b1cdbd2cSJim Jagielski 				WriteSource();
609*b1cdbd2cSJim Jagielski 				break;
610*b1cdbd2cSJim Jagielski 		case DEPPOPUP_READ_SOURCE :
611*b1cdbd2cSJim Jagielski 				ReadSource(sal_True);
612*b1cdbd2cSJim Jagielski 				break;
613*b1cdbd2cSJim Jagielski 		case DEPPOPUP_OPEN_SOURCE :
614*b1cdbd2cSJim Jagielski 				OpenSource();
615*b1cdbd2cSJim Jagielski 				break;
616*b1cdbd2cSJim Jagielski 		case DEPPOPUP_ZOOMIN :
617*b1cdbd2cSJim Jagielski 		{
618*b1cdbd2cSJim Jagielski //			DBG_ASSERT( FALSE,"zoomin");
619*b1cdbd2cSJim Jagielski 				MapMode aMapMode = GetDepWin()->GetMapMode();
620*b1cdbd2cSJim Jagielski 				aMapMode.SetScaleX( aMapMode.GetScaleX() * Fraction( 1.25 ));
621*b1cdbd2cSJim Jagielski 				aMapMode.SetScaleY( aMapMode.GetScaleY() * Fraction( 1.25 ));
622*b1cdbd2cSJim Jagielski 				GetDepWin()->SetMapMode( aMapMode );
623*b1cdbd2cSJim Jagielski 
624*b1cdbd2cSJim Jagielski 				if ( nZoomed < 1 )
625*b1cdbd2cSJim Jagielski 				{
626*b1cdbd2cSJim Jagielski 					Size aZoomInSize( GetDepWin()->GetSizePixel());
627*b1cdbd2cSJim Jagielski 					aZoomInSize.Width() *= 1.25;
628*b1cdbd2cSJim Jagielski 					aZoomInSize.Height() *= 1.25;
629*b1cdbd2cSJim Jagielski 					GetDepWin()->SetSizePixel( aZoomInSize );
630*b1cdbd2cSJim Jagielski 				}
631*b1cdbd2cSJim Jagielski 				nZoomed--;
632*b1cdbd2cSJim Jagielski 
633*b1cdbd2cSJim Jagielski 				Zoom( aMapMode );
634*b1cdbd2cSJim Jagielski 		};
635*b1cdbd2cSJim Jagielski 				break;
636*b1cdbd2cSJim Jagielski 		case DEPPOPUP_ZOOMOUT :
637*b1cdbd2cSJim Jagielski 		{
638*b1cdbd2cSJim Jagielski //			DBG_ASSERT( FALSE,"zoomout");
639*b1cdbd2cSJim Jagielski 				MapMode aMapMode = GetDepWin()->GetMapMode();
640*b1cdbd2cSJim Jagielski 				if ( aMapMode.GetScaleX() > Fraction( 0.25 ))
641*b1cdbd2cSJim Jagielski 				{
642*b1cdbd2cSJim Jagielski 					aMapMode.SetScaleX( aMapMode.GetScaleX() * Fraction( 0.8 ));
643*b1cdbd2cSJim Jagielski 					aMapMode.SetScaleY( aMapMode.GetScaleY() * Fraction( 0.8 ));
644*b1cdbd2cSJim Jagielski 					GetDepWin()->SetMapMode( aMapMode );
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski 					if ( nZoomed < 0 )
647*b1cdbd2cSJim Jagielski 					{
648*b1cdbd2cSJim Jagielski 						Size aZoomOutSize( mpBaseWin->GetSizePixel());
649*b1cdbd2cSJim Jagielski 						aZoomOutSize.Width() *= 0.8;
650*b1cdbd2cSJim Jagielski 						aZoomOutSize.Height() *= 0.8;
651*b1cdbd2cSJim Jagielski 						GetDepWin()->SetSizePixel( aZoomOutSize );
652*b1cdbd2cSJim Jagielski 					}
653*b1cdbd2cSJim Jagielski 					nZoomed++;
654*b1cdbd2cSJim Jagielski 
655*b1cdbd2cSJim Jagielski 					Zoom( aMapMode );
656*b1cdbd2cSJim Jagielski 				}
657*b1cdbd2cSJim Jagielski 		};
658*b1cdbd2cSJim Jagielski 				break;
659*b1cdbd2cSJim Jagielski 		case DEPPOPUP_CLEAR :
660*b1cdbd2cSJim Jagielski //			DBG_ASSERT( FALSE,"clear");
661*b1cdbd2cSJim Jagielski //				RemoveAllObjects( mpObjectList );
662*b1cdbd2cSJim Jagielski 				break;
663*b1cdbd2cSJim Jagielski 		case DEPPOPUP_CLOSE :
664*b1cdbd2cSJim Jagielski //			DBG_ASSERT( FALSE,"close");
665*b1cdbd2cSJim Jagielski 			CloseWindow();
666*b1cdbd2cSJim Jagielski 				break;
667*b1cdbd2cSJim Jagielski 		case DEPPOPUP_HELP :
668*b1cdbd2cSJim Jagielski //			DBG_ASSERT( FALSE,"help");
669*b1cdbd2cSJim Jagielski 			ShowHelp();
670*b1cdbd2cSJim Jagielski 				break;
671*b1cdbd2cSJim Jagielski 		case DEPPOPUP_TEST :
672*b1cdbd2cSJim Jagielski //			DBG_ASSERT( FALSE,"TEST!");
673*b1cdbd2cSJim Jagielski //			test();
674*b1cdbd2cSJim Jagielski 				break;
675*b1cdbd2cSJim Jagielski         case DEPPOPUP_SHOW_TOOLBOX:
676*b1cdbd2cSJim Jagielski             maToolBox.Show();
677*b1cdbd2cSJim Jagielski             break;
678*b1cdbd2cSJim Jagielski 		default :
679*b1cdbd2cSJim Jagielski 			DBG_ASSERT( sal_False, "default" );
680*b1cdbd2cSJim Jagielski 				break;
681*b1cdbd2cSJim Jagielski 	}
682*b1cdbd2cSJim Jagielski 	return 0;
683*b1cdbd2cSJim Jagielski }
684