View Issue Details

IDProjectCategoryView StatusLast Update
0013927ScribusUsabilitypublic2026-09-24 04:01
Reporterjeff Assigned Tonitramr  
PrioritynormalSeverityfeatureReproducibilityalways
Status assignedResolutionopen 
Product Version1.5.2.svn 
Target Version1.7.0 
Summary0013927: Make better use of available horizontal space for document pages in "Arrange Pages" (display master page names on the sides)
DescriptionThe current layout wastes a tremendous amount of space while simultaneously making it impossible to read the name of the master pages applied to the various pages (see attached screenshot). For the longest time I thought this felt broken, like some sort of alignment bug, but I see it's still present in 1.5.x so I'm reporting it and offering a UI suggestion for it.

Since scribus only ever deals with single or dual-page documents, and there is always a certain amount of white space due to the width of the "Arrange pages" window/pane, we can leverage this space.

My suggestion is to center the page icons, reduce their gutter (as you'll see in my mockup, they are actually closer together, horizontally speaking) and put the applied master pages' names on the side of each page (a compromise could be made between this and the current approach: the names labels could start "in" the pages icons and then extend outwards to the left or right, to have fit longer master pages names). Will attach a mockup to illustrate this.
Additional InformationThis is probably in line with the spirit of issue 0009948 and could actually replace it...
Tags#please_test, discussion, mockup
Attached Files
PatchNo

Relationships

related to 0013297 assignednitramr [Feature] Color Code Master Pages like in Layers dialog (mockup included) 
related to 0009948 closednitramr Arrange pages dialog: no visual link between page and master page (1.4.03rc) 
related to 0010038 new allow horizontal flatpans on Canvas / Arrange Pages 
child of 0003837 acknowledged Metabug: Master pages/Page templates 

Activities

jeff

2016-04-07 19:54

reporter   ~0039887

Oh yeah, and for single-page layouts, instead of center-aligning the icons and having margins on both sides, the pages can be left-aligned as they are now, but with the master page name onto the right.

jeff

2016-04-07 19:57

reporter   ~0039888

Last edited: 2016-04-07 20:07

If you want to go "all the way" with this, you could do something even more awesome: nuking the "Available master pages" section at the top, and in the remaining "Document pages" section at the bottom, have the master page names actually be interactive combobox/dropdown widgets that you can change directly, serving a dual purpose instead of just displaying the name. The "drag a master page to a document page" functionality gets replaced by the combobox.

The only "problem" I foresee so far is that you might need to use a "tabs" layout (or a button, "Edit master pages") to separate "Document Pages" from "Master Pages" editing mode.

Kunda

2016-04-07 20:14

updater   ~0039889

Last edited: 2016-04-07 20:17

Nice mockup. I like the idea of centering it so there is better use of the space.

Keep in mind a few things:
* devs are eyeing the developments going on over at indigoDock (https://github.com/nitramr/indigoDock) with the high probability of including it in 1.5.3 or 1.5.4
* Issues like those that have been proposed by PeterBenedek and implemented by Franz (0013297) to spruce up this MasterPages UI have been tried but they were reverted due to difference in aesthetics.

So there may be less of an inclination to do any heavy coding for this current UI if it may change in one of the next minor versions.

Nevertheless, mockups are always welcome.

Kunda

2016-04-28 13:24

updater   ~0040573

Why do we have all that wasted space in the Document Pages window?
This mockup proposes something very clean with the ability for Scribus to actually implement Franz's 0013297 in a better way. There is room for the Master Page name, we can color code that. We could also add other information since, again, there is space to.

buttar

2026-09-24 04:01

reporter   ~0054494

Here is an attempt. A 2-patch series that applies cleanly on r27861. (arp = arrange pages)

## `arp1-stable-spread-geometry-v1.05.patch`

- Makes `PageGrid` layout state authoritative through `setPageLayout()`.
- Keeps `m_pageLayout` and `m_cellsInGroup` synchronized when page-group count changes.
- Adds reusable row-content geometry helpers for spread width/start calculations.
- Centers double-page rows from nominal spread geometry, including dummy slots on incomplete rows.
- Leaves single-page and legacy multi-page positioning unchanged.
- Provides the geometry API consumed by ARP2.

## `arp2-master-name-lanes-v1.06.patch`

- Moves Small/Medium master-name painting out of page thumbnails into row-side label lanes.
- Derives those lanes from ARP1’s spread geometry, so labels cannot influence page positioning.
- Uses Qt font metrics, palette roles, clipping, style-derived spacing, and right elision.
- Shares the same font/elision logic between painting and tooltip detection.
- Restores in-thumbnail master-name rendering for Large preview, using a 75% font size.
- Adds defensive handling for invalid/zero-width label rectangles.
- Preserves page-number painting, selection geometry, DnD geometry, and legacy hidden multi-page rendering.
arp1-stable-spread-geometry-v1.05.patch (5,183 bytes)   
Index: scribus/ui/pagepalette_widgets.h
===================================================================
--- scribus/ui/pagepalette_widgets.h	(revision 27861)
+++ scribus/ui/pagepalette_widgets.h	(working copy)
@@ -206,7 +206,9 @@
 
 	int columnAt(QPoint pos);
 	int rowAt(QPoint pos);
+	int rowContentWidth(int rowId);
 	int rowWidth(int rowId);
+	int rowStartX(int rowId);
 	QRect rectAt(int row, int col);
 
 	QSize dummyPageSize();
Index: scribus/ui/pagepalette_widgets.cpp
===================================================================
--- scribus/ui/pagepalette_widgets.cpp	(revision 27861)
+++ scribus/ui/pagepalette_widgets.cpp	(working copy)
@@ -251,7 +251,21 @@
 
 void PageGrid::setPageInGroup(int amount)
 {
-	m_cellsInGroup = amount;
+	switch (qBound(1, amount, 4))
+	{
+	case 2:
+		setPageLayout(PageLayout::doublePage);
+		break;
+	case 3:
+		setPageLayout(PageLayout::triplePage);
+		break;
+	case 4:
+		setPageLayout(PageLayout::quadroPage);
+		break;
+	default:
+		setPageLayout(PageLayout::singlePage);
+		break;
+	}
 }
 
 void PageGrid::setDocumentPageSize(QSizeF pageSize)
@@ -294,25 +308,29 @@
 
 void PageGrid::setPageLayout(PageLayout layout)
 {
-	m_pageLayout = layout;
-
-	switch(m_pageLayout)
+	int cellsInGroup = 1;
+	switch (layout)
 	{
-	default:
-	case PageLayout::singlePage:
-		m_cellsInGroup = 1;
-		break;
 	case PageLayout::doublePage:
-		m_cellsInGroup = 2;
+		cellsInGroup = 2;
 		break;
 	case PageLayout::triplePage:
-		m_cellsInGroup = 3;
+		cellsInGroup = 3;
 		break;
 	case PageLayout::quadroPage:
-		m_cellsInGroup = 4;
+		cellsInGroup = 4;
+		break;
+	case PageLayout::singlePage:
+	default:
+		layout = PageLayout::singlePage;
 		break;
 	}
 
+	if (m_pageLayout == layout && m_cellsInGroup == cellsInGroup)
+		return;
+
+	m_pageLayout = layout;
+	m_cellsInGroup = cellsInGroup;
 	update();
 }
 
@@ -415,7 +433,7 @@
 
 	int m_col = -1;
 
-	QRect cellRect(m_groupSpace, m_rowSpace + row * (rowHeight() + m_rowSpace), dummyPageSize().width(), rowHeight());
+	QRect cellRect(rowStartX(row), m_rowSpace + row * (rowHeight() + m_rowSpace), dummyPageSize().width(), rowHeight());
 	int width = 0;
 
 	for (int i = 0; i <= m_cellsInGroup; ++i)
@@ -458,16 +476,16 @@
 	return (m_row < m_rows) ? m_row : m_rows -1;
 }
 
-int PageGrid::rowWidth(int rowId)
+int PageGrid::rowContentWidth(int rowId)
 {
-	if(pageCount() == 0 || rowId < 0) return -1;
+	if (pageCount() == 0 || rowId < 0 || rowId >= rows())
+		return -1;
 
 	int width = 0;
-
+	// Keep dummy slots in the nominal width so incomplete facing rows stay centered as full spreads.
 	for (int i = 0; i < m_cellsInGroup; ++i)
 	{
-		int id = pageId(rowId, i, false);
-
+		const int id = pageId(rowId, i, false);
 		if (pageInRange(id))
 		{
 			PageCell *pc = pageList.at(id);
@@ -476,21 +494,40 @@
 		else
 			width += dummyPageSize().width();
 
-		width += m_cellGap;
+		if (i + 1 < m_cellsInGroup)
+			width += m_cellGap;
+	}
 
-	};
+	return width;
+}
 
-	width += m_groupSpace * 2;
+int PageGrid::rowWidth(int rowId)
+{
+	const int contentWidth = rowContentWidth(rowId);
+	if (contentWidth < 0)
+		return -1;
 
-	return width;
+	// Preserve the historical trailing cell gap used by size calculations.
+	return contentWidth + m_groupSpace * 2 + m_cellGap;
+}
+
+int PageGrid::rowStartX(int rowId)
+{
+	if (m_pageLayout != PageLayout::doublePage)
+		return m_groupSpace;
+
+	const int contentWidth = rowContentWidth(rowId);
+	if (contentWidth <= 0)
+		return m_groupSpace;
 
+	return qMax(m_groupSpace, (width() - contentWidth) / 2);
 }
 
 QRect PageGrid::rectAt(int row, int col)
 {
 	if ( row == -1 || col == -1) return QRect();
 
-	QRect cellRect(m_groupSpace, m_rowSpace + row * (rowHeight() + m_rowSpace), dummyPageSize().width(), rowHeight());
+	QRect cellRect(rowStartX(row), m_rowSpace + row * (rowHeight() + m_rowSpace), dummyPageSize().width(), rowHeight());
 	int width = 0;
 
 	for (int i = 0; i <= m_cellsInGroup; ++i)
@@ -799,7 +836,6 @@
 
 void PageGrid::paintEvent(QPaintEvent *event)
 {
-	int x = m_groupSpace;
 	int y = m_rowSpace;
 	int offset = 0;
 	QRect selectedPageRect;
@@ -815,7 +851,9 @@
 	// Draw pages
 	for (int r = 0; r < rows(); r++)
 	{
-		int groupStart = m_groupSpace;
+		const int rowStart = rowStartX(r);
+		int x = rowStart;
+		int groupStart = rowStart;
 		int groupWidth = 0;
 		bool drawGroupRect = false;
 
@@ -851,7 +889,7 @@
 					offset = m_cellGap;
 
 				if(isLastRow(r + 1))
-					groupStart = m_rtlBinding ? x : m_groupSpace;
+					groupStart = m_rtlBinding ? x : rowStart;
 
 				int w = cell->pageWidthByHeight(pageHeight()) + offset;
 				x += w;
@@ -868,7 +906,7 @@
 
 				// adjust start on first row if first page has an offset
 				if(isFirstRow(r))
-					groupStart = m_rtlBinding ? m_groupSpace : x;
+					groupStart = m_rtlBinding ? rowStart : x;
 			}
 		}
 
@@ -877,7 +915,6 @@
 			painter.drawRect( QRect(groupStart, y, groupWidth, pageHeight()) );
 
 		y += m_rowHeight + m_rowSpace;
-		x = m_groupSpace;
 	}
 
 	// Draw selected page
arp2-master-name-lanes-v1.06.patch (11,168 bytes)   
Index: scribus/ui/pagepalette_widgets.h
===================================================================
--- scribus/ui/pagepalette_widgets.h	(after ARP1 v1.05)
+++ scribus/ui/pagepalette_widgets.h	(working copy)
@@ -14,6 +14,7 @@
 #include <QDragLeaveEvent>
 #include <QDragMoveEvent>
 #include <QDropEvent>
+#include <QFont>
 #include <QHBoxLayout>
 #include <QImage>
 #include <QKeyEvent>
@@ -209,7 +210,12 @@
 	int rowContentWidth(int rowId);
 	int rowWidth(int rowId);
 	int rowStartX(int rowId);
+	QRect rowSpreadRect(int row);
 	QRect rectAt(int row, int col);
+	QRect masterLabelRect(int row, int col);
+	bool usesExternalMasterLabels() const;
+	QFont masterNameFont(bool inThumbnail) const;
+	QString elidedMasterName(const QString& name, int width) const;
 
 	QSize dummyPageSize();
 
@@ -230,6 +236,7 @@
 
 protected:
 
+	bool event(QEvent *event) override;
 	void paintEvent(QPaintEvent *event) override;
 	void resizeEvent(QResizeEvent *event) override;
 
Index: scribus/ui/pagepalette_widgets.cpp
===================================================================
--- scribus/ui/pagepalette_widgets.cpp	(after ARP1 v1.05)
+++ scribus/ui/pagepalette_widgets.cpp	(working copy)
@@ -11,7 +11,9 @@
 #include <QDrag>
 #include <QElapsedTimer>
 #include <QEvent>
+#include <QFontMetrics>
 #include <QHeaderView>
+#include <QHelpEvent>
 #include <QLabel>
 #include <QList>
 #include <QMenu>
@@ -19,6 +21,7 @@
 #include <QMessageBox>
 #include <QPainter>
 #include <QScrollArea>
+#include <QStyle>
 #include <QStringView>
 
 #include "iconmanager.h"
@@ -555,6 +558,88 @@
 
 }
 
