diff --git a/Scribus/scribus/scribusview.cpp b/Scribus/scribus/scribusview.cpp index fa328ae..214e252 100644 --- a/Scribus/scribus/scribusview.cpp +++ b/Scribus/scribus/scribusview.cpp @@ -273,7 +273,7 @@ ScribusView::ScribusView(QWidget* win, ScribusMainWindow* mw, ScribusDoc *doc) : zoomDefaultToolbarButton->setIcon(QIcon(loadIcon("16/zoom-original.png"))); zoomOutToolbarButton->setIcon(QIcon(loadIcon("16/zoom-out.png"))); zoomInToolbarButton->setIcon(QIcon(loadIcon("16/zoom-in.png"))); - pageSelector = new PageSelector(this, Doc->Pages->count()); + pageSelector = new PageSelector(this, Doc); pageSelector->setFont(fo); pageSelector->setFocusPolicy(Qt::ClickFocus); layerMenu = new QComboBox( this ); diff --git a/Scribus/scribus/ui/pageselector.cpp b/Scribus/scribus/ui/pageselector.cpp index ebc7d60..4814f4f 100644 --- a/Scribus/scribus/ui/pageselector.cpp +++ b/Scribus/scribus/ui/pageselector.cpp @@ -19,6 +19,7 @@ for which a new license (GPL+exception) is in place. #include #include #include +#include "scribusdoc.h" #include "sccombobox.h" #include "util_icon.h" #include "util.h" @@ -57,10 +58,16 @@ for which a new license (GPL+exception) is in place. // } // -PageSelector::PageSelector( QWidget* parent, int maxPg ) : QWidget( parent, 0 ) +PageSelector::PageSelector( QWidget* parent, ScribusDoc* doc ) : QWidget( parent, 0 ) { PageCountString = "%1" ; - LastPG = maxPg; + LastPG = -1; + m_Doc = NULL; + if (doc != NULL) + { + LastPG = doc->DocPages.count(); + m_Doc = doc; + } APage = 1; PageSelectorLayout = new QHBoxLayout( this ); PageSelectorLayout->setMargin(0); @@ -109,9 +116,7 @@ PageSelector::PageSelector( QWidget* parent, int maxPg ) : QWidget( parent, 0 ) PageCombo->setDuplicatesEnabled( false ); PageCombo->lineEdit()->setAlignment(Qt::AlignHCenter); for (int a = 0; a < LastPG; ++a) - { - PageCombo->addItem(QString::number(a+1)); - } + PageCombo->addItem(QString::number(a+1) + virtualPN(a)); PageCombo->setValidator(m_validator); PageCombo->setMinimumSize(fontMetrics().width( "999" )+20, 20); PageCombo->setFocusPolicy(Qt::ClickFocus); @@ -189,7 +194,7 @@ void PageSelector::GotoPg(int a) { disconnect( PageCombo, SIGNAL( activated(int) ), this, SLOT( GotoPgE(int) ) ); PageCombo->setCurrentIndex(a); - setCurrentComboItem(PageCombo, QString::number(a+1)); + setCurrentComboItem(PageCombo, QString::number(a+1) + virtualPN(a)); APage = a+1; Back->setEnabled(true); Start->setEnabled(true); @@ -216,10 +221,8 @@ void PageSelector::setMaximum(int a) // v->setTop(LastPG); m_validator->setRange(1, LastPG); for (int b = 0; b < LastPG; ++b) - { - PageCombo->addItem(QString::number(b+1)); - } - setCurrentComboItem(PageCombo, QString::number(APage)); + PageCombo->addItem(QString::number(b+1) + virtualPN(b)); + setCurrentComboItem(PageCombo, QString::number(APage) + virtualPN(APage)); PageCount->setText(PageCountString.arg(LastPG)); connect( PageCombo, SIGNAL( activated(int) ), this, SLOT( GotoPgE(int) ) ); } @@ -268,11 +271,12 @@ void PageSelector::languageChange() Back->setToolTip( tr("Go to the previous page") ); Forward->setToolTip( tr("Go to the next page") ); Last->setToolTip( tr("Go to the last page") ); - PageCombo->setToolTip( tr("Select the current page") ); + PageCombo->setToolTip( tr("Go to page") ); PageCountString = tr(" of %1", "number of pages in document"); PageCount->setText(PageCountString.arg(LastPG)); disconnect( PageCombo, SIGNAL( activated(int) ), this, SLOT( GotoPgE(int) ) ); - setCurrentComboItem(PageCombo, QString::number(APage)); + + setCurrentComboItem(PageCombo, QString::number(APage) + virtualPN(APage)); connect( PageCombo, SIGNAL( activated(int) ), this, SLOT( GotoPgE(int) ) ); } @@ -280,3 +284,26 @@ void PageSelector::clearFocus() { PageCombo->clearFocus(); } + +QString PageSelector::virtualPN(int page) +{ + QString res = QString(); + if (m_Doc != NULL) + { + bool show = false; + DocumentSection section = m_Doc->sections().value(m_Doc->getSectionKeyForPageIndex(page)); + if (section.active) + { + if (section.type != Type_1_2_3) + show = true; + else if (QString::number(page+1) != m_Doc->getSectionPageNumberForPageIndex(page)) + show = true; + } + + if (show) + res = " / " + QString("%1").arg(m_Doc->getSectionPageNumberForPageIndex(page), + m_Doc->getSectionPageNumberWidthForPageIndex(page), + m_Doc->getSectionPageNumberFillCharForPageIndex(page)); + } + return res; +} diff --git a/Scribus/scribus/ui/pageselector.h b/Scribus/scribus/ui/pageselector.h index 841ceb5..b75a876 100644 --- a/Scribus/scribus/ui/pageselector.h +++ b/Scribus/scribus/ui/pageselector.h @@ -21,13 +21,14 @@ class QIntValidator; #include "styleoptions.h" class ScComboBox; +class ScribusDoc; class SCRIBUS_API PageSelector : public QWidget { Q_OBJECT public: - PageSelector( QWidget* parent, int maxPg ); + PageSelector( QWidget* parent, ScribusDoc* doc ); ~PageSelector() {}; virtual void changeEvent(QEvent *e); @@ -52,7 +53,8 @@ public: QIntValidator *m_validator; int LastPG; int APage; - + ScribusDoc* m_Doc; + public slots: virtual void GotoPg(int); virtual void setMaximum(int); @@ -71,10 +73,13 @@ protected: QHBoxLayout* PageSelectorLayout; QLabel *PageCount; QString PageCountString; - + signals: void GotoPage(int); +private: + //returns string with "virtual" page number if it is different than "normal" page number + QString virtualPN(int page); }; #endif // PAGESELECTOR_H diff --git a/Scribus/scribus/ui/preview.cpp b/Scribus/scribus/ui/preview.cpp index b788214..3f2cd39 100644 --- a/Scribus/scribus/ui/preview.cpp +++ b/Scribus/scribus/ui/preview.cpp @@ -319,7 +319,7 @@ PPreview::PPreview( QWidget* parent, ScribusView *vin, ScribusDoc *docu, QString Layout6->addWidget(scaleBox); QSpacerItem* spacer = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum ); Layout6->addItem( spacer ); - PGSel = new PageSelector(this, doc->DocPages.count()); + PGSel = new PageSelector(this, doc); PGSel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); Layout6->addWidget(PGSel); QSpacerItem* spacer2 = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum );