]> git.lyx.org Git - lyx.git/blob - src/frontends/qt2/QContentPane.C
resize/redraw changes
[lyx.git] / src / frontends / qt2 / QContentPane.C
1 /**
2  * \file QContentPane.C
3  * Copyright 1995-2002 the LyX Team
4  * Read the file COPYING
5  *
6  * \author John Levon <moz@compsoc.man.ac.uk>
7  */
8
9 #include <config.h>
10
11 #ifdef __GNUG__
12 #pragma implementation
13 #endif
14
15 #include "debug.h"
16
17 #include "QWorkArea.h"
18 #include "QLyXKeySym.h"
19
20 #include <qevent.h>
21 #include <qpainter.h>
22  
23  
24 namespace {
25  
26 /// return the LyX key state from Qt's
27 key_modifier::state q_key_state(Qt::ButtonState state)
28 {
29         key_modifier::state k = key_modifier::none;
30         if (state & Qt::ControlButton)
31                 k |= key_modifier::ctrl;
32         if (state & Qt::ShiftButton)
33                 k |= key_modifier::shift;
34         if (state & Qt::AltButton)
35                 k |= key_modifier::alt;
36         return k;
37 }
38
39 /// return the LyX mouse button state from Qt's
40 mouse_button::state q_button_state(Qt::ButtonState button)
41 {
42         mouse_button::state b = mouse_button::none;
43         switch (button) {
44                 case Qt::LeftButton:
45                         b = mouse_button::button1;
46                         break;
47                 case Qt::MidButton:
48                         b = mouse_button::button2;
49                         break;
50                 case Qt::RightButton:
51                         b = mouse_button::button3;
52                         break;
53                 default:
54                         break;
55         }
56         return b;
57 }
58  
59  
60 /// return the LyX mouse button state from Qt's
61 mouse_button::state q_motion_state(Qt::ButtonState state)
62 {
63         mouse_button::state b = mouse_button::none;
64         if (state & Qt::LeftButton)
65                 b |= mouse_button::button1;
66         if (state & Qt::MidButton)
67                 b |= mouse_button::button2;
68         if (state & Qt::RightButton)
69                 b |= mouse_button::button3;
70         return b;
71 }
72
73 } // namespace anon
74  
75
76 QContentPane::QContentPane(QWorkArea * parent)
77         : QWidget(parent, "content_pane", WRepaintNoErase), 
78         wa_(parent)
79 {
80         setFocusPolicy(QWidget::WheelFocus);
81         setFocus();
82
83         // stupid moc strikes again
84         connect(wa_->scrollbar_, SIGNAL(valueChanged(int)), 
85                 this, SLOT(scrollBarChanged(int)));
86  
87 }
88
89
90 void QContentPane::scrollBarChanged(int val)
91 {
92         wa_->scrollDocView(val); 
93 }
94  
95  
96 void QContentPane::mousePressEvent(QMouseEvent * e)
97 {
98         wa_->workAreaButtonPress(e->x(), e->y(), q_button_state(e->button()));
99 }
100
101
102 void QContentPane::mouseReleaseEvent(QMouseEvent * e)
103 {
104         wa_->workAreaButtonRelease(e->x(), e->y(), q_button_state(e->button()));
105 }
106
107  
108 void QContentPane::mouseMoveEvent(QMouseEvent * e)
109 {
110         wa_->workAreaMotionNotify(e->x(), e->y(), q_motion_state(e->state()));
111 }
112
113
114 void QContentPane::keyPressEvent(QKeyEvent * e)
115 {
116         char const * tmp = e->text().latin1();
117         string const text = tmp ? tmp : "";
118         lyxerr[Debug::GUI] << "key text " << text << endl;
119         QLyXKeySym * sym = new QLyXKeySym();
120         sym->set(e->key(), e->text());
121         wa_->workAreaKeyPress(LyXKeySymPtr(sym), q_key_state(e->state()));
122 }
123
124  
125 void QContentPane::mouseDoubleClickEvent(QMouseEvent * e)
126 {
127         wa_->workAreaDoubleClick(e->x(), e->y(), q_button_state(e->state()));
128         // FIXME: triple click 
129 }
130  
131  
132 void QContentPane::resizeEvent(QResizeEvent *)
133 {
134         if (!pixmap_.get()) {
135                 pixmap_.reset(new QPixmap(width(), height()));
136         }
137
138         pixmap_->resize(width(), height());
139         wa_->workAreaResize();
140 }
141
142  
143 void QContentPane::paintEvent(QPaintEvent * e)
144 {
145         if (!pixmap_.get()) {
146                 pixmap_.reset(new QPixmap(width(), height()));
147                 wa_->workAreaResize();
148                 return;
149         }
150
151         QRect r(e->rect());
152  
153         lyxerr[Debug::GUI] << "repainting " << r.x() 
154                 << "," << r.y() << " " << r.width() 
155                 << "," << r.height() << endl;
156         QPainter q(this);
157         q.drawPixmap(QPoint(r.x(), r.y()),
158                 *pixmap_.get(), r); 
159 }