+QRect PageGrid::rowSpreadRect(int row)
+{
+	if (m_pageLayout != PageLayout::doublePage || row < 0 || row >= rows())
+		return QRect();
+
+	const int contentWidth = rowContentWidth(row);
+	if (contentWidth <= 0)
+		return QRect();
+
+	return QRect(rowStartX(row),
+		m_rowSpace + row * (rowHeight() + m_rowSpace),
+		contentWidth, pageHeight());
+}
+
+QRect PageGrid::masterLabelRect(int row, int col)
+{
+	if (!usesExternalMasterLabels() || row < 0 || row >= rows() || col < 0 || col >= columns())
+		return QRect();
+
+	const int styleGap = style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing, nullptr, this);
+	const int masterLabelGap = styleGap >= 0 ? styleGap : m_labelGap;
+	int left = 0;
+	int right = 0;
+	int top = m_rowSpace + row * (rowHeight() + m_rowSpace);
+
+	if (m_pageLayout == PageLayout::singlePage)
+	{
+		QRect pageRect = rectAt(row, col);
+		if (pageRect.isEmpty())
+			return QRect();
+
+		left = pageRect.right() + 1 + masterLabelGap;
+		right = width() - m_groupSpace - 1;
+		top = pageRect.top();
+	}
+	else
+	{
+		const QRect spreadRect = rowSpreadRect(row);
+		if (spreadRect.isEmpty())
+			return QRect();
+
+		top = spreadRect.top();
+		if (col == 0)
+		{
+			left = m_groupSpace;
+			right = spreadRect.left() - masterLabelGap - 1;
+		}
+		else
+		{
+			left = spreadRect.right() + 1 + masterLabelGap;
+			right = width() - m_groupSpace - 1;
+		}
+	}
+
+	const int availableWidth = right - left + 1;
+	if (availableWidth <= 0)
+		return QRect();
+
+	return QRect(left, top, availableWidth, pageHeight());
+}
+
+bool PageGrid::usesExternalMasterLabels() const
+{
+	return m_rowHeight != TileSize::Large
+		&& (m_pageLayout == PageLayout::singlePage || m_pageLayout == PageLayout::doublePage);
+}
+
+QFont PageGrid::masterNameFont(bool inThumbnail) const
+{
+	QFont masterFont(font());
+	masterFont.setPointSizeF(inThumbnail ? m_fontSize * 0.75 : m_fontSize);
+	return masterFont;
+}
+
+QString PageGrid::elidedMasterName(const QString& name, int width) const
+{
+	if (width <= 0)
+		return QString();
+
+	return QFontMetrics(masterNameFont(false)).elidedText(name, Qt::ElideRight, width);
+}
+
 QSize PageGrid::dummyPageSize()
 {
 	double ratio = m_documentPageSize.width() / m_documentPageSize.height();
@@ -726,22 +811,11 @@
 	if (tile == nullptr)
 		return;
 
-	QFont font(this->font().family(), m_fontSize, QFont::Normal);
-	QFont fontName(this->font().family(), m_fontSize * 0.8, QFont::Normal);
+	QFont font(this->font());
+	font.setPointSize(m_fontSize);
 	QRect rectPage(cellPosition.x(), cellPosition.y(), tile->pageWidthByHeight(pageHeight()), pageHeight());
 	QRect rectCell(cellPosition.x(), cellPosition.y(), tile->pageWidthByHeight(pageHeight()), m_rowHeight);
 
-	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
@@ -756,32 +830,46 @@
 	painter.setFont(font);
 
 	// Draw Page Number
-	painter.setPen(QPen( labelColor ));
-	painter.drawText(rectCell, Qt::AlignHCenter|Qt::AlignBottom | Qt::TextWordWrap, tile->pageNumberDisplay);
+	painter.setPen(QPen(labelColor));
+	painter.drawText(rectCell, Qt::AlignHCenter | Qt::AlignBottom | Qt::TextWordWrap, tile->pageNumberDisplay);
 
-	// 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);
-	}
+	const bool supportedPageLayout = m_pageLayout == PageLayout::singlePage || m_pageLayout == PageLayout::doublePage;
+	const bool drawMasterNameInPage = m_rowHeight == TileSize::Large || !supportedPageLayout;
+	if (drawMasterNameInPage)
+	{
+		QString pageName = tile->pageName;
+		int pageNameHyphen = tile->pageName.indexOf("-");
+		if (pageNameHyphen > 0)
+		{
+			QString tmp = tile->pageName.left(pageNameHyphen).trimmed();
+			if (tmp.length() > 0 && tmp.length() < 5)
+				pageName = tmp;
+		}
 
+		// Small/Medium single- and facing-page previews use external labels.
+		// Large previews reuse Scribus' established in-thumbnail treatment.
+		if (supportedPageLayout)
+			painter.setFont(masterNameFont(true));
+		else
+		{
+			QFont fontName(font);
+			fontName.setPointSizeF(m_fontSize * 0.8);
+			painter.setFont((pageNameHyphen > 0) ? font : fontName);
+		}
 
-	// Draw selection
-	//	if(selected)
-	//	{
-	//		painter.setBrush(Qt::NoBrush);
-	//		painter.setPen( QPen(m_colorSelection, 2) );
-	//		painter.drawRect(rectPage);
-	//	}
+		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 hover
 	if (hovered)
@@ -790,7 +878,7 @@
 		colHover.setAlphaF(0.5);
 		painter.setBackgroundMode(Qt::TransparentMode);
 		painter.setBrush(colHover);
-		painter.setPen( Qt::NoPen );
+		painter.setPen(Qt::NoPen);
 		painter.drawRect(rectPage);
 	}
 
