]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Merging from branch For_CTH_V12
authorouv <ouv@opencascade.com>
Mon, 8 Sep 2008 07:25:07 +0000 (07:25 +0000)
committerouv <ouv@opencascade.com>
Mon, 8 Sep 2008 07:25:07 +0000 (07:25 +0000)
12 files changed:
src/GLViewer/GLViewer_Context.cxx
src/GLViewer/GLViewer_Drawer.cxx
src/GLViewer/GLViewer_Drawer.h
src/GLViewer/GLViewer_Object.cxx
src/GLViewer/GLViewer_ViewFrame.cxx
src/GLViewer/GLViewer_ViewFrame.h
src/GLViewer/GLViewer_ViewPort2d.cxx
src/GLViewer/GLViewer_ViewPort2d.h
src/GLViewer/GLViewer_Viewer.h
src/GLViewer/GLViewer_Viewer2d.cxx
src/GLViewer/GLViewer_Viewer2d.h
src/GLViewer/GLViewer_Widget.cxx

index 496d79bedffcff1b8def599df4f85e9d27f83ddd..984e537261e749a1352dbdbad9f6ace98d46532a 100644 (file)
@@ -618,7 +618,12 @@ void GLViewer_Context::setSelected( GLViewer_Object* object, bool updateViewer )
   }
      
   if( updateViewer )
-    myGLViewer2d->activateDrawer( object, TRUE, TRUE );
+  {
+    if( myUpdateAll )
+      myGLViewer2d->updateAll();
+    else
+      myGLViewer2d->activateDrawer( object, TRUE, TRUE );
+  }
 }
 
 /*!
index c60128488932aca6d5530167413ca588a57c908b..082e595742b2bd2f6723aded1a838a4a0f9f4082 100644 (file)
@@ -964,52 +964,6 @@ bool GLViewer_Drawer::translateToEMF( HDC hDC, GLViewer_CoordSystem* aViewerCS,
 }
 #endif
 
-/*!
-  Draws rectangle
-  \param rect - instance of primitive
-  \param lineWidth - width of line
-  \param gap - gap of rectangle
-  \param color - color of primitive
-  \param filled - if it is true, then rectangle will be drawn filled with color "fillingColor"
-  \param fillingColor - color of filling
-*/
-void GLViewer_Drawer::drawRectangle( GLViewer_Rect* rect, GLfloat lineWidth, GLfloat gap,
-                                    QColor color, bool filled, QColor fillingColor )
-{
-  if( !rect )
-    return;
-
-  float x1 = rect->left() - gap;
-  float x2 = rect->right() + gap;
-  float y1 = rect->bottom() - gap;
-  float y2 = rect->top() + gap;
-  
-  if( filled )
-  {
-    glColor3f( ( GLfloat )fillingColor.red() / 255,
-      ( GLfloat )fillingColor.green() / 255,
-      ( GLfloat )fillingColor.blue() / 255 );
-    glBegin( GL_POLYGON );
-    glVertex2f( x1, y1 );
-    glVertex2f( x1, y2 );
-    glVertex2f( x2, y2 );
-    glVertex2f( x2, y1 );
-    glEnd();
-  }
-
-  glColor3f( ( GLfloat )color.red() / 255,
-    ( GLfloat )color.green() / 255,
-    ( GLfloat )color.blue() / 255 );
-  glLineWidth( lineWidth );
-  
-  glBegin( GL_LINE_LOOP );
-  glVertex2f( x1, y1 );
-  glVertex2f( x1, y2 );
-  glVertex2f( x2, y2 );
-  glVertex2f( x2, y1 );
-  glEnd();
-}
-
 /*!
   Draws contour
   \param pntList - list of points
index d81c19dc7c2fc56ec74e391687e261b5ab2d254e..220e62ac3bf17cd7a67d37dcfbdcf94a9766274f 100644 (file)
@@ -403,10 +403,6 @@ public:
   static void                     drawFilledRectangle( GLViewer_Rect*, QColor = Qt::black );
 
 protected:
-  //! Draw basic primitives: rectangle, contour, polygon, vertex, cross, arrow
-  //* with predefined color
-  static void                     drawRectangle( GLViewer_Rect*, GLfloat, GLfloat = 0, QColor = Qt::black, 
-                                                bool = false, QColor = Qt::white );
   static void                     drawContour( GLViewer_Rect*, QColor, GLfloat, GLushort, bool );
   static void                     drawContour( const GLViewer_PntList&, QColor, GLfloat );
   static void                     drawPolygon( GLViewer_Rect*, QColor, GLushort, bool );
index f0cfefe4fcec7729863ea27b6390571728921ef4..40234b8862ae789c8de45b372fb8c6c1b621b225 100644 (file)
@@ -148,7 +148,7 @@ GLboolean GLViewer_Object::setZoom( GLfloat zoom, bool, bool )
 }
 
 /*!
-  Performs zoom change by step
+  Performs vertical zoom change by step
   \param zoomIn - to increase to decrease zoom
 */
 GLboolean GLViewer_Object::updateZoom( bool zoomIn )
