Diffstat (limited to 'noncore/graphics/drawpad/drawpadcanvas.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/graphics/drawpad/drawpadcanvas.cpp | 135 |
1 files changed, 108 insertions, 27 deletions
diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp index f02f478..08f7b66 100644 --- a/noncore/graphics/drawpad/drawpadcanvas.cpp +++ b/noncore/graphics/drawpad/drawpadcanvas.cpp | |||
@@ -143,9 +143,11 @@ DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name | |||
143 | setBackgroundMode(QWidget::PaletteBase); | 143 | setBackgroundMode(QWidget::PaletteBase); |
144 | 144 | ||
145 | m_pDrawPad = drawPad; | 145 | m_pDrawPad = drawPad; |
146 | m_buffers.setAutoDelete(true); | 146 | m_pages.setAutoDelete(true); |
147 | m_buffers.append(new QPixmap(width(), height())); | 147 | m_pages.append(new QPixmap(width(), height())); |
148 | m_buffers.current()->fill(Qt::white); | 148 | m_pages.current()->fill(Qt::white); |
149 | m_pageBackups.setAutoDelete(true); | ||
150 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
149 | } | 151 | } |
150 | 152 | ||
151 | DrawPadCanvas::~DrawPadCanvas() | 153 | DrawPadCanvas::~DrawPadCanvas() |
@@ -164,13 +166,16 @@ void DrawPadCanvas::load(QIODevice* ioDevice) | |||
164 | xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler); | 166 | xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler); |
165 | xmlSimpleReader.parse(xmlInputSource); | 167 | xmlSimpleReader.parse(xmlInputSource); |
166 | 168 | ||
167 | m_buffers = drawPadCanvasXmlHandler.pixmaps(); | 169 | m_pages = drawPadCanvasXmlHandler.pixmaps(); |
168 | 170 | ||
169 | if (m_buffers.isEmpty()) { | 171 | if (m_pages.isEmpty()) { |
170 | m_buffers.append(new QPixmap(width(), height())); | 172 | m_pages.append(new QPixmap(width(), height())); |
171 | m_buffers.current()->fill(Qt::white); | 173 | m_pages.current()->fill(Qt::white); |
172 | } | 174 | } |
173 | 175 | ||
176 | m_pageBackups.clear(); | ||
177 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
178 | |||
174 | repaint(); | 179 | repaint(); |
175 | } | 180 | } |
176 | 181 | ||
@@ -182,7 +187,7 @@ void DrawPadCanvas::save(QIODevice* ioDevice) | |||
182 | textStream << "<drawpad>" << endl; | 187 | textStream << "<drawpad>" << endl; |
183 | textStream << " <images>" << endl; | 188 | textStream << " <images>" << endl; |
184 | 189 | ||
185 | QListIterator<QPixmap> bufferIterator(m_buffers); | 190 | QListIterator<QPixmap> bufferIterator(m_pages); |
186 | 191 | ||
187 | for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { | 192 | for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { |
188 | textStream << " <image>" << endl; | 193 | textStream << " <image>" << endl; |
@@ -221,76 +226,139 @@ void DrawPadCanvas::save(QIODevice* ioDevice) | |||
221 | 226 | ||
222 | QPixmap* DrawPadCanvas::currentPage() | 227 | QPixmap* DrawPadCanvas::currentPage() |
223 | { | 228 | { |
224 | return m_buffers.current(); | 229 | return m_pages.current(); |
225 | } | 230 | } |
226 | 231 | ||
227 | void DrawPadCanvas::clearAll() | 232 | void DrawPadCanvas::clearAll() |
228 | { | 233 | { |
229 | m_buffers.clear(); | 234 | m_pages.clear(); |
235 | |||
236 | m_pages.append(new QPixmap(width(), height())); | ||
237 | m_pages.current()->fill(Qt::white); | ||
230 | 238 | ||
231 | m_buffers.append(new QPixmap(width(), height())); | 239 | m_pageBackups.clear(); |
232 | m_buffers.current()->fill(Qt::white); | 240 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); |
233 | 241 | ||
234 | repaint(); | 242 | repaint(); |
243 | |||
244 | emit pagesChanged(); | ||
245 | emit pageBackupsChanged(); | ||
235 | } | 246 | } |
236 | 247 | ||
237 | void DrawPadCanvas::newPage() | 248 | void DrawPadCanvas::newPage() |
238 | { | 249 | { |
239 | m_buffers.insert(m_buffers.at() + 1, new QPixmap(width(), height())); | 250 | m_pages.insert(m_pages.at() + 1, new QPixmap(width(), height())); |
240 | m_buffers.current()->fill(Qt::white); | 251 | m_pages.current()->fill(Qt::white); |
252 | m_pageBackups.clear(); | ||
253 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
241 | repaint(); | 254 | repaint(); |
255 | |||
256 | emit pagesChanged(); | ||
257 | emit pageBackupsChanged(); | ||
242 | } | 258 | } |
243 | 259 | ||
244 | void DrawPadCanvas::clearPage() | 260 | void DrawPadCanvas::clearPage() |
245 | { | 261 | { |
246 | m_buffers.current()->fill(Qt::white); | 262 | m_pages.current()->fill(Qt::white); |
247 | repaint(); | 263 | repaint(); |
248 | } | 264 | } |
249 | 265 | ||
250 | void DrawPadCanvas::deletePage() | 266 | void DrawPadCanvas::deletePage() |
251 | { | 267 | { |
252 | m_buffers.remove(m_buffers.current()); | 268 | m_pages.remove(m_pages.current()); |
253 | 269 | ||
254 | if (m_buffers.isEmpty()) { | 270 | if (m_pages.isEmpty()) { |
255 | m_buffers.append(new QPixmap(width(), height())); | 271 | m_pages.append(new QPixmap(width(), height())); |
256 | m_buffers.current()->fill(Qt::white); | 272 | m_pages.current()->fill(Qt::white); |
257 | } | 273 | } |
258 | 274 | ||
275 | m_pageBackups.clear(); | ||
276 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
277 | |||
259 | repaint(); | 278 | repaint(); |
279 | |||
280 | emit pagesChanged(); | ||
281 | emit pageBackupsChanged(); | ||
282 | } | ||
283 | |||
284 | bool DrawPadCanvas::undoEnabled() | ||
285 | { | ||
286 | return (m_pageBackups.current() != m_pageBackups.getFirst()); | ||
287 | } | ||
288 | |||
289 | bool DrawPadCanvas::redoEnabled() | ||
290 | { | ||
291 | return (m_pageBackups.current() != m_pageBackups.getLast()); | ||
260 | } | 292 | } |
261 | 293 | ||
262 | bool DrawPadCanvas::goPreviousPageEnabled() | 294 | bool DrawPadCanvas::goPreviousPageEnabled() |
263 | { | 295 | { |
264 | return (m_buffers.current() != m_buffers.getFirst()); | 296 | return (m_pages.current() != m_pages.getFirst()); |
265 | } | 297 | } |
266 | 298 | ||
267 | bool DrawPadCanvas::goNextPageEnabled() | 299 | bool DrawPadCanvas::goNextPageEnabled() |
268 | { | 300 | { |
269 | return (m_buffers.current() != m_buffers.getLast()); | 301 | return (m_pages.current() != m_pages.getLast()); |
302 | } | ||
303 | |||
304 | void DrawPadCanvas::undo() | ||
305 | { | ||
306 | *(m_pages.current()) = *(m_pageBackups.prev()); | ||
307 | repaint(); | ||
308 | |||
309 | emit pageBackupsChanged(); | ||
310 | } | ||
311 | |||
312 | void DrawPadCanvas::redo() | ||
313 | { | ||
314 | *(m_pages.current()) = *(m_pageBackups.next()); | ||
315 | repaint(); | ||
316 | |||
317 | emit pageBackupsChanged(); | ||
270 | } | 318 | } |
271 | 319 | ||
272 | void DrawPadCanvas::goFirstPage() | 320 | void DrawPadCanvas::goFirstPage() |
273 | { | 321 | { |
274 | m_buffers.first(); | 322 | m_pages.first(); |
323 | m_pageBackups.clear(); | ||
324 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
275 | repaint(); | 325 | repaint(); |
326 | |||
327 | emit pagesChanged(); | ||
328 | emit pageBackupsChanged(); | ||
276 | } | 329 | } |
277 | 330 | ||
278 | void DrawPadCanvas::goPreviousPage() | 331 | void DrawPadCanvas::goPreviousPage() |
279 | { | 332 | { |
280 | m_buffers.prev(); | 333 | m_pages.prev(); |
334 | m_pageBackups.clear(); | ||
335 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
281 | repaint(); | 336 | repaint(); |
337 | |||
338 | emit pagesChanged(); | ||
339 | emit pageBackupsChanged(); | ||
282 | } | 340 | } |
283 | 341 | ||
284 | void DrawPadCanvas::goNextPage() | 342 | void DrawPadCanvas::goNextPage() |
285 | { | 343 | { |
286 | m_buffers.next(); | 344 | m_pages.next(); |
345 | m_pageBackups.clear(); | ||
346 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
287 | repaint(); | 347 | repaint(); |
348 | |||
349 | emit pagesChanged(); | ||
350 | emit pageBackupsChanged(); | ||
288 | } | 351 | } |
289 | 352 | ||
290 | void DrawPadCanvas::goLastPage() | 353 | void DrawPadCanvas::goLastPage() |
291 | { | 354 | { |
292 | m_buffers.last(); | 355 | m_pages.last(); |
356 | m_pageBackups.clear(); | ||
357 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
293 | repaint(); | 358 | repaint(); |
359 | |||
360 | emit pagesChanged(); | ||
361 | emit pageBackupsChanged(); | ||
294 | } | 362 | } |
295 | 363 | ||
296 | void DrawPadCanvas::mousePressEvent(QMouseEvent* e) | 364 | void DrawPadCanvas::mousePressEvent(QMouseEvent* e) |
@@ -301,6 +369,19 @@ void DrawPadCanvas::mousePressEvent(QMouseEvent* e) | |||
301 | void DrawPadCanvas::mouseReleaseEvent(QMouseEvent* e) | 369 | void DrawPadCanvas::mouseReleaseEvent(QMouseEvent* e) |
302 | { | 370 | { |
303 | m_pDrawPad->drawMode()->mouseReleaseEvent(e); | 371 | m_pDrawPad->drawMode()->mouseReleaseEvent(e); |
372 | |||
373 | QPixmap* currentBackup = m_pageBackups.current(); | ||
374 | while (m_pageBackups.last() != currentBackup) { | ||
375 | m_pageBackups.removeLast(); | ||
376 | } | ||
377 | |||
378 | while (m_pageBackups.count() >= (5 + 1)) { | ||
379 | m_pageBackups.removeFirst(); | ||
380 | } | ||
381 | |||
382 | m_pageBackups.append(new QPixmap(*(m_pages.current()))); | ||
383 | |||
384 | emit pageBackupsChanged(); | ||
304 | } | 385 | } |
305 | 386 | ||
306 | void DrawPadCanvas::mouseMoveEvent(QMouseEvent* e) | 387 | void DrawPadCanvas::mouseMoveEvent(QMouseEvent* e) |
@@ -312,7 +393,7 @@ void DrawPadCanvas::resizeEvent(QResizeEvent* e) | |||
312 | { | 393 | { |
313 | QWidget::resizeEvent(e); | 394 | QWidget::resizeEvent(e); |
314 | 395 | ||
315 | QListIterator<QPixmap> bufferIterator(m_buffers); | 396 | QListIterator<QPixmap> bufferIterator(m_pages); |
316 | 397 | ||
317 | for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { | 398 | for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { |
318 | int w = width() > bufferIterator.current()->width() ? width() : bufferIterator.current()->width(); | 399 | int w = width() > bufferIterator.current()->width() ? width() : bufferIterator.current()->width(); |
@@ -334,6 +415,6 @@ void DrawPadCanvas::paintEvent(QPaintEvent* e) | |||
334 | 415 | ||
335 | for (uint i = 0; i < rects.count(); i++) { | 416 | for (uint i = 0; i < rects.count(); i++) { |
336 | QRect r = rects[i]; | 417 | QRect r = rects[i]; |
337 | bitBlt(this, r.x(), r.y(), m_buffers.current(), r.x(), r.y(), r.width(), r.height()); | 418 | bitBlt(this, r.x(), r.y(), m_pages.current(), r.x(), r.y(), r.width(), r.height()); |
338 | } | 419 | } |
339 | } | 420 | } |