@@ -834,17 +922,72 @@
  *
  * ********************************************************************************* */
 
+bool PageGrid::event(QEvent *event)
+{
+	if (event->type() == QEvent::ToolTip && pageCount() > 0
+		&& (m_pageLayout == PageLayout::singlePage || m_pageLayout == PageLayout::doublePage))
+	{
+		QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
+		const QPoint pos = helpEvent->pos();
+		const int row = rowAt(pos);
+
+		if (row >= 0)
+		{
+			for (int col = 0; col < columns(); ++col)
+			{
+				const int id = pageId(row, col, false);
+				if (!pageInRange(id))
+					continue;
+
+				PageCell *cell = getPageItem(id);
+				if (cell == nullptr)
+					continue;
+
+				QRect pageRect = rectAt(row, col);
+				pageRect.setHeight(pageHeight());
+				if (pageRect.contains(pos))
+				{
+					QToolTip::showText(helpEvent->globalPos(),
+						tr("Page %1\nMaster page: %2").arg(cell->pageNumberDisplay, cell->pageName),
+						this, pageRect);
+					return true;
+				}
+
+				const QRect labelRect = masterLabelRect(row, col);
+				if (!labelRect.isEmpty() && labelRect.contains(pos))
+				{
+					const QString elidedName = elidedMasterName(cell->pageName, labelRect.width());
+					if (!elidedName.isEmpty() && elidedName != cell->pageName)
+					{
+						QToolTip::showText(helpEvent->globalPos(), tr("Master page: %1").arg(cell->pageName), this, labelRect);
+						return true;
+					}
+				}
+			}
+		}
+
+		QToolTip::hideText();
+		event->ignore();
+		return true;
+	}
+
+	return QWidget::event(event);
+}
+
 void PageGrid::paintEvent(QPaintEvent *event)
 {
 	int y = m_rowSpace;
 	int offset = 0;
 	QRect selectedPageRect;
-	QColor foregroundColor( PrefsManager::instance().appPrefs.displayPrefs.scratchColor.lightness() <= 128 ? Qt::white : Qt::black);
+	const QColor scratchColor = PrefsManager::instance().appPrefs.displayPrefs.scratchColor;
+	const QColor foregroundColor = scratchColor.lightness() <= 128
+		? palette().color(QPalette::BrightText)
+		: palette().color(QPalette::WindowText);
 
 	QPainter painter(this);
 
 	// Draw background
-	painter.fillRect(rect(), PrefsManager::instance().appPrefs.displayPrefs.scratchColor);
+	painter.fillRect(rect(), scratchColor);
 
 	if (pageCount() == 0) return;
 
@@ -910,6 +1053,41 @@
 			}
 		}
 
