1 // Plot2d_ViewWindow.cxx: implementation of the Plot2d_ViewWindow class.
3 //////////////////////////////////////////////////////////////////////
4 #include "Plot2d_ViewWindow.h"
6 #include "SUIT_ViewManager.h"
7 #include "SUIT_ResourceMgr.h"
8 #include "SUIT_Session.h"
9 #include "SUIT_ToolButton.h"
11 #include <qstatusbar.h>
13 #include <qapplication.h>
15 //////////////////////////////////////////////////////////////////////
16 // Construction/Destruction
17 //////////////////////////////////////////////////////////////////////
19 Plot2d_ViewWindow::Plot2d_ViewWindow(SUIT_Desktop* theDesktop, Plot2d_Viewer* theModel)
20 : SUIT_ViewWindow(theDesktop)
24 myViewFrame = new Plot2d_ViewFrame(this, "plotView");
25 setCentralWidget(myViewFrame);
27 myToolBar = new QToolBar(this);
28 myToolBar->setCloseMode(QDockWindow::Undocked);
29 myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL"));
33 connect(myViewFrame, SIGNAL(vpModeHorChanged()), this, SLOT(onChangeHorMode()));
34 connect(myViewFrame, SIGNAL(vpModeVerChanged()), this, SLOT(onChangeVerMode()));
35 connect(myViewFrame, SIGNAL(vpCurveChanged()), this, SLOT(onChangeCurveMode()));
36 connect(myViewFrame, SIGNAL(contextMenuRequested( QContextMenuEvent * )),
37 this, SIGNAL(contextMenuRequested( QContextMenuEvent * )) );
41 Plot2d_ViewWindow::~Plot2d_ViewWindow()
45 //****************************************************************
46 void Plot2d_ViewWindow::putInfo(QString theMsg)
48 QStatusBar* aStatusBar = myDesktop->statusBar();
49 aStatusBar->message(theMsg, 3000);
52 //****************************************************************
53 void Plot2d_ViewWindow::contextMenuPopup( QPopupMenu* thePopup )
56 QPopupMenu* scalingPopup = new QPopupMenu( thePopup );
57 myActionsMap[ PModeXLinearId ]->addTo( scalingPopup );
58 myActionsMap[ PModeXLogarithmicId ]->addTo( scalingPopup );
60 scalingPopup->insertSeparator();
61 myActionsMap[ PModeYLinearId ]->addTo( scalingPopup );
62 myActionsMap[ PModeYLogarithmicId ]->addTo( scalingPopup );
63 thePopup->insertItem( tr( "SCALING_POPUP" ), scalingPopup );
66 thePopup->insertItem(tr("TOT_PLOT2D_FITDATA"), myViewFrame, SLOT(onFitData()));
68 QPopupMenu* curTypePopup = new QPopupMenu( thePopup );
69 myActionsMap[ CurvPointsId ]->addTo( curTypePopup );
70 myActionsMap[ CurvLinesId ]->addTo( curTypePopup );
71 myActionsMap[ CurvSplinesId ]->addTo( curTypePopup );
72 thePopup->insertItem( tr( "CURVE_TYPE_POPUP" ), curTypePopup );
75 myActionsMap[ LegendId ]->addTo(thePopup);
77 myActionsMap[ CurvSettingsId ]->addTo(thePopup);
80 //****************************************************************
81 bool Plot2d_ViewWindow::eventFilter(QObject* watched, QEvent* e)
83 if (watched == myViewFrame) {
84 int aType = e->type();
86 case QEvent::MouseButtonPress:
87 emit mousePressed(this, (QMouseEvent*) e);
90 case QEvent::MouseButtonRelease:
91 emit mouseReleased(this, (QMouseEvent*) e);
94 case QEvent::MouseMove:
95 emit mouseMoving(this, (QMouseEvent*) e);
102 return SUIT_ViewWindow::eventFilter(watched, e);
105 //****************************************************************
106 void Plot2d_ViewWindow::createActions()
108 if ( !myActionsMap.isEmpty() )
112 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
115 aAction = new QtxAction(tr("MNU_DUMP_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_DUMP" ) ),
116 tr( "MNU_DUMP_VIEW" ), 0, this);
117 aAction->setStatusTip(tr("DSC_DUMP_VIEW"));
118 connect(aAction, SIGNAL(activated()), this, SLOT(onDumpView()));
119 myActionsMap[ DumpId ] = aAction;
122 aAction = new QtxAction(tr("MNU_FITALL"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_FIT_ALL" ) ),
123 tr( "MNU_FITALL" ), 0, this);
124 aAction->setStatusTip(tr("DSC_FITALL"));
125 connect(aAction, SIGNAL(activated()), this, SLOT(onFitAll()));
126 myActionsMap[ FitAllId ] = aAction;
129 aAction = new QtxAction(tr("MNU_FITRECT"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_FIT_AREA" ) ),
130 tr( "MNU_FITRECT" ), 0, this);
131 aAction->setStatusTip(tr("DSC_FITRECT"));
132 connect(aAction, SIGNAL(activated()), this, SLOT(onFitRect()));
133 myActionsMap[ FitRectId ] = aAction;
136 aAction = new QtxAction(tr("MNU_ZOOM_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_ZOOM" ) ),
137 tr( "MNU_ZOOM_VIEW" ), 0, this);
138 aAction->setStatusTip(tr("DSC_ZOOM_VIEW"));
139 connect(aAction, SIGNAL(activated()), this, SLOT(onZoom()));
140 myActionsMap[ ZoomId ] = aAction;
143 aAction = new QtxAction(tr("MNU_PAN_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_PAN" ) ),
144 tr( "MNU_PAN_VIEW" ), 0, this);
145 aAction->setStatusTip(tr("DSC_PAN_VIEW"));
146 connect(aAction, SIGNAL(activated()), this, SLOT(onPanning()));
147 myActionsMap[ PanId ] = aAction;
150 aAction = new QtxAction(tr("MNU_GLOBALPAN_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_GLOBALPAN" ) ),
151 tr( "MNU_GLOBALPAN_VIEW" ), 0, this);
152 aAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW"));
153 connect(aAction, SIGNAL(activated()), this, SLOT(onGlobalPanning()));
154 myActionsMap[ GlobalPanId ] = aAction;
156 // Curve type - points
157 aAction = new QtxAction(tr("TOT_PLOT2D_CURVES_POINTS"),
158 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_CURVES_POINTS")),
159 tr("MEN_PLOT2D_CURVES_POINTS"), 0, this);
160 aAction->setStatusTip(tr("PRP_PLOT2D_CURVES_POINTS"));
161 connect(aAction, SIGNAL(activated()), this, SLOT(onCurves()));
162 aAction->setToggleAction(true);
163 myActionsMap[ CurvPointsId ] = aAction;
165 // Curve type - lines
166 aAction = new QtxAction(tr("TOT_PLOT2D_CURVES_LINES"),
167 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_CURVES_LINES")),
168 tr("MEN_PLOT2D_CURVES_LINES"), 0, this);
169 aAction->setStatusTip(tr("PRP_PLOT2D_CURVES_LINES"));
170 connect(aAction, SIGNAL(activated()), this, SLOT(onCurves()));
171 aAction->setToggleAction(true);
172 myActionsMap[ CurvLinesId ] = aAction;
174 // Curve type - splines
175 aAction = new QtxAction(tr("TOT_PLOT2D_CURVES_SPLINES"),
176 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_CURVES_SPLINES")),
177 tr("MEN_PLOT2D_CURVES_SPLINES"), 0, this);
178 aAction->setStatusTip(tr("PRP_PLOT2D_CURVES_SPLINES"));
179 connect(aAction, SIGNAL(activated()), this, SLOT(onCurves()));
180 aAction->setToggleAction(true);
181 myActionsMap[ CurvSplinesId ] = aAction;
183 // Mode for X (linear or logarithmic)
184 aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_HOR"),
185 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_HOR")),
186 tr("MEN_PLOT2D_MODE_LINEAR_HOR"), 0, this);
187 aAction->setStatusTip (tr("PRP_PLOT2D_MODE_LINEAR_HOR"));
188 connect(aAction, SIGNAL(activated()), this, SLOT(onViewHorMode()));
189 myActionsMap[ HorId ] = aAction;
191 // Mode for Y (linear or logarithmic)
192 aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_VER"),
193 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_VER")),
194 tr("MEN_PLOT2D_MODE_LINEAR_VER" ), 0, this);
195 aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LINEAR_VER"));
196 connect(aAction, SIGNAL(activated()), this, SLOT(onViewVerMode()));
197 myActionsMap[ VerId ] = aAction;
200 aAction = new QtxAction(tr("TOT_PLOT2D_SHOW_LEGEND"),
201 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_SHOW_LEGEND")),
202 tr("MEN_PLOT2D_SHOW_LEGEND"), 0, this);
203 aAction->setStatusTip(tr("PRP_PLOT2D_SHOW_LEGEND"));
204 connect(aAction, SIGNAL(activated()), this, SLOT(onLegend()));
205 aAction->setToggleAction(true);
206 myActionsMap[ LegendId ] = aAction;
209 aAction = new QtxAction(tr( "TOT_PLOT2D_SETTINGS"),
210 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_SETTINGS")),
211 tr("MEN_PLOT2D_SETTINGS"), 0, this);
212 aAction->setStatusTip(tr( "PRP_PLOT2D_SETTINGS"));
213 connect(aAction, SIGNAL(activated()), myViewFrame, SLOT(onSettings()));
214 myActionsMap[ CurvSettingsId ] = aAction;
217 aAction = new QtxAction(tr("MNU_CLONE_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_CLONE_VIEW" ) ),
218 tr( "MNU_CLONE_VIEW" ), 0, this);
219 aAction->setStatusTip(tr("DSC_CLONE_VIEW"));
220 connect(aAction, SIGNAL(activated()), this, SIGNAL(cloneView()));
221 myActionsMap[ CloneId ] = aAction;
224 /* Linear/logarithmic mode */
226 aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_HOR"),
227 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_HOR")),
228 tr("MEN_PLOT2D_MODE_LINEAR_HOR"), 0, this);
229 aAction->setStatusTip (tr("PRP_PLOT2D_MODE_LINEAR_HOR"));
230 aAction->setToggleAction(true);
231 myActionsMap[PModeXLinearId] = aAction;
232 connect(aAction, SIGNAL(activated()), this, SLOT(onViewHorMode()));
234 aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LOGARITHMIC_HOR"),
235 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LOGARITHMIC_HOR")),
236 tr("MEN_PLOT2D_MODE_LOGARITHMIC_HOR"), 0, this);
237 aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LOGARITHMIC_HOR"));
238 aAction->setToggleAction(true);
239 myActionsMap[PModeXLogarithmicId] = aAction;
240 connect(aAction, SIGNAL(activated()), this, SLOT(onViewHorMode()));
243 aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_VER"),
244 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_VER")),
245 tr("MEN_PLOT2D_MODE_LINEAR_VER" ), 0, this);
246 aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LINEAR_VER"));
247 aAction->setToggleAction(true);
248 myActionsMap[PModeYLinearId] = aAction;
249 connect(aAction, SIGNAL(activated()), this, SLOT(onViewVerMode()));
251 aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LOGARITHMIC_VER"),
252 aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LOGARITHMIC_VER")),
253 tr("MEN_PLOT2D_MODE_LOGARITHMIC_VER" ), 0, this);
254 aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LOGARITHMIC_VER"));
255 aAction->setToggleAction(true);
256 myActionsMap[PModeYLogarithmicId] = aAction;
257 connect(aAction, SIGNAL(activated()), this, SLOT(onViewVerMode()));
261 //****************************************************************
262 void Plot2d_ViewWindow::createToolBar()
264 myActionsMap[DumpId]->addTo(myToolBar);
266 SUIT_ToolButton* aScaleBtn = new SUIT_ToolButton(myToolBar);
267 aScaleBtn->AddAction(myActionsMap[FitAllId]);
268 aScaleBtn->AddAction(myActionsMap[FitRectId]);
269 aScaleBtn->AddAction(myActionsMap[ZoomId]);
271 SUIT_ToolButton* aPanBtn = new SUIT_ToolButton(myToolBar);
272 aPanBtn->AddAction(myActionsMap[PanId]);
273 aPanBtn->AddAction(myActionsMap[GlobalPanId]);
275 myCurveBtn = new SUIT_ToolButton(myToolBar);
276 myCurveBtn->AddAction(myActionsMap[CurvPointsId]);
277 myCurveBtn->AddAction(myActionsMap[CurvLinesId]);
278 myCurveBtn->AddAction(myActionsMap[CurvSplinesId]);
279 myActionsMap[CurvLinesId]->setOn(true);
282 myActionsMap[HorId]->addTo(myToolBar);
284 myActionsMap[VerId]->addTo(myToolBar);
287 myActionsMap[LegendId]->addTo(myToolBar);
288 myActionsMap[CurvSettingsId]->addTo(myToolBar);
289 myActionsMap[CloneId]->addTo(myToolBar);
290 onChangeLegendMode();
293 //****************************************************************
294 void Plot2d_ViewWindow::onChangeHorMode()
296 bool aLinear = myViewFrame->isModeHorLinear();
297 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
299 myActionsMap[PModeXLinearId]->setOn( aLinear );
300 myActionsMap[PModeXLogarithmicId]->setOn( !aLinear );
302 QPixmap pix = aResMgr->loadPixmap( "Plot2d", tr( aLinear ? "ICON_PLOT2D_MODE_LOGARITHMIC_HOR" :
303 "ICON_PLOT2D_MODE_LINEAR_HOR" ) );
304 myActionsMap[HorId]->setIconSet( pix );
305 myActionsMap[HorId]->setToolTip( tr( aLinear ? "TOT_PLOT2D_MODE_LOGARITHMIC_HOR" :
306 "TOT_PLOT2D_MODE_LINEAR_HOR" ) );
307 myActionsMap[HorId]->setStatusTip( tr( aLinear ? "PRP_PLOT2D_MODE_LOGARITHMIC_HOR" :
308 "PRP_PLOT2D_MODE_LINEAR_HOR" ) );
310 myActionsMap[GlobalPanId]->setEnabled( myViewFrame->isModeVerLinear() && myViewFrame->isModeHorLinear() );
313 //****************************************************************
314 void Plot2d_ViewWindow::onChangeVerMode()
316 bool aLinear = myViewFrame->isModeVerLinear();
317 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
319 myActionsMap[PModeYLinearId]->setOn( aLinear );
320 myActionsMap[PModeYLogarithmicId]->setOn( !aLinear );
322 QPixmap pix = aResMgr->loadPixmap( "Plot2d", tr( aLinear ? "ICON_PLOT2D_MODE_LOGARITHMIC_VER" :
323 "ICON_PLOT2D_MODE_LINEAR_VER" ) );
324 myActionsMap[VerId]->setIconSet( pix );
325 myActionsMap[VerId]->setToolTip( tr( aLinear ? "TOT_PLOT2D_MODE_LOGARITHMIC_VER" :
326 "TOT_PLOT2D_MODE_LINEAR_VER" ) );
327 myActionsMap[VerId]->setStatusTip( tr( aLinear ? "PRP_PLOT2D_MODE_LOGARITHMIC_VER" :
328 "PRP_PLOT2D_MODE_LINEAR_VER" ) );
330 myActionsMap[GlobalPanId]->setEnabled( myViewFrame->isModeVerLinear() && myViewFrame->isModeHorLinear() );
333 //****************************************************************
334 void Plot2d_ViewWindow::onChangeCurveMode()
336 myCurveBtn->SetItem(myViewFrame->getCurveType());
339 //****************************************************************
340 void Plot2d_ViewWindow::onChangeLegendMode()
342 myActionsMap[ LegendId ]->setOn(myViewFrame->isLegendShow());
345 //****************************************************************
346 void Plot2d_ViewWindow::onFitAll()
348 myViewFrame->onViewFitAll();
351 //****************************************************************
352 void Plot2d_ViewWindow::onFitRect()
354 myViewFrame->onViewFitArea();
357 //****************************************************************
358 void Plot2d_ViewWindow::onZoom()
360 myViewFrame->onViewZoom();
363 //****************************************************************
364 void Plot2d_ViewWindow::onPanning()
366 myViewFrame->onViewPan();
369 //****************************************************************
370 void Plot2d_ViewWindow::onGlobalPanning()
372 myViewFrame->onViewGlobalPan();
375 //****************************************************************
376 void Plot2d_ViewWindow::onViewHorMode()
378 if (myViewFrame->isModeHorLinear())
379 myViewFrame->setHorScaleMode(1);
381 myViewFrame->setHorScaleMode(0);
384 //****************************************************************
385 void Plot2d_ViewWindow::onViewVerMode()
387 if (myViewFrame->isModeVerLinear())
388 myViewFrame->setVerScaleMode(1);
390 myViewFrame->setVerScaleMode(0);
393 //****************************************************************
394 void Plot2d_ViewWindow::onLegend()
396 myViewFrame->showLegend(!myViewFrame->isLegendShow());
397 onChangeLegendMode();
400 //****************************************************************
401 void Plot2d_ViewWindow::onCurves()
403 QtxAction* aSender = (QtxAction*) sender();
404 if(aSender == myActionsMap[CurvPointsId]) {
405 myActionsMap[CurvPointsId]->setOn(true);
406 myActionsMap[CurvLinesId]->setOn(false);
407 myActionsMap[CurvSplinesId]->setOn(false);
408 myViewFrame->setCurveType(0);
410 else if(aSender == myActionsMap[CurvLinesId]) {
411 myActionsMap[CurvLinesId]->setOn(true);
412 myActionsMap[CurvPointsId]->setOn(false);
413 myActionsMap[CurvSplinesId]->setOn(false);
414 myViewFrame->setCurveType(1);
416 else if(aSender == myActionsMap[CurvSplinesId]) {
417 myActionsMap[CurvSplinesId]->setOn( true );
418 myActionsMap[CurvPointsId]->setOn( false );
419 myActionsMap[CurvLinesId]->setOn( false );
420 myViewFrame->setCurveType(2);
424 //****************************************************************
425 void Plot2d_ViewWindow::onDumpView()
427 qApp->postEvent( myViewFrame, new QPaintEvent( QRect( 0, 0, myViewFrame->width(), myViewFrame->height() ), TRUE ) );
428 SUIT_ViewWindow::onDumpView();
431 //****************************************************************
432 QImage Plot2d_ViewWindow::dumpView()
434 QPixmap px = QPixmap::grabWindow( myViewFrame->winId() );
435 return px.convertToImage();