Prepare for advanced mouse click selections.

* WorkArea::dispatch(): add modifiers argument.

* GuiWorkArea::mousePressEvent(): transmit the modifier to WorkArea::dispatch().
 

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16878 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2007-01-27 10:41:03 +00:00
parent ecb37d95df
commit c4d317d217
3 changed files with 23 additions and 9 deletions

View File

@ -182,7 +182,7 @@ void WorkArea::processKeySym(LyXKeySymPtr key, key_modifier::state state)
} }
void WorkArea::dispatch(FuncRequest const & cmd0) void WorkArea::dispatch(FuncRequest const & cmd0, key_modifier::state k)
{ {
// Handle drag&drop // Handle drag&drop
if (cmd0.action == LFUN_FILE_OPEN) { if (cmd0.action == LFUN_FILE_OPEN) {
@ -192,10 +192,23 @@ void WorkArea::dispatch(FuncRequest const & cmd0)
theLyXFunc().setLyXView(&lyx_view_); theLyXFunc().setLyXView(&lyx_view_);
bool needRedraw = buffer_view_->workAreaDispatch(cmd0); FuncRequest cmd;
if (cmd0.action == LFUN_MOUSE_PRESS) {
if (k == key_modifier::shift)
cmd = FuncRequest(cmd0, "region-select");
else if (k == key_modifier::ctrl)
cmd = FuncRequest(cmd0, "paragraph-select");
else
cmd = cmd0;
}
else
cmd = cmd0;
bool needRedraw = buffer_view_->workAreaDispatch(cmd);
// Skip these when selecting // Skip these when selecting
if (cmd0.action != LFUN_MOUSE_MOTION) { if (cmd.action != LFUN_MOUSE_MOTION) {
lyx_view_.updateLayoutChoice(); lyx_view_.updateLayoutChoice();
lyx_view_.updateMenubar(); lyx_view_.updateMenubar();
lyx_view_.updateToolbars(); lyx_view_.updateToolbars();
@ -203,14 +216,14 @@ void WorkArea::dispatch(FuncRequest const & cmd0)
// GUI tweaks except with mouse motion with no button pressed. // GUI tweaks except with mouse motion with no button pressed.
if (!(cmd0.action == LFUN_MOUSE_MOTION if (!(cmd.action == LFUN_MOUSE_MOTION
&& cmd0.button() == mouse_button::none)) { && cmd.button() == mouse_button::none)) {
// Slight hack: this is only called currently when we // Slight hack: this is only called currently when we
// clicked somewhere, so we force through the display // clicked somewhere, so we force through the display
// of the new status here. // of the new status here.
lyx_view_.clearMessage(); lyx_view_.clearMessage();
// Show the cursor immediately after any operation. // Show the cursor immediately after any operation.
hideCursor(); hideCursor();
toggleCursor(); toggleCursor();
} }

View File

@ -98,7 +98,8 @@ protected:
/// cause the display of the given area of the work area /// cause the display of the given area of the work area
virtual void expose(int x, int y, int w, int h) = 0; virtual void expose(int x, int y, int w, int h) = 0;
/// ///
void dispatch(FuncRequest const & cmd0); void dispatch(FuncRequest const & cmd0,
key_modifier::state = key_modifier::none);
/// ///
void resizeBufferView(); void resizeBufferView();
/// ///

View File

@ -290,8 +290,8 @@ void GuiWorkArea::mousePressEvent(QMouseEvent * e)
} }
FuncRequest const cmd(LFUN_MOUSE_PRESS, e->x(), e->y(), FuncRequest const cmd(LFUN_MOUSE_PRESS, e->x(), e->y(),
q_button_state(e->button())); q_button_state(e->button()));
dispatch(cmd); dispatch(cmd, q_key_state(e->modifiers()));
} }