+		if (usesExternalMasterLabels())
+		{
+			painter.save();
+			painter.setFont(masterNameFont(false));
+			painter.setPen(QPen(foregroundColor));
+			painter.setRenderHint(QPainter::TextAntialiasing, true);
+
+			for (int c = 0; c < columns(); ++c)
+			{
+				const int id = pageId(r, c, false);
+				if (!pageInRange(id))
+					continue;
+
+				PageCell *cell = getPageItem(id);
+				const QRect labelRect = masterLabelRect(r, c);
+				if (cell == nullptr || labelRect.isEmpty())
+					continue;
+
+				const QString label = elidedMasterName(cell->pageName, labelRect.width());
+				if (label.isEmpty())
+					continue;
+
+				Qt::Alignment alignment = Qt::AlignVCenter | Qt::AlignLeft;
+				if (m_pageLayout == PageLayout::doublePage && c == 0)
+					alignment = Qt::AlignVCenter | Qt::AlignRight;
+
+				painter.save();
+				painter.setClipRect(labelRect);
+				painter.drawText(labelRect, alignment | Qt::TextSingleLine, label);
+				painter.restore();
+			}
+
+			painter.restore();
+		}
+
 		// Draw group border
 		if (drawGroupRect)
 			painter.drawRect( QRect(groupStart, y, groupWidth, pageHeight()) );