index 8072df5260cd16532770fd1249f6f1352f4da42e..86a3436d00e6ab1baf60d6e3fb9724fa2d4bacbd 100644 (file)
@@ -279,6 +279,20 @@ QImage GLViewer_ViewFrame::dumpView()
   return img;
 }
 
+/*!
+  Saves image to file according to the format
+  \param image - image
+  \param fileName - name of file
+  \param format - string contains name of format (for example, "BMP"(default) or "JPEG", "JPG")
+*/
+bool GLViewer_ViewFrame::dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format )
+{
+  bool ok = SUIT_ViewWindow::dumpViewToFormat( img, fileName, format );
+  if( ok )
+    emit vfViewDumped( img, fileName, format );
+  return ok;
+}
+
 /*!
   Start panning
 */
index f2fd165bf98147c81864882544247880de353729..ddc7eb53700a765c185fa07cbaf65a6a0b69c757 100644 (file)
@@ -80,6 +80,10 @@ public:
 signals:
   void                    vfDrawExternal( QPainter* );
   void                    vfViewClosing( QCloseEvent* );
+  void                    vfViewDumped( const QImage&, const QString&, const QString& );
+
+protected:
+  virtual bool            dumpViewToFormat( const QImage&, const QString& fileName, const QString& format );
 
 protected:
   GLViewer_Viewer*        myViewer;
index 69392f012dd1a5a793c6574de098511b31df33d8..d8c70913c5c3728bf69196cd216b19392d3a60b5 100644 (file)
@@ -352,6 +352,9 @@ void GLViewer_ViewPort2d::mouseMoveEvent( QMouseEvent* e )
 {
     emit vpMouseEvent( e );
 
+    if( isPulling() )
+      return;
+
     if( myIsDragProcess == inDrag )
         onDragObject( e );
 
@@ -398,6 +401,9 @@ void GLViewer_ViewPort2d::mouseReleaseEvent( QMouseEvent* e )
     }
     emit vpMouseEvent( e );
 
+    if( isPulling() )
+      return;
+
     if( myIsDragProcess == inDrag )
     {
       bool isAnyMoved = false;
@@ -1195,6 +1201,14 @@ void GLViewer_ViewPort2d::drawSelectByRect( int x, int y )
 
 }
 
+/*!
+  Returns tue if selection by rect is preformed
+*/
+bool GLViewer_ViewPort2d::isSelectByRect() const
+{
+  return mypFirstPoint && mypLastPoint;
+}
+
 /*!
   Finishes rectangle selection
 */
@@ -1402,6 +1416,13 @@ void GLViewer_ViewPort2d::onMaybeTip( QPoint thePoint, QString& theText, QFont&
       theTextReg = QRect( thePoint.x(), thePoint.y() + cur_height,
                           aSize.width(), aSize.height() );
       theRegion = QRect( thePoint.x(), thePoint.y(), 1, 1 );
+
+      QPoint aBottomRightGlobal = mapToGlobal( theTextReg.bottomRight() );
+      int dx = aBottomRightGlobal.x() - QApplication::desktop()->screenGeometry().width();
+      int dy = aBottomRightGlobal.y() - QApplication::desktop()->screenGeometry().height();
+      dx = dx < 0 ? 0 : -dx;
+      dy = dy < 0 ? 0 : -dy;
+      theTextReg.translate( dx, dy );
     }
   }
 }
index 03a4b149f7cf035a73e6a4e7f168aef1419be2a8..77fd11eb1f7b4858dcfe45c4ab877c07ff4a5d90 100644 (file)
@@ -61,9 +61,11 @@ class QRubberBand;
 class GLViewer_ViewPort2d: public GLViewer_ViewPort
 {
   Q_OBJECT
+  friend class GLViewer_Widget;
 
+public:
   //! Dragging states
-  enum vpDragState{ noDrag, initDrag, inDrag };
+  enum vpDragState{ noDrag = 0, initDrag, inDrag };
 
 public:
   GLViewer_ViewPort2d( QWidget* parent, GLViewer_ViewFrame* theViewFrame = NULL );
@@ -119,7 +121,7 @@ public:
   void                   endRotation();
   
   //! Checks of dragging process state
-  bool                   isDragProcess(){ return myIsDragProcess; }
+  int                    isDragProcess(){ return myIsDragProcess; }
   
   //! On/off compass
   void                   turnCompass( GLboolean on );
@@ -139,6 +141,9 @@ public:
   //! Pass rect into selector and update
   void                   finishSelectByRect();
   
+  //! Pass rect into selector and update
+  bool                   isSelectByRect() const;
+  
   //! \warnign It is for ouv
   bool                   startPulling( GLViewer_Pnt );
   //! \warnign It is for ouv
index c12d5f901a2e6a60209d23befee61d13fa97cee7..c035573511d77b0bd16982da12acaece2fcff7a4 100644 (file)
@@ -107,7 +107,7 @@ protected:
 
     virtual void                 startOperations( QMouseEvent* ) {}
     virtual bool                 updateOperations( QMouseEvent* ) { return false; }
-    virtual void                 finishOperations( QMouseEvent* ) {}
+    virtual bool                 finishOperations( QMouseEvent* ) { return false; }
     virtual void                 startOperations( QWheelEvent* ) {}
 
 protected slots:
index eaa41fb39faddbdabb6eb6ba64d25f9fd0bb7f0a..712bebbbfdc5286c24488cf664562cc79c9b12d0 100644 (file)
@@ -937,9 +937,15 @@ void GLViewer_Viewer2d::startOperations( QMouseEvent* e )
     transPoint( x, y );
     GLViewer_Pnt point( x, y );
 
-    if( e->button() == Qt::LeftButton && !myGLContext->getCurrentObject() && vp->startPulling( point ) )
+    // Try to start pooling if rectangular selection is performed
+    if( e->button() == Qt::LeftButton && !vp->isSelectByRect() && 
+        !vp->isDragProcess() && vp->startPulling( point ) )
+    {
+        vp->finishSelectByRect();
         return;
+    }
 
+    // Start rectangular selection if pulling was not started
     if( e->button() == Qt::LeftButton && !(vp->currentBlock() & BS_Selection) && !myGLContext->getCurrentObject() )
         vp->startSelectByRect( e->x(), e->y() );
 }
