[Uml-devel] kdesdk/umbrello/umbrello

Oliver Kellogg okellogg at users.sourceforge.net
Wed Sep 22 14:11:23 UTC 2004


CVS commit by okellogg: 

Patch by Pekka <pjaaskel_AT_cs.tut.fi> for the cursor keys:
 - Set the UMLDoc modified
 - Refactor the key handling code


  M +37 -27    uml.cpp   1.115
  M +5 -0      uml.h   1.39


--- kdesdk/umbrello/umbrello/uml.h  #1.38:1.39
@@ -295,4 +295,9 @@ protected:
 
         /**
+         * Helper method for handling cursor key release events (refactoring).
+         */
+         void handleCursorKeyReleaseEvent(QKeyEvent* e);
+
+        /**
          * Save general Options like all bar positions and status
          * as well as the geometry and the recent file list to

--- kdesdk/umbrello/umbrello/uml.cpp  #1.114:1.115
@@ -1415,4 +1415,40 @@ void UMLApp::keyPressEvent(QKeyEvent *e)
 }
 
+void UMLApp::handleCursorKeyReleaseEvent(QKeyEvent* e) {
+        // in case we have selected something in the diagram, move it by one pixel
+        // to the direction pointed by the cursor key
+        if (m_view && m_view->getSelectCount()) {
+                int dx = 0;
+                int dy = 0;
+                switch (e->key()) {
+                        case Qt::Key_Left:
+                                dx = -1;
+                                break;
+                        case Qt::Key_Right:
+                                dx = 1;
+                                break;
+                        case Qt::Key_Up:
+                                dy = -1;
+                                break;
+                        case Qt::Key_Down:
+                                dy = 1;
+                                break;
+                        default:
+                                e->ignore();
+                                return;
+                }
+                m_view->moveSelectedBy(dx, dy);
+                
+                // notify about modification only at the first key release of possible sequence of auto repeat key releases,
+                // this reduces the slow down caused by setModified() and makes the cursor moving of widgets smoother
+                if (!e->isAutoRepeat()) {
+                        m_doc->setModified();
+                }
+                e->accept();
+        } else {
+                e->ignore();
+        }
+}
+
 void UMLApp::keyReleaseEvent(QKeyEvent *e) {
         switch(e->key()) {
@@ -1427,34 +1463,8 @@ void UMLApp::keyReleaseEvent(QKeyEvent *
                         break;
                 case Qt::Key_Left:
-                        if (m_view && m_view->getSelectCount()) {
-                                m_view->moveSelectedBy(-1,  0 );
-                                e->accept();
-                        } else {
-                                e->ignore();
-                        }
-                        break;
                 case Qt::Key_Right:
-                        if (m_view && m_view->getSelectCount()) {
-                                m_view->moveSelectedBy( 1,  0 );
-                                e->accept();
-                        } else {
-                                e->ignore();
-                        }
-                        break;
                 case Qt::Key_Up:
-                        if (m_view && m_view->getSelectCount()) {
-                                m_view->moveSelectedBy( 0, -1 );
-                                e->accept();
-                        } else {
-                                e->ignore();
-                        }
-                        break;
                 case Qt::Key_Down:
-                        if (m_view && m_view->getSelectCount()) {
-                                m_view->moveSelectedBy( 0,  1 );
-                                e->accept();
-                        } else {
-                                e->ignore();
-                        }
+                        handleCursorKeyReleaseEvent(e);
                         break;
                 default:






More information about the umbrello-devel mailing list