View Issue Details

IDProjectCategoryView StatusLast Update
0017688ScribusUsabilitypublic2025-11-29 10:10
Reporterbgc Assigned To 
PrioritynormalSeverityfeatureReproducibilityN/A
Status newResolutionopen 
Product Version1.7.1.svn 
Summary0017688: Advanced selection of items with a paragraph style (draft patch included)
DescriptionI have written a draft patch to:
 - In the advanced selection dialog box, Include a checkbox to use a paragraph style, and a combo box to contain paragraph style display names.
 - Try and select multiple items in the document, which have a style name containing the paragraph style name.

I wanted to have separate selection boxes for each item, but I don't understand how the overall selection box is created.
TagsNo tags attached.
Attached Files
nov-17.patch (25,406 bytes)   
diff --git a/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp b/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
index bb7163a..c9df02c 100644
--- a/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
+++ b/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
@@ -109,7 +109,7 @@ QString Scribus150Format::saveElements(double xp, double yp, double wp, double h
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+	styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -205,7 +205,7 @@ bool Scribus150Format::saveStory(StoryText& story, PageItem* item, QByteArray& d
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+	styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -797,7 +797,7 @@ void Scribus150Format::writeHyphenatorLists(ScXmlStreamWriter& docu) const
 
 void Scribus150Format::writeParagraphStyles(ScXmlStreamWriter & docu) const
 {
-	QList<int> styleList = m_Doc->getSortedStyleList();
+	QList<int> styleList = m_Doc->getSortedParagraphStyleList();
 	for (int a = 0; a < styleList.count(); ++a)
 	{
 		putPStyle(docu, m_Doc->paragraphStyles()[styleList[a]], "STYLE");
diff --git a/scribus/plugins/fileloader/scribus170format/scribus170format_save.cpp b/scribus/plugins/fileloader/scribus170format/scribus170format_save.cpp
index 93435b7..d4f75d7 100644
--- a/scribus/plugins/fileloader/scribus170format/scribus170format_save.cpp
+++ b/scribus/plugins/fileloader/scribus170format/scribus170format_save.cpp
@@ -109,7 +109,7 @@ QString Scribus170Format::saveElements(double xp, double yp, double wp, double h
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+	styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -205,7 +205,7 @@ bool Scribus170Format::saveStory(StoryText& story, PageItem* item, QByteArray& d
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+	styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -799,7 +799,7 @@ void Scribus170Format::writeHyphenatorLists(ScXmlStreamWriter& docu) const
 
 void Scribus170Format::writeParagraphStyles(ScXmlStreamWriter & docu) const
 {
-	QList<int> styleList = m_Doc->getSortedStyleList();
+	QList<int> styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		putPStyle(docu, m_Doc->paragraphStyles()[styleList[i]], "STYLE");
diff --git a/scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp b/scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp
index ea195db..943930d 100644
--- a/scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp
+++ b/scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp
@@ -109,7 +109,7 @@ QString Scribus171Format::saveElements(double xp, double yp, double wp, double h
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+    styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -205,7 +205,7 @@ bool Scribus171Format::saveStory(StoryText& story, PageItem* item, QByteArray& d
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+    styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -794,7 +794,7 @@ void Scribus171Format::writeHyphenatorLists(ScXmlStreamWriter& docu) const
 
 void Scribus171Format::writeParagraphStyles(ScXmlStreamWriter & docu) const
 {
-	QList<int> styleList = m_Doc->getSortedStyleList();
+    QList<int> styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		putPStyle(docu, m_Doc->paragraphStyles()[styleList[i]], "ParagraphStyle");
diff --git a/scribus/scribus.cpp b/scribus/scribus.cpp
index c1457a8..105e5c0 100644
--- a/scribus/scribus.cpp
+++ b/scribus/scribus.cpp
@@ -2019,7 +2019,7 @@ void ScribusMainWindow::startUpDialog()
 {
 	bool docSet = false;
 	PrefsContext* docContext = m_prefsManager.prefsFile->getContext("docdirs", false);
-	NewDocDialog* dia = new NewDocDialog(this, m_recentDocsList, true, ScCore->getGuiLanguage());
+    NewDocDialog* dia = new NewDocDialog(this, m_recentDocsList, true, ScCore->getGuiLanguage());
 	if (dia->exec())
 	{
 		if (dia->tabSelected() == NewDocDialog::NewDocumentTab)
@@ -4879,8 +4879,8 @@ void ScribusMainWindow::slotEditPastePlainText()
 void ScribusMainWindow::SelectAllOnLayer()
 {
 	ColorList UsedC;
-	doc->getUsedColors(UsedC);
-	QScopedPointer<selectDialog> dia(new selectDialog(this, UsedC, doc->unitIndex()));
+    doc->getUsedColors(UsedC);
+    QScopedPointer<selectDialog> dia(new selectDialog(this, doc, doc->getSortedParagraphStyleList(), UsedC, doc->unitIndex()));
 	if (!dia->exec())
 		return;
 
@@ -4890,6 +4890,15 @@ void ScribusMainWindow::SelectAllOnLayer()
 	int docCurrentPage = doc->currentPageNumber();
 	doc->m_Selection->delaySignalsOn();
 	int range = dia->getSelectionRange();
+    // Attribute flags
+    bool useParagraphStyle = false;
+    bool useType = false;
+    bool useFill = false;
+    bool useLine = false;
+    bool useLWidth = false;
+    bool usePrint = false;
+    bool useLocked = false;
+    bool useResize = false;
 	for (int i = 0; i < docItemsCount; ++i)
 	{
 		currItem = doc->Items->at(i);
@@ -4901,14 +4910,16 @@ void ScribusMainWindow::SelectAllOnLayer()
 				continue;
 			if (dia->useAttributes())
 			{
-				bool useType = false;
-				bool useFill = false;
-				bool useLine = false;
-				bool useLWidth = false;
-				bool usePrint = false;
-				bool useLocked = false;
-				bool useResize = false;
-				dia->getUsedAttributes(useType, useFill, useLine, useLWidth, usePrint, useLocked, useResize);
+                useParagraphStyle = false;
+                useType = false;
+                useFill = false;
+                useLine = false;
+                useLWidth = false;
+                usePrint = false;
+                useLocked = false;
+                useResize = false;
+                dia->getUsedAttributes(useParagraphStyle, useType, useFill, useLine, useLWidth, usePrint, useLocked, useResize);
+                int ParagraphStyle = 0;
 				int Type = 0;
 				QString fill;
 				QString line;
@@ -4916,8 +4927,23 @@ void ScribusMainWindow::SelectAllOnLayer()
 				bool Print = false;
 				bool Locked = false;
 				bool Resize = false;
-				dia->getUsedAttributesValues(Type, fill, line, LWidth, Print, Locked, Resize);
+                dia->getUsedAttributesValues(ParagraphStyle, Type, fill, line, LWidth, Print, Locked, Resize);
 				LWidth = LWidth / doc->unitRatio();
+                if (useParagraphStyle) {
+                    if (ParagraphStyle < m_doc->paragraphStyles().count()) {
+                    qDebug() << QString("currItem style name contains \"%1\": %2")
+                                .arg(m_doc->paragraphStyles()[ParagraphStyle].displayName())
+                                .arg(currItem->currentStyle().displayName().contains(m_doc->paragraphStyles()[ParagraphStyle].displayName()));
+                    }
+                    // Greedy match for paragraph style name, for now
+                    if (ParagraphStyle < m_doc->paragraphStyles().count() &&
+                        !currItem->currentStyle().displayName().contains(m_doc->paragraphStyles()[ParagraphStyle].displayName())
+                        )
+                    {
+                        currItem->setFillColor("Black");
+                        continue;
+                    }
+                }
 				if (useType && (Type != currItem->realItemType()))
 					continue;
 				if (useFill && ((fill != currItem->fillColor()) || (currItem->GrType != 0)))
@@ -4939,8 +4965,8 @@ void ScribusMainWindow::SelectAllOnLayer()
 		}
 	}
 	doc->m_Selection->delaySignalsOff();
-	if (doc->m_Selection->count() > 1)
-		doc->m_Selection->setGroupRect();
+    if (doc->m_Selection->count() > 1 && !useParagraphStyle)
+        //doc->m_Selection->setGroupRect();
 	view->DrawNew();
 }
 
diff --git a/scribus/scribusdoc.cpp b/scribus/scribusdoc.cpp
index d5dc3c2..878b685 100644
--- a/scribus/scribusdoc.cpp
+++ b/scribus/scribusdoc.cpp
@@ -1059,7 +1059,7 @@ bool ScribusDoc::charStyleExists(const QString& styleName) const
 	return m_docCharStyles.contains(styleName);
 }
 
-QList<int> ScribusDoc::getSortedStyleList() const
+QList<int> ScribusDoc::getSortedParagraphStyleList() const
 {
 	QList<int> retList;
 	for (int i = 0; i < m_docParagraphStyles.count(); ++i)
diff --git a/scribus/scribusdoc.h b/scribus/scribusdoc.h
index 3891138..a6ce362 100644
--- a/scribus/scribusdoc.h
+++ b/scribus/scribusdoc.h
@@ -637,7 +637,7 @@ public:
 	bool styleExists(const QString& styleName) const;
 	bool charStyleExists(const QString& styleName) const;
 	
-	QList<int> getSortedStyleList() const;
+    QList<int> getSortedParagraphStyleList() const;
 	QList<int> getSortedCharStyleList() const;
 	QList<int> getSortedTableStyleList() const;
 	QList<int> getSortedCellStyleList() const;
diff --git a/scribus/selection.cpp b/scribus/selection.cpp
index 678568a..4b559c9 100644
--- a/scribus/selection.cpp
+++ b/scribus/selection.cpp
@@ -187,7 +187,7 @@ bool Selection::addItem(PageItem *item, bool /*ignoreGUI*/)
 			item->setSelected(true);
 			m_sigSelectionChanged = true;
 		}
-		sendSignals();
+        //sendSignals();
 		return true;
 	}
 	return false;
@@ -621,7 +621,7 @@ void Selection::sendSignals(bool guiConnect)
 {
 	if (m_isGUISelection && (m_delaySignals <= 0))
 	{
-		setGroupRect();
+        setGroupRect();
 		// JG - We should probably add an m_sigSelectionChanged here
 		// to avoid multiple connectItemToGUI() if sendSignals() is called 
 		// several times successively (but does that happen?)
diff --git a/scribus/ui/selectobjects.cpp b/scribus/ui/selectobjects.cpp
index e0b3e53..29b2276 100644
--- a/scribus/ui/selectobjects.cpp
+++ b/scribus/ui/selectobjects.cpp
@@ -28,11 +28,15 @@ for which a new license (GPL+exception) is in place.
 #include "commonstrings.h"
 #include "iconmanager.h"
 
-selectDialog::selectDialog(QWidget* parent, const ColorList &availableColors, int unitIndex) : QDialog(parent)
+selectDialog::selectDialog(QWidget* parent, ScribusDoc* document, const QList<int> &availableParagraphStyles, const ColorList &availableColors, int unitIndex) : QDialog(parent)
 {
 	setupUi(this);
 	setModal(true);
 	setWindowIcon(IconManager::instance().loadIcon("app-icon"));
+    m_paragraphStyles = availableParagraphStyles;
+    for (auto &styleId : availableParagraphStyles) {
+        paragraphStyleCombo->addItem(document->paragraphStyles()[styleId].displayName());
+    }
 	backgroundCombo->setPixmapType(ColorCombo::fancyPixmaps);
 	backgroundCombo->setColors(availableColors, true);
 	lineCombo->setPixmapType(ColorCombo::fancyPixmaps);
@@ -59,8 +63,9 @@ bool selectDialog::useAttributes() const
 	return attributeGroup->isChecked();
 }
 
-void selectDialog::getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize)
+void selectDialog::getUsedAttributes(bool &ParagraphStyle, bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize)
 {
+    ParagraphStyle = useParagraphStyle->isChecked();
 	Type = useItemType->isChecked();
 	Fill = useFillColor->isChecked();
 	Line = useLineColor->isChecked();
@@ -70,8 +75,12 @@ void selectDialog::getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &L
 	Resize = useResizeState->isChecked();
 }
 
-void selectDialog::getUsedAttributesValues(int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize)
+void selectDialog::getUsedAttributesValues(int &ParagraphStyle, int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize)
 {
+    if (useParagraphStyle->isChecked())
+    {
+        ParagraphStyle = m_paragraphStyles.at(paragraphStyleCombo->currentIndex());
+    }
 	if (useItemType->isChecked())
 	{
 		Type = itemTypeCombo->currentIndex();
diff --git a/scribus/ui/selectobjects.h b/scribus/ui/selectobjects.h
index 1d473e2..768baed 100644
--- a/scribus/ui/selectobjects.h
+++ b/scribus/ui/selectobjects.h
@@ -37,13 +37,15 @@ class SCRIBUS_API selectDialog : public QDialog, Ui::selectDialog
 	Q_OBJECT
 
 public:
-	selectDialog(QWidget* parent, const ColorList &availableColors, int unitIndex);
+    selectDialog(QWidget* parent, ScribusDoc* document, const QList<int> &availableParagraphStyles, const ColorList &availableColors, int unitIndex);
 	~selectDialog() {};
 
 	int getSelectionRange() const;
 	bool useAttributes() const;
-	void getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize);
-	void getUsedAttributesValues(int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize);
+    void getUsedAttributes(bool &ParagraphStyle, bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize);
+    void getUsedAttributesValues(int &ParagraphStyle, int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize);
+private:
+    QList<int> m_paragraphStyles;
 };
 
 #endif 
diff --git a/scribus/ui/selectobjects.ui b/scribus/ui/selectobjects.ui
index 1af2fea..ff8d6d2 100644
--- a/scribus/ui/selectobjects.ui
+++ b/scribus/ui/selectobjects.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>423</width>
-    <height>321</height>
+    <width>457</width>
+    <height>451</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -20,30 +20,30 @@
    <string>Select All Items</string>
   </property>
   <property name="modal">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout">
-   <property name="leftMargin">
-    <number>9</number>
-   </property>
-   <property name="topMargin">
-    <number>9</number>
-   </property>
-   <property name="rightMargin">
-    <number>9</number>
-   </property>
-   <property name="bottomMargin">
-    <number>9</number>
-   </property>
-   <item>
-    <widget class="QGroupBox" name="rangeGroup">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout">
+   <property name="leftMargin">
+    <number>9</number>
+   </property>
+   <property name="topMargin">
+    <number>9</number>
+   </property>
+   <property name="rightMargin">
+    <number>9</number>
+   </property>
+   <property name="bottomMargin">
+    <number>9</number>
+   </property>
+   <item>
+    <widget class="QGroupBox" name="rangeGroup">
      <property name="title">
-      <string>Select All Items</string>
-     </property>
-     <layout class="QHBoxLayout">
-      <item>
-       <widget class="QRadioButton" name="buttonCurrentPage">
-        <property name="toolTip">
+      <string>Select All Items</string>
+     </property>
+     <layout class="QHBoxLayout">
+      <item>
+       <widget class="QRadioButton" name="buttonCurrentPage">
+        <property name="toolTip">
          <string>Select all items on the current page</string>
         </property>
         <property name="text">
@@ -89,12 +89,56 @@
       <bool>true</bool>
      </property>
      <property name="checked">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="0">
-       <widget class="QCheckBox" name="useItemType">
-        <property name="toolTip">
+      <bool>false</bool>
+     </property>
+     <layout class="QGridLayout">
+      <item row="6" column="1">
+       <widget class="QComboBox" name="lockStateCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="currentIndex">
+         <number>1</number>
+        </property>
+        <item>
+         <property name="text">
+          <string>Yes</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>No</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="ColorCombo" name="backgroundCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="7" column="1">
+       <widget class="QComboBox" name="resizeStateCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <item>
+         <property name="text">
+          <string>Yes</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>No</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="useItemType">
+        <property name="toolTip">
          <string>Select based on item type</string>
         </property>
         <property name="text">
@@ -102,7 +146,34 @@
         </property>
        </widget>
       </item>
-      <item row="0" column="1">
+      <item row="5" column="1">
+       <widget class="QComboBox" name="printStateCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <item>
+         <property name="text">
+          <string>Yes</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>No</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QCheckBox" name="useFillColor">
+        <property name="toolTip">
+         <string>Select based on the color that the item is filled with</string>
+        </property>
+        <property name="text">
+         <string>Fill Color</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
        <widget class="QComboBox" name="itemTypeCombo">
         <property name="enabled">
          <bool>false</bool>
@@ -144,139 +215,85 @@
         </item>
        </widget>
       </item>
-      <item row="1" column="0">
-       <widget class="QCheckBox" name="useFillColor">
+      <item row="4" column="0">
+       <widget class="QCheckBox" name="useLineWidth">
         <property name="toolTip">
-         <string>Select based on the color that the item is filled with</string>
+         <string>Select based on the width of the line of the item</string>
         </property>
         <property name="text">
-         <string>Fill Color</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="ColorCombo" name="backgroundCombo">
-        <property name="enabled">
-         <bool>false</bool>
+         <string>Line Width</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="0">
-       <widget class="QCheckBox" name="useLineColor">
+      <item row="5" column="0">
+       <widget class="QCheckBox" name="usePrintState">
         <property name="toolTip">
-         <string>Select based on the color of the line or outline</string>
+         <string>Select items based on whether they will be printed or not</string>
         </property>
         <property name="text">
-         <string>Line Color</string>
+         <string>Printable</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="1">
+      <item row="3" column="1">
        <widget class="ColorCombo" name="lineCombo">
         <property name="enabled">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="3" column="0">
-       <widget class="QCheckBox" name="useLineWidth">
+      <item row="6" column="0">
+       <widget class="QCheckBox" name="useLockedState">
         <property name="toolTip">
-         <string>Select based on the width of the line of the item</string>
+         <string>Select items based on their locked status</string>
         </property>
         <property name="text">
-         <string>Line Width</string>
+         <string>Locked</string>
         </property>
        </widget>
       </item>
-      <item row="3" column="1">
+      <item row="4" column="1">
        <widget class="ScrSpinBox" name="lineWidthSpin">
         <property name="enabled">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="4" column="0">
-       <widget class="QCheckBox" name="usePrintState">
+      <item row="3" column="0">
+       <widget class="QCheckBox" name="useLineColor">
         <property name="toolTip">
-         <string>Select items based on whether they will be printed or not</string>
+         <string>Select based on the color of the line or outline</string>
         </property>
         <property name="text">
-         <string>Printable</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1">
-       <widget class="QComboBox" name="printStateCombo">
-        <property name="enabled">
-         <bool>false</bool>
+         <string>Line Color</string>
         </property>
-        <item>
-         <property name="text">
-          <string>Yes</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>No</string>
-         </property>
-        </item>
        </widget>
       </item>
-      <item row="5" column="0">
-       <widget class="QCheckBox" name="useLockedState">
+      <item row="7" column="0">
+       <widget class="QCheckBox" name="useResizeState">
         <property name="toolTip">
-         <string>Select items based on their locked status</string>
+         <string>Select items based on whether they have their size locked or not</string>
         </property>
         <property name="text">
-         <string>Locked</string>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="1">
-       <widget class="QComboBox" name="lockStateCombo">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-        <property name="currentIndex">
-         <number>1</number>
+         <string>Resizable</string>
         </property>
-        <item>
-         <property name="text">
-          <string>Yes</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>No</string>
-         </property>
-        </item>
        </widget>
       </item>
-      <item row="6" column="0">
-       <widget class="QCheckBox" name="useResizeState">
+      <item row="0" column="0">
+       <widget class="QCheckBox" name="useParagraphStyle">
         <property name="toolTip">
-         <string>Select items based on whether they have their size locked or not</string>
+         <string>Select based on item type</string>
         </property>
         <property name="text">
-         <string>Resizable</string>
+         <string>Paragraph Style</string>
         </property>
        </widget>
       </item>
-      <item row="6" column="1">
-       <widget class="QComboBox" name="resizeStateCombo">
+      <item row="0" column="1">
+       <widget class="QComboBox" name="paragraphStyleCombo">
         <property name="enabled">
          <bool>false</bool>
         </property>
-        <item>
-         <property name="text">
-          <string>Yes</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>No</string>
-         </property>
-        </item>
        </widget>
       </item>
      </layout>
@@ -285,10 +302,10 @@
    <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
-      <enum>Qt::Horizontal</enum>
+      <enum>Qt::Orientation::Horizontal</enum>
      </property>
      <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+      <set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
      </property>
     </widget>
    </item>
@@ -452,5 +469,21 @@
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>useParagraphStyle</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>paragraphStyleCombo</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>123</x>
+     <y>159</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>333</x>
+     <y>159</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
 </ui>
nov-17.patch (25,406 bytes)   
PatchYes

Activities

bgc

2025-11-20 03:18

reporter   ~0053285

Updated patch, seems to be working now.
nov-20.patch (28,411 bytes)   
diff --git a/scribus/CMakeLists.txt b/scribus/CMakeLists.txt
index c565798..5cf8856 100644
--- a/scribus/CMakeLists.txt
+++ b/scribus/CMakeLists.txt
@@ -147,7 +147,10 @@ else()
 endif()
 message(STATUS "Autogen Include Path: ${SCRIBUS_AUTOGEN_INCLUDE_PATH}")
 
+
+
 if(HAVE_OSG)
+
 	add_executable(${EXE_NAME}
 		${SCRIBUS_MAIN_CPP}
 		${SCRIBUS_SOURCES}
@@ -160,8 +163,9 @@ if(HAVE_OSG)
 		${SCRIBUS_WIN32_ONLY_SOURCES}
 		${GESTURE_FRAME_PREVIEW_SOURCES}
 		${SCRIBUS_PRC_SOURCES}
-	)
+ )
 else()
+
 	add_executable(${EXE_NAME}
 		${SCRIBUS_MAIN_CPP}
 		${SCRIBUS_SOURCES}
@@ -173,7 +177,7 @@ else()
 		${SCRIBUS_TEXT_SOURCES}
 		${SCRIBUS_WIN32_ONLY_SOURCES}
 		${GESTURE_FRAME_PREVIEW_SOURCES}
-	)
+ )
 endif ()
 
 if(WANT_PCH)
diff --git a/scribus/canvas.cpp b/scribus/canvas.cpp
index e3fa486..d5b99a1 100644
--- a/scribus/canvas.cpp
+++ b/scribus/canvas.cpp
@@ -983,10 +983,10 @@ void Canvas::drawContents(QPainter *psx, int clipx, int clipy, int clipw, int cl
 
 	if (!m_doc->masterPageMode())
 	{
-		drawBackgroundPageOutlines(painter, clipx, clipy, clipw, cliph);
+        drawBackgroundPageOutlines(painter, clipx, clipy, clipw, cliph);
 		m_viewMode.linkedFramesToShow.clear();
 		QRectF clip(clipx, clipy, clipw, cliph);
-		DrawPageBorder(painter, clip);
+        DrawPageBorder(painter, clip);
 		if (m_viewMode.viewAsPreview)
 		{
 			FPointArray PoLine;
diff --git a/scribus/canvasmode.cpp b/scribus/canvasmode.cpp
index b6a9c24..f561b8f 100644
--- a/scribus/canvasmode.cpp
+++ b/scribus/canvasmode.cpp
@@ -205,10 +205,10 @@ void CanvasMode::drawSelectionHandles(QPainter *psx, QRectF selectionRect, bool
 	double w = selectionRect.width();
 	double h = selectionRect.height();
 
-	QPen p = m_pen["selection-handle"];
+    QPen p = m_pen["selection-handle"];
 
 	if (insideGroup)
-		p = m_pen["selection-group-inside"];
+        p = m_pen["selection-group-inside"];
 
 	drawSelectionHandle(psx, QPointF(x, y), p, m_canvas->scale());
 	drawSelectionHandle(psx, QPointF(x + w / 2.0, y), p, m_canvas->scale());
@@ -264,30 +264,30 @@ void CanvasMode::drawSelection(QPainter* psx, bool drawHandles)
 					x = 0;
 					y = 0;
 				}
-				psx->setPen(m_pen["selection-group-inside"]);
-				psx->setBrush(m_brush["selection-group-inside"]);
-				psx->drawRect(QRectF(x, y, w, h));
+                psx->setPen(m_pen["selection-group"]);
+                psx->setBrush(m_brush["selection-group-inside"]);
+                psx->drawRect(QRectF(x, y, w, h));
 				psx->restore();
 			}
-		}
+        }
+
 		psx->save();
 		psx->setPen(m_pen["selection-group"]);
 		double x, y, w, h;
 		m_doc->m_Selection->getVisualGroupRect(&x, &y, &w, &h);
-
 		psx->translate(x,y);
 		x = 0;
 		y = 0;
-
-		psx->setPen(m_pen["selection-group"]);
+        psx->setPen(m_pen["selection-group"]);
+        psx->setPen(QPen(QBrush(Qt::green),5.0));
 		psx->setBrush(m_brush["selection-group"]);
-		psx->drawRect(QRectF(x, y, w, h));
-		if (drawHandles)
-			drawSelectionHandles(psx, QRectF(x, y, w, h));
-		psx->restore();
+        //psx->drawRect(QRectF(x, y, w, h));
+        if (drawHandles)
+            drawSelectionHandles(psx, QRectF(x, y, w, h));
+        psx->restore();
 	}
 	else if (m_doc->m_Selection->count() != 0)
-	{
+    {
 		int docSelectionCount = m_doc->m_Selection->count();
 		PageItem *currItem;
 		for (int a = 0; a < docSelectionCount; ++a)
diff --git a/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp b/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
index bb7163a..c9df02c 100644
--- a/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
+++ b/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
@@ -109,7 +109,7 @@ QString Scribus150Format::saveElements(double xp, double yp, double wp, double h
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+	styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -205,7 +205,7 @@ bool Scribus150Format::saveStory(StoryText& story, PageItem* item, QByteArray& d
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+	styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -797,7 +797,7 @@ void Scribus150Format::writeHyphenatorLists(ScXmlStreamWriter& docu) const
 
 void Scribus150Format::writeParagraphStyles(ScXmlStreamWriter & docu) const
 {
-	QList<int> styleList = m_Doc->getSortedStyleList();
+	QList<int> styleList = m_Doc->getSortedParagraphStyleList();
 	for (int a = 0; a < styleList.count(); ++a)
 	{
 		putPStyle(docu, m_Doc->paragraphStyles()[styleList[a]], "STYLE");
diff --git a/scribus/plugins/fileloader/scribus170format/scribus170format_save.cpp b/scribus/plugins/fileloader/scribus170format/scribus170format_save.cpp
index 93435b7..d4f75d7 100644
--- a/scribus/plugins/fileloader/scribus170format/scribus170format_save.cpp
+++ b/scribus/plugins/fileloader/scribus170format/scribus170format_save.cpp
@@ -109,7 +109,7 @@ QString Scribus170Format::saveElements(double xp, double yp, double wp, double h
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+	styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -205,7 +205,7 @@ bool Scribus170Format::saveStory(StoryText& story, PageItem* item, QByteArray& d
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+	styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -799,7 +799,7 @@ void Scribus170Format::writeHyphenatorLists(ScXmlStreamWriter& docu) const
 
 void Scribus170Format::writeParagraphStyles(ScXmlStreamWriter & docu) const
 {
-	QList<int> styleList = m_Doc->getSortedStyleList();
+	QList<int> styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		putPStyle(docu, m_Doc->paragraphStyles()[styleList[i]], "STYLE");
diff --git a/scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp b/scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp
index ea195db..943930d 100644
--- a/scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp
+++ b/scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp
@@ -109,7 +109,7 @@ QString Scribus171Format::saveElements(double xp, double yp, double wp, double h
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+    styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -205,7 +205,7 @@ bool Scribus171Format::saveStory(StoryText& story, PageItem* item, QByteArray& d
 
 	// Write paragraph styles
 	names = lists.styleNames();
-	styleList = m_Doc->getSortedStyleList();
+    styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		const ParagraphStyle& paragraphStyle = m_Doc->paragraphStyles()[styleList[i]];
@@ -794,7 +794,7 @@ void Scribus171Format::writeHyphenatorLists(ScXmlStreamWriter& docu) const
 
 void Scribus171Format::writeParagraphStyles(ScXmlStreamWriter & docu) const
 {
-	QList<int> styleList = m_Doc->getSortedStyleList();
+    QList<int> styleList = m_Doc->getSortedParagraphStyleList();
 	for (int i = 0; i < styleList.count(); ++i)
 	{
 		putPStyle(docu, m_Doc->paragraphStyles()[styleList[i]], "ParagraphStyle");
diff --git a/scribus/scribus.cpp b/scribus/scribus.cpp
index c1457a8..e93a6ca 100644
--- a/scribus/scribus.cpp
+++ b/scribus/scribus.cpp
@@ -2019,7 +2019,7 @@ void ScribusMainWindow::startUpDialog()
 {
 	bool docSet = false;
 	PrefsContext* docContext = m_prefsManager.prefsFile->getContext("docdirs", false);
-	NewDocDialog* dia = new NewDocDialog(this, m_recentDocsList, true, ScCore->getGuiLanguage());
+    NewDocDialog* dia = new NewDocDialog(this, m_recentDocsList, true, ScCore->getGuiLanguage());
 	if (dia->exec())
 	{
 		if (dia->tabSelected() == NewDocDialog::NewDocumentTab)
@@ -4879,17 +4879,25 @@ void ScribusMainWindow::slotEditPastePlainText()
 void ScribusMainWindow::SelectAllOnLayer()
 {
 	ColorList UsedC;
-	doc->getUsedColors(UsedC);
-	QScopedPointer<selectDialog> dia(new selectDialog(this, UsedC, doc->unitIndex()));
+    doc->getUsedColors(UsedC);
+    QScopedPointer<selectDialog> dia(new selectDialog(this, doc, doc->getSortedParagraphStyleList(), UsedC, doc->unitIndex()));
 	if (!dia->exec())
 		return;
-
 	PageItem *currItem;
 	view->deselectItems();
 	int docItemsCount = doc->Items->count();
 	int docCurrentPage = doc->currentPageNumber();
 	doc->m_Selection->delaySignalsOn();
 	int range = dia->getSelectionRange();
+    // Attribute flags
+    bool useParagraphStyle = false;
+    bool useType = false;
+    bool useFill = false;
+    bool useLine = false;
+    bool useLWidth = false;
+    bool usePrint = false;
+    bool useLocked = false;
+    bool useResize = false;
 	for (int i = 0; i < docItemsCount; ++i)
 	{
 		currItem = doc->Items->at(i);
@@ -4901,14 +4909,16 @@ void ScribusMainWindow::SelectAllOnLayer()
 				continue;
 			if (dia->useAttributes())
 			{
-				bool useType = false;
-				bool useFill = false;
-				bool useLine = false;
-				bool useLWidth = false;
-				bool usePrint = false;
-				bool useLocked = false;
-				bool useResize = false;
-				dia->getUsedAttributes(useType, useFill, useLine, useLWidth, usePrint, useLocked, useResize);
+                useParagraphStyle = false;
+                useType = false;
+                useFill = false;
+                useLine = false;
+                useLWidth = false;
+                usePrint = false;
+                useLocked = false;
+                useResize = false;
+                dia->getUsedAttributes(useParagraphStyle, useType, useFill, useLine, useLWidth, usePrint, useLocked, useResize);
+                int ParagraphStyle = 0;
 				int Type = 0;
 				QString fill;
 				QString line;
@@ -4916,8 +4926,19 @@ void ScribusMainWindow::SelectAllOnLayer()
 				bool Print = false;
 				bool Locked = false;
 				bool Resize = false;
-				dia->getUsedAttributesValues(Type, fill, line, LWidth, Print, Locked, Resize);
+                dia->getUsedAttributesValues(ParagraphStyle, Type, fill, line, LWidth, Print, Locked, Resize);
 				LWidth = LWidth / doc->unitRatio();
+                if (useParagraphStyle) {
+                    // Greedy match for paragraph style name, for now
+                    // m_doc isn't current; use doc
+                    if (ParagraphStyle < doc->paragraphStyles().count() &&
+                        !currItem->currentStyle().displayName().contains(doc->paragraphStyles()[ParagraphStyle].displayName())
+                        )
+                    {
+                        //currItem->setFillColor("Black");
+                        continue;
+                    }
+                }
 				if (useType && (Type != currItem->realItemType()))
 					continue;
 				if (useFill && ((fill != currItem->fillColor()) || (currItem->GrType != 0)))
@@ -4939,8 +4960,9 @@ void ScribusMainWindow::SelectAllOnLayer()
 		}
 	}
 	doc->m_Selection->delaySignalsOff();
-	if (doc->m_Selection->count() > 1)
-		doc->m_Selection->setGroupRect();
+    if (doc->m_Selection->count() > 1) {
+        doc->m_Selection->setGroupRect();
+    }
 	view->DrawNew();
 }
 
diff --git a/scribus/scribusdoc.cpp b/scribus/scribusdoc.cpp
index d5dc3c2..878b685 100644
--- a/scribus/scribusdoc.cpp
+++ b/scribus/scribusdoc.cpp
@@ -1059,7 +1059,7 @@ bool ScribusDoc::charStyleExists(const QString& styleName) const
 	return m_docCharStyles.contains(styleName);
 }
 
-QList<int> ScribusDoc::getSortedStyleList() const
+QList<int> ScribusDoc::getSortedParagraphStyleList() const
 {
 	QList<int> retList;
 	for (int i = 0; i < m_docParagraphStyles.count(); ++i)
diff --git a/scribus/scribusdoc.h b/scribus/scribusdoc.h
index 3891138..a6ce362 100644
--- a/scribus/scribusdoc.h
+++ b/scribus/scribusdoc.h
@@ -637,7 +637,7 @@ public:
 	bool styleExists(const QString& styleName) const;
 	bool charStyleExists(const QString& styleName) const;
 	
-	QList<int> getSortedStyleList() const;
+    QList<int> getSortedParagraphStyleList() const;
 	QList<int> getSortedCharStyleList() const;
 	QList<int> getSortedTableStyleList() const;
 	QList<int> getSortedCellStyleList() const;
diff --git a/scribus/selection.cpp b/scribus/selection.cpp
index 678568a..4b559c9 100644
--- a/scribus/selection.cpp
+++ b/scribus/selection.cpp
@@ -187,7 +187,7 @@ bool Selection::addItem(PageItem *item, bool /*ignoreGUI*/)
 			item->setSelected(true);
 			m_sigSelectionChanged = true;
 		}
-		sendSignals();
+        //sendSignals();
 		return true;
 	}
 	return false;
@@ -621,7 +621,7 @@ void Selection::sendSignals(bool guiConnect)
 {
 	if (m_isGUISelection && (m_delaySignals <= 0))
 	{
-		setGroupRect();
+        setGroupRect();
 		// JG - We should probably add an m_sigSelectionChanged here
 		// to avoid multiple connectItemToGUI() if sendSignals() is called 
 		// several times successively (but does that happen?)
diff --git a/scribus/ui/selectobjects.cpp b/scribus/ui/selectobjects.cpp
index e0b3e53..29b2276 100644
--- a/scribus/ui/selectobjects.cpp
+++ b/scribus/ui/selectobjects.cpp
@@ -28,11 +28,15 @@ for which a new license (GPL+exception) is in place.
 #include "commonstrings.h"
 #include "iconmanager.h"
 
-selectDialog::selectDialog(QWidget* parent, const ColorList &availableColors, int unitIndex) : QDialog(parent)
+selectDialog::selectDialog(QWidget* parent, ScribusDoc* document, const QList<int> &availableParagraphStyles, const ColorList &availableColors, int unitIndex) : QDialog(parent)
 {
 	setupUi(this);
 	setModal(true);
 	setWindowIcon(IconManager::instance().loadIcon("app-icon"));
+    m_paragraphStyles = availableParagraphStyles;
+    for (auto &styleId : availableParagraphStyles) {
+        paragraphStyleCombo->addItem(document->paragraphStyles()[styleId].displayName());
+    }
 	backgroundCombo->setPixmapType(ColorCombo::fancyPixmaps);
 	backgroundCombo->setColors(availableColors, true);
 	lineCombo->setPixmapType(ColorCombo::fancyPixmaps);
@@ -59,8 +63,9 @@ bool selectDialog::useAttributes() const
 	return attributeGroup->isChecked();
 }
 
-void selectDialog::getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize)
+void selectDialog::getUsedAttributes(bool &ParagraphStyle, bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize)
 {
+    ParagraphStyle = useParagraphStyle->isChecked();
 	Type = useItemType->isChecked();
 	Fill = useFillColor->isChecked();
 	Line = useLineColor->isChecked();
@@ -70,8 +75,12 @@ void selectDialog::getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &L
 	Resize = useResizeState->isChecked();
 }
 
-void selectDialog::getUsedAttributesValues(int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize)
+void selectDialog::getUsedAttributesValues(int &ParagraphStyle, int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize)
 {
+    if (useParagraphStyle->isChecked())
+    {
+        ParagraphStyle = m_paragraphStyles.at(paragraphStyleCombo->currentIndex());
+    }
 	if (useItemType->isChecked())
 	{
 		Type = itemTypeCombo->currentIndex();
diff --git a/scribus/ui/selectobjects.h b/scribus/ui/selectobjects.h
index 1d473e2..768baed 100644
--- a/scribus/ui/selectobjects.h
+++ b/scribus/ui/selectobjects.h
@@ -37,13 +37,15 @@ class SCRIBUS_API selectDialog : public QDialog, Ui::selectDialog
 	Q_OBJECT
 
 public:
-	selectDialog(QWidget* parent, const ColorList &availableColors, int unitIndex);
+    selectDialog(QWidget* parent, ScribusDoc* document, const QList<int> &availableParagraphStyles, const ColorList &availableColors, int unitIndex);
 	~selectDialog() {};
 
 	int getSelectionRange() const;
 	bool useAttributes() const;
-	void getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize);
-	void getUsedAttributesValues(int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize);
+    void getUsedAttributes(bool &ParagraphStyle, bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize);
+    void getUsedAttributesValues(int &ParagraphStyle, int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize);
+private:
+    QList<int> m_paragraphStyles;
 };
 
 #endif 
diff --git a/scribus/ui/selectobjects.ui b/scribus/ui/selectobjects.ui
index 1af2fea..ff8d6d2 100644
--- a/scribus/ui/selectobjects.ui
+++ b/scribus/ui/selectobjects.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>423</width>
-    <height>321</height>
+    <width>457</width>
+    <height>451</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -20,30 +20,30 @@
    <string>Select All Items</string>
   </property>
   <property name="modal">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout">
-   <property name="leftMargin">
-    <number>9</number>
-   </property>
-   <property name="topMargin">
-    <number>9</number>
-   </property>
-   <property name="rightMargin">
-    <number>9</number>
-   </property>
-   <property name="bottomMargin">
-    <number>9</number>
-   </property>
-   <item>
-    <widget class="QGroupBox" name="rangeGroup">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout">
+   <property name="leftMargin">
+    <number>9</number>
+   </property>
+   <property name="topMargin">
+    <number>9</number>
+   </property>
+   <property name="rightMargin">
+    <number>9</number>
+   </property>
+   <property name="bottomMargin">
+    <number>9</number>
+   </property>
+   <item>
+    <widget class="QGroupBox" name="rangeGroup">
      <property name="title">
-      <string>Select All Items</string>
-     </property>
-     <layout class="QHBoxLayout">
-      <item>
-       <widget class="QRadioButton" name="buttonCurrentPage">
-        <property name="toolTip">
+      <string>Select All Items</string>
+     </property>
+     <layout class="QHBoxLayout">
+      <item>
+       <widget class="QRadioButton" name="buttonCurrentPage">
+        <property name="toolTip">
          <string>Select all items on the current page</string>
         </property>
         <property name="text">
@@ -89,12 +89,56 @@
       <bool>true</bool>
      </property>
      <property name="checked">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="0">
-       <widget class="QCheckBox" name="useItemType">
-        <property name="toolTip">
+      <bool>false</bool>
+     </property>
+     <layout class="QGridLayout">
+      <item row="6" column="1">
+       <widget class="QComboBox" name="lockStateCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="currentIndex">
+         <number>1</number>
+        </property>
+        <item>
+         <property name="text">
+          <string>Yes</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>No</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="ColorCombo" name="backgroundCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="7" column="1">
+       <widget class="QComboBox" name="resizeStateCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <item>
+         <property name="text">
+          <string>Yes</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>No</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="useItemType">
+        <property name="toolTip">
          <string>Select based on item type</string>
         </property>
         <property name="text">
@@ -102,7 +146,34 @@
         </property>
        </widget>
       </item>
-      <item row="0" column="1">
+      <item row="5" column="1">
+       <widget class="QComboBox" name="printStateCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <item>
+         <property name="text">
+          <string>Yes</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>No</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QCheckBox" name="useFillColor">
+        <property name="toolTip">
+         <string>Select based on the color that the item is filled with</string>
+        </property>
+        <property name="text">
+         <string>Fill Color</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
        <widget class="QComboBox" name="itemTypeCombo">
         <property name="enabled">
          <bool>false</bool>
@@ -144,139 +215,85 @@
         </item>
        </widget>
       </item>
-      <item row="1" column="0">
-       <widget class="QCheckBox" name="useFillColor">
+      <item row="4" column="0">
+       <widget class="QCheckBox" name="useLineWidth">
         <property name="toolTip">
-         <string>Select based on the color that the item is filled with</string>
+         <string>Select based on the width of the line of the item</string>
         </property>
         <property name="text">
-         <string>Fill Color</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="ColorCombo" name="backgroundCombo">
-        <property name="enabled">
-         <bool>false</bool>
+         <string>Line Width</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="0">
-       <widget class="QCheckBox" name="useLineColor">
+      <item row="5" column="0">
+       <widget class="QCheckBox" name="usePrintState">
         <property name="toolTip">
-         <string>Select based on the color of the line or outline</string>
+         <string>Select items based on whether they will be printed or not</string>
         </property>
         <property name="text">
-         <string>Line Color</string>
+         <string>Printable</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="1">
+      <item row="3" column="1">
        <widget class="ColorCombo" name="lineCombo">
         <property name="enabled">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="3" column="0">
-       <widget class="QCheckBox" name="useLineWidth">
+      <item row="6" column="0">
+       <widget class="QCheckBox" name="useLockedState">
         <property name="toolTip">
-         <string>Select based on the width of the line of the item</string>
+         <string>Select items based on their locked status</string>
         </property>
         <property name="text">
-         <string>Line Width</string>
+         <string>Locked</string>
         </property>
        </widget>
       </item>
-      <item row="3" column="1">
+      <item row="4" column="1">
        <widget class="ScrSpinBox" name="lineWidthSpin">
         <property name="enabled">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="4" column="0">
-       <widget class="QCheckBox" name="usePrintState">
+      <item row="3" column="0">
+       <widget class="QCheckBox" name="useLineColor">
         <property name="toolTip">
-         <string>Select items based on whether they will be printed or not</string>
+         <string>Select based on the color of the line or outline</string>
         </property>
         <property name="text">
-         <string>Printable</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1">
-       <widget class="QComboBox" name="printStateCombo">
-        <property name="enabled">
-         <bool>false</bool>
+         <string>Line Color</string>
         </property>
-        <item>
-         <property name="text">
-          <string>Yes</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>No</string>
-         </property>
-        </item>
        </widget>
       </item>
-      <item row="5" column="0">
-       <widget class="QCheckBox" name="useLockedState">
+      <item row="7" column="0">
+       <widget class="QCheckBox" name="useResizeState">
         <property name="toolTip">
-         <string>Select items based on their locked status</string>
+         <string>Select items based on whether they have their size locked or not</string>
         </property>
         <property name="text">
-         <string>Locked</string>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="1">
-       <widget class="QComboBox" name="lockStateCombo">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-        <property name="currentIndex">
-         <number>1</number>
+         <string>Resizable</string>
         </property>
-        <item>
-         <property name="text">
-          <string>Yes</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>No</string>
-         </property>
-        </item>
        </widget>
       </item>
-      <item row="6" column="0">
-       <widget class="QCheckBox" name="useResizeState">
+      <item row="0" column="0">
+       <widget class="QCheckBox" name="useParagraphStyle">
         <property name="toolTip">
-         <string>Select items based on whether they have their size locked or not</string>
+         <string>Select based on item type</string>
         </property>
         <property name="text">
-         <string>Resizable</string>
+         <string>Paragraph Style</string>
         </property>
        </widget>
       </item>
-      <item row="6" column="1">
-       <widget class="QComboBox" name="resizeStateCombo">
+      <item row="0" column="1">
+       <widget class="QComboBox" name="paragraphStyleCombo">
         <property name="enabled">
          <bool>false</bool>
         </property>
-        <item>
-         <property name="text">
-          <string>Yes</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>No</string>
-         </property>
-        </item>
        </widget>
       </item>
      </layout>
@@ -285,10 +302,10 @@
    <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
-      <enum>Qt::Horizontal</enum>
+      <enum>Qt::Orientation::Horizontal</enum>
      </property>
      <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+      <set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
      </property>
     </widget>
    </item>
@@ -452,5 +469,21 @@
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>useParagraphStyle</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>paragraphStyleCombo</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>123</x>
+     <y>159</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>333</x>
+     <y>159</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
 </ui>
nov-20.patch (28,411 bytes)   

ale

2025-11-20 07:36

manager   ~0053287

Four "style" comments:

- in your patch your including formatting changes to a file that is not related to the feature (CMakeLists.txt)
- for the Scribus code, you need to use tabs for indenting, not spaces
- don't comment out lines of code, just remove them.
- in the Scribus code, braces are alway on their own line (sadly, the team tends to prefer that and then leave out braces for single line bodies)

bgc

2025-11-20 09:21

reporter   ~0053288

Alright. I can write another patch to follow those suggestions.

bgc

2025-11-21 03:29

reporter   ~0053293

Updated patch, following suggestions by ale.
nov-21.patch (15,941 bytes)   
diff --git a/scribus/scribus.cpp b/scribus/scribus.cpp
index fb61617..5505d87 100644
--- a/scribus/scribus.cpp
+++ b/scribus/scribus.cpp
@@ -4880,7 +4880,7 @@ void ScribusMainWindow::SelectAllOnLayer()
 {
 	ColorList UsedC;
 	doc->getUsedColors(UsedC);
-	QScopedPointer<selectDialog> dia(new selectDialog(this, UsedC, doc->unitIndex()));
+	QScopedPointer<selectDialog> dia(new selectDialog(this, doc, UsedC, doc->unitIndex()));
 	if (!dia->exec())
 		return;
 
@@ -4901,6 +4901,7 @@ void ScribusMainWindow::SelectAllOnLayer()
 				continue;
 			if (dia->useAttributes())
 			{
+				bool useParagraphStyle = false;
 				bool useType = false;
 				bool useFill = false;
 				bool useLine = false;
@@ -4908,7 +4909,8 @@ void ScribusMainWindow::SelectAllOnLayer()
 				bool usePrint = false;
 				bool useLocked = false;
 				bool useResize = false;
-				dia->getUsedAttributes(useType, useFill, useLine, useLWidth, usePrint, useLocked, useResize);
+				dia->getUsedAttributes(useParagraphStyle, useType, useFill, useLine, useLWidth, usePrint, useLocked, useResize);
+				int ParagraphStyle = 0;
 				int Type = 0;
 				QString fill;
 				QString line;
@@ -4916,8 +4918,12 @@ void ScribusMainWindow::SelectAllOnLayer()
 				bool Print = false;
 				bool Locked = false;
 				bool Resize = false;
-				dia->getUsedAttributesValues(Type, fill, line, LWidth, Print, Locked, Resize);
+				dia->getUsedAttributesValues(ParagraphStyle, Type, fill, line, LWidth, Print, Locked, Resize);
 				LWidth = LWidth / doc->unitRatio();
+				if (useParagraphStyle
+						&& ParagraphStyle < doc->paragraphStyles().count()
+						&& !currItem->currentStyle().displayName().contains(doc->paragraphStyles()[ParagraphStyle].displayName()))
+					continue;
 				if (useType && (Type != currItem->realItemType()))
 					continue;
 				if (useFill && ((fill != currItem->fillColor()) || (currItem->GrType != 0)))
diff --git a/scribus/ui/selectobjects.cpp b/scribus/ui/selectobjects.cpp
index e0b3e53..d7fe174 100644
--- a/scribus/ui/selectobjects.cpp
+++ b/scribus/ui/selectobjects.cpp
@@ -28,11 +28,16 @@ for which a new license (GPL+exception) is in place.
 #include "commonstrings.h"
 #include "iconmanager.h"
 
-selectDialog::selectDialog(QWidget* parent, const ColorList &availableColors, int unitIndex) : QDialog(parent)
+selectDialog::selectDialog(QWidget* parent, ScribusDoc* document, const ColorList &availableColors, int unitIndex) : QDialog(parent)
 {
 	setupUi(this);
 	setModal(true);
 	setWindowIcon(IconManager::instance().loadIcon("app-icon"));
+	m_paragraphStyles = document->getSortedStyleList();
+	for (auto &styleId : m_paragraphStyles)
+	{
+		paragraphStyleCombo->addItem(document->paragraphStyles()[styleId].displayName());
+	}
 	backgroundCombo->setPixmapType(ColorCombo::fancyPixmaps);
 	backgroundCombo->setColors(availableColors, true);
 	lineCombo->setPixmapType(ColorCombo::fancyPixmaps);
@@ -59,8 +64,9 @@ bool selectDialog::useAttributes() const
 	return attributeGroup->isChecked();
 }
 
-void selectDialog::getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize)
+void selectDialog::getUsedAttributes(bool &ParagraphStyle, bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize)
 {
+	ParagraphStyle = useParagraphStyle->isChecked();
 	Type = useItemType->isChecked();
 	Fill = useFillColor->isChecked();
 	Line = useLineColor->isChecked();
@@ -70,8 +76,12 @@ void selectDialog::getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &L
 	Resize = useResizeState->isChecked();
 }
 
-void selectDialog::getUsedAttributesValues(int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize)
+void selectDialog::getUsedAttributesValues(int &ParagraphStyle, int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize)
 {
+	if (useParagraphStyle->isChecked())
+	{
+		ParagraphStyle = m_paragraphStyles.at(paragraphStyleCombo->currentIndex());
+	}
 	if (useItemType->isChecked())
 	{
 		Type = itemTypeCombo->currentIndex();
diff --git a/scribus/ui/selectobjects.h b/scribus/ui/selectobjects.h
index 1d473e2..68df73f 100644
--- a/scribus/ui/selectobjects.h
+++ b/scribus/ui/selectobjects.h
@@ -37,13 +37,15 @@ class SCRIBUS_API selectDialog : public QDialog, Ui::selectDialog
 	Q_OBJECT
 
 public:
-	selectDialog(QWidget* parent, const ColorList &availableColors, int unitIndex);
+	selectDialog(QWidget* parent, ScribusDoc* document, const ColorList &availableColors, int unitIndex);
 	~selectDialog() {};
 
 	int getSelectionRange() const;
 	bool useAttributes() const;
-	void getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize);
-	void getUsedAttributesValues(int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize);
+	void getUsedAttributes(bool &ParagraphStyle, bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize);
+	void getUsedAttributesValues(int &ParagraphStyle, int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize);
+private:
+	QList<int> m_paragraphStyles;
 };
 
 #endif 
diff --git a/scribus/ui/selectobjects.ui b/scribus/ui/selectobjects.ui
index 1af2fea..6760999 100644
--- a/scribus/ui/selectobjects.ui
+++ b/scribus/ui/selectobjects.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>423</width>
-    <height>321</height>
+    <width>457</width>
+    <height>388</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -20,30 +20,30 @@
    <string>Select All Items</string>
   </property>
   <property name="modal">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout">
-   <property name="leftMargin">
-    <number>9</number>
-   </property>
-   <property name="topMargin">
-    <number>9</number>
-   </property>
-   <property name="rightMargin">
-    <number>9</number>
-   </property>
-   <property name="bottomMargin">
-    <number>9</number>
-   </property>
-   <item>
-    <widget class="QGroupBox" name="rangeGroup">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout">
+   <property name="leftMargin">
+    <number>9</number>
+   </property>
+   <property name="topMargin">
+    <number>9</number>
+   </property>
+   <property name="rightMargin">
+    <number>9</number>
+   </property>
+   <property name="bottomMargin">
+    <number>9</number>
+   </property>
+   <item>
+    <widget class="QGroupBox" name="rangeGroup">
      <property name="title">
-      <string>Select All Items</string>
-     </property>
-     <layout class="QHBoxLayout">
-      <item>
-       <widget class="QRadioButton" name="buttonCurrentPage">
-        <property name="toolTip">
+      <string>Select All Items</string>
+     </property>
+     <layout class="QHBoxLayout">
+      <item>
+       <widget class="QRadioButton" name="buttonCurrentPage">
+        <property name="toolTip">
          <string>Select all items on the current page</string>
         </property>
         <property name="text">
@@ -89,20 +89,88 @@
       <bool>true</bool>
      </property>
      <property name="checked">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="0">
-       <widget class="QCheckBox" name="useItemType">
-        <property name="toolTip">
-         <string>Select based on item type</string>
+      <bool>false</bool>
+     </property>
+     <layout class="QGridLayout">
+      <item row="2" column="1">
+       <widget class="ColorCombo" name="backgroundCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="6" column="0">
+       <widget class="QCheckBox" name="useLockedState">
+        <property name="toolTip">
+         <string>Select items based on their locked status</string>
         </property>
         <property name="text">
-         <string>Item Type</string>
+         <string>Locked</string>
         </property>
        </widget>
       </item>
-      <item row="0" column="1">
+      <item row="5" column="0">
+       <widget class="QCheckBox" name="usePrintState">
+        <property name="toolTip">
+         <string>Select items based on whether they will be printed or not</string>
+        </property>
+        <property name="text">
+         <string>Printable</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="1">
+       <widget class="ScrSpinBox" name="lineWidthSpin">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0">
+       <widget class="QCheckBox" name="useLineWidth">
+        <property name="toolTip">
+         <string>Select based on the width of the line of the item</string>
+        </property>
+        <property name="text">
+         <string>Line Width</string>
+        </property>
+       </widget>
+      </item>
+      <item row="7" column="1">
+       <widget class="QComboBox" name="resizeStateCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <item>
+         <property name="text">
+          <string>Yes</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>No</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="5" column="1">
+       <widget class="QComboBox" name="printStateCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <item>
+         <property name="text">
+          <string>Yes</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>No</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="1" column="1">
        <widget class="QComboBox" name="itemTypeCombo">
         <property name="enabled">
          <bool>false</bool>
@@ -144,24 +212,24 @@
         </item>
        </widget>
       </item>
-      <item row="1" column="0">
-       <widget class="QCheckBox" name="useFillColor">
+      <item row="7" column="0">
+       <widget class="QCheckBox" name="useResizeState">
         <property name="toolTip">
-         <string>Select based on the color that the item is filled with</string>
+         <string>Select items based on whether they have their size locked or not</string>
         </property>
         <property name="text">
-         <string>Fill Color</string>
+         <string>Resizable</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="1">
-       <widget class="ColorCombo" name="backgroundCombo">
+      <item row="3" column="1">
+       <widget class="ColorCombo" name="lineCombo">
         <property name="enabled">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="0">
+      <item row="3" column="0">
        <widget class="QCheckBox" name="useLineColor">
         <property name="toolTip">
          <string>Select based on the color of the line or outline</string>
@@ -171,68 +239,27 @@
         </property>
        </widget>
       </item>
-      <item row="2" column="1">
-       <widget class="ColorCombo" name="lineCombo">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0">
-       <widget class="QCheckBox" name="useLineWidth">
-        <property name="toolTip">
-         <string>Select based on the width of the line of the item</string>
-        </property>
-        <property name="text">
-         <string>Line Width</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="1">
-       <widget class="ScrSpinBox" name="lineWidthSpin">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="0">
-       <widget class="QCheckBox" name="usePrintState">
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="useItemType">
         <property name="toolTip">
-         <string>Select items based on whether they will be printed or not</string>
+         <string>Select based on item type</string>
         </property>
         <property name="text">
-         <string>Printable</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1">
-       <widget class="QComboBox" name="printStateCombo">
-        <property name="enabled">
-         <bool>false</bool>
+         <string>Item Type</string>
         </property>
-        <item>
-         <property name="text">
-          <string>Yes</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>No</string>
-         </property>
-        </item>
        </widget>
       </item>
-      <item row="5" column="0">
-       <widget class="QCheckBox" name="useLockedState">
+      <item row="2" column="0">
+       <widget class="QCheckBox" name="useFillColor">
         <property name="toolTip">
-         <string>Select items based on their locked status</string>
+         <string>Select based on the color that the item is filled with</string>
         </property>
         <property name="text">
-         <string>Locked</string>
+         <string>Fill Color</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="1">
+      <item row="6" column="1">
        <widget class="QComboBox" name="lockStateCombo">
         <property name="enabled">
          <bool>false</bool>
@@ -252,31 +279,21 @@
         </item>
        </widget>
       </item>
-      <item row="6" column="0">
-       <widget class="QCheckBox" name="useResizeState">
+      <item row="0" column="0">
+       <widget class="QCheckBox" name="useParagraphStyle">
         <property name="toolTip">
-         <string>Select items based on whether they have their size locked or not</string>
+         <string>Select based on item type</string>
         </property>
         <property name="text">
-         <string>Resizable</string>
+         <string>Paragraph Style</string>
         </property>
        </widget>
       </item>
-      <item row="6" column="1">
-       <widget class="QComboBox" name="resizeStateCombo">
+      <item row="0" column="1">
+       <widget class="QComboBox" name="paragraphStyleCombo">
         <property name="enabled">
          <bool>false</bool>
         </property>
-        <item>
-         <property name="text">
-          <string>Yes</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>No</string>
-         </property>
-        </item>
        </widget>
       </item>
      </layout>
@@ -285,10 +302,10 @@
    <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
-      <enum>Qt::Horizontal</enum>
+      <enum>Qt::Orientation::Horizontal</enum>
      </property>
      <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+      <set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
      </property>
     </widget>
    </item>
@@ -452,5 +469,21 @@
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>useParagraphStyle</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>paragraphStyleCombo</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>123</x>
+     <y>127</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>333</x>
+     <y>127</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
 </ui>
nov-21.patch (15,941 bytes)   

ale

2025-11-21 20:45

manager   ~0053294

Looks better : - )
... Or more conform.

I read through your patch and my first impression is good.

But there are two things that make we wonder:

- What do you mean by "I wanted to have separate selection boxes for each item, but I don't understand how the overall selection box is created."?
- What is the use case for the feature? What is the action, after having selected all the items containing a specific paragraph style?

bgc

2025-11-21 21:55

reporter   ~0053295

It was my misunderstanding: it was because the "selection-group-inside" brush and pen weren't very visible, and I thought there was something wrong with the selection functionality. I still don't fully understand how selection works, but I'm confident it is working as it should be.

I think this would be useful for selecting multiple objects, when "Search/Replace" is unavailable, and for moving objects onto another layer. I've tested my changes with output generated by the calendar generator script, and it puts the elements on the same layer, except for the image frames.

This could be improved by matching against separate attributes on objects, but this may be out of scope.

bgc

2025-11-29 03:14

reporter   ~0053310

I noticed that when trying to reapply the previous patch on a clean working tree, there was an error (problem merging selectobjects.ui).
When building, I also had to run uic manually, as it wasn't being done at build time:

for ui_file in `find . -name "*.ui" -print`; do
    /usr/lib/qt6/uic -o `echo $ui_file | perl -pe 's/^(.+\/)(\w+)(?:\.ui)$/$1ui_$2.h/p'` $ui_file
done

The attached patch should fix that error now.
nov-29.patch (16,429 bytes)   
diff --git a/scribus/scribus.cpp b/scribus/scribus.cpp
index 668cba7..b147c87 100644
--- a/scribus/scribus.cpp
+++ b/scribus/scribus.cpp
@@ -4876,7 +4876,7 @@ void ScribusMainWindow::SelectAllOnLayer()
 {
 	ColorList UsedC;
 	doc->getUsedColors(UsedC);
-	QScopedPointer<selectDialog> dia(new selectDialog(this, UsedC, doc->unitIndex()));
+	QScopedPointer<selectDialog> dia(new selectDialog(this, doc, UsedC, doc->unitIndex()));
 	if (!dia->exec())
 		return;
 
@@ -4897,6 +4897,7 @@ void ScribusMainWindow::SelectAllOnLayer()
 				continue;
 			if (dia->useAttributes())
 			{
+				bool useParagraphStyle = false;
 				bool useType = false;
 				bool useFill = false;
 				bool useLine = false;
@@ -4904,7 +4905,8 @@ void ScribusMainWindow::SelectAllOnLayer()
 				bool usePrint = false;
 				bool useLocked = false;
 				bool useResize = false;
-				dia->getUsedAttributes(useType, useFill, useLine, useLWidth, usePrint, useLocked, useResize);
+				dia->getUsedAttributes(useParagraphStyle, useType, useFill, useLine, useLWidth, usePrint, useLocked, useResize);
+				int ParagraphStyle = 0;
 				int Type = 0;
 				QString fill;
 				QString line;
@@ -4912,8 +4914,12 @@ void ScribusMainWindow::SelectAllOnLayer()
 				bool Print = false;
 				bool Locked = false;
 				bool Resize = false;
-				dia->getUsedAttributesValues(Type, fill, line, LWidth, Print, Locked, Resize);
+				dia->getUsedAttributesValues(ParagraphStyle, Type, fill, line, LWidth, Print, Locked, Resize);
 				LWidth = LWidth / doc->unitRatio();
+				if (useParagraphStyle
+						&& ParagraphStyle < doc->paragraphStyles().count()
+						&& !currItem->currentStyle().displayName().contains(doc->paragraphStyles()[ParagraphStyle].displayName()))
+					continue;
 				if (useType && (Type != currItem->realItemType()))
 					continue;
 				if (useFill && ((fill != currItem->fillColor()) || (currItem->GrType != 0)))
diff --git a/scribus/ui/selectobjects.cpp b/scribus/ui/selectobjects.cpp
index e0b3e53..d7fe174 100644
--- a/scribus/ui/selectobjects.cpp
+++ b/scribus/ui/selectobjects.cpp
@@ -28,11 +28,16 @@ for which a new license (GPL+exception) is in place.
 #include "commonstrings.h"
 #include "iconmanager.h"
 
-selectDialog::selectDialog(QWidget* parent, const ColorList &availableColors, int unitIndex) : QDialog(parent)
+selectDialog::selectDialog(QWidget* parent, ScribusDoc* document, const ColorList &availableColors, int unitIndex) : QDialog(parent)
 {
 	setupUi(this);
 	setModal(true);
 	setWindowIcon(IconManager::instance().loadIcon("app-icon"));
+	m_paragraphStyles = document->getSortedStyleList();
+	for (auto &styleId : m_paragraphStyles)
+	{
+		paragraphStyleCombo->addItem(document->paragraphStyles()[styleId].displayName());
+	}
 	backgroundCombo->setPixmapType(ColorCombo::fancyPixmaps);
 	backgroundCombo->setColors(availableColors, true);
 	lineCombo->setPixmapType(ColorCombo::fancyPixmaps);
@@ -59,8 +64,9 @@ bool selectDialog::useAttributes() const
 	return attributeGroup->isChecked();
 }
 
-void selectDialog::getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize)
+void selectDialog::getUsedAttributes(bool &ParagraphStyle, bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize)
 {
+	ParagraphStyle = useParagraphStyle->isChecked();
 	Type = useItemType->isChecked();
 	Fill = useFillColor->isChecked();
 	Line = useLineColor->isChecked();
@@ -70,8 +76,12 @@ void selectDialog::getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &L
 	Resize = useResizeState->isChecked();
 }
 
-void selectDialog::getUsedAttributesValues(int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize)
+void selectDialog::getUsedAttributesValues(int &ParagraphStyle, int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize)
 {
+	if (useParagraphStyle->isChecked())
+	{
+		ParagraphStyle = m_paragraphStyles.at(paragraphStyleCombo->currentIndex());
+	}
 	if (useItemType->isChecked())
 	{
 		Type = itemTypeCombo->currentIndex();
diff --git a/scribus/ui/selectobjects.h b/scribus/ui/selectobjects.h
index 1d473e2..68df73f 100644
--- a/scribus/ui/selectobjects.h
+++ b/scribus/ui/selectobjects.h
@@ -37,13 +37,15 @@ class SCRIBUS_API selectDialog : public QDialog, Ui::selectDialog
 	Q_OBJECT
 
 public:
-	selectDialog(QWidget* parent, const ColorList &availableColors, int unitIndex);
+	selectDialog(QWidget* parent, ScribusDoc* document, const ColorList &availableColors, int unitIndex);
 	~selectDialog() {};
 
 	int getSelectionRange() const;
 	bool useAttributes() const;
-	void getUsedAttributes(bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize);
-	void getUsedAttributesValues(int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize);
+	void getUsedAttributes(bool &ParagraphStyle, bool &Type, bool &Fill, bool &Line, bool &LWidth, bool &Print, bool &Locked, bool &Resize);
+	void getUsedAttributesValues(int &ParagraphStyle, int &Type, QString &Fill, QString &Line, double &LWidth, bool &Print, bool &Locked, bool &Resize);
+private:
+	QList<int> m_paragraphStyles;
 };
 
 #endif 
diff --git a/scribus/ui/selectobjects.ui b/scribus/ui/selectobjects.ui
index 1af2fea..d550999 100644
--- a/scribus/ui/selectobjects.ui
+++ b/scribus/ui/selectobjects.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>423</width>
-    <height>321</height>
+    <width>457</width>
+    <height>388</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -20,30 +20,30 @@
    <string>Select All Items</string>
   </property>
   <property name="modal">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout">
-   <property name="leftMargin">
-    <number>9</number>
-   </property>
-   <property name="topMargin">
-    <number>9</number>
-   </property>
-   <property name="rightMargin">
-    <number>9</number>
-   </property>
-   <property name="bottomMargin">
-    <number>9</number>
-   </property>
-   <item>
-    <widget class="QGroupBox" name="rangeGroup">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout">
+   <property name="leftMargin">
+    <number>9</number>
+   </property>
+   <property name="topMargin">
+    <number>9</number>
+   </property>
+   <property name="rightMargin">
+    <number>9</number>
+   </property>
+   <property name="bottomMargin">
+    <number>9</number>
+   </property>
+   <item>
+    <widget class="QGroupBox" name="rangeGroup">
      <property name="title">
-      <string>Select All Items</string>
-     </property>
-     <layout class="QHBoxLayout">
-      <item>
-       <widget class="QRadioButton" name="buttonCurrentPage">
-        <property name="toolTip">
+      <string>Select All Items</string>
+     </property>
+     <layout class="QHBoxLayout">
+      <item>
+       <widget class="QRadioButton" name="buttonCurrentPage">
+        <property name="toolTip">
          <string>Select all items on the current page</string>
         </property>
         <property name="text">
@@ -89,12 +89,19 @@
       <bool>true</bool>
      </property>
      <property name="checked">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="0">
-       <widget class="QCheckBox" name="useItemType">
-        <property name="toolTip">
+      <bool>false</bool>
+     </property>
+     <layout class="QGridLayout">
+      <item row="3" column="1">
+       <widget class="ColorCombo" name="backgroundCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QCheckBox" name="useItemType">
+        <property name="toolTip">
          <string>Select based on item type</string>
         </property>
         <property name="text">
@@ -102,7 +109,71 @@
         </property>
        </widget>
       </item>
+      <item row="3" column="0">
+       <widget class="QCheckBox" name="useFillColor">
+        <property name="toolTip">
+         <string>Select based on the color that the item is filled with</string>
+        </property>
+        <property name="text">
+         <string>Fill Color</string>
+        </property>
+       </widget>
+      </item>
       <item row="0" column="1">
+       <widget class="QComboBox" name="paragraphStyleCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="6" column="0">
+       <widget class="QCheckBox" name="usePrintState">
+        <property name="toolTip">
+         <string>Select items based on whether they will be printed or not</string>
+        </property>
+        <property name="text">
+         <string>Printable</string>
+        </property>
+       </widget>
+      </item>
+      <item row="6" column="1">
+       <widget class="QComboBox" name="printStateCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <item>
+         <property name="text">
+          <string>Yes</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>No</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="7" column="1">
+       <widget class="QComboBox" name="lockStateCombo">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="currentIndex">
+         <number>1</number>
+        </property>
+        <item>
+         <property name="text">
+          <string>Yes</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>No</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="2" column="1">
        <widget class="QComboBox" name="itemTypeCombo">
         <property name="enabled">
          <bool>false</bool>
@@ -144,69 +215,25 @@
         </item>
        </widget>
       </item>
-      <item row="1" column="0">
-       <widget class="QCheckBox" name="useFillColor">
-        <property name="toolTip">
-         <string>Select based on the color that the item is filled with</string>
-        </property>
-        <property name="text">
-         <string>Fill Color</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="ColorCombo" name="backgroundCombo">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0">
-       <widget class="QCheckBox" name="useLineColor">
-        <property name="toolTip">
-         <string>Select based on the color of the line or outline</string>
-        </property>
-        <property name="text">
-         <string>Line Color</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1">
-       <widget class="ColorCombo" name="lineCombo">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0">
-       <widget class="QCheckBox" name="useLineWidth">
+      <item row="7" column="0">
+       <widget class="QCheckBox" name="useLockedState">
         <property name="toolTip">
-         <string>Select based on the width of the line of the item</string>
+         <string>Select items based on their locked status</string>
         </property>
         <property name="text">
-         <string>Line Width</string>
+         <string>Locked</string>
         </property>
        </widget>
       </item>
-      <item row="3" column="1">
+      <item row="5" column="1">
        <widget class="ScrSpinBox" name="lineWidthSpin">
         <property name="enabled">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="4" column="0">
-       <widget class="QCheckBox" name="usePrintState">
-        <property name="toolTip">
-         <string>Select items based on whether they will be printed or not</string>
-        </property>
-        <property name="text">
-         <string>Printable</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1">
-       <widget class="QComboBox" name="printStateCombo">
+      <item row="8" column="1">
+       <widget class="QComboBox" name="resizeStateCombo">
         <property name="enabled">
          <bool>false</bool>
         </property>
@@ -223,60 +250,50 @@
        </widget>
       </item>
       <item row="5" column="0">
-       <widget class="QCheckBox" name="useLockedState">
+       <widget class="QCheckBox" name="useLineWidth">
         <property name="toolTip">
-         <string>Select items based on their locked status</string>
+         <string>Select based on the width of the line of the item</string>
         </property>
         <property name="text">
-         <string>Locked</string>
+         <string>Line Width</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="1">
-       <widget class="QComboBox" name="lockStateCombo">
-        <property name="enabled">
-         <bool>false</bool>
+      <item row="8" column="0">
+       <widget class="QCheckBox" name="useResizeState">
+        <property name="toolTip">
+         <string>Select items based on whether they have their size locked or not</string>
         </property>
-        <property name="currentIndex">
-         <number>1</number>
+        <property name="text">
+         <string>Resizable</string>
         </property>
-        <item>
-         <property name="text">
-          <string>Yes</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>No</string>
-         </property>
-        </item>
        </widget>
       </item>
-      <item row="6" column="0">
-       <widget class="QCheckBox" name="useResizeState">
+      <item row="4" column="0">
+       <widget class="QCheckBox" name="useLineColor">
         <property name="toolTip">
-         <string>Select items based on whether they have their size locked or not</string>
+         <string>Select based on the color of the line or outline</string>
         </property>
         <property name="text">
-         <string>Resizable</string>
+         <string>Line Color</string>
         </property>
        </widget>
       </item>
-      <item row="6" column="1">
-       <widget class="QComboBox" name="resizeStateCombo">
+      <item row="4" column="1">
+       <widget class="ColorCombo" name="lineCombo">
         <property name="enabled">
          <bool>false</bool>
         </property>
-        <item>
-         <property name="text">
-          <string>Yes</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>No</string>
-         </property>
-        </item>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QCheckBox" name="useParagraphStyle">
+        <property name="toolTip">
+         <string>Select based on item type</string>
+        </property>
+        <property name="text">
+         <string>Paragraph Style</string>
+        </property>
        </widget>
       </item>
      </layout>
@@ -285,10 +302,10 @@
    <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
-      <enum>Qt::Horizontal</enum>
+      <enum>Qt::Orientation::Horizontal</enum>
      </property>
      <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+      <set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
      </property>
     </widget>
    </item>
@@ -452,5 +469,21 @@
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>useParagraphStyle</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>paragraphStyleCombo</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>123</x>
+     <y>127</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>333</x>
+     <y>127</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
 </ui>
nov-29.patch (16,429 bytes)   

ale

2025-11-29 07:47

manager   ~0053311

Sadly, I personally still don't see the use case for this functionality.

I don't say that there is none, but I'd like to see at least one real practical usage of it, before adding the functionality.

From my point of view, this is something that should go into extending the find and replace dialog to search across all items in the documents.

bgc

2025-11-29 08:52

reporter   ~0053312

You should've said earlier that this would be better suited in the "find and replace" dialog.
But, Judging by the code quality, I suppose there are more important issues to address than this.

ale

2025-11-29 10:10

manager   ~0053313

I asked what the practical usage is of this feature, and still can't figure out what one can meaningfully do, once all the frames that contain a specific style are selected.
Except if the text in the frame is all of the same style.

But sometimes, people surprise me, with very good ideas how to use tools!
So I can't yet say if the patch is useful or not.

And, no, you cannot achieve the same by adding this to the search and replace dialog, because:

- "Edit > Search and replace" can already search by paragraph style (so, there is nothing to be added), but
- "Edit > Search and replace" cannot search across items / through the whole document.

Depending on what you want to do with this feature, getting the "Edit > Search and replace" to search through the whole document is a better solution.
And there is already a patch for it that is having a long (long) rest in another ticket (0014567).

Personally, I consider the current "Search and replace" dialog as rather useless, both because of the fact that it can search only one story at a time and because it's UI is in the way.
But, indeed, maybe we need to tackle the two issues in two steps.

Issue History

Date Modified Username Field Change
2025-11-17 07:10 bgc New Issue
2025-11-17 07:10 bgc File Added: nov-17.patch
2025-11-20 03:18 bgc Note Added: 0053285
2025-11-20 03:18 bgc File Added: nov-20.patch
2025-11-20 07:36 ale Note Added: 0053287
2025-11-20 09:21 bgc Note Added: 0053288
2025-11-21 03:29 bgc Note Added: 0053293
2025-11-21 03:29 bgc File Added: nov-21.patch
2025-11-21 20:45 ale Note Added: 0053294
2025-11-21 21:55 bgc Note Added: 0053295
2025-11-29 03:14 bgc Note Added: 0053310
2025-11-29 03:14 bgc File Added: nov-29.patch
2025-11-29 07:47 ale Note Added: 0053311
2025-11-29 08:52 bgc Note Added: 0053312
2025-11-29 10:10 ale Note Added: 0053313