3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS
14 #pragma implementation
19 #include "QWorkArea.h"
20 #include "QLyXKeySym.h"
21 #include "funcrequest.h"
26 #include <qapplication.h>
33 /// return the LyX key state from Qt's
34 key_modifier::state q_key_state(Qt::ButtonState state)
36 key_modifier::state k = key_modifier::none;
37 if (state & Qt::ControlButton)
38 k |= key_modifier::ctrl;
39 if (state & Qt::ShiftButton)
40 k |= key_modifier::shift;
41 if (state & Qt::AltButton)
42 k |= key_modifier::alt;
47 /// return the LyX mouse button state from Qt's
48 mouse_button::state q_button_state(Qt::ButtonState button)
50 mouse_button::state b = mouse_button::none;
53 b = mouse_button::button1;
56 b = mouse_button::button2;
59 b = mouse_button::button3;
68 /// return the LyX mouse button state from Qt's
69 mouse_button::state q_motion_state(Qt::ButtonState state)
71 mouse_button::state b = mouse_button::none;
72 if (state & Qt::LeftButton)
73 b |= mouse_button::button1;
74 if (state & Qt::MidButton)
75 b |= mouse_button::button2;
76 if (state & Qt::RightButton)
77 b |= mouse_button::button3;
84 QContentPane::QContentPane(QWorkArea * parent)
85 : QWidget(parent, "content_pane", WRepaintNoErase),
88 setFocusPolicy(QWidget::WheelFocus);
90 setCursor(ibeamCursor);
92 // stupid moc strikes again
93 connect(wa_->scrollbar_, SIGNAL(valueChanged(int)),
94 this, SLOT(scrollBarChanged(int)));
99 void QContentPane::scrollBarChanged(int val)
101 wa_->scrollDocView(val);
105 void QContentPane::mousePressEvent(QMouseEvent * e)
107 if (dc_event_.active && dc_event_ == *e) {
108 dc_event_.active = false;
109 FuncRequest cmd(LFUN_MOUSE_TRIPLE,
110 dc_event_.x, dc_event_.y,
111 q_button_state(dc_event_.state));
116 FuncRequest cmd(LFUN_MOUSE_PRESS, e->x(), e->y(),
117 q_button_state(e->button()));
122 void QContentPane::mouseReleaseEvent(QMouseEvent * e)
124 FuncRequest cmd(LFUN_MOUSE_RELEASE, e->x(), e->y(),
125 q_button_state(e->button()));
130 void QContentPane::mouseMoveEvent(QMouseEvent * e)
133 (LFUN_MOUSE_MOTION, e->x(), e->y(), q_motion_state(e->state()));
138 void QContentPane::wheelEvent(QWheelEvent * e)
140 wa_->scrollbar_->setValue(wa_->scrollbar_->value() - e->delta());
144 void QContentPane::keyPressEvent(QKeyEvent * e)
146 lyxerr[Debug::KEY] << "Press key " << e->key()
148 << (e->text().isEmpty() ?
151 << "\", ascii \"" << e->ascii() << '"' << endl;
152 QLyXKeySym * sym = new QLyXKeySym();
154 wa_->workAreaKeyPress(LyXKeySymPtr(sym), q_key_state(e->state()));
158 void QContentPane::doubleClickTimeout()
160 if (!dc_event_.active)
163 dc_event_.active = false;
165 FuncRequest cmd(LFUN_MOUSE_DOUBLE,
166 dc_event_.x, dc_event_.y,
167 q_button_state(dc_event_.state));
172 void QContentPane::mouseDoubleClickEvent(QMouseEvent * e)
174 dc_event_ = double_click(e);
176 // doubleClickInterval() is just too long.
177 QTimer::singleShot(int(QApplication::doubleClickInterval() / 1.5),
178 this, SLOT(doubleClickTimeout()));
182 void QContentPane::resizeEvent(QResizeEvent *)
184 if (!pixmap_.get()) {
185 pixmap_.reset(new QPixmap(width(), height()));
188 pixmap_->resize(width(), height());
189 wa_->workAreaResize();
193 void QContentPane::paintEvent(QPaintEvent * e)
195 if (!pixmap_.get()) {
196 pixmap_.reset(new QPixmap(width(), height()));
197 wa_->workAreaResize();
203 lyxerr[Debug::GUI] << "repainting " << r.x()
204 << ',' << r.y() << ' ' << r.width()
205 << ',' << r.height() << endl;
207 q.drawPixmap(QPoint(r.x(), r.y()),