-rw-r--r-- | noncore/graphics/drawpad/drawpad.cpp | 54 | ||||
-rw-r--r-- | noncore/graphics/drawpad/drawpad.h | 4 | ||||
-rw-r--r-- | noncore/graphics/drawpad/drawpadcanvas.cpp | 75 | ||||
-rw-r--r-- | noncore/graphics/drawpad/thumbnailview.cpp | 196 | ||||
-rw-r--r-- | noncore/graphics/drawpad/thumbnailview.h | 53 |
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 @@ -33,16 +33,17 @@ #include <qpe/applnk.h> #include <qpe/global.h> #include <qpe/qpemenubar.h> #include <qpe/qpetoolbar.h> #include <qpe/resource.h> #include <qaction.h> #include <qfile.h> +#include <qmessagebox.h> #include <qpainter.h> #include <qspinbox.h> #include <qtoolbutton.h> #include <qtooltip.h> DrawPad::DrawPad(QWidget* parent, const char* name) : QMainWindow(parent, name) { @@ -61,17 +62,17 @@ DrawPad::DrawPad(QWidget* parent, const char* name) setToolBarsMovable(false); QPEToolBar* menuToolBar = new QPEToolBar(this); QPEMenuBar* menuBar = new QPEMenuBar(menuToolBar); QPopupMenu *toolsPopupMenu = new QPopupMenu(menuBar); QAction* deleteAllAction = new QAction(tr("Delete All"), QString::null, 0, this); - connect(deleteAllAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(deleteAll())); + connect(deleteAllAction, SIGNAL(activated()), this, SLOT(deleteAll())); deleteAllAction->addTo(toolsPopupMenu); toolsPopupMenu->insertSeparator(); QAction* importPageAction = new QAction(tr("Import"), tr("Import..."), 0, this); connect(importPageAction, SIGNAL(activated()), this, SLOT(importPage())); importPageAction->addTo(toolsPopupMenu); @@ -91,21 +92,21 @@ DrawPad::DrawPad(QWidget* parent, const char* name) QPEToolBar* pageToolBar = new QPEToolBar(this); QAction* newPageAction = new QAction(tr("New Page"), Resource::loadIconSet("new"), QString::null, 0, this); connect(newPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(newPage())); newPageAction->addTo(pageToolBar); QAction* clearPageAction = new QAction(tr("Clear Page"), Resource::loadIconSet("drawpad/clear"), QString::null, 0, this); - connect(clearPageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(clearPage())); + connect(clearPageAction, SIGNAL(activated()), this, SLOT(clearPage())); clearPageAction->addTo(pageToolBar); QAction* deletePageAction = new QAction(tr("Delete Page"), Resource::loadIconSet("trash"), QString::null, 0, this); - connect(deletePageAction, SIGNAL(activated()), m_pDrawPadCanvas, SLOT(deletePage())); + connect(deletePageAction, SIGNAL(activated()), this, SLOT(deletePage())); deletePageAction->addTo(pageToolBar); QPEToolBar* emptyToolBar = new QPEToolBar(this); emptyToolBar->setHorizontalStretchable(true); // init navigation toolbar QPEToolBar* navigationToolBar = new QPEToolBar(this); @@ -262,16 +263,46 @@ DrawPad::~DrawPad() QFile file(Global::applicationFileName("drawpad", "drawpad.xml")); if (file.open(IO_WriteOnly)) { m_pDrawPadCanvas->save(&file); file.close(); } } +void DrawPad::clearPage() +{ + QMessageBox messageBox(tr("Clear Page"), tr("Do you want to clear\nthe current page?"), + QMessageBox::Information, QMessageBox::Yes, + QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, + QMessageBox::NoButton, this); + + messageBox.setButtonText(QMessageBox::Yes, tr("Yes")); + messageBox.setButtonText(QMessageBox::No, tr("No")); + + if (messageBox.exec() == QMessageBox::Yes) { + m_pDrawPadCanvas->clearPage(); + } +} + +void DrawPad::deletePage() +{ + QMessageBox messageBox(tr("Delete Page"), tr("Do you want to delete\nthe current page?"), + QMessageBox::Information, QMessageBox::Yes, + QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, + QMessageBox::NoButton, this); + + messageBox.setButtonText(QMessageBox::Yes, tr("Yes")); + messageBox.setButtonText(QMessageBox::No, tr("No")); + + if (messageBox.exec() == QMessageBox::Yes) { + m_pDrawPadCanvas->deletePage(); + } +} + void DrawPad::setPointTool() { if (m_pTool) { delete m_pTool; } m_pTool = new PointTool(this, m_pDrawPadCanvas); @@ -494,16 +525,31 @@ void DrawPad::updateCaption() { uint pagePosition = m_pDrawPadCanvas->pagePosition(); uint pageCount = m_pDrawPadCanvas->pageCount(); setCaption(tr("DrawPad") + " - " + tr("Page") + " " + QString::number(pagePosition) + "/" + QString::number(pageCount)); } +void DrawPad::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); + + messageBox.setButtonText(QMessageBox::Yes, tr("Yes")); + messageBox.setButtonText(QMessageBox::No, tr("No")); + + if (messageBox.exec() == QMessageBox::Yes) { + m_pDrawPadCanvas->deleteAll(); + } +} + void DrawPad::importPage() { ImportDialog importDialog(this); importDialog.showMaximized(); if (importDialog.exec() == QDialog::Accepted) { const DocLnk* docLnk = importDialog.selected(); @@ -524,13 +570,13 @@ void DrawPad::exportPage() if (exportDialog.exec() == QDialog::Accepted) { m_pDrawPadCanvas->exportPage(exportDialog.selectedFromPage(), exportDialog.selectedToPage(), exportDialog.selectedName(), exportDialog.selectedFormat()); } } void DrawPad::thumbnailView() { - ThumbnailView thumbnailView(m_pDrawPadCanvas->pages(), this); + ThumbnailView thumbnailView(m_pDrawPadCanvas, this); thumbnailView.showMaximized(); thumbnailView.exec(); } 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 @@ -34,16 +34,19 @@ public: DrawPad(QWidget* parent = 0, const char* name = 0); ~DrawPad(); Tool* tool() { return m_pTool; } QPen pen() { return m_pen; } QBrush brush() { return m_brush; } private slots: + void clearPage(); + void deletePage(); + void setPointTool(); void setLineTool(); void setRectangleTool(); void setFilledRectangleTool(); void setEllipseTool(); void setFilledEllipseTool(); void setTextTool(); void setFillTool(); @@ -52,16 +55,17 @@ private slots: void changePenWidth(int value); void changePenColor(const QColor& color); void changeBrushColor(const QColor& color); void updateUndoRedoToolButtons(); void updateNavigationToolButtons(); void updateCaption(); + void deleteAll(); void importPage(); void exportPage(); void thumbnailView(); private: DrawPadCanvas* m_pDrawPadCanvas; Tool* m_pTool; 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 @@ -19,17 +19,16 @@ #include "tool.h" #include <qpe/applnk.h> #include <qpe/filemanager.h> #include <qpe/mimetype.h> #include <qbuffer.h> #include <qimage.h> -#include <qmessagebox.h> #include <qpainter.h> #include <qtextcodec.h> #include <qtextstream.h> #include <qxml.h> #include <zlib.h> class DrawPadCanvasXmlHandler: public QXmlDefaultHandler @@ -341,39 +340,29 @@ void DrawPadCanvas::backupPage() m_pageBackups.append(new Page(*(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); + m_pages.clear(); - messageBox.setButtonText(QMessageBox::Yes, tr("Yes")); - messageBox.setButtonText(QMessageBox::No, tr("No")); - - if (messageBox.exec() == QMessageBox::Yes) { - m_pages.clear(); - - m_pages.append(new Page(contentsRect().size())); - m_pages.current()->fill(Qt::white); + m_pages.append(new Page(contentsRect().size())); + m_pages.current()->fill(Qt::white); - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); + m_pageBackups.clear(); + m_pageBackups.append(new Page(*(m_pages.current()))); - resizeContents(m_pages.current()->width(), m_pages.current()->height()); - viewport()->update(); + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); - emit pagesChanged(); - emit pageBackupsChanged(); - } + emit pagesChanged(); + emit pageBackupsChanged(); } void DrawPadCanvas::newPage() { QRect rect = contentsRect(); NewPageDialog newPageDialog(rect.width(), rect.height(), m_pDrawPad->pen().color(), m_pDrawPad->brush().color(), this); @@ -391,58 +380,38 @@ void DrawPadCanvas::newPage() emit pagesChanged(); emit pageBackupsChanged(); } } void DrawPadCanvas::clearPage() { - QMessageBox messageBox(tr("Clear Page"), tr("Do you want to clear\nthe current page?"), - QMessageBox::Information, QMessageBox::Yes, - QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, - QMessageBox::NoButton, this); - - messageBox.setButtonText(QMessageBox::Yes, tr("Yes")); - messageBox.setButtonText(QMessageBox::No, tr("No")); - - if (messageBox.exec() == QMessageBox::Yes) { - m_pages.current()->fill(Qt::white); + m_pages.current()->fill(Qt::white); - viewport()->update(); - } + viewport()->update(); } void DrawPadCanvas::deletePage() { - QMessageBox messageBox(tr("Delete Page"), tr("Do you want to delete\nthe current page?"), - QMessageBox::Information, QMessageBox::Yes, - QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, - QMessageBox::NoButton, this); - - messageBox.setButtonText(QMessageBox::Yes, tr("Yes")); - messageBox.setButtonText(QMessageBox::No, tr("No")); + m_pages.remove(m_pages.current()); - if (messageBox.exec() == QMessageBox::Yes) { - m_pages.remove(m_pages.current()); - - if (m_pages.isEmpty()) { - m_pages.append(new Page(contentsRect().size())); - m_pages.current()->fill(Qt::white); - } + if (m_pages.isEmpty()) { + m_pages.append(new Page(contentsRect().size())); + m_pages.current()->fill(Qt::white); + } - m_pageBackups.clear(); - m_pageBackups.append(new Page(*(m_pages.current()))); + m_pageBackups.clear(); + m_pageBackups.append(new Page(*(m_pages.current()))); - resizeContents(m_pages.current()->width(), m_pages.current()->height()); - viewport()->update(); + resizeContents(m_pages.current()->width(), m_pages.current()->height()); + viewport()->update(); - emit pagesChanged(); - emit pageBackupsChanged(); - } + emit pagesChanged(); + emit pageBackupsChanged(); } bool DrawPadCanvas::undoEnabled() { return (m_pageBackups.current() != m_pageBackups.getFirst()); } bool DrawPadCanvas::redoEnabled() 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 @@ -8,114 +8,204 @@ * 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 "thumbnailview.h" +#include "drawpadcanvas.h" #include "page.h" #include <qpe/resource.h> +#include <qapplication.h> #include <qheader.h> #include <qimage.h> #include <qlayout.h> -#include <qlistview.h> +#include <qmessagebox.h> #include <qtoolbutton.h> -ThumbnailView::ThumbnailView(QList<Page> pages, QWidget* parent, const char* name) - : QDialog(parent, name, true) +PageListViewItem::PageListViewItem(Page* page, QListView* parent) + : QListViewItem(parent) { - setCaption(tr("Thumbnail")); + m_pPage = page; - QToolButton* newPageButton = new QToolButton(this); - newPageButton->setIconSet(Resource::loadIconSet("new")); - newPageButton->setAutoRaise(true); + QImage image = m_pPage->convertToImage(); - QToolButton* clearPageButton = new QToolButton(this); - clearPageButton->setIconSet(Resource::loadIconSet("drawpad/clear")); - clearPageButton->setAutoRaise(true); + int previewWidth = 64; + int previewHeight = 64; - QToolButton* deletePageButton = new QToolButton(this); - deletePageButton->setIconSet(Resource::loadIconSet("trash")); - deletePageButton->setAutoRaise(true); + float widthScale = 1.0; + float heightScale = 1.0; - QToolButton* movePageUpButton = new QToolButton(this); - movePageUpButton->setIconSet(Resource::loadIconSet("up")); - movePageUpButton->setAutoRaise(true); + if (previewWidth < image.width()) { + widthScale = (float)previewWidth / float(image.width()); + } - QToolButton* movePageDownButton = new QToolButton(this); - movePageDownButton->setIconSet(Resource::loadIconSet("down")); - movePageDownButton->setAutoRaise(true); + if (previewHeight < image.height()) { + heightScale = (float)previewHeight / float(image.height()); + } + + float scale = (widthScale < heightScale ? widthScale : heightScale); + QImage previewImage = image.smoothScale((int)(image.width() * scale) , (int)(image.height() * scale)); + + QPixmap previewPixmap; + previewPixmap.convertFromImage(previewImage); - m_pListView = new QListView(this); + QPixmap pixmap(64, 64); - m_pListView->header()->hide(); - m_pListView->setAllColumnsShowFocus(true); + pixmap.fill(listView()->colorGroup().mid()); + bitBlt(&pixmap, (pixmap.width() - previewPixmap.width()) / 2, + (pixmap.height() - previewPixmap.height()) / 2, &previewPixmap); - m_pListView->addColumn(tr("Thumbnail")); - m_pListView->addColumn(tr("Information")); + setPixmap(0, pixmap); +} - m_pListView->setColumnAlignment(0, Qt::AlignHCenter | Qt::AlignVCenter); - m_pListView->setColumnAlignment(1, Qt::AlignTop); +PageListViewItem::~PageListViewItem() +{ +} + +Page* PageListViewItem::page() const +{ + return m_pPage; +} - QListIterator<Page> iterator(pages); +PageListView::PageListView(DrawPadCanvas* drawPadCanvas, QWidget* parent, const char* name) + : QListView(parent, name) +{ + m_pDrawPadCanvas = drawPadCanvas; - for (; iterator.current(); ++iterator) { - QImage image = iterator.current()->convertToImage(); + header()->hide(); + setVScrollBarMode(QScrollView::AlwaysOn); + setAllColumnsShowFocus(true); - int previewWidth = 64; - int previewHeight = 64; + addColumn(tr("Thumbnail")); + addColumn(tr("Information")); - float widthScale = 1.0; - float heightScale = 1.0; + updateView(); +} - if (previewWidth < image.width()) { - widthScale = (float)previewWidth / float(image.width()); - } +PageListView::~PageListView() +{ +} + +void PageListView::updateView() +{ + clear(); - if (previewHeight < image.height()) { - heightScale = (float)previewHeight / float(image.height()); + if (m_pDrawPadCanvas) { + QList<Page> pageList = m_pDrawPadCanvas->pages(); + QListIterator<Page> it(pageList); + + for (; it.current(); ++it) { + new PageListViewItem(it.current(), this); } + } +} - float scale = (widthScale < heightScale ? widthScale : heightScale); - QImage previewImage = image.smoothScale((int)(image.width() * scale) , (int)(image.height() * scale)); +void PageListView::resizeEvent(QResizeEvent* e) +{ + Q_UNUSED(e); - QPixmap previewPixmap; - previewPixmap.convertFromImage(previewImage); + setColumnWidth(1, contentsRect().width() - columnWidth(0) - verticalScrollBar()->width()); +} - QPixmap pixmap(64, 64); +Page* PageListView::selected() const +{ + Page* page; - pixmap.fill(colorGroup().mid()); - bitBlt(&pixmap, (pixmap.width() - previewPixmap.width()) / 2, - (pixmap.height() - previewPixmap.height()) / 2, &previewPixmap); + PageListViewItem* item = (PageListViewItem*)selectedItem(); - QListViewItem* item = new QListViewItem(m_pListView); - item->setPixmap(0, pixmap); + if (item) { + page = item->page(); + } else { + page = NULL; } + return page; +} + + +ThumbnailView::ThumbnailView(DrawPadCanvas* drawPadCanvas, QWidget* parent, const char* name) + : QWidget(parent, name, Qt::WType_Modal | Qt::WType_TopLevel) +{ + inLoop = false; + m_pDrawPadCanvas = drawPadCanvas; + + setCaption(tr("Thumbnail")); + + QToolButton* newPageButton = new QToolButton(this); + newPageButton->setIconSet(Resource::loadIconSet("new")); + newPageButton->setAutoRaise(true); + + QToolButton* clearPageButton = new QToolButton(this); + clearPageButton->setIconSet(Resource::loadIconSet("drawpad/clear")); + clearPageButton->setAutoRaise(true); + + QToolButton* deletePageButton = new QToolButton(this); + deletePageButton->setIconSet(Resource::loadIconSet("trash")); + deletePageButton->setAutoRaise(true); + + QToolButton* movePageUpButton = new QToolButton(this); + movePageUpButton->setIconSet(Resource::loadIconSet("up")); + movePageUpButton->setAutoRaise(true); + + QToolButton* movePageDownButton = new QToolButton(this); + movePageDownButton->setIconSet(Resource::loadIconSet("down")); + movePageDownButton->setAutoRaise(true); + + m_pPageListView = new PageListView(m_pDrawPadCanvas, this); + QVBoxLayout* mainLayout = new QVBoxLayout(this, 4, 4); QHBoxLayout* buttonLayout = new QHBoxLayout(0); buttonLayout->addWidget(newPageButton); buttonLayout->addWidget(clearPageButton); buttonLayout->addWidget(deletePageButton); buttonLayout->addStretch(); buttonLayout->addWidget(movePageUpButton); buttonLayout->addWidget(movePageDownButton); mainLayout->addLayout(buttonLayout); - mainLayout->addWidget(m_pListView); + mainLayout->addWidget(m_pPageListView); } ThumbnailView::~ThumbnailView() { + hide(); } -void ThumbnailView::resizeEvent(QResizeEvent* e) +void ThumbnailView::hide() { - QDialog::resizeEvent(e); + QWidget::hide(); + + if (inLoop) { + inLoop = false; + qApp->exit_loop(); + } +} - m_pListView->setColumnWidth(1, m_pListView->contentsRect().width() - m_pListView->columnWidth(0) - - m_pListView->verticalScrollBar()->width()); +void ThumbnailView::exec() +{ + show(); + + if (!inLoop) { + inLoop = true; + qApp->enter_loop(); + } +} + +void ThumbnailView::deletePage() +{ + QMessageBox messageBox(tr("Delete Page"), tr("Do you want to delete\nthe selected page?"), + QMessageBox::Information, QMessageBox::Yes, + QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, + QMessageBox::NoButton, this); + + messageBox.setButtonText(QMessageBox::Yes, tr("Yes")); + messageBox.setButtonText(QMessageBox::No, tr("No")); + + if (messageBox.exec() == QMessageBox::Yes) { + m_pDrawPadCanvas->deletePage(); + } } 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 @@ -9,32 +9,65 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef THUMBNAILVIEW_H #define THUMBNAILVIEW_H -#include <qdialog.h> +#include <qwidget.h> +#include <qlistview.h> -#include <qlist.h> +class DrawPadCanvas; +class Page; -class QListView; +class PageListViewItem : public QListViewItem +{ +public: + PageListViewItem(Page* page, QListView* parent); + ~PageListViewItem(); -class Page; + Page* page() const; -class ThumbnailView : public QDialog -{ - Q_OBJECT +private: + Page* m_pPage; +}; +class PageListView : public QListView +{ public: - ThumbnailView(QList<Page> pages, QWidget* parent = 0, const char* name = 0); - ~ThumbnailView(); + PageListView(DrawPadCanvas* drawPadCanvas, QWidget* parent = 0, const char* name = 0); + ~PageListView(); + + void updateView(); + + Page* selected() const; protected: void resizeEvent(QResizeEvent* e); private: - QListView* m_pListView; + DrawPadCanvas* m_pDrawPadCanvas; +}; + +class ThumbnailView : public QWidget +{ + Q_OBJECT + +public: + ThumbnailView(DrawPadCanvas* drawPadCanvas, QWidget* parent = 0, const char* name = 0); + ~ThumbnailView(); + + void hide(); + void exec(); + +public slots: + void deletePage(); + +private: + bool inLoop; + DrawPadCanvas* m_pDrawPadCanvas; + + PageListView* m_pPageListView; }; #endif // THUMBNAILVIEW_H |