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);
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) {
drawCaret();
#else
- cursor->Toggle = true;
cursor->movePosition(posAt(ev->pos()), true, false);
#endif
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;
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;
}
// 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);
drawCaret();
cursor->setHexCaretVisible(false);
}
+#else
+ cursor->movePosition(posAt(ev->pos()), false, false);
+#endif
}
quint64 HexView::posAt(const QPoint &pos)
cursor->SelEndOld = cursor->SelEnd;
if (ev->modifiers() != Qt::SHIFT) {
- cursor->resetSelection();
}
// FIXME: refactoring refresh event
, SelEnd(0)
, SelEndOld(0)
, Selected(false)
- , Toggle(false)
+ , Selection(false)
, HighNibble(true)
, CaretVisibleShape(CARET_BLOCK)
, CaretInvisibleShape(CARET_FRAME)
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);
}
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
// drawSelected(false);
// drawCaret
- if (!sel) {
- //resetSelection();
- }
-
if (old_top == Top) {
if (!sel && Selected) {
// beginning selection
Cursor(Document *, HexView *);
void refreshSelected();
bool selMoved();
- void resetSelection();
private:
Document *document;
quint64 SelEnd; // pos(not line)
quint64 SelEndOld; // old
bool Selected; // Begin != End
- bool Toggle;
+ bool Selection;
bool HighNibble;
// for Caret
void setSelectEndOld(quint64);
*/
+ void setSelection(bool);
void setHexCaretVisible(bool t);
void turnHexCaretVisible();
void setTextCaretVisible(bool t);
return SelEnd != SelEndOld;
}
- inline void Cursor::resetSelection()
+ inline void Cursor::setSelection(bool t)
{
- SelBegin = SelEnd;
+ Selection = t;
}
inline void Cursor::setHexCaretVisible(bool t)