Salome HOME
*** empty log message ***
[modules/gui.git] / src / Plot2d / Plot2d_ViewWindow.cxx
1 // Plot2d_ViewWindow.cxx: implementation of the Plot2d_ViewWindow class.
2 //
3 //////////////////////////////////////////////////////////////////////
4 #include "Plot2d_ViewWindow.h"
5
6 #include "SUIT_ViewManager.h"
7 #include "SUIT_ResourceMgr.h"
8 #include "SUIT_Session.h"
9 #include "SUIT_ToolButton.h"
10
11 #include <qstatusbar.h>
12 #include <qlayout.h>
13
14 //////////////////////////////////////////////////////////////////////
15 // Construction/Destruction
16 //////////////////////////////////////////////////////////////////////
17
18 Plot2d_ViewWindow::Plot2d_ViewWindow(SUIT_Desktop* theDesktop, Plot2d_Viewer* theModel)
19 : SUIT_ViewWindow(theDesktop)
20 {
21   myModel = theModel;
22
23   myViewFrame = new Plot2d_ViewFrame(this, "plotView");
24   setCentralWidget(myViewFrame);
25
26   myToolBar = new QToolBar(this);
27   myToolBar->setCloseMode(QDockWindow::Undocked);
28   myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL"));
29   createActions();
30   createToolBar();
31
32   connect(myViewFrame, SIGNAL(vpModeHorChanged()), this, SLOT(onChangeHorMode()));
33   connect(myViewFrame, SIGNAL(vpModeVerChanged()), this, SLOT(onChangeVerMode()));
34   connect(myViewFrame, SIGNAL(vpCurveChanged()),   this, SLOT(onChangeCurveMode()));
35   connect(myViewFrame, SIGNAL(contextMenuRequested( QContextMenuEvent * )),
36           this,        SIGNAL(contextMenuRequested( QContextMenuEvent * )) );
37
38 }
39
40 Plot2d_ViewWindow::~Plot2d_ViewWindow()
41 {
42 }
43
44 //****************************************************************
45 void Plot2d_ViewWindow::putInfo(QString theMsg)
46 {
47   QStatusBar*   aStatusBar = myDesktop->statusBar();
48   aStatusBar->message(theMsg, 3000);
49 }
50
51 //****************************************************************
52 void Plot2d_ViewWindow::contextMenuPopup( QPopupMenu* thePopup )
53 {
54   // scaling
55   QPopupMenu* scalingPopup = new QPopupMenu( thePopup );
56   myActionsMap[ PModeXLinearId ]->addTo( scalingPopup );
57   myActionsMap[ PModeXLogarithmicId ]->addTo( scalingPopup );
58   onChangeHorMode();
59   scalingPopup->insertSeparator();
60   myActionsMap[ PModeYLinearId ]->addTo( scalingPopup );
61   myActionsMap[ PModeYLogarithmicId ]->addTo( scalingPopup );
62   thePopup->insertItem( tr( "SCALING_POPUP" ), scalingPopup );
63   onChangeVerMode();
64
65   thePopup->insertItem(tr("TOT_PLOT2D_FITDATA"), myViewFrame, SLOT(onFitData()));
66   // curve type
67   QPopupMenu* curTypePopup = new QPopupMenu( thePopup );
68   myActionsMap[ CurvPointsId ]->addTo( curTypePopup );
69   myActionsMap[ CurvLinesId ]->addTo( curTypePopup );
70   myActionsMap[ CurvSplinesId ]->addTo( curTypePopup );
71   thePopup->insertItem( tr( "CURVE_TYPE_POPUP" ), curTypePopup );
72
73   // legend
74   myActionsMap[ LegendId ]->addTo(thePopup);
75   // settings
76   myActionsMap[ CurvSettingsId ]->addTo(thePopup);
77 }
78
79 //****************************************************************
80 bool Plot2d_ViewWindow::eventFilter(QObject* watched, QEvent* e)
81 {
82   if (watched == myViewFrame) {
83     int aType = e->type();
84     switch(aType) {
85     case QEvent::MouseButtonPress:
86       emit mousePressed(this, (QMouseEvent*) e);
87       return true;
88
89     case QEvent::MouseButtonRelease:
90       emit mouseReleased(this, (QMouseEvent*) e);
91       return true;
92
93     case QEvent::MouseMove:
94       emit mouseMoving(this, (QMouseEvent*) e);
95       return true;
96
97     default:
98       break;
99     }
100   }
101   return SUIT_ViewWindow::eventFilter(watched, e);
102 }
103
104 //****************************************************************
105 void Plot2d_ViewWindow::createActions()
106 {
107   if ( !myActionsMap.isEmpty() )
108     return;
109
110   QtxAction* aAction;
111   SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
112
113   // Dump view
114   aAction = new QtxAction(tr("MNU_DUMP_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_DUMP" ) ),
115                            tr( "MNU_DUMP_VIEW" ), 0, this);
116   aAction->setStatusTip(tr("DSC_DUMP_VIEW"));
117   connect(aAction, SIGNAL(activated()), this, SLOT(onDumpView()));
118   myActionsMap[ DumpId ] = aAction;
119
120   // FitAll
121   aAction = new QtxAction(tr("MNU_FITALL"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_FIT_ALL" ) ),
122                            tr( "MNU_FITALL" ), 0, this);
123   aAction->setStatusTip(tr("DSC_FITALL"));
124   connect(aAction, SIGNAL(activated()), this, SLOT(onFitAll()));
125   myActionsMap[ FitAllId ] = aAction;
126
127   // FitRect
128   aAction = new QtxAction(tr("MNU_FITRECT"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_FIT_AREA" ) ),
129                            tr( "MNU_FITRECT" ), 0, this);
130   aAction->setStatusTip(tr("DSC_FITRECT"));
131   connect(aAction, SIGNAL(activated()), this, SLOT(onFitRect()));
132   myActionsMap[ FitRectId ] = aAction;
133
134   // Zoom
135   aAction = new QtxAction(tr("MNU_ZOOM_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_ZOOM" ) ),
136                            tr( "MNU_ZOOM_VIEW" ), 0, this);
137   aAction->setStatusTip(tr("DSC_ZOOM_VIEW"));
138   connect(aAction, SIGNAL(activated()), this, SLOT(onZoom()));
139   myActionsMap[ ZoomId ] = aAction;
140
141   // Panning
142   aAction = new QtxAction(tr("MNU_PAN_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_PAN" ) ),
143                            tr( "MNU_PAN_VIEW" ), 0, this);
144   aAction->setStatusTip(tr("DSC_PAN_VIEW"));
145   connect(aAction, SIGNAL(activated()), this, SLOT(onPanning()));
146   myActionsMap[ PanId ] = aAction;
147
148   // Global Panning
149   aAction = new QtxAction(tr("MNU_GLOBALPAN_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_GLOBALPAN" ) ),
150                            tr( "MNU_GLOBALPAN_VIEW" ), 0, this);
151   aAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW"));
152   connect(aAction, SIGNAL(activated()), this, SLOT(onGlobalPanning()));
153   myActionsMap[ GlobalPanId ] = aAction;
154
155   // Curve type - points
156   aAction = new QtxAction(tr("TOT_PLOT2D_CURVES_POINTS"),
157                 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_CURVES_POINTS")),
158                 tr("MEN_PLOT2D_CURVES_POINTS"), 0, this);
159   aAction->setStatusTip(tr("PRP_PLOT2D_CURVES_POINTS"));
160   connect(aAction, SIGNAL(activated()), this, SLOT(onCurves()));
161   aAction->setToggleAction(true);
162   myActionsMap[ CurvPointsId ] = aAction;
163
164   // Curve type - lines
165   aAction = new QtxAction(tr("TOT_PLOT2D_CURVES_LINES"),
166                aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_CURVES_LINES")),
167                tr("MEN_PLOT2D_CURVES_LINES"), 0, this);
168   aAction->setStatusTip(tr("PRP_PLOT2D_CURVES_LINES"));
169   connect(aAction, SIGNAL(activated()), this, SLOT(onCurves()));
170   aAction->setToggleAction(true);
171   myActionsMap[ CurvLinesId ] = aAction;
172
173   // Curve type - splines
174   aAction = new QtxAction(tr("TOT_PLOT2D_CURVES_SPLINES"),
175                  aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_CURVES_SPLINES")),
176                  tr("MEN_PLOT2D_CURVES_SPLINES"), 0, this);
177   aAction->setStatusTip(tr("PRP_PLOT2D_CURVES_SPLINES"));
178   connect(aAction, SIGNAL(activated()), this, SLOT(onCurves()));
179   aAction->setToggleAction(true);
180   myActionsMap[ CurvSplinesId ] = aAction;
181
182   // Mode for X (linear or logarithmic)
183   aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_HOR"),
184                  aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_HOR")),
185                  tr("MEN_PLOT2D_MODE_LINEAR_HOR"), 0, this);
186   aAction->setStatusTip (tr("PRP_PLOT2D_MODE_LINEAR_HOR"));
187   connect(aAction, SIGNAL(activated()), this, SLOT(onViewHorMode()));
188   myActionsMap[ HorId ] = aAction;
189
190   // Mode for Y (linear or logarithmic)
191   aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_VER"),
192                  aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_VER")),
193                  tr("MEN_PLOT2D_MODE_LINEAR_VER" ), 0, this);
194   aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LINEAR_VER"));
195   connect(aAction, SIGNAL(activated()), this, SLOT(onViewVerMode()));
196   myActionsMap[ VerId ] = aAction;
197
198   // Legend
199   aAction = new QtxAction(tr("TOT_PLOT2D_SHOW_LEGEND"),
200                 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_SHOW_LEGEND")),
201                 tr("MEN_PLOT2D_SHOW_LEGEND"), 0, this);
202   aAction->setStatusTip(tr("PRP_PLOT2D_SHOW_LEGEND"));
203   connect(aAction, SIGNAL(activated()), this, SLOT(onLegend()));
204   aAction->setToggleAction(true);
205   myActionsMap[ LegendId ] = aAction;
206
207   // Settings
208   aAction = new QtxAction(tr( "TOT_PLOT2D_SETTINGS"),
209                 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_SETTINGS")),
210                 tr("MEN_PLOT2D_SETTINGS"), 0, this);
211   aAction->setStatusTip(tr( "PRP_PLOT2D_SETTINGS"));
212   connect(aAction, SIGNAL(activated()), myViewFrame, SLOT(onSettings()));
213   myActionsMap[ CurvSettingsId ] = aAction;
214
215   // Clone
216   aAction = new QtxAction(tr("MNU_CLONE_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_CLONE_VIEW" ) ),
217                            tr( "MNU_CLONE_VIEW" ), 0, this);
218   aAction->setStatusTip(tr("DSC_CLONE_VIEW"));
219   connect(aAction, SIGNAL(activated()), this, SIGNAL(cloneView()));
220   myActionsMap[ CloneId ] = aAction;
221
222   /* Popup Actions */
223   /* Linear/logarithmic mode */
224   // Horizontal axis
225   aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_HOR"),
226                  aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_HOR")),
227                  tr("MEN_PLOT2D_MODE_LINEAR_HOR"), 0, this);
228   aAction->setStatusTip (tr("PRP_PLOT2D_MODE_LINEAR_HOR"));
229   aAction->setToggleAction(true);
230   myActionsMap[PModeXLinearId] = aAction;
231   connect(aAction, SIGNAL(activated()), this, SLOT(onViewHorMode()));
232
233   aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LOGARITHMIC_HOR"),
234               aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LOGARITHMIC_HOR")),
235               tr("MEN_PLOT2D_MODE_LOGARITHMIC_HOR"), 0, this);
236   aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LOGARITHMIC_HOR"));
237   aAction->setToggleAction(true);
238   myActionsMap[PModeXLogarithmicId] = aAction;
239   connect(aAction, SIGNAL(activated()), this, SLOT(onViewHorMode()));
240
241   // Vertical axis
242   aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_VER"),
243                  aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_VER")),
244                  tr("MEN_PLOT2D_MODE_LINEAR_VER" ), 0, this);
245   aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LINEAR_VER"));
246   aAction->setToggleAction(true);
247   myActionsMap[PModeYLinearId] = aAction;
248   connect(aAction, SIGNAL(activated()), this, SLOT(onViewVerMode()));
249
250   aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LOGARITHMIC_VER"),
251                  aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LOGARITHMIC_VER")),
252                  tr("MEN_PLOT2D_MODE_LOGARITHMIC_VER" ), 0, this);
253   aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LOGARITHMIC_VER"));
254   aAction->setToggleAction(true);
255   myActionsMap[PModeYLogarithmicId] = aAction;
256   connect(aAction, SIGNAL(activated()), this, SLOT(onViewVerMode()));
257
258 }
259
260 //****************************************************************
261 void Plot2d_ViewWindow::createToolBar()
262 {
263   myActionsMap[DumpId]->addTo(myToolBar);
264
265   SUIT_ToolButton* aScaleBtn = new SUIT_ToolButton(myToolBar);
266   aScaleBtn->AddAction(myActionsMap[FitAllId]);
267   aScaleBtn->AddAction(myActionsMap[FitRectId]);
268   aScaleBtn->AddAction(myActionsMap[ZoomId]);
269
270   SUIT_ToolButton* aPanBtn = new SUIT_ToolButton(myToolBar);
271   aPanBtn->AddAction(myActionsMap[PanId]);
272   aPanBtn->AddAction(myActionsMap[GlobalPanId]);
273
274   myCurveBtn = new SUIT_ToolButton(myToolBar);
275   myCurveBtn->AddAction(myActionsMap[CurvPointsId]);
276   myCurveBtn->AddAction(myActionsMap[CurvLinesId]);
277   myCurveBtn->AddAction(myActionsMap[CurvSplinesId]);
278   myActionsMap[CurvLinesId]->setOn(true);
279   onChangeCurveMode();
280
281   myActionsMap[HorId]->addTo(myToolBar);
282   onChangeHorMode();
283   myActionsMap[VerId]->addTo(myToolBar);
284   onChangeVerMode();
285
286   myActionsMap[LegendId]->addTo(myToolBar);
287   myActionsMap[CurvSettingsId]->addTo(myToolBar);
288   myActionsMap[CloneId]->addTo(myToolBar);
289   onChangeLegendMode();
290 }
291
292 //****************************************************************
293 void Plot2d_ViewWindow::onChangeHorMode()
294 {
295   bool aLinear = myViewFrame->isModeHorLinear();
296   SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
297
298   myActionsMap[PModeXLinearId]->setOn( aLinear );
299   myActionsMap[PModeXLogarithmicId]->setOn( !aLinear );
300
301   QPixmap pix = aResMgr->loadPixmap( "Plot2d", tr( aLinear ? "ICON_PLOT2D_MODE_LOGARITHMIC_HOR" :
302                                                              "ICON_PLOT2D_MODE_LINEAR_HOR" ) );
303   myActionsMap[HorId]->setIconSet( pix );
304   myActionsMap[HorId]->setToolTip( tr( aLinear ? "TOT_PLOT2D_MODE_LOGARITHMIC_HOR" :
305                                                  "TOT_PLOT2D_MODE_LINEAR_HOR" ) );
306   myActionsMap[HorId]->setStatusTip( tr( aLinear ? "PRP_PLOT2D_MODE_LOGARITHMIC_HOR" :
307                                                    "PRP_PLOT2D_MODE_LINEAR_HOR" ) );
308
309   myActionsMap[GlobalPanId]->setEnabled( myViewFrame->isModeVerLinear() && myViewFrame->isModeHorLinear() );
310 }
311
312 //****************************************************************
313 void Plot2d_ViewWindow::onChangeVerMode()
314 {
315   bool aLinear = myViewFrame->isModeVerLinear();
316   SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
317
318   myActionsMap[PModeYLinearId]->setOn( aLinear );
319   myActionsMap[PModeYLogarithmicId]->setOn( !aLinear );
320
321   QPixmap pix = aResMgr->loadPixmap( "Plot2d", tr( aLinear ? "ICON_PLOT2D_MODE_LOGARITHMIC_VER" :
322                                                              "ICON_PLOT2D_MODE_LINEAR_VER" ) );
323   myActionsMap[VerId]->setIconSet( pix );
324   myActionsMap[VerId]->setToolTip( tr( aLinear ? "TOT_PLOT2D_MODE_LOGARITHMIC_VER" :
325                                                  "TOT_PLOT2D_MODE_LINEAR_VER" ) );
326   myActionsMap[VerId]->setStatusTip( tr( aLinear ? "PRP_PLOT2D_MODE_LOGARITHMIC_VER" :
327                                                    "PRP_PLOT2D_MODE_LINEAR_VER" ) );
328
329   myActionsMap[GlobalPanId]->setEnabled( myViewFrame->isModeVerLinear() && myViewFrame->isModeHorLinear() );
330 }
331
332 //****************************************************************
333 void Plot2d_ViewWindow::onChangeCurveMode()
334 {
335   myCurveBtn->SetItem(myViewFrame->getCurveType());
336 }
337
338 //****************************************************************
339 void Plot2d_ViewWindow::onChangeLegendMode()
340 {
341   myActionsMap[ LegendId ]->setOn(myViewFrame->isLegendShow());
342 }
343
344 //****************************************************************
345 void Plot2d_ViewWindow::onDumpView()
346 {
347   myViewFrame->onDump();
348 }
349
350 //****************************************************************
351 void Plot2d_ViewWindow::onFitAll()
352 {
353   myViewFrame->onViewFitAll();
354 }
355
356 //****************************************************************
357 void Plot2d_ViewWindow::onFitRect()
358 {
359   myViewFrame->onViewFitArea();
360 }
361
362 //****************************************************************
363 void Plot2d_ViewWindow::onZoom()
364 {
365   myViewFrame->onViewZoom();
366 }
367
368 //****************************************************************
369 void Plot2d_ViewWindow::onPanning()
370 {
371   myViewFrame->onViewPan();
372 }
373
374 //****************************************************************
375 void Plot2d_ViewWindow::onGlobalPanning()
376 {
377   myViewFrame->onViewGlobalPan();
378 }
379
380 //****************************************************************
381 void Plot2d_ViewWindow::onViewHorMode()
382 {
383   if (myViewFrame->isModeHorLinear())
384     myViewFrame->setHorScaleMode(1);
385   else
386     myViewFrame->setHorScaleMode(0);
387 }
388
389 //****************************************************************
390 void Plot2d_ViewWindow::onViewVerMode()
391 {
392   if (myViewFrame->isModeVerLinear())
393     myViewFrame->setVerScaleMode(1);
394   else
395     myViewFrame->setVerScaleMode(0);
396 }
397
398 //****************************************************************
399 void Plot2d_ViewWindow::onLegend()
400 {
401   myViewFrame->showLegend(!myViewFrame->isLegendShow());
402   onChangeLegendMode();
403 }
404
405 //****************************************************************
406 void Plot2d_ViewWindow::onCurves()
407 {
408   QtxAction* aSender = (QtxAction*) sender();
409   if(aSender == myActionsMap[CurvPointsId]) {
410     myActionsMap[CurvPointsId]->setOn(true);
411     myActionsMap[CurvLinesId]->setOn(false);
412     myActionsMap[CurvSplinesId]->setOn(false);
413     myViewFrame->setCurveType(0);
414   }
415   else if(aSender == myActionsMap[CurvLinesId]) {
416     myActionsMap[CurvLinesId]->setOn(true);
417     myActionsMap[CurvPointsId]->setOn(false);
418     myActionsMap[CurvSplinesId]->setOn(false);
419     myViewFrame->setCurveType(1);
420   }
421   else if(aSender == myActionsMap[CurvSplinesId]) {
422     myActionsMap[CurvSplinesId]->setOn( true );
423     myActionsMap[CurvPointsId]->setOn( false );
424     myActionsMap[CurvLinesId]->setOn( false );
425     myViewFrame->setCurveType(2);
426   }
427 }