Index: scribus/ui/pagepalette_pages.cpp =================================================================== --- scribus/ui/pagepalette_pages.cpp (Revision 26306) +++ scribus/ui/pagepalette_pages.cpp (Arbeitskopie) @@ -191,22 +191,39 @@ return; } -// qDebug() << Q_FUNC_INFO << "- start page preview update"; + if (pageViewWidget->pageGrid()->rowHeight() == PageGrid::Small) + { + for (int i = 0; i < currView->m_doc->DocPages.count(); ++i) + { + if (i < pageViewWidget->pageGrid()->pageList.count()) + { + ScPage page = *currView->m_doc->DocPages.at(i); + double pageRatio = page.width() / page.height(); - PageToPixmapFlags flags = Pixmap_DrawFrame | Pixmap_DrawBackground | Pixmap_DontReloadImages | Pixmap_NoCanvasModeChange; - QMap previews = currView->PagesToPixmap(pageViewWidget->pageGrid()->pageHeight(), -1, flags); + PageCell *pc = pageViewWidget->pageGrid()->pageList.at(i); + pc->pagePreview = QPixmap(); + pc->pageRatio = pageRatio; + } + } + } + else + { + PageToPixmapFlags flags = Pixmap_DrawFrame | Pixmap_DrawBackground | Pixmap_DontReloadImages | Pixmap_NoCanvasModeChange; + QMap previews = currView->PagesToPixmap(pageViewWidget->pageGrid()->pageHeight() * qApp->devicePixelRatio(), -1, flags); - for (int i = 0; i < currView->m_doc->DocPages.count(); ++i) - { - if (previews.contains(i) && i < pageViewWidget->pageGrid()->pageList.count()) + for (int i = 0; i < currView->m_doc->DocPages.count(); ++i) { - ScPage page = *currView->m_doc->DocPages.at(i); - double pageRatio = page.width() / page.height(); - QPixmap pix = ( previews.contains(i) ) ? QPixmap::fromImage( previews.value(i) ) : QPixmap(); + if (previews.contains(i) && i < pageViewWidget->pageGrid()->pageList.count()) + { + ScPage page = *currView->m_doc->DocPages.at(i); + double pageRatio = page.width() / page.height(); + QPixmap pix = ( previews.contains(i) ) ? QPixmap::fromImage( previews.value(i) ) : QPixmap(); + pix.setDevicePixelRatio(qApp->devicePixelRatio()); - PageCell *pc = pageViewWidget->pageGrid()->pageList.at(i); - pc->pagePreview = pix; - pc->pageRatio = pageRatio; + PageCell *pc = pageViewWidget->pageGrid()->pageList.at(i); + pc->pagePreview = pix; + pc->pageRatio = pageRatio; + } } } Index: scribus/ui/pagepalette_widgets.cpp =================================================================== --- scribus/ui/pagepalette_widgets.cpp (Revision 26306) +++ scribus/ui/pagepalette_widgets.cpp (Arbeitskopie) @@ -23,6 +23,7 @@ #include "iconmanager.h" #include "pagepalette_widgets.h" +#include "prefsfile.h" #include "prefsmanager.h" #include "scribusapp.h" #include "util_gui.h" @@ -224,6 +225,10 @@ calculateSize(); initContextMenu(); + PrefsContext *prefTileSize = PrefsManager::instance().prefsFile->getContext("PagePalette"); + int size = prefTileSize->getInt("pagePreviewSize", m_rowHeight); + setRowHeight(size); + // connect(this, &PageGrid::customContextMenuRequested, this, &PageGrid::showContextMenu); } @@ -244,19 +249,24 @@ m_documentPageSize = pageSize; } -void PageGrid::setRowHeight(int size) +void PageGrid::setRowHeight(int height) { - // clamp size from 48 to 256) - m_rowHeight = qBound(48, size, 256); + // clamp sizes + m_rowHeight = qBound(64, height, 128); + m_rowSpace = qBound(8, height / 8, 16); + // updateTileSize(); calculateSize(); update(); + + PrefsContext *prefTileSize = PrefsManager::instance().prefsFile->getContext("PagePalette"); + prefTileSize->set("pagePreviewSize", height); + PrefsManager::instance().prefsFile->write(); } void PageGrid::setFontSize(int size) { m_fontSize = size; - // updateTileSize(); update(); } @@ -297,18 +307,6 @@ update(); } -//void PageGrid::setPageList(const QList list) -//{ -// m_pageList = list; -// calculateSize(); -// // update(); -//} - -//QList PageGrid::pageList() const -//{ -// return m_pageList; -//} - int PageGrid::pageId(int r, int c, bool clampId) { @@ -673,7 +671,7 @@ update(); } -void PageGrid::drawTile(QPainter &painter, QPoint cellPosition, PageCell *tile, bool selected, bool hovered, QColor labelColor) +void PageGrid::drawTile(QPainter &painter, QPoint cellPosition, PageCell *tile, bool selected, bool hovered, QColor labelColor, bool isRight) { if (tile == nullptr) @@ -680,38 +678,54 @@ return; QFont font(this->font().family(), m_fontSize, QFont::Normal); + QFont fontName(this->font().family(), m_fontSize * 0.8, QFont::Normal); QRect rectPage(cellPosition.x(), cellPosition.y(), tile->pageWidthByHeight(pageHeight()), pageHeight()); QRect rectCell(cellPosition.x(), cellPosition.y(), tile->pageWidthByHeight(pageHeight()), m_rowHeight); - // QRect rectMasterPageMarker(cellPosition.x(), cellPosition.y() + rectPage.height(), rectPage.width(), 4); + QString pageName = tile->pageName; + int pageNameHyphen = tile->pageName.indexOf("-"); + // Fail fast if no hyphen or nothing to the left of it + if (pageNameHyphen > 0) + { + // Trim whitespace and ensure at least 1-4 chars or ignore it + QString tmp = tile->pageName.left(pageNameHyphen).trimmed(); + if (tmp.length() > 0 && tmp.length() < 5) + pageName = tmp; + } + painter.save(); // Draw Page - painter.setBrush(Qt::NoBrush); - // painter.setPen( QPen(Qt::black, 1) ); - painter.drawPixmap(rectPage, tile->pagePreview, tile->pagePreview.rect()); - // painter.drawRect(rectPage); + if (m_rowHeight == TileSize::Small) + painter.fillRect(rectPage, QBrush(Qt::white)); + else + painter.drawPixmap(rectPage, tile->pagePreview, tile->pagePreview.rect()); // Setup painter for text drawing + painter.setBrush(Qt::NoBrush); painter.setRenderHint(QPainter::TextAntialiasing, true); painter.setFont(font); // Draw Page Number - //painter.setPen(QPen(palette().windowText().color())); painter.setPen(QPen( labelColor )); painter.drawText(rectCell, Qt::AlignHCenter|Qt::AlignBottom | Qt::TextWordWrap, QString::number(tile->pageNumber + 1)); - // Draw Page Name - painter.setBackgroundMode(Qt::OpaqueMode); - painter.setBackground(QColor(0,0,0,128)); - painter.setPen(QPen(Qt::white)); - painter.drawText(rectPage.adjusted(2,2,-2,-2), Qt::AlignTop | Qt::AlignLeft |Qt::TextWordWrap, tile->pageName); + // Draw Page Name + painter.setFont((pageNameHyphen > 0) ? font : fontName); + if (m_rowHeight == TileSize::Small) + { + painter.setPen(Qt::black); + painter.drawText(rectPage.adjusted(1, 1, 0, 0), Qt::AlignVCenter | Qt::AlignCenter |Qt::TextWordWrap, pageName); + } + else + { + painter.setBackgroundMode(Qt::OpaqueMode); + painter.setBackground(QColor(102, 102, 102)); + painter.setPen(Qt::white); + painter.drawText(rectPage.adjusted(1, 1, 0, 0), Qt::AlignTop | ((isRight) ? Qt::AlignRight : Qt::AlignLeft) |Qt::TextWordWrap, pageName); + } - // Draw Master Page Color - // painter.setPen(Qt::NoPen); - // painter.fillRect(rectMasterPageMarker, tile->masterPageColor()); - // Draw selection // if(selected) // { @@ -731,11 +745,6 @@ painter.drawRect(rectPage); } - // tmp border - // painter.setPen( Qt::magenta ); - // painter.setBrush(Qt::NoBrush); - // painter.drawRect(rectCell); - painter.restore(); } @@ -745,25 +754,17 @@ m_contextMenu->clear(); m_contextMenu->addAction(tr("&Small Preview"), [this]() { - m_rowSpace = 8; - setRowHeight(64); + setRowHeight(QVariant(TileSize::Small).toInt()); emit previewSizeChanged(); }); m_contextMenu->addAction(tr("&Medium Preview"), [this]() { - m_rowSpace = 12; - setRowHeight(96); + setRowHeight(QVariant(TileSize::Medium).toInt()); emit previewSizeChanged(); }); m_contextMenu->addAction(tr("&Large Preview"), [this]() { - m_rowSpace = 16; - setRowHeight(128); + setRowHeight(QVariant(TileSize::Large).toInt()); emit previewSizeChanged(); }); -// m_contextMenu->addAction(tr("&Extra Large Preview"), [this]() { -// m_rowSpace = 20; -// setRowHeight(196); -// emit previewSizeChanged(); -// }); } void PageGrid::showContextMenu(QPoint pos) @@ -820,7 +821,8 @@ if (id == m_selectedPage) selectedPageRect = QRect(x, y, cell->pageWidthByHeight(pageHeight()), pageHeight() ); QPoint pos(x,y); - drawTile(painter, pos, cell, (id == m_selectedPage) ? true : false, (id == m_hoveredPage) ? true : false, foregroundColor); + bool isRightPage = (m_cellsInGroup == c + 1 && m_cellsInGroup > 1); + drawTile(painter, pos, cell, (id == m_selectedPage) ? true : false, (id == m_hoveredPage) ? true : false, foregroundColor, isRightPage); // add space only between pages if ((c + 1) % m_cellsInGroup == 0 || count == pageCount() + m_pageOffset -1) Index: scribus/ui/pagepalette_widgets.h =================================================================== --- scribus/ui/pagepalette_widgets.h (Revision 26306) +++ scribus/ui/pagepalette_widgets.h (Arbeitskopie) @@ -66,198 +66,205 @@ void delMasterRequest(QString); protected: - void mouseReleaseEvent(QMouseEvent *m); - void mousePressEvent(QMouseEvent* e); - void mouseMoveEvent(QMouseEvent* e); - virtual void keyPressEvent(QKeyEvent* e); - + void mouseReleaseEvent(QMouseEvent *m); + void mousePressEvent(QMouseEvent* e); + void mouseMoveEvent(QMouseEvent* e); + virtual void keyPressEvent(QKeyEvent* e); + QListWidgetItem *m_currItem {nullptr}; - QPoint m_mousePos; + QPoint m_mousePos {QPoint()}; bool m_mousePressed {false}; bool m_thumb {false}; }; -struct SCRIBUS_API PageCell +struct SCRIBUS_API PageCell { - QString pageName; - uint pageNumber; - QPixmap pagePreview; - QColor masterPageColor; - double pageRatio; - - PageCell(const QString& text, uint nr, const QPixmap& pix, double pageRatio, const QColor color = Qt::black) : - pageName(text), pageNumber(nr), pagePreview(pix), masterPageColor(color), pageRatio(pageRatio) {} - - int pageWidthByHeight(int height) { return qCeil(height * pageRatio); } - -}; - -/* ********************************************************************************* * - * - * Page Grid - * - * ********************************************************************************* */ - -class SCRIBUS_API PageGrid : public QWidget -{ + QString pageName {QString()}; + uint pageNumber {1}; + QPixmap pagePreview {QPixmap()}; + QColor masterPageColor {QColor()}; + double pageRatio {1.4142}; // IsoA + + PageCell(const QString& text, uint nr, const QPixmap& pix, double pageRatio, const QColor color = Qt::black) : + pageName(text), pageNumber(nr), pagePreview(pix), masterPageColor(color), pageRatio(pageRatio) {} + + int pageWidthByHeight(int height) { return qCeil(height * pageRatio); } + +}; + +/* ********************************************************************************* * + * + * Page Grid + * + * ********************************************************************************* */ + +class SCRIBUS_API PageGrid : public QWidget +{ Q_OBJECT - friend class PageViewer; - + friend class PageViewer; + public: - explicit PageGrid(QWidget *parent = nullptr); - void setPageInGroup(int amount); + enum TileSize { + Small = 64, + Medium = 96, + Large = 128 + }; - void setDocumentPageSize(QSizeF pageSize); - - void setRowHeight(int size); - int rowHeight() { return m_rowHeight; }; - - void setFontSize(int size); - int fontSize() { return m_fontSize; }; - - void setSelectionColor(QColor color); - QColor selectionColor() { return m_colorSelection; }; - - void setPageLayout(PageLayout layout); - PageLayout pageLayout() { return m_pageLayout; }; - - void setPageOffset(int pageCount); - int pageOffset() { return m_pageOffset; }; - - QList pageList; - - int pageId(int r, int c, bool clampId = true); - int pageId(QPoint pos, bool clampId = true); - - PageCell* getPageItem(int pageIndex); - - int pageCount(); - int pageHeight(); - - void setSelectedPage(int pageID); - int selectedPage() { return m_selectedPage; }; - - void deleteSelectedPage(); - void clear(); - void calculateSize(); - -private: - - enum State { - None = 0, - StartDrag = 1, - StartSelection = 2 - }; - - enum Mode { - Invalid = 0, - Insert = 1, - Add = 2, - Hover = 3 - }; - - QSize m_pageSize; - QSizeF m_documentPageSize; - int m_rowHeight {96}; - int m_cellGap {1}; - int m_groupSpace {16}; - int m_rowSpace {12}; - int m_fontSize {8}; // font size of number label and masterpage label - int m_labelGap {8}; // gap between page and number label - QRect m_rectInsert {QRect()}; - QRect m_rectSelection {QRect()}; - QRect m_rectAdd {QRect()}; - QColor m_colorSelection; - int m_selectedPage {-1}; - int m_hoveredPage {-1}; - bool m_enableSelection {false}; - QPoint m_mousePos; - State m_state {State::None}; - PageLayout m_pageLayout {PageLayout::singlePage}; - int m_cellsInGroup {1}; // 1 for single page - int m_pageOffset {0}; - QMenu *m_contextMenu; - - int columns(); - int rows(); - - int columnAt(QPoint pos); - int rowAt(QPoint pos); - int rowWidth(int rowId); - QRect rectAt(int row, int col); - - QSize dummyPageSize(); - - QPoint mapPosToCell(QPoint pos, Mode &mode); - QPoint pagePosition(int pageId); - - int clampPageId(int pageID, bool allowPlusOne = false); - - void updateSelectedPage(QPoint pos); - void updateModeMarker(QPoint pos); - void clearUi(); - void drawTile(QPainter &painter, QPoint cellPosition, PageCell * tile, bool selected, bool hovered, QColor labelColor); - void initContextMenu(); - -private slots: - void showContextMenu(QPoint pos); - -protected: - - void paintEvent(QPaintEvent *event) override; - void resizeEvent(QResizeEvent *event) override; - - void dropEvent(QDropEvent * event) override; - void dragEnterEvent(QDragEnterEvent *event) override; - void dragLeaveEvent(QDragLeaveEvent *event) override; - void dragMoveEvent(QDragMoveEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; - void mousePressEvent(QMouseEvent* event) override; - void mouseMoveEvent(QMouseEvent* event) override; - + explicit PageGrid(QWidget *parent = nullptr); + + void setPageInGroup(int amount); + + void setDocumentPageSize(QSizeF pageSize); + + void setRowHeight(int height); + int rowHeight() { return m_rowHeight; }; + + void setFontSize(int size); + int fontSize() { return m_fontSize; }; + + void setSelectionColor(QColor color); + QColor selectionColor() { return m_colorSelection; }; + + void setPageLayout(PageLayout layout); + PageLayout pageLayout() { return m_pageLayout; }; + + void setPageOffset(int pageCount); + int pageOffset() { return m_pageOffset; }; + + QList pageList {QList()}; + + int pageId(int r, int c, bool clampId = true); + int pageId(QPoint pos, bool clampId = true); + + PageCell* getPageItem(int pageIndex); + + int pageCount(); + int pageHeight(); + + void setSelectedPage(int pageID); + int selectedPage() { return m_selectedPage; }; + + void deleteSelectedPage(); + void clear(); + void calculateSize(); + +private: + + enum State { + None = 0, + StartDrag = 1, + StartSelection = 2 + }; + + enum Mode { + Invalid = 0, + Insert = 1, + Add = 2, + Hover = 3 + }; + + QSize m_pageSize {QSize()}; + QSizeF m_documentPageSize {QSizeF()}; + int m_rowHeight {QVariant(TileSize::Medium).toInt()}; + int m_cellGap {1}; + int m_groupSpace {16}; + int m_rowSpace {12}; + int m_fontSize {QFont().pointSize()}; // font size of number label and masterpage label + int m_labelGap {8}; // gap between page and number label + QRect m_rectInsert {QRect()}; + QRect m_rectSelection {QRect()}; + QRect m_rectAdd {QRect()}; + QColor m_colorSelection; + int m_selectedPage {-1}; + int m_hoveredPage {-1}; + bool m_enableSelection {false}; + QPoint m_mousePos {QPoint()}; + State m_state {State::None}; + PageLayout m_pageLayout {PageLayout::singlePage}; + int m_cellsInGroup {1}; // 1 for single page + int m_pageOffset {0}; + QMenu *m_contextMenu {nullptr}; + + int columns(); + int rows(); + + int columnAt(QPoint pos); + int rowAt(QPoint pos); + int rowWidth(int rowId); + QRect rectAt(int row, int col); + + QSize dummyPageSize(); + + QPoint mapPosToCell(QPoint pos, Mode &mode); + QPoint pagePosition(int pageId); + + int clampPageId(int pageID, bool allowPlusOne = false); + + void updateSelectedPage(QPoint pos); + void updateModeMarker(QPoint pos); + void clearUi(); + void drawTile(QPainter &painter, QPoint cellPosition, PageCell * tile, bool selected, bool hovered, QColor labelColor, bool isRight); + void initContextMenu(); + +private slots: + void showContextMenu(QPoint pos); + +protected: + + void paintEvent(QPaintEvent *event) override; + void resizeEvent(QResizeEvent *event) override; + + void dropEvent(QDropEvent * event) override; + void dragEnterEvent(QDragEnterEvent *event) override; + void dragLeaveEvent(QDragLeaveEvent *event) override; + void dragMoveEvent(QDragMoveEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + void mousePressEvent(QMouseEvent* event) override; + void mouseMoveEvent(QMouseEvent* event) override; + signals: - void useTemplate(QString, int); - void newPage(int, QString); + void useTemplate(QString, int); + void newPage(int, QString); void movePage(int, int); - void click(int, int); + void click(int, int); void delPageRequest(int); - void previewSizeChanged(); -}; + void previewSizeChanged(); +}; -/* ********************************************************************************* * - * - * Page Viewer - * - * ********************************************************************************* */ - -class SCRIBUS_API PageViewer : public QWidget -{ - -public: - PageViewer(QWidget *parent = nullptr); - ~PageViewer() {}; - - PageGrid *pageGrid(); - void scrollToPage(int pageId); - - +/* ********************************************************************************* * + * + * Page Viewer + * + * ********************************************************************************* */ + +class SCRIBUS_API PageViewer : public QWidget +{ + +public: + PageViewer(QWidget *parent = nullptr); + ~PageViewer() {}; + + PageGrid *pageGrid(); + void scrollToPage(int pageId); + + protected: - PageGrid *m_pageGrid; - QScrollArea* m_scroll; - - virtual void keyPressEvent(QKeyEvent* event); - + PageGrid *m_pageGrid {nullptr}; + QScrollArea* m_scroll {nullptr}; + + virtual void keyPressEvent(QKeyEvent* event); + }; -/* ********************************************************************************* * - * - * Trash bin - * - * ********************************************************************************* */ - +/* ********************************************************************************* * + * + * Trash bin + * + * ********************************************************************************* */ + class SCRIBUS_API TrashBin : public QLabel { Q_OBJECT @@ -266,17 +273,17 @@ TrashBin( QWidget * parent ); ~TrashBin() {}; - void dragEnterEvent( QDragEnterEvent *e ); - void dragLeaveEvent( QDragLeaveEvent * ); - void dropEvent( QDropEvent * e ); - + void dragEnterEvent( QDragEnterEvent *e ); + void dragLeaveEvent( QDragLeaveEvent * ); + void dropEvent( QDropEvent * e ); + protected: - QPixmap normal; - QPixmap open; + QPixmap normal {QPixmap()}; + QPixmap open {QPixmap()}; protected slots: void iconSetChange(); - + signals: void delPageRequest(int); void delMasterRequest(QString);