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>
14 //////////////////////////////////////////////////////////////////////
15 // Construction/Destruction
16 //////////////////////////////////////////////////////////////////////
18 Plot2d_ViewWindow::Plot2d_ViewWindow(SUIT_Desktop* theDesktop, Plot2d_Viewer* theModel)
19 : SUIT_ViewWindow(theDesktop)
23 myViewFrame = new Plot2d_ViewFrame(this, "plotView");
24 setCentralWidget(myViewFrame);
26 myToolBar = new QToolBar(this);
27 myToolBar->setCloseMode(QDockWindow::Undocked);
28 myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL"));
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 * )) );
40 Plot2d_ViewWindow::~Plot2d_ViewWindow()
44 //****************************************************************
45 void Plot2d_ViewWindow::putInfo(QString theMsg)
47 QStatusBar* aStatusBar = myDesktop->statusBar();
48 aStatusBar->message(theMsg, 3000);
51 //****************************************************************
52 void Plot2d_ViewWindow::contextMenuPopup( QPopupMenu* thePopup )
55 QPopupMenu* scalingPopup = new QPopupMenu( thePopup );
56 myActionsMap[ PModeXLinearId ]->addTo( scalingPopup );
57 myActionsMap[ PModeXLogarithmicId ]->addTo( scalingPopup );
59 scalingPopup->insertSeparator();
60 myActionsMap[ PModeYLinearId ]->addTo( scalingPopup );
61 myActionsMap[ PModeYLogarithmicId ]->addTo( scalingPopup );
62 thePopup->insertItem( tr( "SCALING_POPUP" ), scalingPopup );
65 thePopup->insertItem(tr("TOT_PLOT2D_FITDATA"), myViewFrame, SLOT(onFitData()));
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 );
74 myActionsMap[ LegendId ]->addTo(thePopup);
76 myActionsMap[ CurvSettingsId ]->addTo(thePopup);
79 //****************************************************************
80 bool Plot2d_ViewWindow::eventFilter(QObject* watched, QEvent* e)
82 if (watched == myViewFrame) {
83 int aType = e->type();
85 case QEvent::MouseButtonPress:
86 emit mousePressed(this, (QMouseEvent*) e);
89 case QEvent::MouseButtonRelease:
90 emit mouseReleased(this, (QMouseEvent*) e);
93 case QEvent::MouseMove:
94 emit mouseMoving(this, (QMouseEvent*) e);
101 return SUIT_ViewWindow::eventFilter(watched, e);
104 //****************************************************************
105 void Plot2d_ViewWindow::createActions()
107 if ( !myActionsMap.isEmpty() )
111 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
223 /* Linear/logarithmic mode */
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()));
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()));
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()));
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()));
260 //****************************************************************
261 void Plot2d_ViewWindow::createToolBar()
263 myActionsMap[DumpId]->addTo(myToolBar);
265 SUIT_ToolButton* aScaleBtn = new SUIT_ToolButton(myToolBar);
266 aScaleBtn->AddAction(myActionsMap[FitAllId]);
267 aScaleBtn->AddAction(myActionsMap[FitRectId]);
268 aScaleBtn->AddAction(myActionsMap[ZoomId]);
270 SUIT_ToolButton* aPanBtn = new SUIT_ToolButton(myToolBar);
271 aPanBtn->AddAction(myActionsMap[PanId]);
272 aPanBtn->AddAction(myActionsMap[GlobalPanId]);
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);
281 myActionsMap[HorId]->addTo(myToolBar);
283 myActionsMap[VerId]->addTo(myToolBar);
286 myActionsMap[LegendId]->addTo(myToolBar);
287 myActionsMap[CurvSettingsId]->addTo(myToolBar);
288 myActionsMap[CloneId]->addTo(myToolBar);
289 onChangeLegendMode();
292 //****************************************************************
293 void Plot2d_ViewWindow::onChangeHorMode()
295 bool aLinear = myViewFrame->isModeHorLinear();
296 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
298 myActionsMap[PModeXLinearId]->setOn( aLinear );
299 myActionsMap[PModeXLogarithmicId]->setOn( !aLinear );
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" ) );
309 myActionsMap[GlobalPanId]->setEnabled( myViewFrame->isModeVerLinear() && myViewFrame->isModeHorLinear() );
312 //****************************************************************
313 void Plot2d_ViewWindow::onChangeVerMode()
315 bool aLinear = myViewFrame->isModeVerLinear();
316 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
318 myActionsMap[PModeYLinearId]->setOn( aLinear );
319 myActionsMap[PModeYLogarithmicId]->setOn( !aLinear );
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" ) );
329 myActionsMap[GlobalPanId]->setEnabled( myViewFrame->isModeVerLinear() && myViewFrame->isModeHorLinear() );
332 //****************************************************************
333 void Plot2d_ViewWindow::onChangeCurveMode()
335 myCurveBtn->SetItem(myViewFrame->getCurveType());
338 //****************************************************************
339 void Plot2d_ViewWindow::onChangeLegendMode()
341 myActionsMap[ LegendId ]->setOn(myViewFrame->isLegendShow());
344 //****************************************************************
345 void Plot2d_ViewWindow::onDumpView()
347 myViewFrame->onDump();
350 //****************************************************************
351 void Plot2d_ViewWindow::onFitAll()
353 myViewFrame->onViewFitAll();
356 //****************************************************************
357 void Plot2d_ViewWindow::onFitRect()
359 myViewFrame->onViewFitArea();
362 //****************************************************************
363 void Plot2d_ViewWindow::onZoom()
365 myViewFrame->onViewZoom();
368 //****************************************************************
369 void Plot2d_ViewWindow::onPanning()
371 myViewFrame->onViewPan();
374 //****************************************************************
375 void Plot2d_ViewWindow::onGlobalPanning()
377 myViewFrame->onViewGlobalPan();
380 //****************************************************************
381 void Plot2d_ViewWindow::onViewHorMode()
383 if (myViewFrame->isModeHorLinear())
384 myViewFrame->setHorScaleMode(1);
386 myViewFrame->setHorScaleMode(0);
389 //****************************************************************
390 void Plot2d_ViewWindow::onViewVerMode()
392 if (myViewFrame->isModeVerLinear())
393 myViewFrame->setVerScaleMode(1);
395 myViewFrame->setVerScaleMode(0);
398 //****************************************************************
399 void Plot2d_ViewWindow::onLegend()
401 myViewFrame->showLegend(!myViewFrame->isLegendShow());
402 onChangeLegendMode();
405 //****************************************************************
406 void Plot2d_ViewWindow::onCurves()
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);
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);
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);