summaryrefslogtreecommitdiff
authorleseb <leseb>2002-06-07 20:30:30 (UTC)
committer leseb <leseb>2002-06-07 20:30:30 (UTC)
commit9dcd598f9b815511cae884d26b18e3c8913b9fcf (patch) (unidiff)
tree4b18e7fa7c864b2dca4da76bc89c2a975e80a73c
parent640d964cfdc7467f6cacb513087cd3acda2c04f0 (diff)
downloadopie-9dcd598f9b815511cae884d26b18e3c8913b9fcf.zip
opie-9dcd598f9b815511cae884d26b18e3c8913b9fcf.tar.gz
opie-9dcd598f9b815511cae884d26b18e3c8913b9fcf.tar.bz2
Make progress in thumbnail view
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpad.cpp54
-rw-r--r--noncore/graphics/drawpad/drawpad.h4
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp75
-rw-r--r--noncore/graphics/drawpad/thumbnailview.cpp196
-rw-r--r--noncore/graphics/drawpad/thumbnailview.h53
5 files changed, 262 insertions, 120 deletions
diff --git a/noncore/graphics/drawpad/drawpad.cpp b/noncore/graphics/drawpad/drawpad.cpp
index b325323..58c0d09 100644
--- a/noncore/graphics/drawpad/drawpad.cpp
+++ b/noncore/graphics/drawpad/drawpad.cpp
@@ -1,536 +1,582 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * DrawPad - a drawing program for Opie Environment * 3 * DrawPad - a drawing program for Opie Environment *
4 * * 4 * *
5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> * 5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
6 * * 6 * *
7 * This program is free software; you can redistribute it and/or modify * 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 * 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 * 9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. * 10 * (at your option) any later version. *
11 * * 11 * *
12 ***************************************************************************/ 12 ***************************************************************************/
13 13
14#include "drawpad.h" 14#include "drawpad.h"
15 15
16#include "drawpadcanvas.h" 16#include "drawpadcanvas.h"
17#include "ellipsetool.h" 17#include "ellipsetool.h"
18#include "erasetool.h" 18#include "erasetool.h"
19#include "exportdialog.h" 19#include "exportdialog.h"
20#include "filledellipsetool.h" 20#include "filledellipsetool.h"
21#include "filledrectangletool.h" 21#include "filledrectangletool.h"
22#include "filltool.h" 22#include "filltool.h"
23#include "importdialog.h" 23#include "importdialog.h"
24#include "linetool.h" 24#include "linetool.h"
25#include "pointtool.h" 25#include "pointtool.h"
26#include "rectangletool.h" 26#include "rectangletool.h"
27#include "texttool.h" 27#include "texttool.h"
28#include "thumbnailview.h" 28#include "thumbnailview.h"
29 29
30#include <opie/colordialog.h> 30#include <opie/colordialog.h>
31#include <opie/colorpopupmenu.h> 31#include <opie/colorpopupmenu.h>
32 32
33#include <qpe/applnk.h> 33#include <qpe/applnk.h>
34#include <qpe/global.h> 34#include <qpe/global.h>
35#include <qpe/qpemenubar.h> 35#include <qpe/qpemenubar.h>
36#include <qpe/qpetoolbar.h> 36#include <qpe/qpetoolbar.h>
37#include <qpe/resource.h> 37#include <qpe/resource.h>
38 38
39#include <qaction.h> 39#include <qaction.h>
40#include <qfile.h> 40#include <qfile.h>
41#include <qmessagebox.h>
41#include <qpainter.h> 42#include <qpainter.h>
42#include <qspinbox.h> 43#include <qspinbox.h>
43#include <qtoolbutton.h> 44#include <qtoolbutton.h>
44#include <qtooltip.h> 45#include <qtooltip.h>
45 46
46DrawPad::DrawPad(QWidget* parent, const char* name) 47DrawPad::DrawPad(QWidget* parent, const char* name)
47 : QMainWindow(parent, name) 48 : QMainWindow(parent, name)
48{ 49{
49 // init members 50 // init members
50 51
51 m_pDrawPadCanvas = new DrawPadCanvas(this, this); 52 m_pDrawPadCanvas = new DrawPadCanvas(this, this);
52 53
53 connect(m_pDrawPadCanvas, SIGNAL(pagesChanged()), this, SLOT(updateNavigationToolButtons())); 54 connect(m_pDrawPadCanvas, SIGNAL(pagesChanged()), this, SLOT(updateNavigationToolButtons()));
54 connect(m_pDrawPadCanvas, SIGNAL(pagesChanged()), this, SLOT(updateCaption())); 55 connect(m_pDrawPadCanvas, SIGNAL(pagesChanged()), this, SLOT(updateCaption()));
55 connect(m_pDrawPadCanvas, SIGNAL(pageBackupsChanged()), this, SLOT(updateUndoRedoToolButtons())); 56 connect(m_pDrawPadCanvas, SIGNAL(pageBackupsChanged()), this, SLOT(updateUndoRedoToolButtons()));
56 57
57 setCentralWidget(m_pDrawPadCanvas); 58 setCentralWidget(m_pDrawPadCanvas);
58 59
59 // init menu 60 // init menu
60 61
61 setToolBarsMovable(false); 62 setToolBarsMovable(false);
62 63
63 QPEToolBar* menuToolBar = new QPEToolBar(this); 64 QPEToolBar* menuToolBar = new QPEToolBar(this);
64 QPEMenuBar* menuBar = new QPEMenuBar(menuToolBar); 65 QPEMenuBar* menuBar = new QPEMenuBar(menuToolBar);
65 66
66 QPopupMenu *toolsPopupMenu = new QPopupMenu(menuBar); 67 QPopupMenu *toolsPopupMenu = new QPopupMenu(menuBar);
67 68
68 QAction* deleteAllAction = new QAction(tr("Delete All"), QString::null, 0, this); 69 QAction* deleteAllAction = new QAction(tr("Delete All"), QString::null, 0, this);
69 connect(deleteAllAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(deleteAll())); 70 connect(deleteAllAction, SIGNAL(activated()), this, SLOT(deleteAll()));
70 deleteAllAction->addTo(toolsPopupMenu); 71 deleteAllAction->addTo(toolsPopupMenu);
71 72
72 toolsPopupMenu->insertSeparator(); 73 toolsPopupMenu->insertSeparator();
73 74
74 QAction* importPageAction = new QAction(tr("Import"), tr("Import..."), 0, this); 75 QAction* importPageAction = new QAction(tr("Import"), tr("Import..."), 0, this);
75 connect(importPageAction, SIGNAL(activated()), this, SLOT(importPage())); 76 connect(importPageAction, SIGNAL(activated()), this, SLOT(importPage()));
76 importPageAction->addTo(toolsPopupMenu); 77 importPageAction->addTo(toolsPopupMenu);
77 78
78 QAction* exportPageAction = new QAction(tr("Export"), tr("Export..."), 0, this); 79 QAction* exportPageAction = new QAction(tr("Export"), tr("Export..."), 0, this);
79 connect(exportPageAction, SIGNAL(activated()), this, SLOT(exportPage())); 80 connect(exportPageAction, SIGNAL(activated()), this, SLOT(exportPage()));
80 exportPageAction->addTo(toolsPopupMenu); 81 exportPageAction->addTo(toolsPopupMenu);
81 82
82 toolsPopupMenu->insertSeparator(); 83 toolsPopupMenu->insertSeparator();
83 84
84 QAction* thumbnailViewAction = new QAction(tr("Thumbnail View"), tr("Thumbnail View..."), 0, this); 85 QAction* thumbnailViewAction = new QAction(tr("Thumbnail View"), tr("Thumbnail View..."), 0, this);
85 connect(thumbnailViewAction, SIGNAL(activated()), this, SLOT(thumbnailView())); 86 connect(thumbnailViewAction, SIGNAL(activated()), this, SLOT(thumbnailView()));
86 thumbnailViewAction->addTo(toolsPopupMenu); 87 thumbnailViewAction->addTo(toolsPopupMenu);
87 88
88 menuBar->insertItem(tr("Tools"), toolsPopupMenu); 89 menuBar->insertItem(tr("Tools"), toolsPopupMenu);
89 90
90 // init page toolbar 91 // init page toolbar
91 92
92 QPEToolBar* pageToolBar = new QPEToolBar(this); 93 QPEToolBar* pageToolBar = new QPEToolBar(this);
93 94
94 QAction* newPageAction = new QAction(tr("New Page"), Resource::loadIconSet("new"), QString::null, 0, this); 95 QAction* newPageAction = new QAction(tr("New Page"), Resource::loadIconSet("new"), QString::null, 0, this);
95 connect(newPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(newPage())); 96 connect(newPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(newPage()));
96 newPageAction->addTo(pageToolBar); 97 newPageAction->addTo(pageToolBar);
97 98
98 QAction* clearPageAction = new QAction(tr("Clear Page"), Resource::loadIconSet("drawpad/clear"), QString::null, 0, this); 99 QAction* clearPageAction = new QAction(tr("Clear Page"), Resource::loadIconSet("drawpad/clear"), QString::null, 0, this);
99 connect(clearPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(clearPage())); 100 connect(clearPageAction, SIGNAL(activated()), this, SLOT(clearPage()));
100 clearPageAction->addTo(pageToolBar); 101 clearPageAction->addTo(pageToolBar);
101 102
102 QAction* deletePageAction = new QAction(tr("Delete Page"), Resource::loadIconSet("trash"), QString::null, 0, this); 103 QAction* deletePageAction = new QAction(tr("Delete Page"), Resource::loadIconSet("trash"), QString::null, 0, this);
103 connect(deletePageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(deletePage())); 104 connect(deletePageAction, SIGNAL(activated()), this, SLOT(deletePage()));
104 deletePageAction->addTo(pageToolBar); 105 deletePageAction->addTo(pageToolBar);
105 106
106 QPEToolBar* emptyToolBar = new QPEToolBar(this); 107 QPEToolBar* emptyToolBar = new QPEToolBar(this);
107 emptyToolBar->setHorizontalStretchable(true); 108 emptyToolBar->setHorizontalStretchable(true);
108 109
109 // init navigation toolbar 110 // init navigation toolbar
110 111
111 QPEToolBar* navigationToolBar = new QPEToolBar(this); 112 QPEToolBar* navigationToolBar = new QPEToolBar(this);
112 113
113 m_pUndoAction = new QAction(tr("Undo"), Resource::loadIconSet("drawpad/undo"), QString::null, 0, this); 114 m_pUndoAction = new QAction(tr("Undo"), Resource::loadIconSet("drawpad/undo"), QString::null, 0, this);
114 connect(m_pUndoAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(undo())); 115 connect(m_pUndoAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(undo()));
115 m_pUndoAction->addTo(navigationToolBar); 116 m_pUndoAction->addTo(navigationToolBar);
116 117
117 m_pRedoAction = new QAction(tr("Redo"), Resource::loadIconSet("drawpad/redo"), QString::null, 0, this); 118 m_pRedoAction = new QAction(tr("Redo"), Resource::loadIconSet("drawpad/redo"), QString::null, 0, this);
118 connect(m_pRedoAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(redo())); 119 connect(m_pRedoAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(redo()));
119 m_pRedoAction->addTo(navigationToolBar); 120 m_pRedoAction->addTo(navigationToolBar);
120 121
121 m_pFirstPageAction = new QAction(tr("First Page"), Resource::loadIconSet("fastback"), QString::null, 0, this); 122 m_pFirstPageAction = new QAction(tr("First Page"), Resource::loadIconSet("fastback"), QString::null, 0, this);
122 connect(m_pFirstPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goFirstPage())); 123 connect(m_pFirstPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goFirstPage()));
123 m_pFirstPageAction->addTo(navigationToolBar); 124 m_pFirstPageAction->addTo(navigationToolBar);
124 125
125 m_pPreviousPageAction = new QAction(tr("Previous Page"), Resource::loadIconSet("back"), QString::null, 0, this); 126 m_pPreviousPageAction = new QAction(tr("Previous Page"), Resource::loadIconSet("back"), QString::null, 0, this);
126 connect(m_pPreviousPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goPreviousPage())); 127 connect(m_pPreviousPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goPreviousPage()));
127 m_pPreviousPageAction->addTo(navigationToolBar); 128 m_pPreviousPageAction->addTo(navigationToolBar);
128 129
129 m_pNextPageAction = new QAction(tr("Next Page"), Resource::loadIconSet("forward"), QString::null, 0, this); 130 m_pNextPageAction = new QAction(tr("Next Page"), Resource::loadIconSet("forward"), QString::null, 0, this);
130 connect(m_pNextPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goNextPage())); 131 connect(m_pNextPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goNextPage()));
131 m_pNextPageAction->addTo(navigationToolBar); 132 m_pNextPageAction->addTo(navigationToolBar);
132 133
133 m_pLastPageAction = new QAction(tr("Last Page"), Resource::loadIconSet("fastforward"), QString::null, 0, this); 134 m_pLastPageAction = new QAction(tr("Last Page"), Resource::loadIconSet("fastforward"), QString::null, 0, this);
134 connect(m_pLastPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goLastPage())); 135 connect(m_pLastPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goLastPage()));
135 m_pLastPageAction->addTo(navigationToolBar); 136 m_pLastPageAction->addTo(navigationToolBar);
136 137
137 // init draw mode toolbar 138 // init draw mode toolbar
138 139
139 QPEToolBar* drawModeToolBar = new QPEToolBar(this); 140 QPEToolBar* drawModeToolBar = new QPEToolBar(this);
140 141
141 m_pLineToolButton = new QToolButton(drawModeToolBar); 142 m_pLineToolButton = new QToolButton(drawModeToolBar);
142 m_pLineToolButton->setToggleButton(true); 143 m_pLineToolButton->setToggleButton(true);
143 144
144 QPopupMenu* linePopupMenu = new QPopupMenu(m_pLineToolButton); 145 QPopupMenu* linePopupMenu = new QPopupMenu(m_pLineToolButton);
145 146
146 m_pPointToolAction = new QAction(tr("Draw Point"), Resource::loadIconSet("drawpad/point.png"), "", 0, this); 147 m_pPointToolAction = new QAction(tr("Draw Point"), Resource::loadIconSet("drawpad/point.png"), "", 0, this);
147 connect(m_pPointToolAction, SIGNAL(activated()), this, SLOT(setPointTool())); 148 connect(m_pPointToolAction, SIGNAL(activated()), this, SLOT(setPointTool()));
148 m_pPointToolAction->addTo(linePopupMenu); 149 m_pPointToolAction->addTo(linePopupMenu);
149 150
150 m_pLineToolAction = new QAction(tr("Draw Line"), Resource::loadIconSet("drawpad/line.png"), "", 0, this); 151 m_pLineToolAction = new QAction(tr("Draw Line"), Resource::loadIconSet("drawpad/line.png"), "", 0, this);
151 connect(m_pLineToolAction, SIGNAL(activated()), this, SLOT(setLineTool())); 152 connect(m_pLineToolAction, SIGNAL(activated()), this, SLOT(setLineTool()));
152 m_pLineToolAction->addTo(linePopupMenu); 153 m_pLineToolAction->addTo(linePopupMenu);
153 154
154 m_pLineToolButton->setPopup(linePopupMenu); 155 m_pLineToolButton->setPopup(linePopupMenu);
155 m_pLineToolButton->setPopupDelay(0); 156 m_pLineToolButton->setPopupDelay(0);
156 157
157 m_pRectangleToolButton = new QToolButton(drawModeToolBar); 158 m_pRectangleToolButton = new QToolButton(drawModeToolBar);
158 m_pRectangleToolButton->setToggleButton(true); 159 m_pRectangleToolButton->setToggleButton(true);
159 160
160 QPopupMenu* rectanglePopupMenu = new QPopupMenu(m_pRectangleToolButton); 161 QPopupMenu* rectanglePopupMenu = new QPopupMenu(m_pRectangleToolButton);
161 162
162 m_pRectangleToolAction = new QAction(tr("Draw Rectangle"), Resource::loadIconSet("drawpad/rectangle.png"), "", 0, this); 163 m_pRectangleToolAction = new QAction(tr("Draw Rectangle"), Resource::loadIconSet("drawpad/rectangle.png"), "", 0, this);
163 connect(m_pRectangleToolAction, SIGNAL(activated()), this, SLOT(setRectangleTool())); 164 connect(m_pRectangleToolAction, SIGNAL(activated()), this, SLOT(setRectangleTool()));
164 m_pRectangleToolAction->addTo(rectanglePopupMenu); 165 m_pRectangleToolAction->addTo(rectanglePopupMenu);
165 166
166 m_pFilledRectangleToolAction = new QAction(tr("Draw Filled Rectangle"), Resource::loadIconSet("drawpad/filledrectangle.png"), "", 0, this); 167 m_pFilledRectangleToolAction = new QAction(tr("Draw Filled Rectangle"), Resource::loadIconSet("drawpad/filledrectangle.png"), "", 0, this);
167 connect(m_pFilledRectangleToolAction, SIGNAL(activated()), this, SLOT(setFilledRectangleTool())); 168 connect(m_pFilledRectangleToolAction, SIGNAL(activated()), this, SLOT(setFilledRectangleTool()));
168 m_pFilledRectangleToolAction->addTo(rectanglePopupMenu); 169 m_pFilledRectangleToolAction->addTo(rectanglePopupMenu);
169 170
170 m_pRectangleToolButton->setPopup(rectanglePopupMenu); 171 m_pRectangleToolButton->setPopup(rectanglePopupMenu);
171 m_pRectangleToolButton->setPopupDelay(0); 172 m_pRectangleToolButton->setPopupDelay(0);
172 173
173 m_pEllipseToolButton = new QToolButton(drawModeToolBar); 174 m_pEllipseToolButton = new QToolButton(drawModeToolBar);
174 m_pEllipseToolButton->setToggleButton(true); 175 m_pEllipseToolButton->setToggleButton(true);
175 176
176 QPopupMenu* ellipsePopupMenu = new QPopupMenu(m_pEllipseToolButton); 177 QPopupMenu* ellipsePopupMenu = new QPopupMenu(m_pEllipseToolButton);
177 178
178 m_pEllipseToolAction = new QAction(tr("Draw Ellipse"), Resource::loadIconSet("drawpad/ellipse.png"), "", 0, this); 179 m_pEllipseToolAction = new QAction(tr("Draw Ellipse"), Resource::loadIconSet("drawpad/ellipse.png"), "", 0, this);
179 connect(m_pEllipseToolAction, SIGNAL(activated()), this, SLOT(setEllipseTool())); 180 connect(m_pEllipseToolAction, SIGNAL(activated()), this, SLOT(setEllipseTool()));
180 m_pEllipseToolAction->addTo(ellipsePopupMenu); 181 m_pEllipseToolAction->addTo(ellipsePopupMenu);
181 182
182 m_pFilledEllipseToolAction = new QAction(tr("Draw Filled Ellipse"), Resource::loadIconSet("drawpad/filledellipse.png"), "", 0, this); 183 m_pFilledEllipseToolAction = new QAction(tr("Draw Filled Ellipse"), Resource::loadIconSet("drawpad/filledellipse.png"), "", 0, this);
183 connect(m_pFilledEllipseToolAction, SIGNAL(activated()), this, SLOT(setFilledEllipseTool())); 184 connect(m_pFilledEllipseToolAction, SIGNAL(activated()), this, SLOT(setFilledEllipseTool()));
184 m_pFilledEllipseToolAction->addTo(ellipsePopupMenu); 185 m_pFilledEllipseToolAction->addTo(ellipsePopupMenu);
185 186
186 m_pEllipseToolButton->setPopup(ellipsePopupMenu); 187 m_pEllipseToolButton->setPopup(ellipsePopupMenu);
187 m_pEllipseToolButton->setPopupDelay(0); 188 m_pEllipseToolButton->setPopupDelay(0);
188 189
189 m_pTextToolAction = new QAction(tr("Insert Text"), Resource::loadIconSet("drawpad/text.png"), QString::null, 0, this); 190 m_pTextToolAction = new QAction(tr("Insert Text"), Resource::loadIconSet("drawpad/text.png"), QString::null, 0, this);
190 m_pTextToolAction->setToggleAction(true); 191 m_pTextToolAction->setToggleAction(true);
191 connect(m_pTextToolAction, SIGNAL(activated()), this, SLOT(setTextTool())); 192 connect(m_pTextToolAction, SIGNAL(activated()), this, SLOT(setTextTool()));
192 m_pTextToolAction->addTo(drawModeToolBar); 193 m_pTextToolAction->addTo(drawModeToolBar);
193 194
194 m_pFillToolAction = new QAction(tr("Fill Region"), Resource::loadIconSet("drawpad/fill.png"), QString::null, 0, this); 195 m_pFillToolAction = new QAction(tr("Fill Region"), Resource::loadIconSet("drawpad/fill.png"), QString::null, 0, this);
195 m_pFillToolAction->setToggleAction(true); 196 m_pFillToolAction->setToggleAction(true);
196 connect(m_pFillToolAction, SIGNAL(activated()), this, SLOT(setFillTool())); 197 connect(m_pFillToolAction, SIGNAL(activated()), this, SLOT(setFillTool()));
197 m_pFillToolAction->addTo(drawModeToolBar); 198 m_pFillToolAction->addTo(drawModeToolBar);
198 199
199 m_pEraseToolAction = new QAction(tr("Erase Point"), Resource::loadIconSet("drawpad/erase.png"), QString::null, 0, this); 200 m_pEraseToolAction = new QAction(tr("Erase Point"), Resource::loadIconSet("drawpad/erase.png"), QString::null, 0, this);
200 m_pEraseToolAction->setToggleAction(true); 201 m_pEraseToolAction->setToggleAction(true);
201 connect(m_pEraseToolAction, SIGNAL(activated()), this, SLOT(setEraseTool())); 202 connect(m_pEraseToolAction, SIGNAL(activated()), this, SLOT(setEraseTool()));
202 m_pEraseToolAction->addTo(drawModeToolBar); 203 m_pEraseToolAction->addTo(drawModeToolBar);
203 204
204 m_pTool = 0; 205 m_pTool = 0;
205 setRectangleTool(); 206 setRectangleTool();
206 setEllipseTool(); 207 setEllipseTool();
207 setPointTool(); 208 setPointTool();
208 209
209 emptyToolBar = new QPEToolBar(this); 210 emptyToolBar = new QPEToolBar(this);
210 emptyToolBar->setHorizontalStretchable(true); 211 emptyToolBar->setHorizontalStretchable(true);
211 emptyToolBar->addSeparator(); 212 emptyToolBar->addSeparator();
212 213
213 // init draw parameters toolbar 214 // init draw parameters toolbar
214 215
215 QPEToolBar* drawParametersToolBar = new QPEToolBar(this); 216 QPEToolBar* drawParametersToolBar = new QPEToolBar(this);
216 217
217 QSpinBox* penWidthSpinBox = new QSpinBox(1, 9, 1, drawParametersToolBar); 218 QSpinBox* penWidthSpinBox = new QSpinBox(1, 9, 1, drawParametersToolBar);
218 connect(penWidthSpinBox, SIGNAL(valueChanged(int)), this, SLOT(changePenWidth(int))); 219 connect(penWidthSpinBox, SIGNAL(valueChanged(int)), this, SLOT(changePenWidth(int)));
219 220
220 QToolTip::add(penWidthSpinBox, tr("Pen Width")); 221 QToolTip::add(penWidthSpinBox, tr("Pen Width"));
221 penWidthSpinBox->setValue(1); 222 penWidthSpinBox->setValue(1);
222 penWidthSpinBox->setFocusPolicy(QWidget::NoFocus); 223 penWidthSpinBox->setFocusPolicy(QWidget::NoFocus);
223 224
224 m_pPenColorToolButton = new QToolButton(drawParametersToolBar); 225 m_pPenColorToolButton = new QToolButton(drawParametersToolBar);
225 m_pPenColorToolButton->setPixmap(Resource::loadPixmap("drawpad/pencolor.png")); 226 m_pPenColorToolButton->setPixmap(Resource::loadPixmap("drawpad/pencolor.png"));
226 227
227 ColorPopupMenu* penColorPopupMenu = new ColorPopupMenu(Qt::black, m_pPenColorToolButton); 228 ColorPopupMenu* penColorPopupMenu = new ColorPopupMenu(Qt::black, m_pPenColorToolButton);
228 connect(penColorPopupMenu, SIGNAL(colorSelected(const QColor&)), this, SLOT(changePenColor(const QColor&))); 229 connect(penColorPopupMenu, SIGNAL(colorSelected(const QColor&)), this, SLOT(changePenColor(const QColor&)));
229 230
230 QToolTip::add(m_pPenColorToolButton, tr("Pen Color")); 231 QToolTip::add(m_pPenColorToolButton, tr("Pen Color"));
231 m_pPenColorToolButton->setPopup(penColorPopupMenu); 232 m_pPenColorToolButton->setPopup(penColorPopupMenu);
232 m_pPenColorToolButton->setPopupDelay(0); 233 m_pPenColorToolButton->setPopupDelay(0);
233 234
234 changePenColor(Qt::black); 235 changePenColor(Qt::black);
235 236
236 m_pBrushColorToolButton = new QToolButton(drawParametersToolBar); 237 m_pBrushColorToolButton = new QToolButton(drawParametersToolBar);
237 m_pBrushColorToolButton->setPixmap(Resource::loadPixmap("drawpad/brushcolor.png")); 238 m_pBrushColorToolButton->setPixmap(Resource::loadPixmap("drawpad/brushcolor.png"));
238 239
239 ColorPopupMenu* brushColorPopupMenu = new ColorPopupMenu(Qt::white, m_pBrushColorToolButton); 240 ColorPopupMenu* brushColorPopupMenu = new ColorPopupMenu(Qt::white, m_pBrushColorToolButton);
240 connect(brushColorPopupMenu, SIGNAL(colorSelected(const QColor&)), this, SLOT(changeBrushColor(const QColor&))); 241 connect(brushColorPopupMenu, SIGNAL(colorSelected(const QColor&)), this, SLOT(changeBrushColor(const QColor&)));
241 242
242 QToolTip::add(m_pBrushColorToolButton, tr("Fill Color")); 243 QToolTip::add(m_pBrushColorToolButton, tr("Fill Color"));
243 m_pBrushColorToolButton->setPopup(brushColorPopupMenu); 244 m_pBrushColorToolButton->setPopup(brushColorPopupMenu);
244 m_pBrushColorToolButton->setPopupDelay(0); 245 m_pBrushColorToolButton->setPopupDelay(0);
245 246
246 changeBrushColor(Qt::white); 247 changeBrushColor(Qt::white);
247 248
248 // init pages 249 // init pages
249 250
250 QFile file(Global::applicationFileName("drawpad", "drawpad.xml")); 251 QFile file(Global::applicationFileName("drawpad", "drawpad.xml"));
251 252
252 if (file.open(IO_ReadOnly)) { 253 if (file.open(IO_ReadOnly)) {
253 m_pDrawPadCanvas->load(&file); 254 m_pDrawPadCanvas->load(&file);
254 file.close(); 255 file.close();
255 } else { 256 } else {
256 m_pDrawPadCanvas->initialPage(); 257 m_pDrawPadCanvas->initialPage();
257 } 258 }
258} 259}
259 260
260DrawPad::~DrawPad() 261DrawPad::~DrawPad()
261{ 262{
262 QFile file(Global::applicationFileName("drawpad", "drawpad.xml")); 263 QFile file(Global::applicationFileName("drawpad", "drawpad.xml"));
263 264
264 if (file.open(IO_WriteOnly)) { 265 if (file.open(IO_WriteOnly)) {
265 m_pDrawPadCanvas->save(&file); 266 m_pDrawPadCanvas->save(&file);
266 file.close(); 267 file.close();
267 } 268 }
268} 269}
269 270
271void DrawPad::clearPage()
272{
273 QMessageBox messageBox(tr("Clear Page"), tr("Do you want to clear\nthe current page?"),
274 QMessageBox::Information, QMessageBox::Yes,
275 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
276 QMessageBox::NoButton, this);
277
278 messageBox.setButtonText(QMessageBox::Yes, tr("Yes"));
279 messageBox.setButtonText(QMessageBox::No, tr("No"));
280
281 if (messageBox.exec() == QMessageBox::Yes) {
282 m_pDrawPadCanvas->clearPage();
283 }
284}
285
286void DrawPad::deletePage()
287{
288 QMessageBox messageBox(tr("Delete Page"), tr("Do you want to delete\nthe current page?"),
289 QMessageBox::Information, QMessageBox::Yes,
290 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
291 QMessageBox::NoButton, this);
292
293 messageBox.setButtonText(QMessageBox::Yes, tr("Yes"));
294 messageBox.setButtonText(QMessageBox::No, tr("No"));
295
296 if (messageBox.exec() == QMessageBox::Yes) {
297 m_pDrawPadCanvas->deletePage();
298 }
299}
300
270void DrawPad::setPointTool() 301void DrawPad::setPointTool()
271{ 302{
272 if (m_pTool) { 303 if (m_pTool) {
273 delete m_pTool; 304 delete m_pTool;
274 } 305 }
275 306
276 m_pTool = new PointTool(this, m_pDrawPadCanvas); 307 m_pTool = new PointTool(this, m_pDrawPadCanvas);
277 308
278 m_pLineToolButton->setIconSet(m_pPointToolAction->iconSet()); 309 m_pLineToolButton->setIconSet(m_pPointToolAction->iconSet());
279 QToolTip::add(m_pLineToolButton, m_pPointToolAction->text()); 310 QToolTip::add(m_pLineToolButton, m_pPointToolAction->text());
280 311
281 disconnect(m_pLineToolButton, SIGNAL(clicked()), 0, 0); 312 disconnect(m_pLineToolButton, SIGNAL(clicked()), 0, 0);
282 connect(m_pLineToolButton, SIGNAL(clicked()), m_pPointToolAction, SIGNAL(activated())); 313 connect(m_pLineToolButton, SIGNAL(clicked()), m_pPointToolAction, SIGNAL(activated()));
283 314
284 m_pLineToolButton->setOn(true); 315 m_pLineToolButton->setOn(true);
285 m_pRectangleToolButton->setOn(false); 316 m_pRectangleToolButton->setOn(false);
286 m_pEllipseToolButton->setOn(false); 317 m_pEllipseToolButton->setOn(false);
287 m_pTextToolAction->setOn(false); 318 m_pTextToolAction->setOn(false);
288 m_pFillToolAction->setOn(false); 319 m_pFillToolAction->setOn(false);
289 m_pEraseToolAction->setOn(false); 320 m_pEraseToolAction->setOn(false);
290} 321}
291 322
292void DrawPad::setLineTool() 323void DrawPad::setLineTool()
293{ 324{
294 if (m_pTool) { 325 if (m_pTool) {
295 delete m_pTool; 326 delete m_pTool;
296 } 327 }
297 328
298 m_pTool = new LineTool(this, m_pDrawPadCanvas); 329 m_pTool = new LineTool(this, m_pDrawPadCanvas);
299 330
300 m_pLineToolButton->setIconSet(m_pLineToolAction->iconSet()); 331 m_pLineToolButton->setIconSet(m_pLineToolAction->iconSet());
301 QToolTip::add(m_pLineToolButton, m_pLineToolAction->text()); 332 QToolTip::add(m_pLineToolButton, m_pLineToolAction->text());
302 333
303 disconnect(m_pLineToolButton, SIGNAL(clicked()), 0, 0); 334 disconnect(m_pLineToolButton, SIGNAL(clicked()), 0, 0);
304 connect(m_pLineToolButton, SIGNAL(clicked()), m_pLineToolAction, SIGNAL(activated())); 335 connect(m_pLineToolButton, SIGNAL(clicked()), m_pLineToolAction, SIGNAL(activated()));
305 336
306 m_pLineToolButton->setOn(true); 337 m_pLineToolButton->setOn(true);
307 m_pRectangleToolButton->setOn(false); 338 m_pRectangleToolButton->setOn(false);
308 m_pEllipseToolButton->setOn(false); 339 m_pEllipseToolButton->setOn(false);
309 m_pTextToolAction->setOn(false); 340 m_pTextToolAction->setOn(false);
310 m_pFillToolAction->setOn(false); 341 m_pFillToolAction->setOn(false);
311 m_pEraseToolAction->setOn(false); 342 m_pEraseToolAction->setOn(false);
312} 343}
313 344
314void DrawPad::setRectangleTool() 345void DrawPad::setRectangleTool()
315{ 346{
316 if (m_pTool) { 347 if (m_pTool) {
317 delete m_pTool; 348 delete m_pTool;
318 } 349 }
319 350
320 m_pTool = new RectangleTool(this, m_pDrawPadCanvas); 351 m_pTool = new RectangleTool(this, m_pDrawPadCanvas);
321 352
322 m_pRectangleToolButton->setIconSet(m_pRectangleToolAction->iconSet()); 353 m_pRectangleToolButton->setIconSet(m_pRectangleToolAction->iconSet());
323 QToolTip::add(m_pRectangleToolButton, m_pRectangleToolAction->text()); 354 QToolTip::add(m_pRectangleToolButton, m_pRectangleToolAction->text());
324 355
325 disconnect(m_pRectangleToolButton, SIGNAL(clicked()), 0, 0); 356 disconnect(m_pRectangleToolButton, SIGNAL(clicked()), 0, 0);
326 connect(m_pRectangleToolButton, SIGNAL(clicked()), m_pRectangleToolAction, SIGNAL(activated())); 357 connect(m_pRectangleToolButton, SIGNAL(clicked()), m_pRectangleToolAction, SIGNAL(activated()));
327 358
328 m_pLineToolButton->setOn(false); 359 m_pLineToolButton->setOn(false);
329 m_pRectangleToolButton->setOn(true); 360 m_pRectangleToolButton->setOn(true);
330 m_pEllipseToolButton->setOn(false); 361 m_pEllipseToolButton->setOn(false);
331 m_pTextToolAction->setOn(false); 362 m_pTextToolAction->setOn(false);
332 m_pFillToolAction->setOn(false); 363 m_pFillToolAction->setOn(false);
333 m_pEraseToolAction->setOn(false); 364 m_pEraseToolAction->setOn(false);
334} 365}
335 366
336void DrawPad::setFilledRectangleTool() 367void DrawPad::setFilledRectangleTool()
337{ 368{
338 if (m_pTool) { 369 if (m_pTool) {
339 delete m_pTool; 370 delete m_pTool;
340 } 371 }
341 372
342 m_pTool = new FilledRectangleTool(this, m_pDrawPadCanvas); 373 m_pTool = new FilledRectangleTool(this, m_pDrawPadCanvas);
343 374
344 m_pRectangleToolButton->setIconSet(m_pFilledRectangleToolAction->iconSet()); 375 m_pRectangleToolButton->setIconSet(m_pFilledRectangleToolAction->iconSet());
345 QToolTip::add(m_pRectangleToolButton, m_pFilledRectangleToolAction->text()); 376 QToolTip::add(m_pRectangleToolButton, m_pFilledRectangleToolAction->text());
346 377
347 disconnect(m_pRectangleToolButton, SIGNAL(clicked()), 0, 0); 378 disconnect(m_pRectangleToolButton, SIGNAL(clicked()), 0, 0);
348 connect(m_pRectangleToolButton, SIGNAL(clicked()), m_pFilledRectangleToolAction, SIGNAL(activated())); 379 connect(m_pRectangleToolButton, SIGNAL(clicked()), m_pFilledRectangleToolAction, SIGNAL(activated()));
349 380
350 m_pLineToolButton->setOn(false); 381 m_pLineToolButton->setOn(false);
351 m_pRectangleToolButton->setOn(true); 382 m_pRectangleToolButton->setOn(true);
352 m_pEllipseToolButton->setOn(false); 383 m_pEllipseToolButton->setOn(false);
353 m_pTextToolAction->setOn(false); 384 m_pTextToolAction->setOn(false);
354 m_pFillToolAction->setOn(false); 385 m_pFillToolAction->setOn(false);
355 m_pEraseToolAction->setOn(false); 386 m_pEraseToolAction->setOn(false);
356} 387}
357 388
358void DrawPad::setEllipseTool() 389void DrawPad::setEllipseTool()
359{ 390{
360 if (m_pTool) { 391 if (m_pTool) {
361 delete m_pTool; 392 delete m_pTool;
362 } 393 }
363 394
364 m_pTool = new EllipseTool(this, m_pDrawPadCanvas); 395 m_pTool = new EllipseTool(this, m_pDrawPadCanvas);
365 396
366 m_pEllipseToolButton->setIconSet(m_pEllipseToolAction->iconSet()); 397 m_pEllipseToolButton->setIconSet(m_pEllipseToolAction->iconSet());
367 QToolTip::add(m_pEllipseToolButton, m_pEllipseToolAction->text()); 398 QToolTip::add(m_pEllipseToolButton, m_pEllipseToolAction->text());
368 399
369 disconnect(m_pEllipseToolButton, SIGNAL(clicked()), 0, 0); 400 disconnect(m_pEllipseToolButton, SIGNAL(clicked()), 0, 0);
370 connect(m_pEllipseToolButton, SIGNAL(clicked()), m_pEllipseToolAction, SIGNAL(activated())); 401 connect(m_pEllipseToolButton, SIGNAL(clicked()), m_pEllipseToolAction, SIGNAL(activated()));
371 402
372 m_pLineToolButton->setOn(false); 403 m_pLineToolButton->setOn(false);
373 m_pRectangleToolButton->setOn(false); 404 m_pRectangleToolButton->setOn(false);
374 m_pEllipseToolButton->setOn(true); 405 m_pEllipseToolButton->setOn(true);
375 m_pTextToolAction->setOn(false); 406 m_pTextToolAction->setOn(false);
376 m_pFillToolAction->setOn(false); 407 m_pFillToolAction->setOn(false);
377 m_pEraseToolAction->setOn(false); 408 m_pEraseToolAction->setOn(false);
378} 409}
379 410
380void DrawPad::setFilledEllipseTool() 411void DrawPad::setFilledEllipseTool()
381{ 412{
382 if (m_pTool) { 413 if (m_pTool) {
383 delete m_pTool; 414 delete m_pTool;
384 } 415 }
385 416
386 m_pTool = new FilledEllipseTool(this, m_pDrawPadCanvas); 417 m_pTool = new FilledEllipseTool(this, m_pDrawPadCanvas);
387 418
388 m_pEllipseToolButton->setIconSet(m_pFilledEllipseToolAction->iconSet()); 419 m_pEllipseToolButton->setIconSet(m_pFilledEllipseToolAction->iconSet());
389 QToolTip::add(m_pEllipseToolButton, m_pFilledEllipseToolAction->text()); 420 QToolTip::add(m_pEllipseToolButton, m_pFilledEllipseToolAction->text());
390 421
391 disconnect(m_pEllipseToolButton, SIGNAL(clicked()), 0, 0); 422 disconnect(m_pEllipseToolButton, SIGNAL(clicked()), 0, 0);
392 connect(m_pEllipseToolButton, SIGNAL(clicked()), m_pFilledEllipseToolAction, SIGNAL(activated())); 423 connect(m_pEllipseToolButton, SIGNAL(clicked()), m_pFilledEllipseToolAction, SIGNAL(activated()));
393 424
394 m_pLineToolButton->setOn(false); 425 m_pLineToolButton->setOn(false);
395 m_pRectangleToolButton->setOn(false); 426 m_pRectangleToolButton->setOn(false);
396 m_pEllipseToolButton->setOn(true); 427 m_pEllipseToolButton->setOn(true);
397 m_pTextToolAction->setOn(false); 428 m_pTextToolAction->setOn(false);
398 m_pFillToolAction->setOn(false); 429 m_pFillToolAction->setOn(false);
399 m_pEraseToolAction->setOn(false); 430 m_pEraseToolAction->setOn(false);
400} 431}
401 432
402void DrawPad::setTextTool() 433void DrawPad::setTextTool()
403{ 434{
404 if (m_pTool) { 435 if (m_pTool) {
405 delete m_pTool; 436 delete m_pTool;
406 } 437 }
407 438
408 m_pTool = new TextTool(this, m_pDrawPadCanvas); 439 m_pTool = new TextTool(this, m_pDrawPadCanvas);
409 440
410 m_pLineToolButton->setOn(false); 441 m_pLineToolButton->setOn(false);
411 m_pRectangleToolButton->setOn(false); 442 m_pRectangleToolButton->setOn(false);
412 m_pEllipseToolButton->setOn(false); 443 m_pEllipseToolButton->setOn(false);
413 m_pTextToolAction->setOn(true); 444 m_pTextToolAction->setOn(true);
414 m_pFillToolAction->setOn(false); 445 m_pFillToolAction->setOn(false);
415 m_pEraseToolAction->setOn(false); 446 m_pEraseToolAction->setOn(false);
416} 447}
417 448
418void DrawPad::setFillTool() 449void DrawPad::setFillTool()
419{ 450{
420 if (m_pTool) { 451 if (m_pTool) {
421 delete m_pTool; 452 delete m_pTool;
422 } 453 }
423 454
424 m_pTool = new FillTool(this, m_pDrawPadCanvas); 455 m_pTool = new FillTool(this, m_pDrawPadCanvas);
425 456
426 m_pLineToolButton->setOn(false); 457 m_pLineToolButton->setOn(false);
427 m_pRectangleToolButton->setOn(false); 458 m_pRectangleToolButton->setOn(false);
428 m_pEllipseToolButton->setOn(false); 459 m_pEllipseToolButton->setOn(false);
429 m_pTextToolAction->setOn(false); 460 m_pTextToolAction->setOn(false);
430 m_pFillToolAction->setOn(true); 461 m_pFillToolAction->setOn(true);
431 m_pEraseToolAction->setOn(false); 462 m_pEraseToolAction->setOn(false);
432} 463}
433 464
434void DrawPad::setEraseTool() 465void DrawPad::setEraseTool()
435{ 466{
436 if (m_pTool) { 467 if (m_pTool) {
437 delete m_pTool; 468 delete m_pTool;
438 } 469 }
439 470
440 m_pTool = new EraseTool(this, m_pDrawPadCanvas); 471 m_pTool = new EraseTool(this, m_pDrawPadCanvas);
441 472
442 m_pLineToolButton->setOn(false); 473 m_pLineToolButton->setOn(false);
443 m_pRectangleToolButton->setOn(false); 474 m_pRectangleToolButton->setOn(false);
444 m_pEllipseToolButton->setOn(false); 475 m_pEllipseToolButton->setOn(false);
445 m_pTextToolAction->setOn(false); 476 m_pTextToolAction->setOn(false);
446 m_pFillToolAction->setOn(false); 477 m_pFillToolAction->setOn(false);
447 m_pEraseToolAction->setOn(true); 478 m_pEraseToolAction->setOn(true);
448} 479}
449 480
450void DrawPad::changePenWidth(int value) 481void DrawPad::changePenWidth(int value)
451{ 482{
452 m_pen.setWidth(value); 483 m_pen.setWidth(value);
453} 484}
454 485
455void DrawPad::changePenColor(const QColor& color) 486void DrawPad::changePenColor(const QColor& color)
456{ 487{
457 m_pen.setColor(color); 488 m_pen.setColor(color);
458 489
459 QPainter painter; 490 QPainter painter;
460 painter.begin(m_pPenColorToolButton->pixmap()); 491 painter.begin(m_pPenColorToolButton->pixmap());
461 painter.fillRect(QRect(0, 12, 14, 2), m_pen.color()); 492 painter.fillRect(QRect(0, 12, 14, 2), m_pen.color());
462 painter.end(); 493 painter.end();
463 494
464 m_pPenColorToolButton->popup()->hide(); 495 m_pPenColorToolButton->popup()->hide();
465} 496}
466 497
467void DrawPad::changeBrushColor(const QColor& color) 498void DrawPad::changeBrushColor(const QColor& color)
468{ 499{
469 m_brush = QBrush(color); 500 m_brush = QBrush(color);
470 501
471 QPainter painter; 502 QPainter painter;
472 painter.begin(m_pBrushColorToolButton->pixmap()); 503 painter.begin(m_pBrushColorToolButton->pixmap());
473 painter.fillRect(QRect(0, 12, 14, 2), m_brush.color()); 504 painter.fillRect(QRect(0, 12, 14, 2), m_brush.color());
474 painter.end(); 505 painter.end();
475 506
476 m_pBrushColorToolButton->popup()->hide(); 507 m_pBrushColorToolButton->popup()->hide();
477} 508}
478 509
479void DrawPad::updateUndoRedoToolButtons() 510void DrawPad::updateUndoRedoToolButtons()
480{ 511{
481 m_pUndoAction->setEnabled(m_pDrawPadCanvas->undoEnabled()); 512 m_pUndoAction->setEnabled(m_pDrawPadCanvas->undoEnabled());
482 m_pRedoAction->setEnabled(m_pDrawPadCanvas->redoEnabled()); 513 m_pRedoAction->setEnabled(m_pDrawPadCanvas->redoEnabled());
483} 514}
484 515
485void DrawPad::updateNavigationToolButtons() 516void DrawPad::updateNavigationToolButtons()
486{ 517{
487 m_pFirstPageAction->setEnabled(m_pDrawPadCanvas->goPreviousPageEnabled()); 518 m_pFirstPageAction->setEnabled(m_pDrawPadCanvas->goPreviousPageEnabled());
488 m_pPreviousPageAction->setEnabled(m_pDrawPadCanvas->goPreviousPageEnabled()); 519 m_pPreviousPageAction->setEnabled(m_pDrawPadCanvas->goPreviousPageEnabled());
489 m_pNextPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled()); 520 m_pNextPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled());
490 m_pLastPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled()); 521 m_pLastPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled());
491} 522}
492 523
493void DrawPad::updateCaption() 524void DrawPad::updateCaption()
494{ 525{
495 uint pagePosition = m_pDrawPadCanvas->pagePosition(); 526 uint pagePosition = m_pDrawPadCanvas->pagePosition();
496 uint pageCount = m_pDrawPadCanvas->pageCount(); 527 uint pageCount = m_pDrawPadCanvas->pageCount();
497 528
498 setCaption(tr("DrawPad") + " - " + tr("Page") + " " 529 setCaption(tr("DrawPad") + " - " + tr("Page") + " "
499 + QString::number(pagePosition) + "/" + QString::number(pageCount)); 530 + QString::number(pagePosition) + "/" + QString::number(pageCount));
500} 531}
501 532
533void DrawPad::deleteAll()
534{
535 QMessageBox messageBox(tr("Delete All"), tr("Do you want to delete\nall the pages?"),
536 QMessageBox::Information, QMessageBox::Yes,
537 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
538 QMessageBox::NoButton, this);
539
540 messageBox.setButtonText(QMessageBox::Yes, tr("Yes"));
541 messageBox.setButtonText(QMessageBox::No, tr("No"));
542
543 if (messageBox.exec() == QMessageBox::Yes) {
544 m_pDrawPadCanvas->deleteAll();
545 }
546}
547
502void DrawPad::importPage() 548void DrawPad::importPage()
503{ 549{
504 ImportDialog importDialog(this); 550 ImportDialog importDialog(this);
505 551
506 importDialog.showMaximized(); 552 importDialog.showMaximized();
507 553
508 if (importDialog.exec() == QDialog::Accepted) { 554 if (importDialog.exec() == QDialog::Accepted) {
509 const DocLnk* docLnk = importDialog.selected(); 555 const DocLnk* docLnk = importDialog.selected();
510 556
511 if (docLnk) { 557 if (docLnk) {
512 m_pDrawPadCanvas->importPage(docLnk->file()); 558 m_pDrawPadCanvas->importPage(docLnk->file());
513 delete docLnk; 559 delete docLnk;
514 } 560 }
515 } 561 }
516} 562}
517 563
518void DrawPad::exportPage() 564void DrawPad::exportPage()
519{ 565{
520 ExportDialog exportDialog(m_pDrawPadCanvas->pagePosition(), m_pDrawPadCanvas->pageCount(), this); 566 ExportDialog exportDialog(m_pDrawPadCanvas->pagePosition(), m_pDrawPadCanvas->pageCount(), this);
521 567
522 exportDialog.showMaximized(); 568 exportDialog.showMaximized();
523 569
524 if (exportDialog.exec() == QDialog::Accepted) { 570 if (exportDialog.exec() == QDialog::Accepted) {
525 m_pDrawPadCanvas->exportPage(exportDialog.selectedFromPage(), exportDialog.selectedToPage(), 571 m_pDrawPadCanvas->exportPage(exportDialog.selectedFromPage(), exportDialog.selectedToPage(),
526 exportDialog.selectedName(), exportDialog.selectedFormat()); 572 exportDialog.selectedName(), exportDialog.selectedFormat());
527 } 573 }
528} 574}
529 575
530void DrawPad::thumbnailView() 576void DrawPad::thumbnailView()
531{ 577{
532 ThumbnailView thumbnailView(m_pDrawPadCanvas->pages(), this); 578 ThumbnailView thumbnailView(m_pDrawPadCanvas, this);
533 579
534 thumbnailView.showMaximized(); 580 thumbnailView.showMaximized();
535 thumbnailView.exec(); 581 thumbnailView.exec();
536} 582}
diff --git a/noncore/graphics/drawpad/drawpad.h b/noncore/graphics/drawpad/drawpad.h
index b0b3666..01061b4 100644
--- a/noncore/graphics/drawpad/drawpad.h
+++ b/noncore/graphics/drawpad/drawpad.h
@@ -1,96 +1,100 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * DrawPad - a drawing program for Opie Environment * 3 * DrawPad - a drawing program for Opie Environment *
4 * * 4 * *
5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> * 5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
6 * * 6 * *
7 * This program is free software; you can redistribute it and/or modify * 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 * 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 * 9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. * 10 * (at your option) any later version. *
11 * * 11 * *
12 ***************************************************************************/ 12 ***************************************************************************/
13 13
14#ifndef DRAWPAD_H 14#ifndef DRAWPAD_H
15#define DRAWPAD_H 15#define DRAWPAD_H
16 16
17#include <qmainwindow.h> 17#include <qmainwindow.h>
18 18
19#include <qpen.h> 19#include <qpen.h>
20 20
21class DrawPadCanvas; 21class DrawPadCanvas;
22class Tool; 22class Tool;
23 23
24class QAction; 24class QAction;
25class QColor; 25class QColor;
26class QToolButton; 26class QToolButton;
27class QWidgetStack; 27class QWidgetStack;
28 28
29class DrawPad : public QMainWindow 29class DrawPad : public QMainWindow
30{ 30{
31 Q_OBJECT 31 Q_OBJECT
32 32
33public: 33public:
34 DrawPad(QWidget* parent = 0, const char* name = 0); 34 DrawPad(QWidget* parent = 0, const char* name = 0);
35 ~DrawPad(); 35 ~DrawPad();
36 36
37 Tool* tool() { return m_pTool; } 37 Tool* tool() { return m_pTool; }
38 QPen pen() { return m_pen; } 38 QPen pen() { return m_pen; }
39 QBrush brush() { return m_brush; } 39 QBrush brush() { return m_brush; }
40 40
41private slots: 41private slots:
42 void clearPage();
43 void deletePage();
44
42 void setPointTool(); 45 void setPointTool();
43 void setLineTool(); 46 void setLineTool();
44 void setRectangleTool(); 47 void setRectangleTool();
45 void setFilledRectangleTool(); 48 void setFilledRectangleTool();
46 void setEllipseTool(); 49 void setEllipseTool();
47 void setFilledEllipseTool(); 50 void setFilledEllipseTool();
48 void setTextTool(); 51 void setTextTool();
49 void setFillTool(); 52 void setFillTool();
50 void setEraseTool(); 53 void setEraseTool();
51 54
52 void changePenWidth(int value); 55 void changePenWidth(int value);
53 void changePenColor(const QColor& color); 56 void changePenColor(const QColor& color);
54 void changeBrushColor(const QColor& color); 57 void changeBrushColor(const QColor& color);
55 58
56 void updateUndoRedoToolButtons(); 59 void updateUndoRedoToolButtons();
57 void updateNavigationToolButtons(); 60 void updateNavigationToolButtons();
58 void updateCaption(); 61 void updateCaption();
59 62
63 void deleteAll();
60 void importPage(); 64 void importPage();
61 void exportPage(); 65 void exportPage();
62 void thumbnailView(); 66 void thumbnailView();
63 67
64private: 68private:
65 DrawPadCanvas* m_pDrawPadCanvas; 69 DrawPadCanvas* m_pDrawPadCanvas;
66 70
67 Tool* m_pTool; 71 Tool* m_pTool;
68 QPen m_pen; 72 QPen m_pen;
69 QBrush m_brush; 73 QBrush m_brush;
70 74
71 QAction* m_pUndoAction; 75 QAction* m_pUndoAction;
72 QAction* m_pRedoAction; 76 QAction* m_pRedoAction;
73 77
74 QAction* m_pFirstPageAction; 78 QAction* m_pFirstPageAction;
75 QAction* m_pPreviousPageAction; 79 QAction* m_pPreviousPageAction;
76 QAction* m_pNextPageAction; 80 QAction* m_pNextPageAction;
77 QAction* m_pLastPageAction; 81 QAction* m_pLastPageAction;
78 82
79 QAction* m_pPointToolAction; 83 QAction* m_pPointToolAction;
80 QAction* m_pLineToolAction; 84 QAction* m_pLineToolAction;
81 QAction* m_pRectangleToolAction; 85 QAction* m_pRectangleToolAction;
82 QAction* m_pFilledRectangleToolAction; 86 QAction* m_pFilledRectangleToolAction;
83 QAction* m_pEllipseToolAction; 87 QAction* m_pEllipseToolAction;
84 QAction* m_pFilledEllipseToolAction; 88 QAction* m_pFilledEllipseToolAction;
85 QAction* m_pTextToolAction; 89 QAction* m_pTextToolAction;
86 QAction* m_pFillToolAction; 90 QAction* m_pFillToolAction;
87 QAction* m_pEraseToolAction; 91 QAction* m_pEraseToolAction;
88 92
89 QToolButton* m_pLineToolButton; 93 QToolButton* m_pLineToolButton;
90 QToolButton* m_pRectangleToolButton; 94 QToolButton* m_pRectangleToolButton;
91 QToolButton* m_pEllipseToolButton; 95 QToolButton* m_pEllipseToolButton;
92 QToolButton* m_pPenColorToolButton; 96 QToolButton* m_pPenColorToolButton;
93 QToolButton* m_pBrushColorToolButton; 97 QToolButton* m_pBrushColorToolButton;
94}; 98};
95 99
96#endif // DRAWPAD_H 100#endif // DRAWPAD_H
diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp
index 79bef35..252f4d5 100644
--- a/noncore/graphics/drawpad/drawpadcanvas.cpp
+++ b/noncore/graphics/drawpad/drawpadcanvas.cpp
@@ -1,563 +1,532 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * DrawPad - a drawing program for Opie Environment * 3 * DrawPad - a drawing program for Opie Environment *
4 * * 4 * *
5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> * 5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
6 * * 6 * *
7 * This program is free software; you can redistribute it and/or modify * 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 * 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 * 9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. * 10 * (at your option) any later version. *
11 * * 11 * *
12 ***************************************************************************/ 12 ***************************************************************************/
13 13
14#include "drawpadcanvas.h" 14#include "drawpadcanvas.h"
15 15
16#include "drawpad.h" 16#include "drawpad.h"
17#include "newpagedialog.h" 17#include "newpagedialog.h"
18#include "page.h" 18#include "page.h"
19#include "tool.h" 19#include "tool.h"
20 20
21#include <qpe/applnk.h> 21#include <qpe/applnk.h>
22#include <qpe/filemanager.h> 22#include <qpe/filemanager.h>
23#include <qpe/mimetype.h> 23#include <qpe/mimetype.h>
24 24
25#include <qbuffer.h> 25#include <qbuffer.h>
26#include <qimage.h> 26#include <qimage.h>
27#include <qmessagebox.h>
28#include <qpainter.h> 27#include <qpainter.h>
29#include <qtextcodec.h> 28#include <qtextcodec.h>
30#include <qtextstream.h> 29#include <qtextstream.h>
31#include <qxml.h> 30#include <qxml.h>
32 31
33#include <zlib.h> 32#include <zlib.h>
34 33
35class DrawPadCanvasXmlHandler: public QXmlDefaultHandler 34class DrawPadCanvasXmlHandler: public QXmlDefaultHandler
36{ 35{
37public: 36public:
38 DrawPadCanvasXmlHandler(); 37 DrawPadCanvasXmlHandler();
39 ~DrawPadCanvasXmlHandler(); 38 ~DrawPadCanvasXmlHandler();
40 39
41 QList<Page> pages(); 40 QList<Page> pages();
42 41
43 bool startElement(const QString& namespaceURI, const QString& localName, 42 bool startElement(const QString& namespaceURI, const QString& localName,
44 const QString& qName, const QXmlAttributes& atts); 43 const QString& qName, const QXmlAttributes& atts);
45 bool endElement(const QString& namespaceURI, const QString& localName, 44 bool endElement(const QString& namespaceURI, const QString& localName,
46 const QString& qName); 45 const QString& qName);
47 bool characters(const QString& ch); 46 bool characters(const QString& ch);
48 47
49private: 48private:
50 enum State { 49 enum State {
51 Unknown, 50 Unknown,
52 InData 51 InData
53 }; 52 };
54 53
55 State m_state; 54 State m_state;
56 ulong m_dataLenght; 55 ulong m_dataLenght;
57 QString m_dataFormat; 56 QString m_dataFormat;
58 QList<Page> m_pages; 57 QList<Page> m_pages;
59}; 58};
60 59
61DrawPadCanvasXmlHandler::DrawPadCanvasXmlHandler() 60DrawPadCanvasXmlHandler::DrawPadCanvasXmlHandler()
62{ 61{
63 m_state = Unknown; 62 m_state = Unknown;
64} 63}
65 64
66DrawPadCanvasXmlHandler::~DrawPadCanvasXmlHandler() 65DrawPadCanvasXmlHandler::~DrawPadCanvasXmlHandler()
67{ 66{
68} 67}
69 68
70QList<Page> DrawPadCanvasXmlHandler::pages() 69QList<Page> DrawPadCanvasXmlHandler::pages()
71{ 70{
72 return m_pages; 71 return m_pages;
73} 72}
74 73
75bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName, 74bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName,
76 const QString& qName, const QXmlAttributes& atts) 75 const QString& qName, const QXmlAttributes& atts)
77{ 76{
78 Q_CONST_UNUSED(namespaceURI) 77 Q_CONST_UNUSED(namespaceURI)
79 Q_CONST_UNUSED(localName) 78 Q_CONST_UNUSED(localName)
80 79
81 if (qName.compare("data") == 0) { 80 if (qName.compare("data") == 0) {
82 m_state = InData; 81 m_state = InData;
83 m_dataLenght = atts.value("length").toULong(); 82 m_dataLenght = atts.value("length").toULong();
84 m_dataFormat = atts.value("format"); 83 m_dataFormat = atts.value("format");
85 84
86 if (m_dataFormat.isEmpty()) { 85 if (m_dataFormat.isEmpty()) {
87 m_dataFormat = "XPM"; 86 m_dataFormat = "XPM";
88 } 87 }
89 } 88 }
90 89
91 return true; 90 return true;
92} 91}
93 92
94bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName, 93bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName,
95 const QString& qName) 94 const QString& qName)
96{ 95{
97 Q_CONST_UNUSED(namespaceURI) 96 Q_CONST_UNUSED(namespaceURI)
98 Q_CONST_UNUSED(localName) 97 Q_CONST_UNUSED(localName)
99 98
100 if (qName.compare("data") == 0) { 99 if (qName.compare("data") == 0) {
101 m_state = Unknown; 100 m_state = Unknown;
102 } 101 }
103 102
104 return true; 103 return true;
105} 104}
106 105
107bool DrawPadCanvasXmlHandler::characters(const QString& ch) 106bool DrawPadCanvasXmlHandler::characters(const QString& ch)
108{ 107{
109 if (m_state == InData) { 108 if (m_state == InData) {
110 QByteArray byteArray(ch.length() / 2); 109 QByteArray byteArray(ch.length() / 2);
111 110
112 for (int i = 0; i < (int)ch.length() / 2; i++) { 111 for (int i = 0; i < (int)ch.length() / 2; i++) {
113 char h = ch[2 * i].latin1(); 112 char h = ch[2 * i].latin1();
114 char l = ch[2 * i + 1].latin1(); 113 char l = ch[2 * i + 1].latin1();
115 uchar r = 0; 114 uchar r = 0;
116 115
117 if (h <= '9') { 116 if (h <= '9') {
118 r += h - '0'; 117 r += h - '0';
119 } else { 118 } else {
120 r += h - 'a' + 10; 119 r += h - 'a' + 10;
121 } 120 }
122 121
123 r = r << 4; 122 r = r << 4;
124 123
125 if (l <= '9') { 124 if (l <= '9') {
126 r += l - '0'; 125 r += l - '0';
127 } else { 126 } else {
128 r += l - 'a' + 10; 127 r += l - 'a' + 10;
129 } 128 }
130 129
131 byteArray[i] = r; 130 byteArray[i] = r;
132 } 131 }
133 132
134 133
135 QImage image; 134 QImage image;
136 135
137 if (m_dataFormat == "XPM") { 136 if (m_dataFormat == "XPM") {
138 if (m_dataLenght < ch.length() * 5) { 137 if (m_dataLenght < ch.length() * 5) {
139 m_dataLenght = ch.length() * 5; 138 m_dataLenght = ch.length() * 5;
140 } 139 }
141 140
142 QByteArray byteArrayUnzipped(m_dataLenght); 141 QByteArray byteArrayUnzipped(m_dataLenght);
143 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size()); 142 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size());
144 143
145 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat); 144 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat);
146 } else { 145 } else {
147 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat); 146 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat);
148 } 147 }
149 148
150 Page* page = new Page(image.width(), image.height()); 149 Page* page = new Page(image.width(), image.height());
151 page->convertFromImage(image); 150 page->convertFromImage(image);
152 m_pages.append(page); 151 m_pages.append(page);
153 } 152 }
154 153
155 return true; 154 return true;
156} 155}
157 156
158DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name) 157DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name)
159 : QScrollView(parent, name) 158 : QScrollView(parent, name)
160{ 159{
161 m_pDrawPad = drawPad; 160 m_pDrawPad = drawPad;
162 m_pages.setAutoDelete(true); 161 m_pages.setAutoDelete(true);
163 m_pageBackups.setAutoDelete(true); 162 m_pageBackups.setAutoDelete(true);
164 163
165 viewport()->setBackgroundMode(QWidget::NoBackground); 164 viewport()->setBackgroundMode(QWidget::NoBackground);
166} 165}
167 166
168DrawPadCanvas::~DrawPadCanvas() 167DrawPadCanvas::~DrawPadCanvas()
169{ 168{
170} 169}
171 170
172void DrawPadCanvas::load(QIODevice* ioDevice) 171void DrawPadCanvas::load(QIODevice* ioDevice)
173{ 172{
174 QTextStream textStream(ioDevice); 173 QTextStream textStream(ioDevice);
175 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 174 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
176 175
177 QXmlInputSource xmlInputSource(textStream); 176 QXmlInputSource xmlInputSource(textStream);
178 QXmlSimpleReader xmlSimpleReader; 177 QXmlSimpleReader xmlSimpleReader;
179 DrawPadCanvasXmlHandler drawPadCanvasXmlHandler; 178 DrawPadCanvasXmlHandler drawPadCanvasXmlHandler;
180 179
181 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler); 180 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler);
182 xmlSimpleReader.parse(xmlInputSource); 181 xmlSimpleReader.parse(xmlInputSource);
183 182
184 m_pages = drawPadCanvasXmlHandler.pages(); 183 m_pages = drawPadCanvasXmlHandler.pages();
185 184
186 if (m_pages.isEmpty()) { 185 if (m_pages.isEmpty()) {
187 m_pages.append(new Page(contentsRect().size())); 186 m_pages.append(new Page(contentsRect().size()));
188 m_pages.current()->fill(Qt::white); 187 m_pages.current()->fill(Qt::white);
189 } 188 }
190 189
191 m_pageBackups.clear(); 190 m_pageBackups.clear();
192 m_pageBackups.append(new Page(*(m_pages.current()))); 191 m_pageBackups.append(new Page(*(m_pages.current())));
193 192
194 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 193 resizeContents(m_pages.current()->width(), m_pages.current()->height());
195 viewport()->update(); 194 viewport()->update();
196 195
197 emit pagesChanged(); 196 emit pagesChanged();
198 emit pageBackupsChanged(); 197 emit pageBackupsChanged();
199} 198}
200 199
201void DrawPadCanvas::initialPage() 200void DrawPadCanvas::initialPage()
202{ 201{
203 m_pages.append(new Page(236, 232)); 202 m_pages.append(new Page(236, 232));
204 m_pages.current()->fill(Qt::white); 203 m_pages.current()->fill(Qt::white);
205 204
206 m_pageBackups.clear(); 205 m_pageBackups.clear();
207 m_pageBackups.append(new Page(*(m_pages.current()))); 206 m_pageBackups.append(new Page(*(m_pages.current())));
208 207
209 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 208 resizeContents(m_pages.current()->width(), m_pages.current()->height());
210 viewport()->update(); 209 viewport()->update();
211 210
212 emit pagesChanged(); 211 emit pagesChanged();
213 emit pageBackupsChanged(); 212 emit pageBackupsChanged();
214} 213}
215 214
216void DrawPadCanvas::save(QIODevice* ioDevice) 215void DrawPadCanvas::save(QIODevice* ioDevice)
217{ 216{
218 QTextStream textStream(ioDevice); 217 QTextStream textStream(ioDevice);
219 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 218 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
220 219
221 textStream << "<drawpad>" << endl; 220 textStream << "<drawpad>" << endl;
222 textStream << " <images>" << endl; 221 textStream << " <images>" << endl;
223 222
224 QListIterator<Page> bufferIterator(m_pages); 223 QListIterator<Page> bufferIterator(m_pages);
225 224
226 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { 225 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) {
227 textStream << " <image>" << endl; 226 textStream << " <image>" << endl;
228 227
229 QImage image = bufferIterator.current()->convertToImage(); 228 QImage image = bufferIterator.current()->convertToImage();
230 QByteArray byteArray; 229 QByteArray byteArray;
231 QBuffer buffer(byteArray); 230 QBuffer buffer(byteArray);
232 QImageIO imageIO(&buffer, "PNG"); 231 QImageIO imageIO(&buffer, "PNG");
233 232
234 buffer.open(IO_WriteOnly); 233 buffer.open(IO_WriteOnly);
235 imageIO.setImage(image); 234 imageIO.setImage(image);
236 imageIO.write(); 235 imageIO.write();
237 buffer.close(); 236 buffer.close();
238 237
239 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">"; 238 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">";
240 239
241 static const char hexchars[] = "0123456789abcdef"; 240 static const char hexchars[] = "0123456789abcdef";
242 241
243 for (int i = 0; i < (int)byteArray.size(); i++ ) { 242 for (int i = 0; i < (int)byteArray.size(); i++ ) {
244 uchar s = (uchar)byteArray[i]; 243 uchar s = (uchar)byteArray[i];
245 textStream << hexchars[s >> 4]; 244 textStream << hexchars[s >> 4];
246 textStream << hexchars[s & 0x0f]; 245 textStream << hexchars[s & 0x0f];
247 } 246 }
248 247
249 textStream << "</data>" << endl; 248 textStream << "</data>" << endl;
250 textStream << " </image>" << endl; 249 textStream << " </image>" << endl;
251 } 250 }
252 251
253 textStream << " </images>" << endl; 252 textStream << " </images>" << endl;
254 textStream << "</drawpad>"; 253 textStream << "</drawpad>";
255} 254}
256 255
257void DrawPadCanvas::importPage(const QString& fileName) 256void DrawPadCanvas::importPage(const QString& fileName)
258{ 257{
259 Page* importedPage = new Page(); 258 Page* importedPage = new Page();
260 259
261 importedPage->load(fileName); 260 importedPage->load(fileName);
262 m_pages.insert(m_pages.at() + 1, importedPage); 261 m_pages.insert(m_pages.at() + 1, importedPage);
263 262
264 m_pageBackups.clear(); 263 m_pageBackups.clear();
265 m_pageBackups.append(new Page(*(m_pages.current()))); 264 m_pageBackups.append(new Page(*(m_pages.current())));
266 265
267 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 266 resizeContents(m_pages.current()->width(), m_pages.current()->height());
268 viewport()->update(); 267 viewport()->update();
269 268
270 emit pagesChanged(); 269 emit pagesChanged();
271 emit pageBackupsChanged(); 270 emit pageBackupsChanged();
272} 271}
273 272
274void DrawPadCanvas::exportPage(uint fromPage, uint toPage, const QString& name,const QString& format) 273void DrawPadCanvas::exportPage(uint fromPage, uint toPage, const QString& name,const QString& format)
275{ 274{
276 if (fromPage == toPage) { 275 if (fromPage == toPage) {
277 DocLnk docLnk; 276 DocLnk docLnk;
278 MimeType mimeType(format); 277 MimeType mimeType(format);
279 278
280 docLnk.setName(name); 279 docLnk.setName(name);
281 docLnk.setType(mimeType.id()); 280 docLnk.setType(mimeType.id());
282 281
283 FileManager fileManager; 282 FileManager fileManager;
284 QIODevice* ioDevice = fileManager.saveFile(docLnk); 283 QIODevice* ioDevice = fileManager.saveFile(docLnk);
285 QImageIO imageIO(ioDevice, format); 284 QImageIO imageIO(ioDevice, format);
286 285
287 QImage image = m_pages.current()->convertToImage(); 286 QImage image = m_pages.current()->convertToImage();
288 imageIO.setImage(image); 287 imageIO.setImage(image);
289 imageIO.write(); 288 imageIO.write();
290 delete ioDevice; 289 delete ioDevice;
291 } else { 290 } else {
292 for (uint i = fromPage; i <= toPage; i++) { 291 for (uint i = fromPage; i <= toPage; i++) {
293 DocLnk docLnk; 292 DocLnk docLnk;
294 MimeType mimeType(format); 293 MimeType mimeType(format);
295 294
296 docLnk.setName(name + QString::number(i)); 295 docLnk.setName(name + QString::number(i));
297 docLnk.setType(mimeType.id()); 296 docLnk.setType(mimeType.id());
298 297
299 FileManager fileManager; 298 FileManager fileManager;
300 QIODevice* ioDevice = fileManager.saveFile(docLnk); 299 QIODevice* ioDevice = fileManager.saveFile(docLnk);
301 QImageIO imageIO(ioDevice, format); 300 QImageIO imageIO(ioDevice, format);
302 301
303 QImage image = m_pages.at(i - 1)->convertToImage(); 302 QImage image = m_pages.at(i - 1)->convertToImage();
304 imageIO.setImage(image); 303 imageIO.setImage(image);
305 imageIO.write(); 304 imageIO.write();
306 delete ioDevice; 305 delete ioDevice;
307 } 306 }
308 } 307 }
309} 308}
310 309
311Page* DrawPadCanvas::currentPage() 310Page* DrawPadCanvas::currentPage()
312{ 311{
313 return m_pages.current(); 312 return m_pages.current();
314} 313}
315 314
316QList<Page> DrawPadCanvas::pages() 315QList<Page> DrawPadCanvas::pages()
317{ 316{
318 return m_pages; 317 return m_pages;
319} 318}
320 319
321uint DrawPadCanvas::pagePosition() 320uint DrawPadCanvas::pagePosition()
322{ 321{
323 return (m_pages.at() + 1); 322 return (m_pages.at() + 1);
324} 323}
325 324
326uint DrawPadCanvas::pageCount() 325uint DrawPadCanvas::pageCount()
327{ 326{
328 return m_pages.count(); 327 return m_pages.count();
329} 328}
330 329
331void DrawPadCanvas::backupPage() 330void DrawPadCanvas::backupPage()
332{ 331{
333 QPixmap* currentBackup = m_pageBackups.current(); 332 QPixmap* currentBackup = m_pageBackups.current();
334 while (m_pageBackups.last() != currentBackup) { 333 while (m_pageBackups.last() != currentBackup) {
335 m_pageBackups.removeLast(); 334 m_pageBackups.removeLast();
336 } 335 }
337 336
338 while (m_pageBackups.count() >= (5 + 1)) { 337 while (m_pageBackups.count() >= (5 + 1)) {
339 m_pageBackups.removeFirst(); 338 m_pageBackups.removeFirst();
340 } 339 }
341 340
342 m_pageBackups.append(new Page(*(m_pages.current()))); 341 m_pageBackups.append(new Page(*(m_pages.current())));
343 342
344 emit pageBackupsChanged(); 343 emit pageBackupsChanged();
345} 344}
346 345
347void DrawPadCanvas::deleteAll() 346void DrawPadCanvas::deleteAll()
348{ 347{
349 QMessageBox messageBox(tr("Delete All"), tr("Do you want to delete\nall the pages?"), 348 m_pages.clear();
350 QMessageBox::Information, QMessageBox::Yes,
351 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
352 QMessageBox::NoButton, this);
353 349
354 messageBox.setButtonText(QMessageBox::Yes, tr("Yes")); 350 m_pages.append(new Page(contentsRect().size()));
355 messageBox.setButtonText(QMessageBox::No, tr("No")); 351 m_pages.current()->fill(Qt::white);
356
357 if (messageBox.exec() == QMessageBox::Yes) {
358 m_pages.clear();
359
360 m_pages.append(new Page(contentsRect().size()));
361 m_pages.current()->fill(Qt::white);
362 352
363 m_pageBackups.clear(); 353 m_pageBackups.clear();
364 m_pageBackups.append(new Page(*(m_pages.current()))); 354 m_pageBackups.append(new Page(*(m_pages.current())));
365 355
366 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 356 resizeContents(m_pages.current()->width(), m_pages.current()->height());
367 viewport()->update(); 357 viewport()->update();
368 358
369 emit pagesChanged(); 359 emit pagesChanged();
370 emit pageBackupsChanged(); 360 emit pageBackupsChanged();
371 }
372} 361}
373 362
374void DrawPadCanvas::newPage() 363void DrawPadCanvas::newPage()
375{ 364{
376 QRect rect = contentsRect(); 365 QRect rect = contentsRect();
377 366
378 NewPageDialog newPageDialog(rect.width(), rect.height(), m_pDrawPad->pen().color(), 367 NewPageDialog newPageDialog(rect.width(), rect.height(), m_pDrawPad->pen().color(),
379 m_pDrawPad->brush().color(), this); 368 m_pDrawPad->brush().color(), this);
380 369
381 if (newPageDialog.exec() == QDialog::Accepted) { 370 if (newPageDialog.exec() == QDialog::Accepted) {
382 m_pages.insert(m_pages.at() + 1, new Page(newPageDialog.selectedWidth(), 371 m_pages.insert(m_pages.at() + 1, new Page(newPageDialog.selectedWidth(),
383 newPageDialog.selectedHeight())); 372 newPageDialog.selectedHeight()));
384 m_pages.current()->fill(newPageDialog.selectedColor()); 373 m_pages.current()->fill(newPageDialog.selectedColor());
385 374
386 m_pageBackups.clear(); 375 m_pageBackups.clear();
387 m_pageBackups.append(new Page(*(m_pages.current()))); 376 m_pageBackups.append(new Page(*(m_pages.current())));
388 377
389 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 378 resizeContents(m_pages.current()->width(), m_pages.current()->height());
390 viewport()->update(); 379 viewport()->update();
391 380
392 emit pagesChanged(); 381 emit pagesChanged();
393 emit pageBackupsChanged(); 382 emit pageBackupsChanged();
394 } 383 }
395} 384}
396 385
397void DrawPadCanvas::clearPage() 386void DrawPadCanvas::clearPage()
398{ 387{
399 QMessageBox messageBox(tr("Clear Page"), tr("Do you want to clear\nthe current page?"), 388 m_pages.current()->fill(Qt::white);
400 QMessageBox::Information, QMessageBox::Yes,
401 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
402 QMessageBox::NoButton, this);
403
404 messageBox.setButtonText(QMessageBox::Yes, tr("Yes"));
405 messageBox.setButtonText(QMessageBox::No, tr("No"));
406
407 if (messageBox.exec() == QMessageBox::Yes) {
408 m_pages.current()->fill(Qt::white);
409 389
410 viewport()->update(); 390 viewport()->update();
411 }
412} 391}
413 392
414void DrawPadCanvas::deletePage() 393void DrawPadCanvas::deletePage()
415{ 394{
416 QMessageBox messageBox(tr("Delete Page"), tr("Do you want to delete\nthe current page?"), 395 m_pages.remove(m_pages.current());
417 QMessageBox::Information, QMessageBox::Yes,
418 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
419 QMessageBox::NoButton, this);
420
421 messageBox.setButtonText(QMessageBox::Yes, tr("Yes"));
422 messageBox.setButtonText(QMessageBox::No, tr("No"));
423 396
424 if (messageBox.exec() == QMessageBox::Yes) { 397 if (m_pages.isEmpty()) {
425 m_pages.remove(m_pages.current()); 398 m_pages.append(new Page(contentsRect().size()));
426 399 m_pages.current()->fill(Qt::white);
427 if (m_pages.isEmpty()) { 400 }
428 m_pages.append(new Page(contentsRect().size()));
429 m_pages.current()->fill(Qt::white);
430 }
431 401
432 m_pageBackups.clear(); 402 m_pageBackups.clear();
433 m_pageBackups.append(new Page(*(m_pages.current()))); 403 m_pageBackups.append(new Page(*(m_pages.current())));
434 404
435 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 405 resizeContents(m_pages.current()->width(), m_pages.current()->height());
436 viewport()->update(); 406 viewport()->update();
437 407
438 emit pagesChanged(); 408 emit pagesChanged();
439 emit pageBackupsChanged(); 409 emit pageBackupsChanged();
440 }
441} 410}
442 411
443bool DrawPadCanvas::undoEnabled() 412bool DrawPadCanvas::undoEnabled()
444{ 413{
445 return (m_pageBackups.current() != m_pageBackups.getFirst()); 414 return (m_pageBackups.current() != m_pageBackups.getFirst());
446} 415}
447 416
448bool DrawPadCanvas::redoEnabled() 417bool DrawPadCanvas::redoEnabled()
449{ 418{
450 return (m_pageBackups.current() != m_pageBackups.getLast()); 419 return (m_pageBackups.current() != m_pageBackups.getLast());
451} 420}
452 421
453bool DrawPadCanvas::goPreviousPageEnabled() 422bool DrawPadCanvas::goPreviousPageEnabled()
454{ 423{
455 return (m_pages.current() != m_pages.getFirst()); 424 return (m_pages.current() != m_pages.getFirst());
456} 425}
457 426
458bool DrawPadCanvas::goNextPageEnabled() 427bool DrawPadCanvas::goNextPageEnabled()
459{ 428{
460 return (m_pages.current() != m_pages.getLast()); 429 return (m_pages.current() != m_pages.getLast());
461} 430}
462 431
463void DrawPadCanvas::undo() 432void DrawPadCanvas::undo()
464{ 433{
465 *(m_pages.current()) = *(m_pageBackups.prev()); 434 *(m_pages.current()) = *(m_pageBackups.prev());
466 435
467 viewport()->update(); 436 viewport()->update();
468 437
469 emit pageBackupsChanged(); 438 emit pageBackupsChanged();
470} 439}
471 440
472void DrawPadCanvas::redo() 441void DrawPadCanvas::redo()
473{ 442{
474 *(m_pages.current()) = *(m_pageBackups.next()); 443 *(m_pages.current()) = *(m_pageBackups.next());
475 444
476 viewport()->update(); 445 viewport()->update();
477 446
478 emit pageBackupsChanged(); 447 emit pageBackupsChanged();
479} 448}
480 449
481void DrawPadCanvas::goFirstPage() 450void DrawPadCanvas::goFirstPage()
482{ 451{
483 m_pages.first(); 452 m_pages.first();
484 m_pageBackups.clear(); 453 m_pageBackups.clear();
485 m_pageBackups.append(new Page(*(m_pages.current()))); 454 m_pageBackups.append(new Page(*(m_pages.current())));
486 455
487 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 456 resizeContents(m_pages.current()->width(), m_pages.current()->height());
488 viewport()->update(); 457 viewport()->update();
489 458
490 emit pagesChanged(); 459 emit pagesChanged();
491 emit pageBackupsChanged(); 460 emit pageBackupsChanged();
492} 461}
493 462
494void DrawPadCanvas::goPreviousPage() 463void DrawPadCanvas::goPreviousPage()
495{ 464{
496 m_pages.prev(); 465 m_pages.prev();
497 m_pageBackups.clear(); 466 m_pageBackups.clear();
498 m_pageBackups.append(new Page(*(m_pages.current()))); 467 m_pageBackups.append(new Page(*(m_pages.current())));
499 468
500 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 469 resizeContents(m_pages.current()->width(), m_pages.current()->height());
501 viewport()->update(); 470 viewport()->update();
502 471
503 emit pagesChanged(); 472 emit pagesChanged();
504 emit pageBackupsChanged(); 473 emit pageBackupsChanged();
505} 474}
506 475
507void DrawPadCanvas::goNextPage() 476void DrawPadCanvas::goNextPage()
508{ 477{
509 m_pages.next(); 478 m_pages.next();
510 m_pageBackups.clear(); 479 m_pageBackups.clear();
511 m_pageBackups.append(new Page(*(m_pages.current()))); 480 m_pageBackups.append(new Page(*(m_pages.current())));
512 481
513 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 482 resizeContents(m_pages.current()->width(), m_pages.current()->height());
514 viewport()->update(); 483 viewport()->update();
515 484
516 emit pagesChanged(); 485 emit pagesChanged();
517 emit pageBackupsChanged(); 486 emit pageBackupsChanged();
518} 487}
519 488
520void DrawPadCanvas::goLastPage() 489void DrawPadCanvas::goLastPage()
521{ 490{
522 m_pages.last(); 491 m_pages.last();
523 m_pageBackups.clear(); 492 m_pageBackups.clear();
524 m_pageBackups.append(new Page(*(m_pages.current()))); 493 m_pageBackups.append(new Page(*(m_pages.current())));
525 494
526 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 495 resizeContents(m_pages.current()->width(), m_pages.current()->height());
527 viewport()->update(); 496 viewport()->update();
528 497
529 emit pagesChanged(); 498 emit pagesChanged();
530 emit pageBackupsChanged(); 499 emit pageBackupsChanged();
531} 500}
532 501
533void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e) 502void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e)
534{ 503{
535 m_pDrawPad->tool()->mousePressEvent(e); 504 m_pDrawPad->tool()->mousePressEvent(e);
536} 505}
537 506
538void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e) 507void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e)
539{ 508{
540 m_pDrawPad->tool()->mouseReleaseEvent(e); 509 m_pDrawPad->tool()->mouseReleaseEvent(e);
541} 510}
542 511
543void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e) 512void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e)
544{ 513{
545 m_pDrawPad->tool()->mouseMoveEvent(e); 514 m_pDrawPad->tool()->mouseMoveEvent(e);
546} 515}
547 516
548void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch) 517void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch)
549{ 518{
550 QRect clipRect(cx, cy, cw, ch); 519 QRect clipRect(cx, cy, cw, ch);
551 QRect pixmapRect(0, 0, m_pages.current()->width(), m_pages.current()->height()); 520 QRect pixmapRect(0, 0, m_pages.current()->width(), m_pages.current()->height());
552 QRect drawRect = pixmapRect.intersect(clipRect); 521 QRect drawRect = pixmapRect.intersect(clipRect);
553 522
554 p->drawPixmap(drawRect.topLeft(), *(m_pages.current()), drawRect); 523 p->drawPixmap(drawRect.topLeft(), *(m_pages.current()), drawRect);
555 524
556 if (drawRect.right() < clipRect.right()) { 525 if (drawRect.right() < clipRect.right()) {
557 p->fillRect(drawRect.right() + 1, cy, cw - drawRect.width(), ch, colorGroup().dark()); 526 p->fillRect(drawRect.right() + 1, cy, cw - drawRect.width(), ch, colorGroup().dark());
558 } 527 }
559 528
560 if (drawRect.bottom() < clipRect.bottom()) { 529 if (drawRect.bottom() < clipRect.bottom()) {
561 p->fillRect(cx, drawRect.bottom() + 1, cw, ch - drawRect.height(), colorGroup().dark()); 530 p->fillRect(cx, drawRect.bottom() + 1, cw, ch - drawRect.height(), colorGroup().dark());
562 } 531 }
563} 532}
diff --git a/noncore/graphics/drawpad/thumbnailview.cpp b/noncore/graphics/drawpad/thumbnailview.cpp
index 10ade90..1754ce9 100644
--- a/noncore/graphics/drawpad/thumbnailview.cpp
+++ b/noncore/graphics/drawpad/thumbnailview.cpp
@@ -1,121 +1,211 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * DrawPad - a drawing program for Opie Environment * 3 * DrawPad - a drawing program for Opie Environment *
4 * * 4 * *
5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> * 5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
6 * * 6 * *
7 * This program is free software; you can redistribute it and/or modify * 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 * 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 * 9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. * 10 * (at your option) any later version. *
11 * * 11 * *
12 ***************************************************************************/ 12 ***************************************************************************/
13 13
14#include "thumbnailview.h" 14#include "thumbnailview.h"
15 15
16#include "drawpadcanvas.h"
16#include "page.h" 17#include "page.h"
17 18
18#include <qpe/resource.h> 19#include <qpe/resource.h>
19 20
21#include <qapplication.h>
20#include <qheader.h> 22#include <qheader.h>
21#include <qimage.h> 23#include <qimage.h>
22#include <qlayout.h> 24#include <qlayout.h>
23#include <qlistview.h> 25#include <qmessagebox.h>
24#include <qtoolbutton.h> 26#include <qtoolbutton.h>
25 27
26ThumbnailView::ThumbnailView(QList<Page> pages, QWidget* parent, const char* name) 28PageListViewItem::PageListViewItem(Page* page, QListView* parent)
27 : QDialog(parent, name, true) 29 : QListViewItem(parent)
28{ 30{
29 setCaption(tr("Thumbnail")); 31 m_pPage = page;
30 32
31 QToolButton* newPageButton = new QToolButton(this); 33 QImage image = m_pPage->convertToImage();
32 newPageButton->setIconSet(Resource::loadIconSet("new"));
33 newPageButton->setAutoRaise(true);
34 34
35 QToolButton* clearPageButton = new QToolButton(this); 35 int previewWidth = 64;
36 clearPageButton->setIconSet(Resource::loadIconSet("drawpad/clear")); 36 int previewHeight = 64;
37 clearPageButton->setAutoRaise(true);
38 37
39 QToolButton* deletePageButton = new QToolButton(this); 38 float widthScale = 1.0;
40 deletePageButton->setIconSet(Resource::loadIconSet("trash")); 39 float heightScale = 1.0;
41 deletePageButton->setAutoRaise(true);
42 40
43 QToolButton* movePageUpButton = new QToolButton(this); 41 if (previewWidth < image.width()) {
44 movePageUpButton->setIconSet(Resource::loadIconSet("up")); 42 widthScale = (float)previewWidth / float(image.width());
45 movePageUpButton->setAutoRaise(true); 43 }
46 44
47 QToolButton* movePageDownButton = new QToolButton(this); 45 if (previewHeight < image.height()) {
48 movePageDownButton->setIconSet(Resource::loadIconSet("down")); 46 heightScale = (float)previewHeight / float(image.height());
49 movePageDownButton->setAutoRaise(true); 47 }
48
49 float scale = (widthScale < heightScale ? widthScale : heightScale);
50 QImage previewImage = image.smoothScale((int)(image.width() * scale) , (int)(image.height() * scale));
51
52 QPixmap previewPixmap;
53 previewPixmap.convertFromImage(previewImage);
50 54
51 m_pListView = new QListView(this); 55 QPixmap pixmap(64, 64);
52 56
53 m_pListView->header()->hide(); 57 pixmap.fill(listView()->colorGroup().mid());
54 m_pListView->setAllColumnsShowFocus(true); 58 bitBlt(&pixmap, (pixmap.width() - previewPixmap.width()) / 2,
59 (pixmap.height() - previewPixmap.height()) / 2, &previewPixmap);
55 60
56 m_pListView->addColumn(tr("Thumbnail")); 61 setPixmap(0, pixmap);
57 m_pListView->addColumn(tr("Information")); 62}
58 63
59 m_pListView->setColumnAlignment(0, Qt::AlignHCenter | Qt::AlignVCenter); 64PageListViewItem::~PageListViewItem()
60 m_pListView->setColumnAlignment(1, Qt::AlignTop); 65{
66}
67
68Page* PageListViewItem::page() const
69{
70 return m_pPage;
71}
61 72
62 QListIterator<Page> iterator(pages); 73PageListView::PageListView(DrawPadCanvas* drawPadCanvas, QWidget* parent, const char* name)
74 : QListView(parent, name)
75{
76 m_pDrawPadCanvas = drawPadCanvas;
63 77
64 for (; iterator.current(); ++iterator) { 78 header()->hide();
65 QImage image = iterator.current()->convertToImage(); 79 setVScrollBarMode(QScrollView::AlwaysOn);
80 setAllColumnsShowFocus(true);
66 81
67 int previewWidth = 64; 82 addColumn(tr("Thumbnail"));
68 int previewHeight = 64; 83 addColumn(tr("Information"));
69 84
70 float widthScale = 1.0; 85 updateView();
71 float heightScale = 1.0; 86}
72 87
73 if (previewWidth < image.width()) { 88PageListView::~PageListView()
74 widthScale = (float)previewWidth / float(image.width()); 89{
75 } 90}
91
92void PageListView::updateView()
93{
94 clear();
76 95
77 if (previewHeight < image.height()) { 96 if (m_pDrawPadCanvas) {
78 heightScale = (float)previewHeight / float(image.height()); 97 QList<Page> pageList = m_pDrawPadCanvas->pages();
98 QListIterator<Page> it(pageList);
99
100 for (; it.current(); ++it) {
101 new PageListViewItem(it.current(), this);
79 } 102 }
103 }
104}
80 105
81 float scale = (widthScale < heightScale ? widthScale : heightScale); 106void PageListView::resizeEvent(QResizeEvent* e)
82 QImage previewImage = image.smoothScale((int)(image.width() * scale) , (int)(image.height() * scale)); 107{
108 Q_UNUSED(e);
83 109
84 QPixmap previewPixmap; 110 setColumnWidth(1, contentsRect().width() - columnWidth(0) - verticalScrollBar()->width());
85 previewPixmap.convertFromImage(previewImage); 111}
86 112
87 QPixmap pixmap(64, 64); 113Page* PageListView::selected() const
114{
115 Page* page;
88 116
89 pixmap.fill(colorGroup().mid()); 117 PageListViewItem* item = (PageListViewItem*)selectedItem();
90 bitBlt(&pixmap, (pixmap.width() - previewPixmap.width()) / 2,
91 (pixmap.height() - previewPixmap.height()) / 2, &previewPixmap);
92 118
93 QListViewItem* item = new QListViewItem(m_pListView); 119 if (item) {
94 item->setPixmap(0, pixmap); 120 page = item->page();
121 } else {
122 page = NULL;
95 } 123 }
96 124
125 return page;
126}
127
128
129ThumbnailView::ThumbnailView(DrawPadCanvas* drawPadCanvas, QWidget* parent, const char* name)
130 : QWidget(parent, name, Qt::WType_Modal | Qt::WType_TopLevel)
131{
132 inLoop = false;
133 m_pDrawPadCanvas = drawPadCanvas;
134
135 setCaption(tr("Thumbnail"));
136
137 QToolButton* newPageButton = new QToolButton(this);
138 newPageButton->setIconSet(Resource::loadIconSet("new"));
139 newPageButton->setAutoRaise(true);
140
141 QToolButton* clearPageButton = new QToolButton(this);
142 clearPageButton->setIconSet(Resource::loadIconSet("drawpad/clear"));
143 clearPageButton->setAutoRaise(true);
144
145 QToolButton* deletePageButton = new QToolButton(this);
146 deletePageButton->setIconSet(Resource::loadIconSet("trash"));
147 deletePageButton->setAutoRaise(true);
148
149 QToolButton* movePageUpButton = new QToolButton(this);
150 movePageUpButton->setIconSet(Resource::loadIconSet("up"));
151 movePageUpButton->setAutoRaise(true);
152
153 QToolButton* movePageDownButton = new QToolButton(this);
154 movePageDownButton->setIconSet(Resource::loadIconSet("down"));
155 movePageDownButton->setAutoRaise(true);
156
157 m_pPageListView = new PageListView(m_pDrawPadCanvas, this);
158
97 QVBoxLayout* mainLayout = new QVBoxLayout(this, 4, 4); 159 QVBoxLayout* mainLayout = new QVBoxLayout(this, 4, 4);
98 QHBoxLayout* buttonLayout = new QHBoxLayout(0); 160 QHBoxLayout* buttonLayout = new QHBoxLayout(0);
99 161
100 buttonLayout->addWidget(newPageButton); 162 buttonLayout->addWidget(newPageButton);
101 buttonLayout->addWidget(clearPageButton); 163 buttonLayout->addWidget(clearPageButton);
102 buttonLayout->addWidget(deletePageButton); 164 buttonLayout->addWidget(deletePageButton);
103 buttonLayout->addStretch(); 165 buttonLayout->addStretch();
104 buttonLayout->addWidget(movePageUpButton); 166 buttonLayout->addWidget(movePageUpButton);
105 buttonLayout->addWidget(movePageDownButton); 167 buttonLayout->addWidget(movePageDownButton);
106 168
107 mainLayout->addLayout(buttonLayout); 169 mainLayout->addLayout(buttonLayout);
108 mainLayout->addWidget(m_pListView); 170 mainLayout->addWidget(m_pPageListView);
109} 171}
110 172
111ThumbnailView::~ThumbnailView() 173ThumbnailView::~ThumbnailView()
112{ 174{
175 hide();
113} 176}
114 177
115void ThumbnailView::resizeEvent(QResizeEvent* e) 178void ThumbnailView::hide()
116{ 179{
117 QDialog::resizeEvent(e); 180 QWidget::hide();
181
182 if (inLoop) {
183 inLoop = false;
184 qApp->exit_loop();
185 }
186}
118 187
119 m_pListView->setColumnWidth(1, m_pListView->contentsRect().width() - m_pListView->columnWidth(0) 188void ThumbnailView::exec()
120 - m_pListView->verticalScrollBar()->width()); 189{
190 show();
191
192 if (!inLoop) {
193 inLoop = true;
194 qApp->enter_loop();
195 }
196}
197
198void ThumbnailView::deletePage()
199{
200 QMessageBox messageBox(tr("Delete Page"), tr("Do you want to delete\nthe selected page?"),
201 QMessageBox::Information, QMessageBox::Yes,
202 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default,
203 QMessageBox::NoButton, this);
204
205 messageBox.setButtonText(QMessageBox::Yes, tr("Yes"));
206 messageBox.setButtonText(QMessageBox::No, tr("No"));
207
208 if (messageBox.exec() == QMessageBox::Yes) {
209 m_pDrawPadCanvas->deletePage();
210 }
121} 211}
diff --git a/noncore/graphics/drawpad/thumbnailview.h b/noncore/graphics/drawpad/thumbnailview.h
index c74730d..ae97ff1 100644
--- a/noncore/graphics/drawpad/thumbnailview.h
+++ b/noncore/graphics/drawpad/thumbnailview.h
@@ -1,40 +1,73 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * DrawPad - a drawing program for Opie Environment * 3 * DrawPad - a drawing program for Opie Environment *
4 * * 4 * *
5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> * 5 * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> *
6 * * 6 * *
7 * This program is free software; you can redistribute it and/or modify * 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 * 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 * 9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. * 10 * (at your option) any later version. *
11 * * 11 * *
12 ***************************************************************************/ 12 ***************************************************************************/
13 13
14#ifndef THUMBNAILVIEW_H 14#ifndef THUMBNAILVIEW_H
15#define THUMBNAILVIEW_H 15#define THUMBNAILVIEW_H
16 16
17#include <qdialog.h> 17#include <qwidget.h>
18#include <qlistview.h>
18 19
19#include <qlist.h> 20class DrawPadCanvas;
21class Page;
20 22
21class QListView; 23class PageListViewItem : public QListViewItem
24{
25public:
26 PageListViewItem(Page* page, QListView* parent);
27 ~PageListViewItem();
22 28
23class Page; 29 Page* page() const;
24 30
25class ThumbnailView : public QDialog 31private:
26{ 32 Page* m_pPage;
27 Q_OBJECT 33};
28 34
35class PageListView : public QListView
36{
29public: 37public:
30 ThumbnailView(QList<Page> pages, QWidget* parent = 0, const char* name = 0); 38 PageListView(DrawPadCanvas* drawPadCanvas, QWidget* parent = 0, const char* name = 0);
31 ~ThumbnailView(); 39 ~PageListView();
40
41 void updateView();
42
43 Page* selected() const;
32 44
33protected: 45protected:
34 void resizeEvent(QResizeEvent* e); 46 void resizeEvent(QResizeEvent* e);
35 47
36private: 48private:
37 QListView* m_pListView; 49 DrawPadCanvas* m_pDrawPadCanvas;
50};
51
52class ThumbnailView : public QWidget
53{
54 Q_OBJECT
55
56public:
57 ThumbnailView(DrawPadCanvas* drawPadCanvas, QWidget* parent = 0, const char* name = 0);
58 ~ThumbnailView();
59
60 void hide();
61 void exec();
62
63public slots:
64 void deletePage();
65
66private:
67 bool inLoop;
68 DrawPadCanvas* m_pDrawPadCanvas;
69
70 PageListView* m_pPageListView;
38}; 71};
39 72
40#endif // THUMBNAILVIEW_H 73#endif // THUMBNAILVIEW_H