summaryrefslogtreecommitdiff
path: root/noncore/graphics/drawpad/drawpad.cpp
Unidiff
Diffstat (limited to 'noncore/graphics/drawpad/drawpad.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpad.cpp390
1 files changed, 390 insertions, 0 deletions
diff --git a/noncore/graphics/drawpad/drawpad.cpp b/noncore/graphics/drawpad/drawpad.cpp
new file mode 100644
index 0000000..3c593b6
--- a/dev/null
+++ b/noncore/graphics/drawpad/drawpad.cpp
@@ -0,0 +1,390 @@
1/***************************************************************************
2 * *
3 * DrawPad - a drawing program for Opie Environment *
4 * *
5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
6 * *
7 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. *
11 * *
12 ***************************************************************************/
13
14#include "drawpad.h"
15
16#include "drawpadcanvas.h"
17#include "ellipsedrawmode.h"
18#include "erasedrawmode.h"
19#include "filldrawmode.h"
20#include "linedrawmode.h"
21#include "pointdrawmode.h"
22#include "rectangledrawmode.h"
23
24#include <qpe/global.h>
25#include <qpe/qpemenubar.h>
26#include <qpe/qpetoolbar.h>
27#include <qpe/resource.h>
28
29#include <qaction.h>
30#include <qfile.h>
31#include <qpainter.h>
32#include <qspinbox.h>
33#include <qtoolbutton.h>
34#include <qtooltip.h>
35
36DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
37 : QMainWindow(parent, name, f)
38{
39 setCaption(tr("DrawPad"));
40
41 // init members
42
43 m_pDrawPadCanvas = new DrawPadCanvas(this, this);
44
45 QFile file(Global::applicationFileName("drawpad", "drawpad.xml"));
46
47 if (file.open(IO_ReadOnly)) {
48 m_pDrawPadCanvas->load(&file);
49 file.close();
50 }
51
52 setCentralWidget(m_pDrawPadCanvas);
53
54 m_colors.resize(8);
55 m_colors.at(0) = Qt::black;
56 m_colors.at(1) = Qt::white;
57 m_colors.at(2) = Qt::red;
58 m_colors.at(3) = Qt::green;
59 m_colors.at(4) = Qt::blue;
60 m_colors.at(5) = Qt::cyan;
61 m_colors.at(6) = Qt::magenta;
62 m_colors.at(7) = Qt::yellow;
63
64 // init menu
65
66 setToolBarsMovable(false);
67
68 QPEToolBar* menuToolBar = new QPEToolBar(this);
69 QPEMenuBar* menuBar = new QPEMenuBar(menuToolBar);
70
71 QPopupMenu *toolsPopupMenu = new QPopupMenu(menuBar);
72
73 QAction* clearAllAction = new QAction(tr("Clear All"), QString::null, 0, this);
74 connect(clearAllAction, SIGNAL(activated()), this, SLOT(clearAll()));
75 clearAllAction->addTo(toolsPopupMenu);
76
77 toolsPopupMenu->insertSeparator();
78
79 QAction* setOptionsAction = new QAction(tr("Options"), tr("Options..."), 0, this);
80 setOptionsAction->addTo(toolsPopupMenu);
81
82 menuBar->insertItem(tr("Tools"), toolsPopupMenu);
83
84 // init page toolbar
85
86 QPEToolBar* pageToolBar = new QPEToolBar(this);
87
88 QAction* newPageAction = new QAction(tr("New Page"), Resource::loadIconSet("new"), QString::null, 0, this);
89 connect(newPageAction, SIGNAL(activated()), this, SLOT(newPage()));
90 newPageAction->addTo(pageToolBar);
91
92 QAction* clearPageAction = new QAction(tr("Clear Page"), Resource::loadIconSet("drawpad/clear"), QString::null, 0, this);
93 connect(clearPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(clearPage()));
94 clearPageAction->addTo(pageToolBar);
95
96 QAction* deletePageAction = new QAction(tr("Delete Page"), Resource::loadIconSet("trash"), QString::null, 0, this);
97 connect(deletePageAction, SIGNAL(activated()), this, SLOT(deletePage()));
98 deletePageAction->addTo(pageToolBar);
99
100 QPEToolBar* emptyToolBar = new QPEToolBar(this);
101 emptyToolBar->setHorizontalStretchable(true);
102
103 // init navigation toolbar
104
105 QPEToolBar* navigationToolBar = new QPEToolBar(this);
106
107 m_pFirstPageAction = new QAction(tr("First Page"), Resource::loadIconSet("fastback"), QString::null, 0, this);
108 connect(m_pFirstPageAction, SIGNAL(activated()), this, SLOT(goFirstPage()));
109 m_pFirstPageAction->addTo(navigationToolBar);
110
111 m_pPreviousPageAction = new QAction(tr("Previous Page"), Resource::loadIconSet("back"), QString::null, 0, this);
112 connect(m_pPreviousPageAction, SIGNAL(activated()), this, SLOT(goPreviousPage()));
113 m_pPreviousPageAction->addTo(navigationToolBar);
114
115 m_pNextPageAction = new QAction(tr("Next Page"), Resource::loadIconSet("forward"), QString::null, 0, this);
116 connect(m_pNextPageAction, SIGNAL(activated()), this, SLOT(goNextPage()));
117 m_pNextPageAction->addTo(navigationToolBar);
118
119 m_pLastPageAction = new QAction(tr("Last Page"), Resource::loadIconSet("fastforward"), QString::null, 0, this);
120 connect(m_pLastPageAction, SIGNAL(activated()), this, SLOT(goLastPage()));
121 m_pLastPageAction->addTo(navigationToolBar);
122
123 updateNavigationToolBar();
124
125 // init draw mode toolbar
126
127 QPEToolBar* drawModeToolBar = new QPEToolBar(this);
128
129 m_pPointDrawModeAction = new QAction(tr("Draw Point"), Resource::loadIconSet("drawpad/point.png"), QString::null, 0, this);
130 m_pPointDrawModeAction->setToggleAction(true);
131 connect(m_pPointDrawModeAction, SIGNAL(activated()), this, SLOT(setPointDrawMode()));
132 m_pPointDrawModeAction->addTo(drawModeToolBar);
133
134 m_pLineDrawModeAction = new QAction(tr("Draw Line"), Resource::loadIconSet("drawpad/line.png"), QString::null, 0, this);
135 m_pLineDrawModeAction->setToggleAction(true);
136 connect(m_pLineDrawModeAction, SIGNAL(activated()), this, SLOT(setLineDrawMode()));
137 m_pLineDrawModeAction->addTo(drawModeToolBar);
138
139 m_pRectangleDrawModeAction = new QAction(tr("Draw Rectangle"), Resource::loadIconSet("drawpad/rectangle.png"), QString::null, 0, this);
140 m_pRectangleDrawModeAction->setToggleAction(true);
141 connect(m_pRectangleDrawModeAction, SIGNAL(activated()), this, SLOT(setRectangleDrawMode()));
142 m_pRectangleDrawModeAction->addTo(drawModeToolBar);
143
144 m_pEllipseDrawModeAction = new QAction(tr("Draw Ellipse"), Resource::loadIconSet("drawpad/ellipse.png"), QString::null, 0, this);
145 m_pEllipseDrawModeAction->setToggleAction(true);
146 connect(m_pEllipseDrawModeAction, SIGNAL(activated()), this, SLOT(setEllipseDrawMode()));
147 m_pEllipseDrawModeAction->addTo(drawModeToolBar);
148
149 m_pFillDrawModeAction = new QAction(tr("Fill Region"), Resource::loadIconSet("drawpad/fill.png"), QString::null, 0, this);
150 m_pFillDrawModeAction->setToggleAction(true);
151 connect(m_pFillDrawModeAction, SIGNAL(activated()), this, SLOT(setFillDrawMode()));
152 m_pFillDrawModeAction->addTo(drawModeToolBar);
153
154 m_pEraseDrawModeAction = new QAction(tr("Erase Point"), Resource::loadIconSet("drawpad/erase.png"), QString::null, 0, this);
155 m_pEraseDrawModeAction->setToggleAction(true);
156 connect(m_pEraseDrawModeAction, SIGNAL(activated()), this, SLOT(setEraseDrawMode()));
157 m_pEraseDrawModeAction->addTo(drawModeToolBar);
158
159 m_pDrawMode = 0;
160 setPointDrawMode();
161
162 emptyToolBar = new QPEToolBar(this);
163 emptyToolBar->setHorizontalStretchable(true);
164
165 QPEToolBar* drawParametersToolBar = new QPEToolBar(this);
166
167 QSpinBox* penWidthSpinBox = new QSpinBox(1, 9, 1, drawParametersToolBar);
168 connect(penWidthSpinBox, SIGNAL(valueChanged(int)), this, SLOT(changePenWidth(int)));
169
170 penWidthSpinBox->setValue(1);
171
172 m_pPenColorToolButton = new QToolButton(drawParametersToolBar);
173 m_pPenColorToolButton->setPixmap(Resource::loadPixmap("drawpad/pencolor.png"));
174
175 QPopupMenu* penColorPopupMenu = new QPopupMenu(m_pPenColorToolButton);
176 connect(penColorPopupMenu, SIGNAL(activated(int)), this, SLOT(changePenColor(int)));
177
178 QPixmap penColorPixmap(14, 14);
179
180 for (uint i = 0; i < m_colors.size(); i++) {
181 penColorPixmap.fill(m_colors.at(i));
182 penColorPopupMenu->insertItem(penColorPixmap, i);
183 }
184
185 QToolTip::add(m_pPenColorToolButton, tr("Pen Color"));
186 m_pPenColorToolButton->setPopup(penColorPopupMenu);
187 m_pPenColorToolButton->setPopupDelay(0);
188
189 penColorPopupMenu->activateItemAt(0);
190
191 m_pBrushColorToolButton = new QToolButton(drawParametersToolBar);
192 m_pBrushColorToolButton->setPixmap(Resource::loadPixmap("drawpad/brushcolor.png"));
193
194 QPopupMenu* brushColorPopupMenu = new QPopupMenu(m_pBrushColorToolButton);
195 connect(brushColorPopupMenu, SIGNAL(activated(int)), this, SLOT(changeBrushColor(int)));
196
197 QPixmap brushColorPixmap(14, 14);
198
199 for (uint i = 0; i < m_colors.size(); i++) {
200 brushColorPixmap.fill(m_colors.at(i));
201 brushColorPopupMenu->insertItem(brushColorPixmap, i);
202 }
203
204 QToolTip::add(m_pBrushColorToolButton, tr("Fill Color"));
205 m_pBrushColorToolButton->setPopup(brushColorPopupMenu);
206 m_pBrushColorToolButton->setPopupDelay(0);
207
208 brushColorPopupMenu->activateItemAt(1);
209}
210
211DrawPad::~DrawPad()
212{
213 QFile file(Global::applicationFileName("drawpad", "drawpad.xml"));
214
215 if (file.open(IO_WriteOnly)) {
216 m_pDrawPadCanvas->save(&file);
217 file.close();
218 }
219}
220
221void DrawPad::clearAll()
222{
223 m_pDrawPadCanvas->clearAll();
224 updateNavigationToolBar();
225}
226
227void DrawPad::newPage()
228{
229 m_pDrawPadCanvas->newPage();
230 updateNavigationToolBar();
231}
232
233void DrawPad::deletePage()
234{
235 m_pDrawPadCanvas->deletePage();
236 updateNavigationToolBar();
237}
238
239void DrawPad::goFirstPage()
240{
241 m_pDrawPadCanvas->goFirstPage();
242 updateNavigationToolBar();
243}
244
245void DrawPad::goPreviousPage()
246{
247 m_pDrawPadCanvas->goPreviousPage();
248 updateNavigationToolBar();
249}
250
251void DrawPad::goNextPage()
252{
253 m_pDrawPadCanvas->goNextPage();
254 updateNavigationToolBar();
255}
256
257void DrawPad::goLastPage()
258{
259 m_pDrawPadCanvas->goLastPage();
260 updateNavigationToolBar();
261}
262
263void DrawPad::setPointDrawMode()
264{
265 if (m_pDrawMode) {
266 delete m_pDrawMode;
267 }
268
269 m_pDrawMode = new PointDrawMode(this, m_pDrawPadCanvas);
270
271 m_pPointDrawModeAction->setOn(true);
272 m_pLineDrawModeAction->setOn(false);
273 m_pRectangleDrawModeAction->setOn(false);
274 m_pEllipseDrawModeAction->setOn(false);
275 m_pFillDrawModeAction->setOn(false);
276 m_pEraseDrawModeAction->setOn(false);
277}
278
279void DrawPad::setLineDrawMode()
280{
281 if (m_pDrawMode) {
282 delete m_pDrawMode;
283 }
284
285 m_pDrawMode = new LineDrawMode(this, m_pDrawPadCanvas);
286
287 m_pPointDrawModeAction->setOn(false);
288 m_pLineDrawModeAction->setOn(true);
289 m_pRectangleDrawModeAction->setOn(false);
290 m_pEllipseDrawModeAction->setOn(false);
291 m_pFillDrawModeAction->setOn(false);
292 m_pEraseDrawModeAction->setOn(false);
293}
294
295void DrawPad::setRectangleDrawMode()
296{
297 if (m_pDrawMode) {
298 delete m_pDrawMode;
299 }
300
301 m_pDrawMode = new RectangleDrawMode(this, m_pDrawPadCanvas);
302
303 m_pPointDrawModeAction->setOn(false);
304 m_pLineDrawModeAction->setOn(false);
305 m_pRectangleDrawModeAction->setOn(true);
306 m_pEllipseDrawModeAction->setOn(false);
307 m_pFillDrawModeAction->setOn(false);
308 m_pEraseDrawModeAction->setOn(false);
309}
310
311void DrawPad::setEllipseDrawMode()
312{
313 if (m_pDrawMode) {
314 delete m_pDrawMode;
315 }
316
317 m_pDrawMode = new EllipseDrawMode(this, m_pDrawPadCanvas);
318
319 m_pPointDrawModeAction->setOn(false);
320 m_pLineDrawModeAction->setOn(false);
321 m_pRectangleDrawModeAction->setOn(false);
322 m_pEllipseDrawModeAction->setOn(true);
323 m_pFillDrawModeAction->setOn(false);
324 m_pEraseDrawModeAction->setOn(false);
325}
326
327void DrawPad::setFillDrawMode()
328{
329 if (m_pDrawMode) {
330 delete m_pDrawMode;
331 }
332
333 m_pDrawMode = new FillDrawMode(this, m_pDrawPadCanvas);
334
335 m_pPointDrawModeAction->setOn(false);
336 m_pLineDrawModeAction->setOn(false);
337 m_pRectangleDrawModeAction->setOn(false);
338 m_pEllipseDrawModeAction->setOn(false);
339 m_pFillDrawModeAction->setOn(true);
340 m_pEraseDrawModeAction->setOn(false);
341}
342
343void DrawPad::setEraseDrawMode()
344{
345 if (m_pDrawMode) {
346 delete m_pDrawMode;
347 }
348
349 m_pDrawMode = new EraseDrawMode(this, m_pDrawPadCanvas);
350
351 m_pPointDrawModeAction->setOn(false);
352 m_pLineDrawModeAction->setOn(false);
353 m_pRectangleDrawModeAction->setOn(false);
354 m_pEllipseDrawModeAction->setOn(false);
355 m_pFillDrawModeAction->setOn(false);
356 m_pEraseDrawModeAction->setOn(true);
357}
358
359void DrawPad::changePenWidth(int value)
360{
361 m_pen.setWidth(value);
362}
363
364void DrawPad::changePenColor(int index)
365{
366 m_pen.setColor(m_colors.at(index));
367
368 QPainter painter;
369 painter.begin(m_pPenColorToolButton->pixmap());
370 painter.fillRect(QRect(0, 12, 14, 2), m_pen.color());
371 painter.end();
372}
373
374void DrawPad::changeBrushColor(int index)
375{
376 m_brush = QBrush(m_colors.at(index));
377
378 QPainter painter;
379 painter.begin(m_pBrushColorToolButton->pixmap());
380 painter.fillRect(QRect(0, 12, 14, 2), m_brush.color());
381 painter.end();
382}
383
384void DrawPad::updateNavigationToolBar()
385{
386 m_pFirstPageAction->setEnabled(m_pDrawPadCanvas->goPreviousPageEnabled());
387 m_pPreviousPageAction->setEnabled(m_pDrawPadCanvas->goPreviousPageEnabled());
388 m_pNextPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled());
389 m_pLastPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled());
390}