@@ -951,17 +957,30 @@ bool GLViewer_Viewer2d::updateOperations( QMouseEvent* e )
 {
     GLViewer_ViewPort2d* vp = ( GLViewer_ViewPort2d* )((GLViewer_ViewFrame*)getActiveView())->getViewPort();
 
+    float x = e->pos().x();
+    float y = e->pos().y();
+    transPoint( x, y );
+    GLViewer_Pnt point( x, y );
+
     if( vp->isPulling() )
     {
-        float x = e->pos().x();
-        float y = e->pos().y();
-        transPoint( x, y );
-
-        vp->drawPulling( GLViewer_Pnt( x, y ) );
+        vp->drawPulling( point );
         updateAll();
         return true;
     }
 
+    /*if( vp->isDragProcess() == GLViewer_ViewPort2d::inDrag )
+        return true;*/
+
+    if( e->button() == Qt::LeftButton )
+    {
+        if( !vp->isSelectByRect() && !vp->isDragProcess() && vp->startPulling( point ) )
+        {
+            vp->finishSelectByRect();
+            return true;
+        }
+    }
+
     if( !myGLContext->getCurrentObject() )
     {
         vp->drawSelectByRect( e->x(), e->y() );
@@ -971,9 +990,11 @@ bool GLViewer_Viewer2d::updateOperations( QMouseEvent* e )
 }
 
 /*!
-  Completes started operation on mouse event
+  Completes started operation on mouse event, Returns true if operation is considered
+  as completely finished and there is no point in performing other actions after finish
+  the operation.
 */
-void GLViewer_Viewer2d::finishOperations( QMouseEvent* e )
+bool GLViewer_Viewer2d::finishOperations( QMouseEvent* e )
 {
     GLViewer_ViewPort2d* vp = ( GLViewer_ViewPort2d* )((GLViewer_ViewFrame*)getActiveView())->getViewPort();
 
@@ -981,7 +1002,10 @@ void GLViewer_Viewer2d::finishOperations( QMouseEvent* e )
     {
         vp->finishPulling();
         updateAll();
-        return;
+        // Although operation is finished, FALSE is returned because base class try to 
+        // perform selection in this case. In the other case it is impossible to perform
+        // selection of pulled port
+        return false;
     }
 
     if( !myGLContext->getCurrentObject() )
@@ -992,8 +1016,11 @@ void GLViewer_Viewer2d::finishOperations( QMouseEvent* e )
         {            
             bool append = bool ( e->modifiers() & GLViewer_Selector::appendKey() );
             getSelector()->select( aSelRect, append );
+            return true;
         }
     }
+
+    return false;
 }
 
 /*!
index b31a4430abf4e87c1f161e45c4a2e7f848b58cff..5f7148b5ce6917430607c8bd7d1bd931503a5cf1 100644 (file)
@@ -209,7 +209,7 @@ protected:
   //! Updates started operations on mouse event
   virtual bool         updateOperations( QMouseEvent* );
   //! Completes started operations on mouse event
-  virtual void         finishOperations( QMouseEvent* );
+  virtual bool         finishOperations( QMouseEvent* );
   //! Starts any operations on mouse wheel event
   virtual void         startOperations( QWheelEvent* );
 
index 5ad81e29ca074b153132b6501772a638528ff8a8..e1de5e4c3150c901bc59fe210811c125c637c9d9 100644 (file)
@@ -345,15 +345,16 @@ void GLViewer_Widget::resizeGL( int w, int h )
   if( w < 1 ) w = 1;
   glViewport( 0, 0, w, h);
 
+  myViewPort->initResize( w, h );
+
   if( myStart )
   {
     myWidth = w;
     myHeight = h;
+    myViewPort->fitAll();
     myStart = GL_FALSE;
   }
 
-  myViewPort->initResize( w, h );
-
   glMatrixMode( GL_PROJECTION );
   glLoadIdentity();
   GLfloat w_c = w / 2., h_c = h / 2.;