large-preview-PROPOSED.png (24,702 bytes)   
large-preview-PROPOSED.png (24,702 bytes)   
medium-preview-PROPOSED.png (29,223 bytes)   
medium-preview-PROPOSED.png (29,223 bytes)   
small-preview-PROPOSED.png (34,983 bytes)   
small-preview-PROPOSED.png (34,983 bytes)   

Issue History

Date Modified Username Field Change
2016-04-07 19:49 jeff New Issue
2016-04-07 19:49 jeff File Added: Scribus Arrange Pages annotated.png
2016-04-07 19:50 jeff File Added: Scribus Arrange Pages - mockup.png
2016-04-07 19:54 jeff Note Added: 0039887
2016-04-07 19:57 jeff Note Added: 0039888
2016-04-07 20:07 jeff Note Edited: 0039888
2016-04-07 20:14 Kunda Note Added: 0039889
2016-04-07 20:17 Kunda Note Edited: 0039889
2016-04-07 20:34 Kunda Relationship added related to 0013297
2016-04-07 20:35 Kunda Relationship added child of 0003837
2016-04-07 20:35 Kunda Tag Attached: mockup
2016-04-07 20:36 Kunda Relationship added related to 0009948
2016-04-28 13:24 Kunda Note Added: 0040573
2016-04-28 13:24 Kunda Tag Attached: discussion
2016-05-09 16:29 Kunda Relationship added related to 0010038
2023-05-27 16:11 cbradney Assigned To => nitramr
2023-05-27 16:11 cbradney Status new => assigned
2023-05-27 16:21 cbradney Target Version => 1.7.0
2026-09-24 04:01 buttar Note Added: 0054494
2026-09-24 04:01 buttar File Added: arp1-stable-spread-geometry-v1.05.patch
2026-09-24 04:01 buttar File Added: arp2-master-name-lanes-v1.06.patch
2026-09-24 04:01 buttar File Added: large-preview-PROPOSED.png
2026-09-24 04:01 buttar File Added: medium-preview-PROPOSED.png
2026-09-24 04:01 buttar File Added: small-preview-PROPOSED.png
2026-09-24 04:01 buttar Tag Attached: #please_test