]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Add automatic fitall in plot2d after edit the cutlines
authorepa <epa@opencascade.com>
Thu, 7 Dec 2006 12:37:28 +0000 (12:37 +0000)
committerepa <epa@opencascade.com>
Thu, 7 Dec 2006 12:37:28 +0000 (12:37 +0000)
src/Plot2d/Plot2d_ViewFrame.cxx
src/Plot2d/Plot2d_ViewFrame.h

index 00ba07afae1ed218eb4ba5dc7ac3fcd45aaba617..55b805bfce768b014d076d1f43efe764735aca3c 100755 (executable)
@@ -41,6 +41,7 @@
 #include <qmap.h>
 #include <qpainter.h>
 #include <qpaintdevicemetrics.h>
+#include <qevent.h>
 
 #include <qwt_math.h>
 #include <qwt_plot_canvas.h>
@@ -54,6 +55,8 @@
 #define DEFAULT_MARKER_SIZE    9     // default marker size
 #define MIN_RECT_SIZE          11    // min sensibility area size
 
+#define FITALL_EVENT           ( QEvent::User + 9999 )
+
 const char* imageZoomCursor[] = { 
 "32 32 3 1",
 ". c None",
@@ -787,6 +790,13 @@ void Plot2d_ViewFrame::updateLegend( const Plot2d_Prs* prs )
 */
 void Plot2d_ViewFrame::fitAll()
 {
+  // Postpone fitAll operation until QwtPlot geometry
+  // has been fully defined
+  if ( !myPlot->polished() ){
+    QApplication::postEvent( this, new QCustomEvent( FITALL_EVENT ) );
+    return;
+  }
+
   QwtDiMap xMap1 = myPlot->canvasMap( QwtPlot::xBottom );
 
   myPlot->setAxisAutoScale( QwtPlot::yLeft );
@@ -1588,7 +1598,8 @@ bool Plot2d_ViewFrame::isYLogEnabled() const
   Constructor
 */
 Plot2d_Plot2d::Plot2d_Plot2d( QWidget* parent )
-     : QwtPlot( parent )
+  : QwtPlot( parent ),
+    myIsPolished( false )
 {
   // outline
   enableOutline( true );
@@ -1768,6 +1779,16 @@ bool Plot2d_Plot2d::existMarker( const QwtSymbol::Style typeMarker, const QColor
   return false;
 }
 
+/*!
+  Sets the flag saying that QwtPlot geometry has been fully defined.
+*/
+void Plot2d_Plot2d::polish()
+{
+  QwtPlot::polish();
+  myIsPolished = true;
+}
+
+
 /*!
   Creates presentation of object
   Default implementation is empty
@@ -2048,3 +2069,14 @@ void Plot2d_ViewFrame::onZoomOut()
 {
   this->incrementalZoom( -INCREMENT_FOR_OP, -INCREMENT_FOR_OP );
 }
+
+/*!
+  Schedules a FitAll operation by putting it to the application's
+  event queue. This ensures that other important events (show, resize, etc.)
+  are processed first.
+*/
+void Plot2d_ViewFrame::customEvent( QCustomEvent* ce )
+{
+  if ( ce->type() == FITALL_EVENT )
+    fitAll();
+}
index 6a6aaf1716dfb71df34ccea53ad4970e66a5dfa5..108cbd9573cf42cfce02593947365b170cfcc3c1 100755 (executable)
@@ -25,6 +25,7 @@
 
 class Plot2d_Plot2d;
 class Plot2d_Prs;
+class QCustomEvent;
 
 typedef QIntDict<Plot2d_Curve> CurveDict;
 
@@ -148,6 +149,9 @@ public slots:
   void    onZoomIn();
   void    onZoomOut();
 
+protected:
+  virtual void customEvent( QCustomEvent* );
+
 protected slots:
   void    plotMousePressed( const QMouseEvent& );
   void    plotMouseMoved( const QMouseEvent& );
@@ -183,6 +187,7 @@ protected:
 
 class Plot2d_Plot2d : public QwtPlot 
 {
+  Q_OBJECT
 public:
   Plot2d_Plot2d( QWidget* parent );
 
@@ -199,11 +204,17 @@ public:
   virtual QSizePolicy sizePolicy() const;
   virtual QSize       minimumSizeHint() const;
 
+  bool                polished() const { return myIsPolished; }
+
+public slots:
+  virtual void polish();
+
 protected:
   bool       existMarker( const QwtSymbol::Style typeMarker, const QColor& color, const Qt::PenStyle typeLine );
 
 protected:
   QValueList<QColor> myColors;
+  bool               myIsPolished;
 };
 
 #endif