View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0010038 | Scribus | Canvas | public | 2011-06-10 09:50 | 2016-05-09 16:31 |
Reporter | ale | Assigned To | |||
Priority | normal | Severity | feature | Reproducibility | have not tried |
Status | new | Resolution | open | ||
Summary | 0010038: allow horizontal flatpans on Canvas / Arrange Pages | ||||
Description | allow horizontal flatpans on canvas (+ on arrange pages) this is the way many people want to see their documents... | ||||
Tags | No tags attached. | ||||
Patch | No | ||||
related to | 0013927 | assigned | nitramr | Make better use of available horizontal space for document pages in "Arrange Pages" (display master page names on the sides) |
related to | 0009948 | closed | nitramr | Arrange pages dialog: no visual link between page and master page (1.4.03rc) |
related to | 0013297 | assigned | nitramr | [Feature] Color Code Master Pages like in Layers dialog (mockup included) |
|
whats a flatpan? |
|
chemin de fer? http://en.wikipedia.org/wiki/Flatplan |
|
picture of a flatplan? |
|
"allow horizontal" - do you mean we have vertical flatplans already? |
|
Sounds like a feature request to get in the way of fixes. Bottom of the pile IMO |
|
well, we have vertical flatplans... as you can zoom out and see the pages in a vertical flow... @cbradney: this is a common way of working for really many people in DTP... i don't need it myself, but the wish has been expressed in an OIF-workshop in africa... it seems to be useful for them. if it's not too much work to, i'd suggest to implement it... |
|
and on this page you can see a flatplan... http://www.maned.com/products/classifiedlayoutsystems |
|
I believe it would be a lot of work to do on the canvas at least, given the history of working vertically, plus all the layout assumptions based on the 4 page placement types. |
|
so, let's do it only for the page management dialog... ... and maybe add a page preview in there... would that be easier? |
|
and add a page preview to the page management? |
|
if we want previews, should we do it with multithreading? |
|
ale: I am voting for multithreading in Scribus by both hands and both legs (4 votes!), not only in this case! But I don’t have right to vote, I am afraid. |
|
reminder to myself: http://wiki.scribus.net/canvas/Multitherad_%28Project%29 |
|
pagepalette_20110922.patch (11,766 bytes)
Index: ui/pagepalette.cpp =================================================================== --- ui/pagepalette.cpp (revision 16845) +++ ui/pagepalette.cpp (working copy) @@ -153,22 +153,35 @@ QTableWidget::mousePressEvent(e); } -void SeView::mouseReleaseEvent(QMouseEvent* e) +void SeView::mouseReleaseEvent(QMouseEvent* m) { - e->accept(); + m->accept(); Mpressed = false; -/* if (e->button() == RightButton) + if (m->button() == Qt::RightButton) { - QPopupMenu *pmen = new QPopupMenu(); - qApp->setOverrideCursor(QCursor(Qt::ArrowCursor), true); - int px = pmen->insertItem( tr("Show Master Page Names"), this, SLOT(ToggleNam())); + QMenu *pmen = new QMenu(); + // QPopupMenu *pmen = new QPopupMenu(); + qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); + QAction *px = pmen->addAction( tr("Show Master Page Names"), this, SLOT(ToggleNam())); + px->setCheckable(true); if (Namen) - pmen->setItemChecked(px, true); + px->setChecked(true); + + px = pmen->addAction( tr("Show Page Previews"), this, SLOT(toggleThumbnail())); + px->setCheckable(true); + if (Thumb) + px->setChecked(true); + + px = pmen->addAction( tr("Horizontal view"), this, SLOT(toggleViewDirection())); + px->setCheckable(true); + if (Horizontal) + px->setChecked(true); + pmen->exec(QCursor::pos()); delete pmen; - } */ - emit Click(rowAt(e->pos().y()), columnAt(e->pos().x()), e->button()); - QTableWidget::mouseReleaseEvent(e); + } + emit Click(rowAt(m->pos().y()), columnAt(m->pos().x()), m->button()); + QTableWidget::mouseReleaseEvent(m); } void SeView::ToggleNam() @@ -183,6 +196,18 @@ show(); */ } +void SeView::toggleThumbnail() +{ + Thumb = !Thumb; + emit thumbnailChanged(); +} + +void SeView::toggleViewDirection() +{ + Horizontal = !Horizontal; + emit horizontalChanged(); +} + void SeView::mouseMoveEvent(QMouseEvent* e) { if ((Mpressed) && ((Mpos - e->pos()).manhattanLength() > 4)) @@ -234,8 +259,9 @@ // Fixed at least in Qt-4.4.2 // QApplication::restoreOverrideCursor(); str = e->mimeData()->text(); + qDebug() << "str: " << str; ClearPix(); - if (str.startsWith("1")) + if (str.startsWith("1")) // apply a master page ("1Normal") { int a = rowAt(e->pos().y()); int b = columnAt(e->pos().x()); @@ -291,19 +317,24 @@ return; } } - if (str.startsWith("2")) + if (str.startsWith("2")) // move a page ("2 3 Normal" -> "2 pageno masterpagename") { int st = str.indexOf(" "); int en = str.indexOf(" ", st+1); tmp = str.mid(en+1); - int dr = str.mid(st, en-st).toInt(); - int a = rowAt(e->pos().y()); - int b = columnAt(e->pos().x()); + int dr = str.mid(st, en-st).toInt(); // page being moved + int a = rowAt(e->pos().y()); // row of the target + int b = columnAt(e->pos().x()); // column of the target + qDebug() << "en: " << en; + qDebug() << "dr: " << dr; + qDebug() << "a: " << a; + qDebug() << "b: " << b; int p; if ((a == -1) || (b == -1)) return; QTableWidgetItem* ite = item(a, b); - p = GetPage(a, b, &lastPage); + p = GetPage(a, b, &lastPage); // target page + qDebug() << "p: " << p; if (a == rowCount()-1) { emit movePage(dr, p+1); @@ -441,6 +472,32 @@ int SeView::GetPage(int r, int c, bool *last) { + if (Horizontal) + return GetPageHorizontal(r, c, last); + else + return GetPageVertical(r, c, last); +} + +int SeView::GetPageHorizontal(int r, int c, bool *last) +{ + int ret = MaxC; + *last = false; + // qDebug() << "c: " << c; + // qDebug() << "columnCount: " << columnCount(); + // qDebug() << "ret: " << ret; + if (c >= columnCount() - 1) + { + *last = true; + } else if (c % 2 == 0) + ret = c / 2; + else + ret = (c - 1) / 2; + // qDebug() << "ret: " << ret; + return ret; +} + +int SeView::GetPageVertical(int r, int c, bool *last) +{ int counter = firstP; int rowcounter = 0; int ret = MaxC; @@ -553,6 +610,7 @@ Layout2->setSpacing(5); TextLabel1 = new QLabel( privateLayoutWidget ); Layout2->addWidget( TextLabel1 ); + // master pages masterPageList = new SeList(privateLayoutWidget); masterPageList->setMinimumSize(QSize(130,70)); masterPageList->Thumb = false; @@ -564,6 +622,7 @@ Layout3->setSpacing(5); TextLabel2 = new QLabel( privateLayoutWidget_2 ); Layout3->addWidget( TextLabel2 ); + // pages pageView = new SeView(privateLayoutWidget_2); QHeaderView *Header = pageView->verticalHeader(); Header->setMovable(false); @@ -579,6 +638,10 @@ pageView->setColumnCount(1); pageView->setIconSize(QSize(60, 60)); pageView->setMinimumSize(QSize(130,120)); + pageView->Namen = false; + pageView->Thumb = false; + pageView->Horizontal = true; // @xxx: only for debugging purposes; othwerise to false or prefs (ale) + // pageView->setShowGrid(true); // @xxx: only for debugging purposes (ale) Layout3->addWidget( pageView ); PagePaletteLayout->addWidget( Splitter1 ); @@ -628,6 +691,8 @@ connect(Trash, SIGNAL(DelPage(int)), m_scMW, SLOT(DeletePage2(int))); connect(pageView, SIGNAL(DelPage(int)), m_scMW, SLOT(DeletePage2(int))); connect(this, SIGNAL(gotoPage(int)), m_scMW, SLOT(selectPagesFromOutlines(int))); + connect(pageView, SIGNAL(thumbnailChanged()), this, SLOT(rebuildPages())); + connect(pageView, SIGNAL(horizontalChanged()), this, SLOT(rebuildPages())); } void PagePalette::deleteMasterPage(QString tmp) @@ -687,9 +752,12 @@ { int p; bool dummy; + // qDebug() << "r: " << r; + // qDebug() << "c: " << c; if ((b == Qt::LeftButton) && (r != -1) && (c != -1)) { p = pageView->GetPage(r, c, &dummy); + // qDebug() << "p: " << p; emit gotoPage(p); } } @@ -754,7 +822,7 @@ disconnect(pageLayout, SIGNAL(selectedLayout(int )), this, SLOT(handlePageLayout(int ))); disconnect(pageLayout, SIGNAL(selectedFirstPage(int )), this, SLOT(handleFirstPage(int ))); pageView->clearContents(); - pageView->setRowCount(1); + pageView->setRowCount(1); // why not 0? (ale/20110916) pageView->setColumnCount(1); if (currView == 0) { @@ -766,15 +834,25 @@ pageLayout->selectItem(currView->Doc->pagePositioning()); pageLayout->firstPage->setCurrentIndex(currView->Doc->pageSets()[currView->Doc->pagePositioning()].FirstPage); pageView->MaxC = currView->Doc->DocPages.count()-1; + // counter [0] [1|0] [0|1|2] [0|1|2|3] int counter = currView->Doc->pageSets()[currView->Doc->pagePositioning()].FirstPage; + // in horizontal mode cols and rows will be used switched int cols = currView->Doc->pageSets()[currView->Doc->pagePositioning()].Columns; int rows = (currView->Doc->DocPages.count()+counter) / currView->Doc->pageSets()[currView->Doc->pagePositioning()].Columns; if (((currView->Doc->DocPages.count()+counter) % currView->Doc->pageSets()[currView->Doc->pagePositioning()].Columns) != 0) rows++; int rowcounter = 0; int colmult, rowmult, coladd, rowadd; - if (cols == 1) + if (pageView->Horizontal) { + pageView->setColumnCount((currView->Doc->DocPages.count() * 2) + 1); + pageView->setRowCount(1); + colmult = 1; + coladd = 0; + rowmult = 2; + rowadd = 1; + } else if (cols == 1) + { pageView->setColumnCount(cols); pageView->setRowCount(rows*2+1); colmult = 1; @@ -805,41 +883,80 @@ pageView->rowadd = rowadd; pageView->rowmult = rowmult; pageView->firstP = counter; + // why not "pageView->cols = cols"? (ale/20110921) pageView->cols = currView->Doc->pageSets()[currView->Doc->pagePositioning()].Columns; pageList.clear(); - for (int a = 0; a < currView->Doc->DocPages.count(); ++a) + QPixmap ppix = pix; + if (pageView->Horizontal) { - str = currView->Doc->DocPages.at(a)->MPageNam; - SeItem *it = new SeItem(str, a, CreateIcon(a, pix)); - pageList.append(it); - pageView->setItem(rowcounter*rowmult+rowadd, counter*colmult+coladd, (QTableWidgetItem *)it); - pageView->setColumnWidth(counter*colmult+coladd, pix.width()); - if (cols == 1) + // qDebug() << "firstP: " << pageView->firstP; + int spread = pageView->cols; + for (int i = 0; i < currView->Doc->DocPages.count(); ++i) { - pageView->setRowHeight(rowcounter*rowmult, 10); - pageView->setRowHeight(rowcounter*rowmult+rowadd, pix.height()); + int j = i * 2; + str = currView->Doc->DocPages.at(i)->MPageNam; + SeItem *it; + // @todo: the icons must be updated when leaving the current page (ale/20110921) + if (pageView->Thumb) + ppix = QPixmap::fromImage(currView->PageToPixmap(i, 60)); + it = new SeItem(str, i, CreateIcon(i, ppix)); + pageList.append(it); + pageView->setItem(0, j + 1, (QTableWidgetItem *)it); + pageView->setColumnWidth(j, 10); + pageView->setColumnWidth(j + 1, ppix.width()); + if (spread > 1) + { + int k = (i + pageView->firstP) % spread; + // qDebug() << "k: " << k; + if (k == 0) + { + it->setTextAlignment(Qt::AlignLeft); + pageView->setColumnWidth(j, 20); + } + else if (k == spread -1) + it->setTextAlignment(Qt::AlignRight); + else + it->setTextAlignment(Qt::AlignHCenter); + } } - else - pageView->setRowHeight(rowcounter*rowmult+rowadd, pix.height()+5); - counter++; - if (counter > currView->Doc->pageSets()[currView->Doc->pagePositioning()].Columns-1) + pageView->setColumnWidth(0, 10); // the first column is always 10px wide + pageView->setColumnWidth(currView->Doc->DocPages.count() * 2, 10); + pageView->setRowHeight(0, ppix.height()); + } else { + for (int a = 0; a < currView->Doc->DocPages.count(); ++a) { - counter = 0; - rowcounter++; - } - } - pageView->setRowHeight(pageView->rowCount()-1, 10); - counter = 0; - if (cols != 1) - { - for (int c = 0; c < pageView->columnCount(); ++c) - { - if ((counter % 2) == 0) - pageView->setColumnWidth(counter, 10); + str = currView->Doc->DocPages.at(a)->MPageNam; + SeItem *it = new SeItem(str, a, CreateIcon(a, pix)); + pageList.append(it); + pageView->setItem(rowcounter*rowmult+rowadd, counter*colmult+coladd, (QTableWidgetItem *)it); + pageView->setColumnWidth(counter*colmult+coladd, pix.width()); + if (cols == 1) + { + pageView->setRowHeight(rowcounter*rowmult, 10); + pageView->setRowHeight(rowcounter*rowmult+rowadd, pix.height()); + } else - pageView->setColumnWidth(counter, pix.width()); + pageView->setRowHeight(rowcounter*rowmult+rowadd, pix.height()+5); counter++; + if (counter > currView->Doc->pageSets()[currView->Doc->pagePositioning()].Columns-1) + { + counter = 0; + rowcounter++; + } } + pageView->setRowHeight(pageView->rowCount()-1, 10); + counter = 0; + if (cols != 1) + { + for (int c = 0; c < pageView->columnCount(); ++c) + { + if ((counter % 2) == 0) + pageView->setColumnWidth(counter, 10); + else + pageView->setColumnWidth(counter, pix.width()); + counter++; + } + } } pageView->repaint(); if (currView != 0) Index: ui/pagepalette.h =================================================================== --- ui/pagepalette.h (revision 16845) +++ ui/pagepalette.h (working copy) @@ -102,6 +102,8 @@ public slots: void ToggleNam(); + void toggleThumbnail(); + void toggleViewDirection(); signals: void UseTemp(QString, int); @@ -109,6 +111,8 @@ void movePage(int, int); void Click(int, int, int); void DelPage(int); + void thumbnailChanged(); + void horizontalChanged(); protected: virtual void dropEvent(QDropEvent * e); @@ -119,12 +123,16 @@ virtual void mousePressEvent(QMouseEvent* e); virtual void mouseMoveEvent(QMouseEvent* e); virtual void keyPressEvent(QKeyEvent* e); + int GetPageVertical(int r, int c, bool *last); + int GetPageHorizontal(int r, int c, bool *last); QPoint Mpos; bool Mpressed; + bool Thumb; + bool Namen; + bool Horizontal; bool Doppel; bool Links; - bool Namen; int MaxC; int colmult; int rowmult; |
|
first version of the "arrange pages" rework with - horizontal view - preview of the pages see it in action here: http://www.youtube.com/watch?v=W1UBGXALMws now we need some brilliant ideas on how to make it awesome! |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-06-10 09:50 | ale | New Issue | |
2011-06-10 17:33 | ale | Summary | allo horizontal flatpans on canvas => allow horizontal flatpans on canvas |
2011-06-10 19:30 | cbradney | Note Added: 0026349 | |
2011-06-11 09:51 | ale | Note Added: 0026356 | |
2011-06-13 11:00 | avox | Note Added: 0026379 | |
2011-06-13 11:20 | cezaryece | Note Added: 0026380 | |
2011-06-13 11:35 | cbradney | Note Added: 0026381 | |
2011-06-13 17:49 | ale | Note Added: 0026389 | |
2011-06-13 17:54 | ale | Note Added: 0026390 | |
2011-06-13 18:14 | cbradney | Note Added: 0026391 | |
2011-06-13 18:15 | cbradney | Note Edited: 0026391 | |
2011-06-16 08:58 | ale | Note Added: 0026410 | |
2011-06-30 16:50 | ale | Note Added: 0026503 | |
2011-08-19 20:50 | ale | Note Added: 0026757 | |
2011-08-20 16:24 | cezaryece | Note Added: 0026760 | |
2011-08-20 16:26 | cezaryece | Note Edited: 0026760 | |
2011-08-21 09:40 | ale | Note Added: 0026761 | |
2011-09-22 11:04 | ale | File Added: pagepalette_20110922.patch | |
2011-09-22 11:08 | ale | Note Added: 0026898 | |
2016-05-09 16:29 | Kunda | Relationship added | related to 0013927 |
2016-05-09 16:30 | Kunda | Patch | => No |
2016-05-09 16:30 | Kunda | Summary | allow horizontal flatpans on canvas => allow horizontal flatpans on Canvas / Arrange Pages |
2016-05-09 16:31 | Kunda | Relationship added | related to 0009948 |
2016-05-09 16:31 | Kunda | Relationship added | related to 0013297 |