-rw-r--r-- | noncore/graphics/drawpad/drawpad.cpp | 84 | ||||
-rw-r--r-- | noncore/graphics/drawpad/drawpad.h | 3 | ||||
-rw-r--r-- | noncore/graphics/drawpad/drawpad.pro | 2 | ||||
-rw-r--r-- | noncore/graphics/drawpad/drawpadcanvas.cpp | 29 | ||||
-rw-r--r-- | noncore/graphics/drawpad/drawpadcanvas.h | 2 | ||||
-rw-r--r-- | noncore/graphics/drawpad/erasetool.cpp | 2 | ||||
-rw-r--r-- | noncore/graphics/drawpad/filltool.cpp | 2 | ||||
-rw-r--r-- | noncore/graphics/drawpad/pointtool.cpp | 2 | ||||
-rw-r--r-- | noncore/graphics/drawpad/shapetool.cpp | 2 | ||||
-rw-r--r-- | noncore/graphics/drawpad/texttool.cpp | 79 | ||||
-rw-r--r-- | noncore/graphics/drawpad/texttool.h | 46 | ||||
-rw-r--r-- | pics/drawpad/text.png | bin | 0 -> 142 bytes |
12 files changed, 218 insertions, 35 deletions
diff --git a/noncore/graphics/drawpad/drawpad.cpp b/noncore/graphics/drawpad/drawpad.cpp index 1375792..7e6fc53 100644 --- a/noncore/graphics/drawpad/drawpad.cpp +++ b/noncore/graphics/drawpad/drawpad.cpp @@ -23,12 +23,13 @@ #include "filledrectangletool.h" #include "filltool.h" #include "importdialog.h" #include "linetool.h" #include "pointtool.h" #include "rectangletool.h" +#include "texttool.h" #include <qpe/applnk.h> #include <qpe/global.h> #include <qpe/qpemenubar.h> #include <qpe/qpetoolbar.h> #include <qpe/resource.h> @@ -126,21 +127,27 @@ DrawPad::DrawPad(QWidget* parent, const char* name) m_pLastPageAction->addTo(navigationToolBar); // init draw mode toolbar QPEToolBar* drawModeToolBar = new QPEToolBar(this); - m_pPointToolAction = new QAction(tr("Draw Point"), Resource::loadIconSet("drawpad/point.png"), QString::null, 0, this); - m_pPointToolAction->setToggleAction(true); + m_pLineToolButton = new QToolButton(drawModeToolBar); + m_pLineToolButton->setToggleButton(true); + + QPopupMenu* linePopupMenu = new QPopupMenu(m_pLineToolButton); + + m_pPointToolAction = new QAction(tr("Draw Point"), Resource::loadIconSet("drawpad/point.png"), "", 0, this); connect(m_pPointToolAction, SIGNAL(activated()), this, SLOT(setPointTool())); - m_pPointToolAction->addTo(drawModeToolBar); + m_pPointToolAction->addTo(linePopupMenu); - m_pLineToolAction = new QAction(tr("Draw Line"), Resource::loadIconSet("drawpad/line.png"), QString::null, 0, this); - m_pLineToolAction->setToggleAction(true); + m_pLineToolAction = new QAction(tr("Draw Line"), Resource::loadIconSet("drawpad/line.png"), "", 0, this); connect(m_pLineToolAction, SIGNAL(activated()), this, SLOT(setLineTool())); - m_pLineToolAction->addTo(drawModeToolBar); + m_pLineToolAction->addTo(linePopupMenu); + + m_pLineToolButton->setPopup(linePopupMenu); + m_pLineToolButton->setPopupDelay(0); m_pRectangleToolButton = new QToolButton(drawModeToolBar); m_pRectangleToolButton->setToggleButton(true); QPopupMenu* rectanglePopupMenu = new QPopupMenu(m_pRectangleToolButton); @@ -168,12 +175,17 @@ DrawPad::DrawPad(QWidget* parent, const char* name) connect(m_pFilledEllipseToolAction, SIGNAL(activated()), this, SLOT(setFilledEllipseTool())); m_pFilledEllipseToolAction->addTo(ellipsePopupMenu); m_pEllipseToolButton->setPopup(ellipsePopupMenu); m_pEllipseToolButton->setPopupDelay(0); + m_pTextToolAction = new QAction(tr("Insert Text"), Resource::loadIconSet("drawpad/text.png"), QString::null, 0, this); + m_pTextToolAction->setToggleAction(true); + connect(m_pTextToolAction, SIGNAL(activated()), this, SLOT(setTextTool())); + m_pTextToolAction->addTo(drawModeToolBar); + m_pFillToolAction = new QAction(tr("Fill Region"), Resource::loadIconSet("drawpad/fill.png"), QString::null, 0, this); m_pFillToolAction->setToggleAction(true); connect(m_pFillToolAction, SIGNAL(activated()), this, SLOT(setFillTool())); m_pFillToolAction->addTo(drawModeToolBar); m_pEraseToolAction = new QAction(tr("Erase Point"), Resource::loadIconSet("drawpad/erase.png"), QString::null, 0, this); @@ -270,32 +282,44 @@ void DrawPad::setPointTool() if (m_pTool) { delete m_pTool; } m_pTool = new PointTool(this, m_pDrawPadCanvas); - m_pPointToolAction->setOn(true); - m_pLineToolAction->setOn(false); + m_pLineToolButton->setIconSet(m_pPointToolAction->iconSet()); + QToolTip::add(m_pLineToolButton, m_pPointToolAction->text()); + + disconnect(m_pLineToolButton, SIGNAL(clicked()), 0, 0); + connect(m_pLineToolButton, SIGNAL(clicked()), m_pPointToolAction, SIGNAL(activated())); + + m_pLineToolButton->setOn(true); m_pRectangleToolButton->setOn(false); m_pEllipseToolButton->setOn(false); + m_pTextToolAction->setOn(false); m_pFillToolAction->setOn(false); m_pEraseToolAction->setOn(false); } void DrawPad::setLineTool() { if (m_pTool) { delete m_pTool; } m_pTool = new LineTool(this, m_pDrawPadCanvas); - m_pPointToolAction->setOn(false); - m_pLineToolAction->setOn(true); + m_pLineToolButton->setIconSet(m_pLineToolAction->iconSet()); + QToolTip::add(m_pLineToolButton, m_pLineToolAction->text()); + + disconnect(m_pLineToolButton, SIGNAL(clicked()), 0, 0); + connect(m_pLineToolButton, SIGNAL(clicked()), m_pLineToolAction, SIGNAL(activated())); + + m_pLineToolButton->setOn(true); m_pRectangleToolButton->setOn(false); m_pEllipseToolButton->setOn(false); + m_pTextToolAction->setOn(false); m_pFillToolAction->setOn(false); m_pEraseToolAction->setOn(false); } void DrawPad::setRectangleTool() { @@ -308,16 +332,16 @@ void DrawPad::setRectangleTool() m_pRectangleToolButton->setIconSet(m_pRectangleToolAction->iconSet()); QToolTip::add(m_pRectangleToolButton, m_pRectangleToolAction->text()); disconnect(m_pRectangleToolButton, SIGNAL(clicked()), 0, 0); connect(m_pRectangleToolButton, SIGNAL(clicked()), m_pRectangleToolAction, SIGNAL(activated())); - m_pPointToolAction->setOn(false); - m_pLineToolAction->setOn(false); + m_pLineToolButton->setOn(false); m_pRectangleToolButton->setOn(true); m_pEllipseToolButton->setOn(false); + m_pTextToolAction->setOn(false); m_pFillToolAction->setOn(false); m_pEraseToolAction->setOn(false); } void DrawPad::setFilledRectangleTool() { @@ -330,16 +354,16 @@ void DrawPad::setFilledRectangleTool() m_pRectangleToolButton->setIconSet(m_pFilledRectangleToolAction->iconSet()); QToolTip::add(m_pRectangleToolButton, m_pFilledRectangleToolAction->text()); disconnect(m_pRectangleToolButton, SIGNAL(clicked()), 0, 0); connect(m_pRectangleToolButton, SIGNAL(clicked()), m_pFilledRectangleToolAction, SIGNAL(activated())); - m_pPointToolAction->setOn(false); - m_pLineToolAction->setOn(false); + m_pLineToolButton->setOn(false); m_pRectangleToolButton->setOn(true); m_pEllipseToolButton->setOn(false); + m_pTextToolAction->setOn(false); m_pFillToolAction->setOn(false); m_pEraseToolAction->setOn(false); } void DrawPad::setEllipseTool() { @@ -352,16 +376,16 @@ void DrawPad::setEllipseTool() m_pEllipseToolButton->setIconSet(m_pEllipseToolAction->iconSet()); QToolTip::add(m_pEllipseToolButton, m_pEllipseToolAction->text()); disconnect(m_pEllipseToolButton, SIGNAL(clicked()), 0, 0); connect(m_pEllipseToolButton, SIGNAL(clicked()), m_pEllipseToolAction, SIGNAL(activated())); - m_pPointToolAction->setOn(false); - m_pLineToolAction->setOn(false); + m_pLineToolButton->setOn(false); m_pRectangleToolButton->setOn(false); m_pEllipseToolButton->setOn(true); + m_pTextToolAction->setOn(false); m_pFillToolAction->setOn(false); m_pEraseToolAction->setOn(false); } void DrawPad::setFilledEllipseTool() { @@ -374,48 +398,64 @@ void DrawPad::setFilledEllipseTool() m_pEllipseToolButton->setIconSet(m_pFilledEllipseToolAction->iconSet()); QToolTip::add(m_pEllipseToolButton, m_pFilledEllipseToolAction->text()); disconnect(m_pEllipseToolButton, SIGNAL(clicked()), 0, 0); connect(m_pEllipseToolButton, SIGNAL(clicked()), m_pFilledEllipseToolAction, SIGNAL(activated())); - m_pPointToolAction->setOn(false); - m_pLineToolAction->setOn(false); + m_pLineToolButton->setOn(false); m_pRectangleToolButton->setOn(false); m_pEllipseToolButton->setOn(true); + m_pTextToolAction->setOn(false); + m_pFillToolAction->setOn(false); + m_pEraseToolAction->setOn(false); +} + +void DrawPad::setTextTool() +{ + if (m_pTool) { + delete m_pTool; + } + + m_pTool = new TextTool(this, m_pDrawPadCanvas); + + m_pLineToolButton->setOn(false); + m_pRectangleToolButton->setOn(false); + m_pEllipseToolButton->setOn(false); + m_pTextToolAction->setOn(true); m_pFillToolAction->setOn(false); m_pEraseToolAction->setOn(false); } void DrawPad::setFillTool() { if (m_pTool) { delete m_pTool; } m_pTool = new FillTool(this, m_pDrawPadCanvas); - m_pPointToolAction->setOn(false); - m_pLineToolAction->setOn(false); + m_pLineToolButton->setOn(false); m_pRectangleToolButton->setOn(false); m_pEllipseToolButton->setOn(false); + m_pTextToolAction->setOn(false); m_pFillToolAction->setOn(true); m_pEraseToolAction->setOn(false); } void DrawPad::setEraseTool() { if (m_pTool) { delete m_pTool; } m_pTool = new EraseTool(this, m_pDrawPadCanvas); - m_pPointToolAction->setOn(false); - m_pLineToolAction->setOn(false); + m_pLineToolButton->setOn(false); m_pRectangleToolButton->setOn(false); m_pEllipseToolButton->setOn(false); + m_pTextToolAction->setOn(false); m_pFillToolAction->setOn(false); m_pEraseToolAction->setOn(true); } void DrawPad::changePenWidth(int value) { diff --git a/noncore/graphics/drawpad/drawpad.h b/noncore/graphics/drawpad/drawpad.h index 62a73c9..e4fd831 100644 --- a/noncore/graphics/drawpad/drawpad.h +++ b/noncore/graphics/drawpad/drawpad.h @@ -42,12 +42,13 @@ private slots: void setPointTool(); void setLineTool(); void setRectangleTool(); void setFilledRectangleTool(); void setEllipseTool(); void setFilledEllipseTool(); + void setTextTool(); void setFillTool(); void setEraseTool(); void changePenWidth(int value); void changePenColor(const QColor& color); void changeBrushColor(const QColor& color); @@ -79,15 +80,17 @@ private: QAction* m_pPointToolAction; QAction* m_pLineToolAction; QAction* m_pRectangleToolAction; QAction* m_pFilledRectangleToolAction; QAction* m_pEllipseToolAction; QAction* m_pFilledEllipseToolAction; + QAction* m_pTextToolAction; QAction* m_pFillToolAction; QAction* m_pEraseToolAction; + QToolButton* m_pLineToolButton; QToolButton* m_pRectangleToolButton; QToolButton* m_pEllipseToolButton; QToolButton* m_pPenColorToolButton; QToolButton* m_pBrushColorToolButton; }; diff --git a/noncore/graphics/drawpad/drawpad.pro b/noncore/graphics/drawpad/drawpad.pro index fce0701..00eb00d 100644 --- a/noncore/graphics/drawpad/drawpad.pro +++ b/noncore/graphics/drawpad/drawpad.pro @@ -13,12 +13,13 @@ HEADERS = colordialog.h \ importdialog.h \ linetool.h \ newpagedialog.h \ pointtool.h \ rectangletool.h \ shapetool.h \ + texttool.h \ tool.h SOURCES = colordialog.cpp \ colorpanel.cpp \ drawpad.cpp \ drawpadcanvas.cpp \ ellipsetool.cpp \ @@ -31,12 +32,13 @@ SOURCES = colordialog.cpp \ linetool.cpp \ main.cpp \ newpagedialog.cpp \ pointtool.cpp \ rectangletool.cpp \ shapetool.cpp \ + texttool.cpp \ tool.cpp INCLUDEPATH += $(OPIEDIR)/include \ $(QTDIR)/src/3rdparty/zlib DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe DESTDIR = $(OPIEDIR)/bin diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp index db6288f..b39a633 100644 --- a/noncore/graphics/drawpad/drawpadcanvas.cpp +++ b/noncore/graphics/drawpad/drawpadcanvas.cpp @@ -325,12 +325,28 @@ uint DrawPadCanvas::pagePosition() uint DrawPadCanvas::pageCount() { return m_pages.count(); } +void DrawPadCanvas::backupPage() +{ + 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(); +} + void DrawPadCanvas::deleteAll() { QMessageBox messageBox(tr("Delete All"), tr("Do you want to delete\nall the pages?"), QMessageBox::Information, QMessageBox::Yes, QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, QMessageBox::NoButton, this); @@ -510,25 +526,12 @@ void DrawPadCanvas::contentsMousePressEvent(QMouseEvent* e) m_pDrawPad->tool()->mousePressEvent(e); } void DrawPadCanvas::contentsMouseReleaseEvent(QMouseEvent* e) { m_pDrawPad->tool()->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(); } void DrawPadCanvas::contentsMouseMoveEvent(QMouseEvent* e) { m_pDrawPad->tool()->mouseMoveEvent(e); } diff --git a/noncore/graphics/drawpad/drawpadcanvas.h b/noncore/graphics/drawpad/drawpadcanvas.h index a1a9466..e05ce8a 100644 --- a/noncore/graphics/drawpad/drawpadcanvas.h +++ b/noncore/graphics/drawpad/drawpadcanvas.h @@ -45,12 +45,14 @@ public: QPixmap* currentPage(); QList<QPixmap> pages(); uint pagePosition(); uint pageCount(); + void backupPage(); + public slots: void deleteAll(); void newPage(); void clearPage(); void deletePage(); diff --git a/noncore/graphics/drawpad/erasetool.cpp b/noncore/graphics/drawpad/erasetool.cpp index d37c901..828994b 100644 --- a/noncore/graphics/drawpad/erasetool.cpp +++ b/noncore/graphics/drawpad/erasetool.cpp @@ -38,12 +38,14 @@ void EraseTool::mousePressEvent(QMouseEvent* e) void EraseTool::mouseReleaseEvent(QMouseEvent* e) { Q_UNUSED(e) m_mousePressed = false; + + m_pDrawPadCanvas->backupPage(); } void EraseTool::mouseMoveEvent(QMouseEvent* e) { if (m_mousePressed) { QPainter painter; diff --git a/noncore/graphics/drawpad/filltool.cpp b/noncore/graphics/drawpad/filltool.cpp index 3297d21..004da02 100644 --- a/noncore/graphics/drawpad/filltool.cpp +++ b/noncore/graphics/drawpad/filltool.cpp @@ -39,12 +39,14 @@ void FillTool::mousePressEvent(QMouseEvent* e) if (m_oldRgb != m_fillRgb) { fillLine(x, y); m_pDrawPadCanvas->currentPage()->convertFromImage(m_image); m_pDrawPadCanvas->viewport()->update(); + + m_pDrawPadCanvas->backupPage(); } } void FillTool::mouseReleaseEvent(QMouseEvent* e) { Q_UNUSED(e) diff --git a/noncore/graphics/drawpad/pointtool.cpp b/noncore/graphics/drawpad/pointtool.cpp index 5661b03..e281284 100644 --- a/noncore/graphics/drawpad/pointtool.cpp +++ b/noncore/graphics/drawpad/pointtool.cpp @@ -38,12 +38,14 @@ void PointTool::mousePressEvent(QMouseEvent* e) void PointTool::mouseReleaseEvent(QMouseEvent* e) { Q_UNUSED(e) m_mousePressed = false; + + m_pDrawPadCanvas->backupPage(); } void PointTool::mouseMoveEvent(QMouseEvent* e) { if (m_mousePressed) { QPainter painter; diff --git a/noncore/graphics/drawpad/shapetool.cpp b/noncore/graphics/drawpad/shapetool.cpp index 3c99370..bc5d9c0 100644 --- a/noncore/graphics/drawpad/shapetool.cpp +++ b/noncore/graphics/drawpad/shapetool.cpp @@ -58,12 +58,14 @@ 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->viewport()->update(viewportRect); m_mousePressed = false; + + m_pDrawPadCanvas->backupPage(); } void ShapeTool::mouseMoveEvent(QMouseEvent* e) { if (m_mousePressed) { m_polyline[0] = e->pos(); diff --git a/noncore/graphics/drawpad/texttool.cpp b/noncore/graphics/drawpad/texttool.cpp new file mode 100644 index 0000000..37b4801 --- a/dev/null +++ b/noncore/graphics/drawpad/texttool.cpp @@ -0,0 +1,79 @@ +/*************************************************************************** + * * + * DrawPad - a drawing program for Opie Environment * + * * + * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "texttool.h" + +#include "drawpad.h" +#include "drawpadcanvas.h" + +#include <qlayout.h> +#include <qlineedit.h> +#include <qpainter.h> +#include <qpixmap.h> + +TextToolDialog::TextToolDialog(QWidget* parent, const char* name) + : QDialog(parent, name, true) +{ + setCaption(tr("Insert Text")); + + m_pLineEdit = new QLineEdit(this); + + QVBoxLayout* mainLayout = new QVBoxLayout(this, 4, 4); + + mainLayout->addWidget(m_pLineEdit); +} + +TextToolDialog::~TextToolDialog() +{ +} + +QString TextToolDialog::text() +{ + return m_pLineEdit->text(); +} + +TextTool::TextTool(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas) + : Tool(drawPad, drawPadCanvas) +{ +} + +TextTool::~TextTool() +{ +} + +void TextTool::mousePressEvent(QMouseEvent* e) +{ + TextToolDialog textToolDialog(m_pDrawPad); + + if (textToolDialog.exec() == QDialog::Accepted && !textToolDialog.text().isEmpty()) { + QPainter painter; + painter.begin(m_pDrawPadCanvas->currentPage()); + painter.setPen(m_pDrawPad->pen()); + painter.drawText(e->x(), e->y(), textToolDialog.text()); + painter.end(); + + m_pDrawPadCanvas->viewport()->update(); + + m_pDrawPadCanvas->backupPage(); + } +} + +void TextTool::mouseReleaseEvent(QMouseEvent* e) +{ + Q_UNUSED(e) +} + +void TextTool::mouseMoveEvent(QMouseEvent* e) +{ + Q_UNUSED(e) +} diff --git a/noncore/graphics/drawpad/texttool.h b/noncore/graphics/drawpad/texttool.h new file mode 100644 index 0000000..3187675 --- a/dev/null +++ b/noncore/graphics/drawpad/texttool.h @@ -0,0 +1,46 @@ +/*************************************************************************** + * * + * DrawPad - a drawing program for Opie Environment * + * * + * (C) 2002 by S. Prud'homme <prudhomme@laposte.net> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef TEXTTOOL_H +#define TEXTTOOL_H + +#include "tool.h" + +#include <qdialog.h> + +class QLineEdit; + +class TextToolDialog : public QDialog +{ +public: + TextToolDialog(QWidget* parent = 0, const char* name = 0); + ~TextToolDialog(); + + QString text(); + +private: + QLineEdit* m_pLineEdit; +}; + +class TextTool : public Tool +{ +public: + TextTool(DrawPad* drawPad, DrawPadCanvas* drawPadCanvas); + ~TextTool(); + + void mousePressEvent(QMouseEvent* e); + void mouseReleaseEvent(QMouseEvent* e); + void mouseMoveEvent(QMouseEvent* e); +}; + +#endif // TEXTTOOL_H diff --git a/pics/drawpad/text.png b/pics/drawpad/text.png Binary files differnew file mode 100644 index 0000000..230d72b --- a/dev/null +++ b/pics/drawpad/text.png |