summaryrefslogtreecommitdiff
path: root/noncore/graphics
authorleseb <leseb>2002-03-17 15:31:12 (UTC)
committer leseb <leseb>2002-03-17 15:31:12 (UTC)
commit378db8490c6c80ced939622605be1500fa126a2d (patch) (side-by-side diff)
treeb39bbe287f70a1e867060eb14b86536e7d727d17 /noncore/graphics
parent31e0537b3406d3e89df6424cded2570d28d61df4 (diff)
downloadopie-378db8490c6c80ced939622605be1500fa126a2d.zip
opie-378db8490c6c80ced939622605be1500fa126a2d.tar.gz
opie-378db8490c6c80ced939622605be1500fa126a2d.tar.bz2
Basic undo/redo
Diffstat (limited to 'noncore/graphics') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawmode.h6
-rw-r--r--noncore/graphics/drawpad/drawpad.cpp81
-rw-r--r--noncore/graphics/drawpad/drawpad.h17
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp135
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.h12
5 files changed, 159 insertions, 92 deletions
diff --git a/noncore/graphics/drawpad/drawmode.h b/noncore/graphics/drawpad/drawmode.h
index d4ecadd..4e80fe2 100644
--- a/noncore/graphics/drawpad/drawmode.h
+++ b/noncore/graphics/drawpad/drawmode.h
@@ -23,5 +23,7 @@ class DrawMode : QObject
{
-public:
+protected:
DrawMode(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas);
- ~DrawMode();
+
+public:
+ virtual ~DrawMode();
diff --git a/noncore/graphics/drawpad/drawpad.cpp b/noncore/graphics/drawpad/drawpad.cpp
index 3c593b6..5cc2197 100644
--- a/noncore/graphics/drawpad/drawpad.cpp
+++ b/noncore/graphics/drawpad/drawpad.cpp
@@ -43,2 +43,4 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
m_pDrawPadCanvas = new DrawPadCanvas(this, this);
+ connect(m_pDrawPadCanvas, SIGNAL(pagesChanged()), this, SLOT(updateNavigationToolButtons()));
+ connect(m_pDrawPadCanvas, SIGNAL(pageBackupsChanged()), this, SLOT(updateUndoRedoToolButtons()));
@@ -73,3 +75,3 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
QAction* clearAllAction = new QAction(tr("Clear All"), QString::null, 0, this);
- connect(clearAllAction, SIGNAL(activated()), this, SLOT(clearAll()));
+ connect(clearAllAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(clearAll()));
clearAllAction->addTo(toolsPopupMenu);
@@ -88,3 +90,3 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
QAction* newPageAction = new QAction(tr("New Page"), Resource::loadIconSet("new"), QString::null, 0, this);
- connect(newPageAction, SIGNAL(activated()), this, SLOT(newPage()));
+ connect(newPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(newPage()));
newPageAction->addTo(pageToolBar);
@@ -96,3 +98,3 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
QAction* deletePageAction = new QAction(tr("Delete Page"), Resource::loadIconSet("trash"), QString::null, 0, this);
- connect(deletePageAction, SIGNAL(activated()), this, SLOT(deletePage()));
+ connect(deletePageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(deletePage()));
deletePageAction->addTo(pageToolBar);
@@ -106,4 +108,14 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
+ m_pUndoAction = new QAction(tr("Undo"), Resource::loadIconSet("drawpad/undo"), QString::null, 0, this);
+ connect(m_pUndoAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(undo()));
+ m_pUndoAction->addTo(navigationToolBar);
+
+ m_pRedoAction = new QAction(tr("Redo"), Resource::loadIconSet("drawpad/redo"), QString::null, 0, this);
+ connect(m_pRedoAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(redo()));
+ m_pRedoAction->addTo(navigationToolBar);
+
+ updateUndoRedoToolButtons();
+
m_pFirstPageAction = new QAction(tr("First Page"), Resource::loadIconSet("fastback"), QString::null, 0, this);
- connect(m_pFirstPageAction, SIGNAL(activated()), this, SLOT(goFirstPage()));
+ connect(m_pFirstPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goFirstPage()));
m_pFirstPageAction->addTo(navigationToolBar);
@@ -111,3 +123,3 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
m_pPreviousPageAction = new QAction(tr("Previous Page"), Resource::loadIconSet("back"), QString::null, 0, this);
- connect(m_pPreviousPageAction, SIGNAL(activated()), this, SLOT(goPreviousPage()));
+ connect(m_pPreviousPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goPreviousPage()));
m_pPreviousPageAction->addTo(navigationToolBar);
@@ -115,3 +127,3 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
m_pNextPageAction = new QAction(tr("Next Page"), Resource::loadIconSet("forward"), QString::null, 0, this);
- connect(m_pNextPageAction, SIGNAL(activated()), this, SLOT(goNextPage()));
+ connect(m_pNextPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goNextPage()));
m_pNextPageAction->addTo(navigationToolBar);
@@ -119,6 +131,6 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
m_pLastPageAction = new QAction(tr("Last Page"), Resource::loadIconSet("fastforward"), QString::null, 0, this);
- connect(m_pLastPageAction, SIGNAL(activated()), this, SLOT(goLastPage()));
+ connect(m_pLastPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(goLastPage()));
m_pLastPageAction->addTo(navigationToolBar);
- updateNavigationToolBar();
+ updateNavigationToolButtons();
@@ -163,2 +175,5 @@ DrawPad::DrawPad(QWidget* parent, const char* name, WFlags f)
emptyToolBar->setHorizontalStretchable(true);
+ emptyToolBar->addSeparator();
+
+ // init draw parameters toolbar
@@ -220,44 +235,2 @@ DrawPad::~DrawPad()
-void DrawPad::clearAll()
-{
- m_pDrawPadCanvas->clearAll();
- updateNavigationToolBar();
-}
-
-void DrawPad::newPage()
-{
- m_pDrawPadCanvas->newPage();
- updateNavigationToolBar();
-}
-
-void DrawPad::deletePage()
-{
- m_pDrawPadCanvas->deletePage();
- updateNavigationToolBar();
-}
-
-void DrawPad::goFirstPage()
-{
- m_pDrawPadCanvas->goFirstPage();
- updateNavigationToolBar();
-}
-
-void DrawPad::goPreviousPage()
-{
- m_pDrawPadCanvas->goPreviousPage();
- updateNavigationToolBar();
-}
-
-void DrawPad::goNextPage()
-{
- m_pDrawPadCanvas->goNextPage();
- updateNavigationToolBar();
-}
-
-void DrawPad::goLastPage()
-{
- m_pDrawPadCanvas->goLastPage();
- updateNavigationToolBar();
-}
-
void DrawPad::setPointDrawMode()
@@ -383,3 +356,9 @@ void DrawPad::changeBrushColor(int index)
-void DrawPad::updateNavigationToolBar()
+void DrawPad::updateUndoRedoToolButtons()
+{
+ m_pUndoAction->setEnabled(m_pDrawPadCanvas->undoEnabled());
+ m_pRedoAction->setEnabled(m_pDrawPadCanvas->redoEnabled());
+}
+
+void DrawPad::updateNavigationToolButtons()
{
diff --git a/noncore/graphics/drawpad/drawpad.h b/noncore/graphics/drawpad/drawpad.h
index 0ece408..ee81ddf 100644
--- a/noncore/graphics/drawpad/drawpad.h
+++ b/noncore/graphics/drawpad/drawpad.h
@@ -41,11 +41,2 @@ public:
private slots:
- void clearAll();
- void newPage();
- void deletePage();
-
- void goFirstPage();
- void goPreviousPage();
- void goNextPage();
- void goLastPage();
-
void setPointDrawMode();
@@ -61,5 +52,6 @@ private slots:
-private:
- void updateNavigationToolBar();
+ void updateUndoRedoToolButtons();
+ void updateNavigationToolButtons();
+private:
DrawPadCanvas* m_pDrawPadCanvas;
@@ -71,2 +63,5 @@ private:
+ QAction* m_pUndoAction;
+ QAction* m_pRedoAction;
+
QAction* m_pFirstPageAction;
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
@@ -145,5 +145,7 @@ DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name
m_pDrawPad = drawPad;
- m_buffers.setAutoDelete(true);
- m_buffers.append(new QPixmap(width(), height()));
- m_buffers.current()->fill(Qt::white);
+ m_pages.setAutoDelete(true);
+ m_pages.append(new QPixmap(width(), height()));
+ m_pages.current()->fill(Qt::white);
+ m_pageBackups.setAutoDelete(true);
+ m_pageBackups.append(new QPixmap(*(m_pages.current())));
}
@@ -166,9 +168,12 @@ void DrawPadCanvas::load(QIODevice* ioDevice)
- m_buffers = drawPadCanvasXmlHandler.pixmaps();
+ m_pages = drawPadCanvasXmlHandler.pixmaps();
- if (m_buffers.isEmpty()) {
- m_buffers.append(new QPixmap(width(), height()));
- m_buffers.current()->fill(Qt::white);
+ if (m_pages.isEmpty()) {
+ m_pages.append(new QPixmap(width(), height()));
+ m_pages.current()->fill(Qt::white);
}
+ m_pageBackups.clear();
+ m_pageBackups.append(new QPixmap(*(m_pages.current())));
+
repaint();
@@ -184,3 +189,3 @@ void DrawPadCanvas::save(QIODevice* ioDevice)
- QListIterator<QPixmap> bufferIterator(m_buffers);
+ QListIterator<QPixmap> bufferIterator(m_pages);
@@ -223,3 +228,3 @@ QPixmap* DrawPadCanvas::currentPage()
{
- return m_buffers.current();
+ return m_pages.current();
}
@@ -228,8 +233,14 @@ void DrawPadCanvas::clearAll()
{
- m_buffers.clear();
+ m_pages.clear();
+
+ m_pages.append(new QPixmap(width(), height()));
+ m_pages.current()->fill(Qt::white);
- m_buffers.append(new QPixmap(width(), height()));
- m_buffers.current()->fill(Qt::white);
+ m_pageBackups.clear();
+ m_pageBackups.append(new QPixmap(*(m_pages.current())));
repaint();
+
+ emit pagesChanged();
+ emit pageBackupsChanged();
}
@@ -238,5 +249,10 @@ void DrawPadCanvas::newPage()
{
- m_buffers.insert(m_buffers.at() + 1, new QPixmap(width(), height()));
- m_buffers.current()->fill(Qt::white);
+ m_pages.insert(m_pages.at() + 1, new QPixmap(width(), height()));
+ m_pages.current()->fill(Qt::white);
+ m_pageBackups.clear();
+ m_pageBackups.append(new QPixmap(*(m_pages.current())));
repaint();
+
+ emit pagesChanged();
+ emit pageBackupsChanged();
}
@@ -245,3 +261,3 @@ void DrawPadCanvas::clearPage()
{
- m_buffers.current()->fill(Qt::white);
+ m_pages.current()->fill(Qt::white);
repaint();
@@ -251,10 +267,26 @@ void DrawPadCanvas::deletePage()
{
- m_buffers.remove(m_buffers.current());
+ m_pages.remove(m_pages.current());
- if (m_buffers.isEmpty()) {
- m_buffers.append(new QPixmap(width(), height()));
- m_buffers.current()->fill(Qt::white);
+ if (m_pages.isEmpty()) {
+ m_pages.append(new QPixmap(width(), height()));
+ m_pages.current()->fill(Qt::white);
}
+ m_pageBackups.clear();
+ m_pageBackups.append(new QPixmap(*(m_pages.current())));
+
repaint();
+
+ emit pagesChanged();
+ emit pageBackupsChanged();
+}
+
+bool DrawPadCanvas::undoEnabled()
+{
+ return (m_pageBackups.current() != m_pageBackups.getFirst());
+}
+
+bool DrawPadCanvas::redoEnabled()
+{
+ return (m_pageBackups.current() != m_pageBackups.getLast());
}
@@ -263,3 +295,3 @@ bool DrawPadCanvas::goPreviousPageEnabled()
{
- return (m_buffers.current() != m_buffers.getFirst());
+ return (m_pages.current() != m_pages.getFirst());
}
@@ -268,3 +300,19 @@ bool DrawPadCanvas::goNextPageEnabled()
{
- return (m_buffers.current() != m_buffers.getLast());
+ return (m_pages.current() != m_pages.getLast());
+}
+
+void DrawPadCanvas::undo()
+{
+ *(m_pages.current()) = *(m_pageBackups.prev());
+ repaint();
+
+ emit pageBackupsChanged();
+}
+
+void DrawPadCanvas::redo()
+{
+ *(m_pages.current()) = *(m_pageBackups.next());
+ repaint();
+
+ emit pageBackupsChanged();
}
@@ -273,4 +321,9 @@ void DrawPadCanvas::goFirstPage()
{
- m_buffers.first();
+ m_pages.first();
+ m_pageBackups.clear();
+ m_pageBackups.append(new QPixmap(*(m_pages.current())));
repaint();
+
+ emit pagesChanged();
+ emit pageBackupsChanged();
}
@@ -279,4 +332,9 @@ void DrawPadCanvas::goPreviousPage()
{
- m_buffers.prev();
+ m_pages.prev();
+ m_pageBackups.clear();
+ m_pageBackups.append(new QPixmap(*(m_pages.current())));
repaint();
+
+ emit pagesChanged();
+ emit pageBackupsChanged();
}
@@ -285,4 +343,9 @@ void DrawPadCanvas::goNextPage()
{
- m_buffers.next();
+ m_pages.next();
+ m_pageBackups.clear();
+ m_pageBackups.append(new QPixmap(*(m_pages.current())));
repaint();
+
+ emit pagesChanged();
+ emit pageBackupsChanged();
}
@@ -291,4 +354,9 @@ void DrawPadCanvas::goLastPage()
{
- m_buffers.last();
+ m_pages.last();
+ m_pageBackups.clear();
+ m_pageBackups.append(new QPixmap(*(m_pages.current())));
repaint();
+
+ emit pagesChanged();
+ emit pageBackupsChanged();
}
@@ -303,2 +371,15 @@ void DrawPadCanvas::mouseReleaseEvent(QMouseEvent* e)
m_pDrawPad->drawMode()->mouseReleaseEvent(e);
+
+ QPixmap* currentBackup = m_pageBackups.current();
+ while (m_pageBackups.last() != currentBackup) {
+ m_pageBackups.removeLast();
+ }
+
+ while (m_pageBackups.count() >= (5 + 1)) {
+ m_pageBackups.removeFirst();
+ }
+
+ m_pageBackups.append(new QPixmap(*(m_pages.current())));
+
+ emit pageBackupsChanged();
}
@@ -314,3 +395,3 @@ void DrawPadCanvas::resizeEvent(QResizeEvent* e)
- QListIterator<QPixmap> bufferIterator(m_buffers);
+ QListIterator<QPixmap> bufferIterator(m_pages);
@@ -336,3 +417,3 @@ void DrawPadCanvas::paintEvent(QPaintEvent* e)
QRect r = rects[i];
- bitBlt(this, r.x(), r.y(), m_buffers.current(), r.x(), r.y(), r.width(), r.height());
+ bitBlt(this, r.x(), r.y(), m_pages.current(), r.x(), r.y(), r.width(), r.height());
}
diff --git a/noncore/graphics/drawpad/drawpadcanvas.h b/noncore/graphics/drawpad/drawpadcanvas.h
index 2ec9298..eddcb43 100644
--- a/noncore/graphics/drawpad/drawpadcanvas.h
+++ b/noncore/graphics/drawpad/drawpadcanvas.h
@@ -36,2 +36,4 @@ public:
+ bool undoEnabled();
+ bool redoEnabled();
bool goPreviousPageEnabled();
@@ -47,2 +49,5 @@ public slots:
+ void undo();
+ void redo();
+
void goFirstPage();
@@ -52,2 +57,6 @@ public slots:
+signals:
+ void pagesChanged();
+ void pageBackupsChanged();
+
protected:
@@ -61,3 +70,4 @@ private:
DrawPad* m_pDrawPad;
- QList<QPixmap> m_buffers;
+ QList<QPixmap> m_pages;
+ QList<QPixmap> m_pageBackups;
};