OSDN Git Service

ok moving caret redrawing hexview to cursor
authorsuma <suma@users.sourceforge.jp>
Mon, 9 Mar 2009 09:53:59 +0000 (18:53 +0900)
committersuma <suma@users.sourceforge.jp>
Mon, 9 Mar 2009 09:53:59 +0000 (18:53 +0900)
src/control/standard/hexview.cpp
src/control/standard/scursor.cpp
src/control/standard/scursor.h

index a03014a..c443035 100644 (file)
@@ -436,7 +436,7 @@ void HexView::mousePressEvent(QMouseEvent *ev)
        if (ev->button() == Qt::LeftButton) {
                qDebug("mosue press pos:%llu end:%llu endO:%llu el:%llu", cursor->Position, cursor->SelEnd, cursor->SelEndOld, cursor->SelEnd / HexConfig::Num);
 
-#if 1
+#if 0
                // Draw selected lines
                drawSelected(true);
 
@@ -445,7 +445,7 @@ void HexView::mousePressEvent(QMouseEvent *ev)
                cursor->SelBegin = cursor->SelEnd = cursor->Position = posAt(ev->pos());
 
                // Set caret visible
-               cursor->Toggle = true;
+               cursor->Selection = true;
 
                //-- Redraw lines if caret moved
                if (config.EnableCaret && cursor->SelEnd != cursor->SelEndOld) {
@@ -457,7 +457,6 @@ void HexView::mousePressEvent(QMouseEvent *ev)
 
                drawCaret();
 #else
-               cursor->Toggle = true;
                cursor->movePosition(posAt(ev->pos()), true, false);
 #endif
 
@@ -470,12 +469,12 @@ void HexView::mousePressEvent(QMouseEvent *ev)
 void HexView::mouseMoveEvent(QMouseEvent *ev)
 {
        // Check mouse captured
-       if (!cursor->Toggle) {
+       if (!cursor->Selection) {
                return;
        }
 
        qDebug("mouse move");
-
+#if 0
        // Set moved position to OLD
        cursor->SelEndOld = cursor->SelEnd;
 
@@ -498,12 +497,19 @@ void HexView::mouseMoveEvent(QMouseEvent *ev)
                drawCaret();
                cursor->setHexCaretVisible(false);
        }
+#else
+       // FIXME: move down automatically
+       if (height() < ev->pos().y()) {
+               return;
+       }
+       cursor->movePosition(posAt(ev->pos()), true, false);
+#endif
 }
 
 void HexView::mouseReleaseEvent(QMouseEvent *ev)
 {
        // Check mouse captured
-       if (!cursor->Toggle) {
+       if (!cursor->Selection) {
                return;
        }
 
@@ -511,13 +517,12 @@ void HexView::mouseReleaseEvent(QMouseEvent *ev)
 
        // End mouse capture
        releaseMouse();
-
+#if 0
        // Set moved position
        cursor->SelEnd = cursor->Position = posAt(ev->pos());
        cursor->refreshSelected();
 
-       // Set caret invisible
-       cursor->Toggle = false;
+       cursor->Selection = false;
 
        // Redraw updated lines
        drawSelected(false);
@@ -527,6 +532,9 @@ void HexView::mouseReleaseEvent(QMouseEvent *ev)
                drawCaret();
                cursor->setHexCaretVisible(false);
        }
+#else
+       cursor->movePosition(posAt(ev->pos()), false, false);
+#endif
 }
 
 quint64 HexView::posAt(const QPoint &pos)
@@ -671,7 +679,6 @@ void HexView::keyPressEvent(QKeyEvent *ev)
        cursor->SelEndOld = cursor->SelEnd;
 
        if (ev->modifiers() != Qt::SHIFT) {
-               cursor->resetSelection();
        }
 
        // FIXME: refactoring refresh event
index 6f4e291..654c6c6 100644 (file)
@@ -17,7 +17,7 @@ Cursor::Cursor(Document *Doc, HexView *View)
        , SelEnd(0)
        , SelEndOld(0)
        , Selected(false)
-       , Toggle(false)
+       , Selection(false)
        , HighNibble(true)
        , CaretVisibleShape(CARET_BLOCK)
        , CaretInvisibleShape(CARET_FRAME)
@@ -116,10 +116,10 @@ void Cursor::movePosition(quint64 pos, bool sel, bool hold_vpos)
        
        const quint64 old_top = Top;
 
-       if (!Selected) {
+
+       if (!Selection) {
                if (sel) {
-                       qDebug("Cursor::movePosition() - move Cursor::Selected:%d", Selected);
-                       // # begin selection
+                       // # Begin selection
                        // Draw selected lines
                        view->drawSelected(true);
 
@@ -136,15 +136,48 @@ void Cursor::movePosition(quint64 pos, bool sel, bool hold_vpos)
                        }
 
                        view->drawCaret();
+
+                       setSelection(true);
                } else {
                        // normal move
                        //   only redrawCaret
                }
        } else {
                if (sel) {
-                       // move selection
+                       // # Move selection
+                       // Set moved position to OLD
+                       SelEndOld = SelEnd;
+
+                       // Set moved position
+                       SelEnd = Position = pos;
+
+                       // Refresh flag
+                       refreshSelected();
+
+                       // Redraw updated lines
+                       view->drawSelected(false);
+
+                       //-- Redraw caret if caret selection moved
+                       if (view->getConfig().EnableCaret && SelEnd != SelEndOld) {
+                               view->drawCaret();
+                               setHexCaretVisible(false);
+                       }
                } else {
-                       // end selection
+                       // # End selection
+                       // Set moved position
+                       SelEnd = Position = pos;
+                       refreshSelected();
+
+                       setSelection(false);
+
+                       // Redraw updated lines
+                       view->drawSelected(false);
+
+                       //-- Redraw caret if selection moved
+                       if (view->getConfig().EnableCaret && SelEnd != SelEndOld) {
+                               view->drawCaret();
+                               setHexCaretVisible(false);
+                       }
                }
        }
        // if !selected
@@ -156,10 +189,6 @@ void Cursor::movePosition(quint64 pos, bool sel, bool hold_vpos)
        //      drawSelected(false);
        //      drawCaret
 
-       if (!sel) {
-               //resetSelection();
-       }
-
        if (old_top == Top) {
                if (!sel && Selected) {
                        // beginning selection
index d387bdc..5c0d5ac 100644 (file)
@@ -32,7 +32,6 @@ namespace Standard {
                Cursor(Document *, HexView *);
                void refreshSelected();
                bool selMoved();
-               void resetSelection();
 
        private:
                Document *document;
@@ -48,7 +47,7 @@ namespace Standard {
                quint64 SelEnd;         // pos(not line)
                quint64 SelEndOld;      // old
                bool Selected;          // Begin != End
-               bool Toggle;
+               bool Selection;
                bool HighNibble;
        
                // for Caret
@@ -71,6 +70,7 @@ namespace Standard {
                void setSelectEndOld(quint64);
                */
 
+               void setSelection(bool);
                void setHexCaretVisible(bool t);
                void turnHexCaretVisible();
                void setTextCaretVisible(bool t);
@@ -105,9 +105,9 @@ namespace Standard {
                return SelEnd != SelEndOld;
        }
 
-       inline void Cursor::resetSelection()
+       inline void Cursor::setSelection(bool t)
        {
-               SelBegin = SelEnd;
+               Selection = t;
        }
 
        inline void Cursor::setHexCaretVisible(bool t)