author | leseb <leseb> | 2002-07-10 21:59:27 (UTC) |
---|---|---|
committer | leseb <leseb> | 2002-07-10 21:59:27 (UTC) |
commit | f568737c20bea96fb79d85681a72e142ec05d66f (patch) (side-by-side diff) | |
tree | 80d08b351bbdeec5be93885a4c18ba0207ef990a /noncore | |
parent | 01b04adb73c8bc49938b71a4bebe6fb6a5477f75 (diff) | |
download | opie-f568737c20bea96fb79d85681a72e142ec05d66f.zip opie-f568737c20bea96fb79d85681a72e142ec05d66f.tar.gz opie-f568737c20bea96fb79d85681a72e142ec05d66f.tar.bz2 |
Undo/redo reimplemented
-rw-r--r-- | noncore/graphics/drawpad/drawpad.cpp | 28 | ||||
-rw-r--r-- | noncore/graphics/drawpad/drawpad.h | 6 | ||||
-rw-r--r-- | noncore/graphics/drawpad/drawpadcanvas.cpp | 146 | ||||
-rw-r--r-- | noncore/graphics/drawpad/drawpadcanvas.h | 6 | ||||
-rw-r--r-- | noncore/graphics/drawpad/erasetool.cpp | 8 | ||||
-rw-r--r-- | noncore/graphics/drawpad/filltool.cpp | 46 | ||||
-rw-r--r-- | noncore/graphics/drawpad/page.cpp | 60 | ||||
-rw-r--r-- | noncore/graphics/drawpad/page.h | 20 | ||||
-rw-r--r-- | noncore/graphics/drawpad/pageinformationdialog.cpp | 4 | ||||
-rw-r--r-- | noncore/graphics/drawpad/pointtool.cpp | 8 | ||||
-rw-r--r-- | noncore/graphics/drawpad/shapetool.cpp | 12 | ||||
-rw-r--r-- | noncore/graphics/drawpad/texttool.cpp | 6 | ||||
-rw-r--r-- | noncore/graphics/drawpad/thumbnailview.cpp | 6 |
13 files changed, 169 insertions, 187 deletions
diff --git a/noncore/graphics/drawpad/drawpad.cpp b/noncore/graphics/drawpad/drawpad.cpp index 4eb47a5..b0a414e 100644 --- a/noncore/graphics/drawpad/drawpad.cpp +++ b/noncore/graphics/drawpad/drawpad.cpp @@ -56,7 +56,5 @@ DrawPad::DrawPad(QWidget* parent, const char* name) m_pDrawPadCanvas = new DrawPadCanvas(this, this); - connect(m_pDrawPadCanvas, SIGNAL(pagesChanged()), this, SLOT(updateNavigationToolButtons())); - connect(m_pDrawPadCanvas, SIGNAL(pagesChanged()), this, SLOT(updateCaption())); - connect(m_pDrawPadCanvas, SIGNAL(pageBackupsChanged()), this, SLOT(updateUndoRedoToolButtons())); + connect(m_pDrawPadCanvas, SIGNAL(pagesChanged()), this, SLOT(updateView())); setCentralWidget(m_pDrawPadCanvas); @@ -543,19 +541,5 @@ void DrawPad::changeBrushColor(const QColor& color) } -void DrawPad::updateUndoRedoToolButtons() -{ - m_pUndoAction->setEnabled(m_pDrawPadCanvas->undoEnabled()); - m_pRedoAction->setEnabled(m_pDrawPadCanvas->redoEnabled()); -} - -void DrawPad::updateNavigationToolButtons() -{ - m_pFirstPageAction->setEnabled(m_pDrawPadCanvas->goPreviousPageEnabled()); - m_pPreviousPageAction->setEnabled(m_pDrawPadCanvas->goPreviousPageEnabled()); - m_pNextPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled()); - m_pLastPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled()); -} - -void DrawPad::updateCaption() +void DrawPad::updateView() { uint pagePosition = m_pDrawPadCanvas->pagePosition(); @@ -564,4 +548,12 @@ void DrawPad::updateCaption() setCaption(tr("DrawPad") + " - " + tr("Page") + " " + QString::number(pagePosition) + "/" + QString::number(pageCount)); + + m_pUndoAction->setEnabled(m_pDrawPadCanvas->currentPage()->undoEnabled()); + m_pRedoAction->setEnabled(m_pDrawPadCanvas->currentPage()->redoEnabled()); + + m_pFirstPageAction->setEnabled(m_pDrawPadCanvas->goPreviousPageEnabled()); + m_pPreviousPageAction->setEnabled(m_pDrawPadCanvas->goPreviousPageEnabled()); + m_pNextPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled()); + m_pLastPageAction->setEnabled(m_pDrawPadCanvas->goNextPageEnabled()); } diff --git a/noncore/graphics/drawpad/drawpad.h b/noncore/graphics/drawpad/drawpad.h index c57606c..7306228 100644 --- a/noncore/graphics/drawpad/drawpad.h +++ b/noncore/graphics/drawpad/drawpad.h @@ -60,8 +60,6 @@ private slots: void changePenColor(const QColor& color); void changeBrushColor(const QColor& color); - - void updateUndoRedoToolButtons(); - void updateNavigationToolButtons(); - void updateCaption(); + + void updateView(); void deleteAll(); diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp index 05dd408..025bebb 100644 --- a/noncore/graphics/drawpad/drawpadcanvas.cpp +++ b/noncore/graphics/drawpad/drawpadcanvas.cpp @@ -29,6 +29,4 @@ #include <qxml.h> -const int PAGE_BACKUPS = 99; - class DrawPadCanvasXmlHandler: public QXmlDefaultHandler { @@ -150,5 +148,5 @@ bool DrawPadCanvasXmlHandler::characters(const QString& ch) Page* page = new Page(m_title, image.width(), image.height()); page->setLastModified(m_date); - page->convertFromImage(image); + page->pixmap()->convertFromImage(image); m_pages.append(page); } @@ -162,5 +160,4 @@ DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name m_pDrawPad = drawPad; m_pages.setAutoDelete(true); - m_pageBackups.setAutoDelete(true); viewport()->setBackgroundMode(QWidget::NoBackground); @@ -187,15 +184,11 @@ void DrawPadCanvas::load(QIODevice* ioDevice) if (m_pages.isEmpty()) { m_pages.append(new Page("", contentsRect().size())); - m_pages.current()->fill(Qt::white); + m_pages.current()->pixmap()->fill(Qt::white); } - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } @@ -203,14 +196,10 @@ void DrawPadCanvas::initialPage() { m_pages.append(new Page("", 236, 232)); - m_pages.current()->fill(Qt::white); - - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); + m_pages.current()->pixmap()->fill(Qt::white); - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } @@ -228,9 +217,9 @@ void DrawPadCanvas::save(QIODevice* ioDevice) textStream << " <image>" << endl; textStream << " <title>" << bufferIterator.current()->title() << "</title>" << endl; - + int intDate = QDateTime(QDate(1970, 1, 1)).secsTo(bufferIterator.current()->lastModified()); textStream << " <date>" << intDate << "</date>" << endl; - QImage image = bufferIterator.current()->convertToImage(); + QImage image = bufferIterator.current()->pixmap()->convertToImage(); QByteArray byteArray; QBuffer buffer(byteArray); @@ -264,15 +253,11 @@ void DrawPadCanvas::importPage(const QString& fileName) Page* importedPage = new Page(); - importedPage->load(fileName); + importedPage->pixmap()->load(fileName); m_pages.insert(m_pages.at() + 1, importedPage); - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } @@ -290,5 +275,5 @@ void DrawPadCanvas::exportPage(uint fromPage, uint toPage, const QString& name,c QImageIO imageIO(ioDevice, format); - QImage image = m_pages.current()->convertToImage(); + QImage image = m_pages.current()->pixmap()->convertToImage(); imageIO.setImage(image); imageIO.write(); @@ -306,5 +291,5 @@ void DrawPadCanvas::exportPage(uint fromPage, uint toPage, const QString& name,c QImageIO imageIO(ioDevice, format); - QImage image = m_pages.at(i - 1)->convertToImage(); + QImage image = m_pages.at(i - 1)->pixmap()->convertToImage(); imageIO.setImage(image); imageIO.write(); @@ -337,43 +322,26 @@ void DrawPadCanvas::selectPage(Page* page) { m_pages.findRef(page); - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } -void DrawPadCanvas::selectPage(uint pagePosition) +void DrawPadCanvas::backupPage() { - m_pages.at(pagePosition - 1); - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - - resizeContents(m_pages.current()->width(), m_pages.current()->height()); - viewport()->update(); + m_pages.current()->backup(); emit pagesChanged(); - emit pageBackupsChanged(); } -void DrawPadCanvas::backupPage() +void DrawPadCanvas::selectPage(uint pagePosition) { - m_pages.current()->setLastModified(QDateTime::currentDateTime()); - - Page* currentBackup = m_pageBackups.current(); - while (m_pageBackups.last() != currentBackup) { - m_pageBackups.removeLast(); - } - - while (m_pageBackups.count() >= (PAGE_BACKUPS + 1)) { - m_pageBackups.removeFirst(); - } + m_pages.at(pagePosition - 1); - m_pageBackups.append(new Page(*(m_pages.current()))); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); + viewport()->update(); - emit pageBackupsChanged(); + emit pagesChanged(); } @@ -383,14 +351,10 @@ void DrawPadCanvas::deleteAll() m_pages.append(new Page("", contentsRect().size())); - m_pages.current()->fill(Qt::white); + m_pages.current()->pixmap()->fill(Qt::white); - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } @@ -398,27 +362,18 @@ void DrawPadCanvas::newPage(QString title, uint width, uint height, const QColor { m_pages.insert(m_pages.at() + 1, new Page(title, width, height)); - m_pages.current()->fill(color); - - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); + m_pages.current()->pixmap()->fill(color); - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } void DrawPadCanvas::clearPage() { - m_pages.current()->fill(Qt::white); + m_pages.current()->pixmap()->fill(Qt::white); - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); - - emit pageBackupsChanged(); } @@ -429,15 +384,11 @@ void DrawPadCanvas::deletePage() if (m_pages.isEmpty()) { m_pages.append(new Page("", contentsRect().size())); - m_pages.current()->fill(Qt::white); + m_pages.current()->pixmap()->fill(Qt::white); } - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } @@ -460,14 +411,4 @@ void DrawPadCanvas::movePageDown() } -bool DrawPadCanvas::undoEnabled() -{ - return (m_pageBackups.current() != m_pageBackups.getFirst()); -} - -bool DrawPadCanvas::redoEnabled() -{ - return (m_pageBackups.current() != m_pageBackups.getLast()); -} - bool DrawPadCanvas::goPreviousPageEnabled() { @@ -482,18 +423,18 @@ bool DrawPadCanvas::goNextPageEnabled() void DrawPadCanvas::undo() { - *(m_pages.current()) = *(m_pageBackups.prev()); + m_pages.current()->undo(); viewport()->update(); - emit pageBackupsChanged(); + emit pagesChanged(); } void DrawPadCanvas::redo() { - *(m_pages.current()) = *(m_pageBackups.next()); + m_pages.current()->redo(); viewport()->update(); - emit pageBackupsChanged(); + emit pagesChanged(); } @@ -501,12 +442,9 @@ void DrawPadCanvas::goFirstPage() { m_pages.first(); - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } @@ -514,12 +452,9 @@ void DrawPadCanvas::goPreviousPage() { m_pages.prev(); - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } @@ -527,12 +462,8 @@ void DrawPadCanvas::goNextPage() { m_pages.next(); - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } @@ -540,12 +471,9 @@ void DrawPadCanvas::goLastPage() { m_pages.last(); - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); - resizeContents(m_pages.current()->width(), m_pages.current()->height()); + resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); - emit pageBackupsChanged(); } @@ -568,8 +496,8 @@ void DrawPadCanvas::drawContents(QPainter* p, int cx, int cy, int cw, int ch) { QRect clipRect(cx, cy, cw, ch); - QRect pixmapRect(0, 0, m_pages.current()->width(), m_pages.current()->height()); + QRect pixmapRect(0, 0, m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); QRect drawRect = pixmapRect.intersect(clipRect); - p->drawPixmap(drawRect.topLeft(), *(m_pages.current()), drawRect); + p->drawPixmap(drawRect.topLeft(), *(m_pages.current()->pixmap()), drawRect); if (drawRect.right() < clipRect.right()) { diff --git a/noncore/graphics/drawpad/drawpadcanvas.h b/noncore/graphics/drawpad/drawpadcanvas.h index 2283e5e..80a2a7e 100644 --- a/noncore/graphics/drawpad/drawpadcanvas.h +++ b/noncore/graphics/drawpad/drawpadcanvas.h @@ -38,6 +38,4 @@ public: void exportPage(uint fromPage, uint toPage, const QString& name, const QString& format); - bool undoEnabled(); - bool redoEnabled(); bool goPreviousPageEnabled(); bool goNextPageEnabled(); @@ -59,5 +57,5 @@ public slots: void movePageUp(); void movePageDown(); - + void undo(); void redo(); @@ -70,5 +68,4 @@ public slots: signals: void pagesChanged(); - void pageBackupsChanged(); protected: @@ -81,5 +78,4 @@ private: DrawPad* m_pDrawPad; QList<Page> m_pages; - QList<Page> m_pageBackups; }; diff --git a/noncore/graphics/drawpad/erasetool.cpp b/noncore/graphics/drawpad/erasetool.cpp index f77e038..2326da5 100644 --- a/noncore/graphics/drawpad/erasetool.cpp +++ b/noncore/graphics/drawpad/erasetool.cpp @@ -33,4 +33,6 @@ EraseTool::~EraseTool() void EraseTool::mousePressEvent(QMouseEvent* e) { + m_pDrawPadCanvas->backupPage(); + m_mousePressed = true; m_polyline[2] = m_polyline[1] = m_polyline[0] = e->pos(); @@ -42,6 +44,4 @@ void EraseTool::mouseReleaseEvent(QMouseEvent* e) m_mousePressed = false; - - m_pDrawPadCanvas->backupPage(); } @@ -51,5 +51,5 @@ void EraseTool::mouseMoveEvent(QMouseEvent* e) QPainter painter; QPen pen(Qt::white, m_pDrawPad->pen().width()); - painter.begin(m_pDrawPadCanvas->currentPage()); + painter.begin(m_pDrawPadCanvas->currentPage()->pixmap()); painter.setPen(pen); m_polyline[2] = m_polyline[1]; @@ -70,5 +70,5 @@ void EraseTool::mouseMoveEvent(QMouseEvent* e) bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(), - m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height()); + m_pDrawPadCanvas->currentPage()->pixmap(), r.x(), r.y(), r.width(), r.height()); m_pDrawPadCanvas->viewport()->update(viewportRect); diff --git a/noncore/graphics/drawpad/filltool.cpp b/noncore/graphics/drawpad/filltool.cpp index 0177e1c..2a39d04 100644 --- a/noncore/graphics/drawpad/filltool.cpp +++ b/noncore/graphics/drawpad/filltool.cpp @@ -36,9 +36,11 @@ void FillTool::mousePressEvent(QMouseEvent* e) int y = e->y(); - m_image = m_pDrawPadCanvas->currentPage()->convertToImage(); + m_image = m_pDrawPadCanvas->currentPage()->pixmap()->convertToImage(); m_fillRgb = m_pDrawPad->brush().color().rgb(); m_oldRgb = m_image.pixel(x, y); if (m_oldRgb != m_fillRgb) { + m_pDrawPadCanvas->backupPage(); + if (m_pDrawPad->antiAliasing()) { m_mask.create(m_image.width(), m_image.height(), 8, 2); @@ -59,8 +61,6 @@ void FillTool::mousePressEvent(QMouseEvent* e) } - m_pDrawPadCanvas->currentPage()->convertFromImage(m_image); + m_pDrawPadCanvas->currentPage()->pixmap()->convertFromImage(m_image); m_pDrawPadCanvas->viewport()->update(); - - m_pDrawPadCanvas->backupPage(); } } @@ -112,29 +112,29 @@ void FillTool::fillMaskLine(int x, int y) if ((x >= 0) && (x < m_image.width()) && (y >= 0) && (y < m_image.height())) { if (m_mask.pixelIndex(x, y) == 0) { - if (rgbDistance(m_image.pixel(x, y), m_oldRgb) < FILL_THRESHOLD) { - int x1, x2; + if (rgbDistance(m_image.pixel(x, y), m_oldRgb) < FILL_THRESHOLD) { + int x1, x2; - x1 = x - 1; - x2 = x + 1; + x1 = x - 1; + x2 = x + 1; - while ((x1 >= 0) && (rgbDistance(m_image.pixel(x1, y), m_oldRgb) < FILL_THRESHOLD)) { - x1--; - } + while ((x1 >= 0) && (rgbDistance(m_image.pixel(x1, y), m_oldRgb) < FILL_THRESHOLD)) { + x1--; + } - while ((x2 < m_image.width()) && (rgbDistance(m_image.pixel(x2, y), m_oldRgb) < FILL_THRESHOLD)) { - x2++; - } + while ((x2 < m_image.width()) && (rgbDistance(m_image.pixel(x2, y), m_oldRgb) < FILL_THRESHOLD)) { + x2++; + } - for (int i = x1 + 1; i < x2; i++) { - m_mask.setPixel(i, y, 1); - } + for (int i = x1 + 1; i < x2; i++) { + m_mask.setPixel(i, y, 1); + } - for (int i = x1 + 1; i < x2; i++) { - fillMaskLine(i, y - 1); - } + for (int i = x1 + 1; i < x2; i++) { + fillMaskLine(i, y - 1); + } - for (int i = x1 + 1; i < x2; i++) { - fillMaskLine(i, y + 1); - } + for (int i = x1 + 1; i < x2; i++) { + fillMaskLine(i, y + 1); + } } } diff --git a/noncore/graphics/drawpad/page.cpp b/noncore/graphics/drawpad/page.cpp index 601d1c3..fbf3d01 100644 --- a/noncore/graphics/drawpad/page.cpp +++ b/noncore/graphics/drawpad/page.cpp @@ -14,26 +14,39 @@ #include "page.h" +const int PAGE_BACKUPS = 99; + Page::Page() - : QPixmap() { + m_title = ""; m_lastModified = QDateTime::currentDateTime(); + m_pPixmap = new QPixmap(); + + m_backHistory.setAutoDelete(true); + m_forwardHistory.setAutoDelete(true); } Page::Page(QString title, int w, int h) - : QPixmap(w, h) { m_title = title; m_lastModified = QDateTime::currentDateTime(); + m_pPixmap = new QPixmap(w, h); + + m_backHistory.setAutoDelete(true); + m_forwardHistory.setAutoDelete(true); } Page::Page(QString title, const QSize& size) - : QPixmap(size) { m_title = title; m_lastModified = QDateTime::currentDateTime(); + m_pPixmap = new QPixmap(size); + + m_backHistory.setAutoDelete(true); + m_forwardHistory.setAutoDelete(true); } Page::~Page() { + delete m_pPixmap; } @@ -48,4 +61,10 @@ QDateTime Page::lastModified() const } +QPixmap* Page::pixmap() const + +{ + return m_pPixmap; +} + void Page::setTitle(QString title) { @@ -58,2 +77,37 @@ void Page::setLastModified(QDateTime lastModified) } +bool Page::undoEnabled() +{ + return (!m_backHistory.isEmpty()); +} + +bool Page::redoEnabled() +{ + return (!m_forwardHistory.isEmpty()); +} + +void Page::backup() +{ + setLastModified(QDateTime::currentDateTime()); + + while (m_backHistory.count() >= (PAGE_BACKUPS + 1)) { + m_backHistory.removeFirst(); + } + + m_backHistory.append(new QPixmap(*m_pPixmap)); + m_forwardHistory.clear(); +} + +void Page::undo() +{ + m_forwardHistory.append(new QPixmap(*m_pPixmap)); + m_pPixmap = new QPixmap(*(m_backHistory.last())); + m_backHistory.removeLast(); +} + +void Page::redo() +{ + m_backHistory.append(new QPixmap(*m_pPixmap)); + m_pPixmap = new QPixmap(*(m_forwardHistory.last())); + m_forwardHistory.removeLast(); +} diff --git a/noncore/graphics/drawpad/page.h b/noncore/graphics/drawpad/page.h index 20a37b5..8ce7bc9 100644 --- a/noncore/graphics/drawpad/page.h +++ b/noncore/graphics/drawpad/page.h @@ -15,9 +15,11 @@ #define PAGE_H -#include <qpixmap.h> +#include <qobject.h> #include <qdatetime.h> +#include <qlist.h> +#include <qpixmap.h> -class Page : public QPixmap +class Page : public QObject { public: @@ -27,14 +29,26 @@ public: ~Page(); - + QString title() const; QDateTime lastModified() const; + QPixmap* pixmap() const; void setTitle(QString title); void setLastModified(QDateTime lastModified); + bool undoEnabled(); + bool redoEnabled(); + + void backup(); + void undo(); + void redo(); + private: QString m_title; QDateTime m_lastModified; + QPixmap* m_pPixmap; + + QList<QPixmap> m_backHistory; + QList<QPixmap> m_forwardHistory; }; diff --git a/noncore/graphics/drawpad/pageinformationdialog.cpp b/noncore/graphics/drawpad/pageinformationdialog.cpp index c0d055e..cb14d73 100644 --- a/noncore/graphics/drawpad/pageinformationdialog.cpp +++ b/noncore/graphics/drawpad/pageinformationdialog.cpp @@ -44,8 +44,8 @@ PageInformationDialog::PageInformationDialog(Page* page, QWidget* parent, const QLabel* widthLabel = new QLabel(tr("Width:"), sizeGroupBox); - QLabel* widthValueLabel = new QLabel(QString::number(m_pPage->width()), sizeGroupBox); + QLabel* widthValueLabel = new QLabel(QString::number(m_pPage->pixmap()->width()), sizeGroupBox); QLabel* heightLabel = new QLabel(tr("Height:"), sizeGroupBox); - QLabel* heightValueLabel = new QLabel(QString::number(m_pPage->height()), sizeGroupBox); + QLabel* heightValueLabel = new QLabel(QString::number(m_pPage->pixmap()->height()), sizeGroupBox); QVBoxLayout* mainLayout = new QVBoxLayout(this, 4, 4); diff --git a/noncore/graphics/drawpad/pointtool.cpp b/noncore/graphics/drawpad/pointtool.cpp index a4f846e..b9b52bc 100644 --- a/noncore/graphics/drawpad/pointtool.cpp +++ b/noncore/graphics/drawpad/pointtool.cpp @@ -34,4 +34,6 @@ PointTool::~PointTool() void PointTool::mousePressEvent(QMouseEvent* e) { + m_pDrawPadCanvas->backupPage(); + m_mousePressed = true; m_polyline[2] = m_polyline[1] = m_polyline[0] = e->pos(); @@ -43,6 +45,4 @@ void PointTool::mouseReleaseEvent(QMouseEvent* e) m_mousePressed = false; - - m_pDrawPadCanvas->backupPage(); } @@ -62,5 +62,5 @@ void PointTool::mouseMoveEvent(QMouseEvent* e) QPainter painter; - painter.begin(m_pDrawPadCanvas->currentPage()); + painter.begin(m_pDrawPadCanvas->currentPage()->pixmap()); if (m_pDrawPad->antiAliasing()) { @@ -105,5 +105,5 @@ void PointTool::mouseMoveEvent(QMouseEvent* e) bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(), - m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height()); + m_pDrawPadCanvas->currentPage()->pixmap(), r.x(), r.y(), r.width(), r.height()); m_pDrawPadCanvas->viewport()->update(viewportRect); diff --git a/noncore/graphics/drawpad/shapetool.cpp b/noncore/graphics/drawpad/shapetool.cpp index 8870a78..22e3dd6 100644 --- a/noncore/graphics/drawpad/shapetool.cpp +++ b/noncore/graphics/drawpad/shapetool.cpp @@ -33,4 +33,6 @@ ShapeTool::~ShapeTool() void ShapeTool::mousePressEvent(QMouseEvent* e) { + m_pDrawPadCanvas->backupPage(); + m_mousePressed = true; m_polyline[2] = m_polyline[1] = m_polyline[0] = e->pos(); @@ -42,5 +44,5 @@ void ShapeTool::mouseReleaseEvent(QMouseEvent* e) QPainter painter; - painter.begin(m_pDrawPadCanvas->currentPage()); + painter.begin(m_pDrawPadCanvas->currentPage()->pixmap()); drawFinalShape(painter); painter.end(); @@ -57,11 +59,9 @@ void ShapeTool::mouseReleaseEvent(QMouseEvent* e) bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(), - m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height()); + m_pDrawPadCanvas->currentPage()->pixmap(), r.x(), r.y(), r.width(), r.height()); m_pDrawPadCanvas->viewport()->update(viewportRect); m_mousePressed = false; - - m_pDrawPadCanvas->backupPage(); } @@ -71,5 +71,5 @@ void ShapeTool::mouseMoveEvent(QMouseEvent* e) m_polyline[0] = e->pos(); QPainter painter; - painter.begin(m_pDrawPadCanvas->currentPage()); + painter.begin(m_pDrawPadCanvas->currentPage()->pixmap()); drawTemporaryShape(painter); painter.end(); @@ -86,5 +86,5 @@ void ShapeTool::mouseMoveEvent(QMouseEvent* e) bitBlt(m_pDrawPadCanvas->viewport(), viewportRect.x(), viewportRect.y(), - m_pDrawPadCanvas->currentPage(), r.x(), r.y(), r.width(), r.height()); + m_pDrawPadCanvas->currentPage()->pixmap(), r.x(), r.y(), r.width(), r.height()); m_pDrawPadCanvas->viewport()->update(viewportRect); diff --git a/noncore/graphics/drawpad/texttool.cpp b/noncore/graphics/drawpad/texttool.cpp index 34c8a76..9037abd 100644 --- a/noncore/graphics/drawpad/texttool.cpp +++ b/noncore/graphics/drawpad/texttool.cpp @@ -57,6 +57,8 @@ void TextTool::mousePressEvent(QMouseEvent* e) if (textToolDialog.exec() == QDialog::Accepted && !textToolDialog.text().isEmpty()) { + m_pDrawPadCanvas->backupPage(); + QPainter painter; - painter.begin(m_pDrawPadCanvas->currentPage()); + painter.begin(m_pDrawPadCanvas->currentPage()->pixmap()); painter.setPen(m_pDrawPad->pen()); painter.drawText(e->x(), e->y(), textToolDialog.text()); @@ -64,6 +66,4 @@ void TextTool::mousePressEvent(QMouseEvent* e) m_pDrawPadCanvas->viewport()->update(); - - m_pDrawPadCanvas->backupPage(); } } diff --git a/noncore/graphics/drawpad/thumbnailview.cpp b/noncore/graphics/drawpad/thumbnailview.cpp index 14092bf..9b08ca2 100644 --- a/noncore/graphics/drawpad/thumbnailview.cpp +++ b/noncore/graphics/drawpad/thumbnailview.cpp @@ -36,5 +36,5 @@ PageListBoxItem::PageListBoxItem(Page* page, QListBox* parent) m_pPage = page; - QImage image = m_pPage->convertToImage(); + QImage image = m_pPage->pixmap()->convertToImage(); int previewWidth = THUMBNAIL_SIZE; @@ -58,6 +58,6 @@ PageListBoxItem::PageListBoxItem(Page* page, QListBox* parent) m_titleText = QObject::tr("Title:") + " " + m_pPage->title(); - m_dimensionText = QObject::tr("Dimension:") + " " + QString::number(m_pPage->width()) - + "x" + QString::number(m_pPage->height()); + m_dimensionText = QObject::tr("Dimension:") + " " + QString::number(m_pPage->pixmap()->width()) + + "x" + QString::number(m_pPage->pixmap()->height()); m_dateText = QObject::tr("Date:") + " " + dateTimeString(m_pPage->lastModified()); |