View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0017571 | Scribus | User Interface | public | 2025-07-04 21:26 | 2025-12-13 19:53 |
| Reporter | nitramr | Assigned To | nitramr | ||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | assigned | Resolution | open | ||
| Platform | Desktop PC | OS | Ubuntu | OS Version | 24.10 64-bit |
| Product Version | 1.7.1.svn | ||||
| Target Version | 1.7 milestone | ||||
| Summary | 0017571: Add button group ui widget | ||||
| Description | I created a custom button group widget that assigns a proxy style to all tool buttons within the button group. The new style looks like a real visual group. I also replaced some UI button groups with the new one. Button group features - Based on QButtonGroup - All added buttons are automatically styled. - When a button is added, deleted, or its visibility is changed, the button style of all buttons is regenerated. Tested un Ubuntu (dark + light theme) and MacOS (light theme) | ||||
| Tags | No tags attached. | ||||
| Attached Files | buttongroup_2025-07-04_01.patch (19,671 bytes)
diff --git a/scribus/CMakeLists_Sources.txt b/scribus/CMakeLists_Sources.txt
index 35422ba..cdb62da 100644
--- a/scribus/CMakeLists_Sources.txt
+++ b/scribus/CMakeLists_Sources.txt
@@ -561,6 +561,7 @@ set(SCRIBUS_SOURCES
ui/delegates/sclistitemdelegate.cpp
ui/docks/dock_centralwidget.cpp
ui/docks/dock_panelbase.cpp
+ ui/widgets/buttongroup.cpp
ui/widgets/color_button.cpp
ui/widgets/color_slider.cpp
ui/widgets/combo_blendmode.cpp
diff --git a/scribus/ui/propertiespalette_shape.cpp b/scribus/ui/propertiespalette_shape.cpp
index 0dcbd21..4414a23 100644
--- a/scribus/ui/propertiespalette_shape.cpp
+++ b/scribus/ui/propertiespalette_shape.cpp
@@ -25,6 +25,7 @@ for which a new license (GPL+exception) is in place.
#include "scribusview.h"
#include "selection.h"
#include "units.h"
+#include "ui/widgets/buttongroup.h"
PropertiesPalette_Shape::PropertiesPalette_Shape( QWidget* parent)
: QWidget(parent)
@@ -45,6 +46,13 @@ PropertiesPalette_Shape::PropertiesPalette_Shape( QWidget* parent)
textFlowMargins->toggleLabelVisibility(false);
textFlowMargins->setLinkValues(true);
+ ButtonGroup * bgFlow = new ButtonGroup();
+ bgFlow->addButton(textFlowDisabled);
+ bgFlow->addButton(textFlowUsesBoundingBox);
+ bgFlow->addButton(textFlowUsesContourLine);
+ bgFlow->addButton(textFlowUsesFrameShape);
+ bgFlow->addButton(textFlowUsesImageClipping);
+
connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
connect(ScQApp, SIGNAL(localeChanged()), this, SLOT(localeChange()));
connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool)));
diff --git a/scribus/ui/alignselect.cpp b/scribus/ui/alignselect.cpp
index 725617a..c2c1968 100644
--- a/scribus/ui/alignselect.cpp
+++ b/scribus/ui/alignselect.cpp
@@ -16,7 +16,7 @@ for which a new license (GPL+exception) is in place.
AlignSelect::AlignSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ButtonGroup(this);
TextL = new QToolButton( this );
TextL->setCheckable( true );
@@ -45,6 +45,9 @@ AlignSelect::AlignSelect(QWidget* parent) : FormWidget(parent)
addWidget(TextB);
addWidget(TextF);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
diff --git a/scribus/ui/alignselect.h b/scribus/ui/alignselect.h
index 9bd60ff..54efb0c 100644
--- a/scribus/ui/alignselect.h
+++ b/scribus/ui/alignselect.h
@@ -14,6 +14,7 @@ for which a new license (GPL+exception) is in place.
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API AlignSelect : public FormWidget
@@ -30,7 +31,7 @@ public:
int selectedId() const;
int selected { 0 };
- QButtonGroup* buttonGroup { nullptr };
+ ButtonGroup* buttonGroup { nullptr };
QToolButton* TextL { nullptr };
QToolButton* TextR { nullptr };
QToolButton* TextC { nullptr };
diff --git a/scribus/ui/alignverticalselect.cpp b/scribus/ui/alignverticalselect.cpp
index 13a6234..f88d511 100644
--- a/scribus/ui/alignverticalselect.cpp
+++ b/scribus/ui/alignverticalselect.cpp
@@ -16,7 +16,7 @@ for which a new license (GPL+exception) is in place.
AlignVerticalSelect::AlignVerticalSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ButtonGroup(this);
buttonGroup->setExclusive(true);
TextT = new QToolButton( this );
@@ -36,6 +36,9 @@ AlignVerticalSelect::AlignVerticalSelect(QWidget* parent) : FormWidget(parent)
addWidget(TextC);
addWidget(TextB);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
diff --git a/scribus/ui/alignverticalselect.h b/scribus/ui/alignverticalselect.h
index 4a5d6b0..02782ed 100644
--- a/scribus/ui/alignverticalselect.h
+++ b/scribus/ui/alignverticalselect.h
@@ -14,6 +14,7 @@ for which a new license (GPL+exception) is in place.
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API AlignVerticalSelect : public FormWidget
@@ -28,7 +29,7 @@ public:
void setStyle(int s);
int getStyle() const;
- QButtonGroup* buttonGroup { nullptr };
+ ButtonGroup* buttonGroup { nullptr };
QToolButton* TextT { nullptr };
QToolButton* TextC { nullptr };
QToolButton* TextB { nullptr };
diff --git a/scribus/ui/directionselect.cpp b/scribus/ui/directionselect.cpp
index 24556ec..5d0aa59 100644
--- a/scribus/ui/directionselect.cpp
+++ b/scribus/ui/directionselect.cpp
@@ -15,7 +15,13 @@ for which a new license (GPL+exception) is in place.
DirectionSelect::DirectionSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ButtonGroup(this);
+
+ QHBoxLayout* lay = new QHBoxLayout();
+ lay->setContentsMargins(0, 0, 0, 0);
+ lay->setSpacing(0);
+ lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
+ setLayout(lay);
LTR = new QToolButton( this );
LTR->setCheckable( true );
@@ -28,11 +34,13 @@ DirectionSelect::DirectionSelect(QWidget* parent) : FormWidget(parent)
addWidget( RTL );
buttonGroup->addButton(RTL, 1);
- resize(minimumSizeHint());
+ lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
iconSetChange();
languageChange();
+ resize(minimumSizeHint());
+
connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
connect(buttonGroup, SIGNAL(idClicked(int)), this, SLOT(setTypeStyle(int)));
}
diff --git a/scribus/ui/directionselect.h b/scribus/ui/directionselect.h
index 3d69cd6..23ad6c2 100644
--- a/scribus/ui/directionselect.h
+++ b/scribus/ui/directionselect.h
@@ -16,6 +16,7 @@ for which a new license (GPL+exception) is in place.
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API DirectionSelect : public FormWidget
@@ -30,7 +31,7 @@ class SCRIBUS_API DirectionSelect : public FormWidget
int getStyle();
int selectedId();
- QButtonGroup* buttonGroup { nullptr };
+ ButtonGroup* buttonGroup { nullptr };
QToolButton* RTL { nullptr };
QToolButton* LTR { nullptr };
diff --git a/scribus/ui/flopwidget.cpp b/scribus/ui/flopwidget.cpp
index 0b3a537..f5e2d94 100644
--- a/scribus/ui/flopwidget.cpp
+++ b/scribus/ui/flopwidget.cpp
@@ -23,10 +23,10 @@ FlopWidget::FlopWidget(QWidget* parent) : FormWidget(parent)
flopBaselineGrid = new QToolButton();
flopBaselineGrid->setCheckable(true);
- flopGroup = new QButtonGroup();
+ flopGroup = new ButtonGroup();
flopGroup->setExclusive(true);
- flopGroup->addButton(flopRealHeight, RealHeightID);
flopGroup->addButton(flopFontAscent, FontAscentID);
+ flopGroup->addButton(flopRealHeight, RealHeightID);
flopGroup->addButton(flopLineSpacing, LineSpacingID);
flopGroup->addButton(flopBaselineGrid, BaselineGridID);
@@ -35,6 +35,9 @@ FlopWidget::FlopWidget(QWidget* parent) : FormWidget(parent)
addWidget(flopLineSpacing);
addWidget(flopBaselineGrid);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
diff --git a/scribus/ui/flopwidget.h b/scribus/ui/flopwidget.h
index cdb682d..d312cbf 100644
--- a/scribus/ui/flopwidget.h
+++ b/scribus/ui/flopwidget.h
@@ -9,7 +9,9 @@ for which a new license (GPL+exception) is in place.
#include <QButtonGroup>
+#include <QHBoxLayout>
#include <QToolButton>
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class ScribusDoc;
@@ -31,7 +33,7 @@ public:
FlopWidget(QWidget* parent);
~FlopWidget() {};
- QButtonGroup *flopGroup;
+ ButtonGroup *flopGroup;
QToolButton *flopRealHeight = {nullptr};
QToolButton *flopFontAscent = {nullptr};
QToolButton *flopLineSpacing = {nullptr};
diff --git a/scribus/ui/newdocdialog.cpp b/scribus/ui/newdocdialog.cpp
index c71ef70..9b14b16 100644
--- a/scribus/ui/newdocdialog.cpp
+++ b/scribus/ui/newdocdialog.cpp
@@ -142,12 +142,12 @@ void NewDocDialog::createNewDocPage()
comboSortSizes->addItem( tr("Size Desc"), PageSizeList::DimensionDesc);
comboSortSizes->setCurrentIndex(0);
- pageOrientationButtons = new QButtonGroup();
+ pageOrientationButtons = new ButtonGroup();
pageOrientationButtons->addButton(buttonVertical, 0);
pageOrientationButtons->addButton(buttonHorizontal, 1);
pageOrientationButtons->button(orientation)->setChecked(true);
- pageLayoutButtons = new QButtonGroup();
+ pageLayoutButtons = new ButtonGroup();
pageLayoutButtons->addButton(buttonSinglePage, 0);
pageLayoutButtons->addButton(buttonDoublePageLeft, 1);
pageLayoutButtons->addButton(buttonDoublePageRight, 2);
diff --git a/scribus/ui/newdocdialog.h b/scribus/ui/newdocdialog.h
index 50e9c95..6d7b962 100644
--- a/scribus/ui/newdocdialog.h
+++ b/scribus/ui/newdocdialog.h
@@ -34,6 +34,7 @@ class QSpinBox;
#include "scribusstructs.h"
#include "ui/customfdialog.h"
#include "ui/nftwidget.h"
+#include "ui/widgets/buttongroup.h"
#include "ui_newdocdialog.h"
@@ -119,8 +120,8 @@ private slots:
protected:
PrefsManager& prefsManager;
QStringList recentDocList;
- QButtonGroup* pageOrientationButtons;
- QButtonGroup* pageLayoutButtons;
+ ButtonGroup* pageOrientationButtons;
+ ButtonGroup* pageLayoutButtons;
double m_unitRatio { 1.0 };
int m_orientation { 0 };
diff --git a/scribus/ui/propertiespalette_fill.cpp b/scribus/ui/propertiespalette_fill.cpp
index 7b7fc45..a5e425f 100644
--- a/scribus/ui/propertiespalette_fill.cpp
+++ b/scribus/ui/propertiespalette_fill.cpp
@@ -8,6 +8,7 @@
#include "selection.h"
#include "undomanager.h"
#include "ui/colorpicker/colorpicker.h"
+#include "ui/widgets/buttongroup.h"
PropertiesPalette_Fill::PropertiesPalette_Fill(QWidget *parent) :
QWidget(parent)
@@ -23,6 +24,10 @@ PropertiesPalette_Fill::PropertiesPalette_Fill(QWidget *parent) :
undoManager = UndoManager::instance();
+ ButtonGroup * fillRuleGroup = new ButtonGroup();
+ fillRuleGroup->addButton(evenOdd);
+ fillRuleGroup->addButton(nonZero);
+
iconSetChange();
languageChange();
diff --git a/scribus/ui/propertiespalette_line.cpp b/scribus/ui/propertiespalette_line.cpp
index 40060b2..e8bacf7 100644
--- a/scribus/ui/propertiespalette_line.cpp
+++ b/scribus/ui/propertiespalette_line.cpp
@@ -39,15 +39,15 @@ PropertiesPalette_Line::PropertiesPalette_Line( QWidget* parent) : QWidget(paren
setupUi(this);
setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
- buttonsCaps = new QButtonGroup();
+ buttonsCaps = new ButtonGroup();
buttonsCaps->addButton(buttonCapFlat, 0);
buttonsCaps->addButton(buttonCapSquare, 1);
buttonsCaps->addButton(buttonCapRound, 2);
- buttonsJoins = new QButtonGroup();
+ buttonsJoins = new ButtonGroup();
buttonsJoins->addButton(buttonJoinMiter, 0);
- buttonsJoins->addButton(buttonJoinBevel, 1);
buttonsJoins->addButton(buttonJoinRound, 2);
+ buttonsJoins->addButton(buttonJoinBevel, 1);
lineType->addItem( tr("Custom"));
diff --git a/scribus/ui/propertiespalette_line.h b/scribus/ui/propertiespalette_line.h
index d22b310..20350f3 100644
--- a/scribus/ui/propertiespalette_line.h
+++ b/scribus/ui/propertiespalette_line.h
@@ -12,6 +12,7 @@ for which a new license (GPL+exception) is in place.
#include <QListWidgetItem>
#include "scribusapi.h"
#include "scguardedptr.h"
+#include "ui/widgets/buttongroup.h"
#include "units.h"
class ArrowChooser;
@@ -43,8 +44,8 @@ protected:
PageItem *m_item {nullptr};
ScribusMainWindow* m_ScMW {nullptr};
ScGuardedPtr<ScribusDoc> m_doc;
- QButtonGroup *buttonsCaps;
- QButtonGroup *buttonsJoins;
+ ButtonGroup *buttonsCaps;
+ ButtonGroup *buttonsJoins;
LineMarkerSelector *lineMarkerSelectorStart;
LineMarkerSelector *lineMarkerSelectorEnd;
diff --git a/scribus/ui/propertywidget_fontfeatures.cpp b/scribus/ui/propertywidget_fontfeatures.cpp
index 3e2dbd0..093cea3 100644
--- a/scribus/ui/propertywidget_fontfeatures.cpp
+++ b/scribus/ui/propertywidget_fontfeatures.cpp
@@ -16,6 +16,7 @@ for which a new license (GPL+exception) is in place.
#include "scribusapp.h"
#include "scribusdoc.h"
#include "selection.h"
+#include "ui/widgets/buttongroup.h"
#include "fonts/fontfeatures.h"
@@ -833,7 +834,7 @@ void PropertyWidget_FontFeatures::initWidgets()
OrdinalCheck->installEventFilter(this);
SlashedZeroCheck->installEventFilter(this);
- QButtonGroup * groupCapitals = new QButtonGroup();
+ ButtonGroup * groupCapitals = new ButtonGroup();
groupCapitals->setExclusive(true);
groupCapitals->addButton(NormalCapRadio);
groupCapitals->addButton(SmallRadio);
@@ -845,19 +846,26 @@ void PropertyWidget_FontFeatures::initWidgets()
groupCapitals->addButton(UnicaseRadio);
groupCapitals->addButton(TitlingRadio);
- QButtonGroup * groupFractions = new QButtonGroup();
+ ButtonGroup * groupPosition = new ButtonGroup();
+ groupPosition->setExclusive(true);
+ groupPosition->addButton(DefaultPosRadio);
+ groupPosition->addButton(SubscriptRadio);
+ groupPosition->addButton(SuperscriptRadio);
+ groupPosition->addButton(OrdinalCheck);
+
+ ButtonGroup * groupFractions = new ButtonGroup();
groupFractions->setExclusive(true);
groupFractions->addButton(DefaultFractionsRadio);
groupFractions->addButton(DiagonalRadio);
groupFractions->addButton(StackedRadio);
- QButtonGroup * groupNumeralStyle = new QButtonGroup();
+ ButtonGroup * groupNumeralStyle = new ButtonGroup();
groupNumeralStyle->setExclusive(true);
groupNumeralStyle->addButton(DefaultStyleRadio);
groupNumeralStyle->addButton(LiningRadio);
groupNumeralStyle->addButton(OldStyleRadio);
- QButtonGroup * groupNumeralWidth = new QButtonGroup();
+ ButtonGroup * groupNumeralWidth = new ButtonGroup();
groupNumeralWidth->setExclusive(true);
groupNumeralWidth->addButton(DefaultWidthRadio);
groupNumeralWidth->addButton(ProportionalRadio);
@@ -870,31 +878,10 @@ void PropertyWidget_FontFeatures::initWidgets()
HistoricalCheck->setChecked(false);
NormalCapRadio->setChecked(true);
- // SmallRadio->setChecked(false);
- // SmallFromCRadio->setChecked(false);
- // AllSmallCapsRadio->setChecked(false);
- // PetiteRadio->setChecked(false);
- // PetiteCapRadio->setChecked(false);
- // AllPetiteCapsRadio->setChecked(false);
- // UnicaseRadio->setChecked(false);
- // TitlingRadio->setChecked(false);
-
DefaultStyleRadio->setChecked(true);
- // LiningRadio->setChecked(false);
- // OldStyleRadio->setChecked(false);
-
DefaultWidthRadio->setChecked(true);
- // ProportionalRadio->setChecked(false);
- // TabularRadio->setChecked(false);
-
DefaultFractionsRadio->setChecked(true);
- // DiagonalRadio->setChecked(false);
- // StackedRadio->setChecked(false);
-
DefaultPosRadio->setChecked(true);
- // SubscriptRadio->setChecked(false);
- // SuperscriptRadio->setChecked(false);
- // OrdinalCheck->setChecked(false);
SlashedZeroCheck->setChecked(false);
diff --git a/scribus/ui/smalignselect.cpp b/scribus/ui/smalignselect.cpp
index 25edea2..35d6064 100644
--- a/scribus/ui/smalignselect.cpp
+++ b/scribus/ui/smalignselect.cpp
@@ -4,24 +4,28 @@ to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/
+#include <QLayoutItem>
#include <QToolTip>
#include "smalignselect.h"
-#include "iconmanager.h"
-#include "scribusapp.h"
+#include "iconmanager.h"
+#include "scribusapp.h"
SMAlignSelect::SMAlignSelect(QWidget *parent)
: AlignSelect(parent)
{
+ QSpacerItem * spacer = new QSpacerItem(4, 0, QSizePolicy::Fixed);
+ layout()->addItem(spacer);
+
parentButton = new QToolButton(this);
- parentButton->setText( "");
+ parentButton->setText( "");
parentButton->setToolTip( tr("Use parent style's alignment instead of overriding it"));
- addWidget( parentButton );
+ addWidget( parentButton );
resize(minimumSizeHint());
parentButton->hide();
-
- iconSetChange();
-
- connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
+
+ iconSetChange();
+
+ connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
}
void SMAlignSelect::setStyle(int a, int d)
@@ -79,9 +83,9 @@ void SMAlignSelect::pbPressed()
{
m_useParentStyle = true;
}
-
-void SMAlignSelect::iconSetChange()
-{
- IconManager &im = IconManager::instance();
- parentButton->setIcon(im.loadIcon("reset-style-changes"));
-}
+
+void SMAlignSelect::iconSetChange()
+{
+ IconManager &im = IconManager::instance();
+ parentButton->setIcon(im.loadIcon("reset-style-changes"));
+}
diff --git a/scribus/ui/styleselect.cpp b/scribus/ui/styleselect.cpp
index ab7c677..a1d6920 100644
--- a/scribus/ui/styleselect.cpp
+++ b/scribus/ui/styleselect.cpp
@@ -10,6 +10,7 @@ for which a new license (GPL+exception) is in place.
#include "iconmanager.h"
#include "scribusapp.h"
#include "styleselect.h"
+#include "ui/widgets/buttongroup.h"
StrikeValues::StrikeValues( QWidget* parent ) : QFrame( parent )
{
@@ -130,7 +131,7 @@ void ShadowValues::languageChange()
StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
{
ssLayout = new QHBoxLayout(this);
- ssLayout->setSpacing(4);
+ ssLayout->setSpacing(0);
ssLayout->setContentsMargins(0, 0, 0, 0);
UnderlineVal = new UnderlineValues( nullptr );
@@ -144,12 +145,18 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
underlineButton->setMenu(UnderlinePop);
underlineButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( underlineButton );
+
+ ssLayout->addSpacing(4);
+
underlineWordButton = new QToolButton( this );
underlineWordButton->setText( "" );
underlineWordButton->setCheckable( true );
underlineWordButton->setMenu(UnderlinePop);
underlineWordButton->setPopupMode(QToolButton::DelayedPopup);
- ssLayout->addWidget( underlineWordButton );
+ ssLayout->addWidget( underlineWordButton );
+
+ ssLayout->addSpacing(4);
+
StrikeVal = new StrikeValues( nullptr );
StrikePop = new QMenu();
StrikeValAct = new QWidgetAction(this);
@@ -162,7 +169,7 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
strikeoutButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( strikeoutButton );
- ssLayout->addSpacing(12);
+ ssLayout->addSpacing(16);
subscriptButton = new QToolButton( this );
subscriptButton->setText( "" );
@@ -173,7 +180,12 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
superscriptButton->setCheckable( true );
ssLayout->addWidget( superscriptButton );
- ssLayout->addSpacing(12);
+ ButtonGroup *bgSub = new ButtonGroup();
+ bgSub->setExclusive(false);
+ bgSub->addButton(subscriptButton);
+ bgSub->addButton(superscriptButton);
+
+ ssLayout->addSpacing(16);
allcapsButton = new QToolButton( this );
allcapsButton->setText("");
@@ -184,7 +196,12 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
smallcapsButton->setCheckable( true );
ssLayout->addWidget( smallcapsButton );
- ssLayout->addSpacing(12);
+ ButtonGroup *bgCaps = new ButtonGroup();
+ bgCaps->setExclusive(false);
+ bgCaps->addButton(allcapsButton);
+ bgCaps->addButton(smallcapsButton);
+
+ ssLayout->addSpacing(16);
OutlineVal = new OutlineValues( nullptr );
OutlinePop = new QMenu();
@@ -198,6 +215,8 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
outlineButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( outlineButton );
+ ssLayout->addSpacing(4);
+
ShadowVal = new ShadowValues( nullptr );
ShadowPop = new QMenu();
ShadowValAct = new QWidgetAction(this);
| ||||
| Patch | Yes | ||||
|
|
There is a memory leak issue in ButtonGroup::updateStyle() : ToolButtonStyle objects are created with new and setup with QWidget setStyle(), but Qt doc states : "The ownership of the style object is not transferred". So each time ButtonGroup::updateStyle() will be called, ToolButtonStyle objects created by the previous ButtonGroup::updateStyle() call will be leaked. |
|
|
Also it appears ButtonGroup fails to support dark theme properly on Windows. |
|
|
I've updated the patch. There are three classes: - ButtonGroup - ToolButton - ScribusProxyStyle The ToolButton is a QToolButton with additional properties for shape information to allow it to be used within a ButtonGroup. The ButtonGroup extends the QButtonGroup to restyle the ToolButtons when their visibility changes. The ScribusProxyStyle is a new style class to apply the new shapes to the ToolButton. This class can be extended later to ensure a consistent style for all widgets across all operating systems. The ScribusProxyStyle installs an event listener for the ScQApp class to listen for QThemeChanges events. This event is triggered when the operating system's dark/light theme changes. @cbradney, this fixes the MDI window title bar issues on Mac. The patch was tested on Ubuntu 25.04 and macOS 16, not on Windows. |
|
|
I noticed a bug with text flow buttons. Fix applied! buttongroup_2025-10-22_01.patch (27,460 bytes)
Index: scribus/CMakeLists_Sources.txt
===================================================================
--- scribus/CMakeLists_Sources.txt (Revision 27090)
+++ scribus/CMakeLists_Sources.txt (Arbeitskopie)
@@ -565,4 +565,6 @@
ui/delegates/sclistitemdelegate.cpp
ui/docks/dock_centralwidget.cpp
ui/docks/dock_panelbase.cpp
+ ui/factories/scribusproxystyle.cpp
+ ui/widgets/buttongroup.cpp
ui/widgets/color_button.cpp
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp (Revision 27090)
+++ scribus/scribus.cpp (Arbeitskopie)
@@ -239,6 +239,7 @@
#include "ui/tabmanager.h"
#include "ui/transformdialog.h"
#include "ui/viewtoolbar.h"
+#include "ui/factories/scribusproxystyle.h"
#include "undogui.h"
#include "undomanager.h"
#include "undostate.h"
@@ -6480,7 +6481,6 @@
LocaleManager::instance().setUserPreferredLocale(m_prefsManager.appPrefs.uiPrefs.userPreferredLocale);
ScQApp->setLocale();
- bool forceStyleUpdate = false;
bool useDefaultScratchColor = false;
if (m_prefsManager.appPrefs.displayPrefs.scratchColor == QApplication::palette().color(QPalette::Active, QPalette::Window))
useDefaultScratchColor = true;
@@ -6489,37 +6489,19 @@
QString newUIStylePalette = m_prefsManager.appPrefs.uiPrefs.stylePalette;
if (oldPrefs.uiPrefs.stylePalette != newUIStylePalette)
{
- forceStyleUpdate = true;
if (newUIStylePalette == "dark")
- {
- QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Dark);
-#if (defined Q_OS_LINUX)
- QPalette pal(QColor(49, 49, 49));
- QApplication::setPalette(pal);
-#endif
- }
+ ScribusProxyStyle::instance()->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Dark);
else if (newUIStylePalette == "light")
- {
- QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Light);
-#if (defined Q_OS_LINUX)
- QPalette pal(QColor(239, 239, 239));
- QApplication::setPalette(pal);
-#endif
- }
+ ScribusProxyStyle::instance()->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Light);
else
- {
- QApplication::styleHints()->unsetColorScheme();
-#if (defined Q_OS_LINUX)
- QApplication::setPalette(this->style()->standardPalette());
-#endif
- }
+ ScribusProxyStyle::instance()->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::System);
}
#endif
bool forceIconUpdate = false;
QString newUIStyle = m_prefsManager.guiStyle();
- if (oldPrefs.uiPrefs.style != newUIStyle || forceStyleUpdate == true)
+ if (oldPrefs.uiPrefs.style != newUIStyle)
{
forceIconUpdate = true;
@@ -6527,11 +6509,11 @@
if (!newUIStyle.isEmpty())
styleName = newUIStyle;
- QStyle * newStyle = QStyleFactory::create(styleName);
- if (newStyle)
- QApplication::setStyle(newStyle);
- else
- m_prefsManager.appPrefs.uiPrefs.style = oldPrefs.uiPrefs.style;
+ ScribusProxyStyle::instance()->setBaseStyleName(styleName);
+ // if (scStyle)
+ // ScQApp->setStyle(scStyle);
+ // else
+ // m_prefsManager.appPrefs.uiPrefs.style = oldPrefs.uiPrefs.style;
}
if (useDefaultScratchColor)
Index: scribus/scribusapp.cpp
===================================================================
--- scribus/scribusapp.cpp (Revision 27090)
+++ scribus/scribusapp.cpp (Arbeitskopie)
@@ -707,7 +707,16 @@
}
return true;
}
+ case QEvent::ApplicationPaletteChange:
+ {
+ IconManager &im = IconManager::instance();
+ im.rebuildCache();
+ emit iconSetChanged();
+ }
+ break;
default:
- return QApplication::event(event);
+ break;
}
+
+ return QApplication::event(event);
}
Index: scribus/scribuscore.cpp
===================================================================
--- scribus/scribuscore.cpp (Revision 27090)
+++ scribus/scribuscore.cpp (Arbeitskopie)
@@ -45,6 +45,7 @@
#include "scribus.h"
#include "scribusapp.h"
#include "ui/splash.h"
+#include "ui/factories/scribusproxystyle.h"
#include "undomanager.h"
#include "util_debug.h"
#include "util_ghostscript.h"
@@ -179,45 +180,41 @@
// This is a very basic implemenation of the UI theme palette.
// If necessary implement platform specific theme configurations here.
+
+ // Configure GUI
+ const QString& prefsUiStyle = m_prefsManager.appPrefs.uiPrefs.style;
+ QString qtStyle = nullptr;
+ if (prefsUiStyle.length() > 0)
+ {
+ QStringList availableStyles = QStyleFactory::keys();
+ if (availableStyles.contains(prefsUiStyle))
+ qtStyle = prefsUiStyle;
+ else
+ m_prefsManager.appPrefs.uiPrefs.style.clear();
+ }
+
+ ScribusProxyStyle* scStyle = new ScribusProxyStyle(qtStyle);
+ scStyle->setParent(qApp);
+
// Apply different palette only if the system UI palette is different.
#if (QT_VERSION >= QT_VERSION_CHECK(6, 8, 0))
if (m_prefsManager.appPrefs.uiPrefs.stylePalette == "dark" && QApplication::styleHints()->colorScheme() == Qt::ColorScheme::Light)
{
- QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Dark);
-
- // https://bugreports.qt.io/browse/QTBUG-132929
-#if (defined Q_OS_LINUX)
- QPalette pal(QColor(49, 49, 49));
- QApplication::setPalette(pal);
-#endif
+ scStyle->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Dark);
m_SplashScreen->setPixmap(m_iconManager.splashScreen());
}
else if (m_prefsManager.appPrefs.uiPrefs.stylePalette == "light" && QApplication::styleHints()->colorScheme() == Qt::ColorScheme::Dark)
{
- QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Light);
-
- // https://bugreports.qt.io/browse/QTBUG-132929
-#if (defined Q_OS_LINUX)
- QPalette pal(QColor(239, 239, 239));
- QApplication::setPalette(pal);
-#endif
+ scStyle->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Light);
m_SplashScreen->setPixmap(m_iconManager.splashScreen());
}
+ else
+ scStyle->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::System);
#endif
- // Configure GUI
- const QString& prefsUiStyle = m_prefsManager.appPrefs.uiPrefs.style;
- if (prefsUiStyle.length() > 0)
- {
- QStyle* qtStyle = nullptr;
- QStringList availableStyles = QStyleFactory::keys();
- if (availableStyles.contains(prefsUiStyle))
- qtStyle = QStyleFactory::create(prefsUiStyle);
- if (qtStyle)
- QApplication::setStyle(qtStyle);
- else
- m_prefsManager.appPrefs.uiPrefs.style.clear();
- }
+ qApp->setStyle(scStyle);
+ qApp->installEventFilter(scStyle);
+
QFont apf = QApplication::font();
apf.setPointSize(m_prefsManager.appPrefs.uiPrefs.applicationFontSize);
QApplication::setFont(apf);
Index: scribus/ui/alignselect.cpp
===================================================================
--- scribus/ui/alignselect.cpp (Revision 27090)
+++ scribus/ui/alignselect.cpp (Arbeitskopie)
@@ -16,26 +16,26 @@
AlignSelect::AlignSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ButtonGroup(this);
- TextL = new QToolButton( this );
+ TextL = new ToolButton( this );
TextL->setCheckable( true );
TextL->setChecked( true );
buttonGroup->addButton(TextL, 0);
- TextC = new QToolButton( this );
+ TextC = new ToolButton( this );
TextC->setCheckable( true );
buttonGroup->addButton(TextC, 1);
- TextR = new QToolButton( this );
+ TextR = new ToolButton( this );
TextR->setCheckable( true );
buttonGroup->addButton(TextR, 2);
- TextB = new QToolButton( this );
+ TextB = new ToolButton( this );
TextB->setCheckable( true );
buttonGroup->addButton(TextB, 3);
- TextF = new QToolButton( this );
+ TextF = new ToolButton( this );
TextF->setCheckable( true );
buttonGroup->addButton(TextF, 4);
@@ -45,6 +45,9 @@
addWidget(TextB);
addWidget(TextF);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
Index: scribus/ui/alignselect.h
===================================================================
--- scribus/ui/alignselect.h (Revision 27090)
+++ scribus/ui/alignselect.h (Arbeitskopie)
@@ -14,6 +14,7 @@
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API AlignSelect : public FormWidget
@@ -30,12 +31,12 @@
int selectedId() const;
int selected { 0 };
- QButtonGroup* buttonGroup { nullptr };
- QToolButton* TextL { nullptr };
- QToolButton* TextR { nullptr };
- QToolButton* TextC { nullptr };
- QToolButton* TextB { nullptr };
- QToolButton* TextF { nullptr };
+ ButtonGroup* buttonGroup { nullptr };
+ ToolButton* TextL { nullptr };
+ ToolButton* TextR { nullptr };
+ ToolButton* TextC { nullptr };
+ ToolButton* TextB { nullptr };
+ ToolButton* TextF { nullptr };
public slots:
void iconSetChange();
Index: scribus/ui/alignverticalselect.cpp
===================================================================
--- scribus/ui/alignverticalselect.cpp (Revision 27090)
+++ scribus/ui/alignverticalselect.cpp (Arbeitskopie)
@@ -16,19 +16,19 @@
AlignVerticalSelect::AlignVerticalSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ButtonGroup(this);
buttonGroup->setExclusive(true);
- TextT = new QToolButton( this );
+ TextT = new ToolButton( this );
TextT->setCheckable( true );
TextT->setChecked( true );
buttonGroup->addButton(TextT, 0);
- TextC = new QToolButton( this );
+ TextC = new ToolButton( this );
TextC->setCheckable( true );
buttonGroup->addButton(TextC, 1);
- TextB = new QToolButton( this );
+ TextB = new ToolButton( this );
TextB->setCheckable( true );
buttonGroup->addButton(TextB, 2);
@@ -36,6 +36,9 @@
addWidget(TextC);
addWidget(TextB);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
Index: scribus/ui/alignverticalselect.h
===================================================================
--- scribus/ui/alignverticalselect.h (Revision 27090)
+++ scribus/ui/alignverticalselect.h (Arbeitskopie)
@@ -14,6 +14,7 @@
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API AlignVerticalSelect : public FormWidget
@@ -28,10 +29,10 @@
void setStyle(int s);
int getStyle() const;
- QButtonGroup* buttonGroup { nullptr };
- QToolButton* TextT { nullptr };
- QToolButton* TextC { nullptr };
- QToolButton* TextB { nullptr };
+ ButtonGroup* buttonGroup { nullptr };
+ ToolButton* TextT { nullptr };
+ ToolButton* TextC { nullptr };
+ ToolButton* TextB { nullptr };
public slots:
void iconSetChange();
Index: scribus/ui/directionselect.cpp
===================================================================
--- scribus/ui/directionselect.cpp (Revision 27090)
+++ scribus/ui/directionselect.cpp (Arbeitskopie)
@@ -15,24 +15,32 @@
DirectionSelect::DirectionSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ButtonGroup(this);
- LTR = new QToolButton( this );
+ QHBoxLayout* lay = new QHBoxLayout();
+ lay->setContentsMargins(0, 0, 0, 0);
+ lay->setSpacing(0);
+ lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
+ setLayout(lay);
+
+ LTR = new ToolButton( this );
LTR->setCheckable( true );
LTR->setChecked( true );
addWidget( LTR );
buttonGroup->addButton(LTR, 0);
- RTL = new QToolButton( this );
+ RTL = new ToolButton( this );
RTL->setCheckable( true );
addWidget( RTL );
buttonGroup->addButton(RTL, 1);
- resize(minimumSizeHint());
+ lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
iconSetChange();
languageChange();
+ resize(minimumSizeHint());
+
connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
connect(buttonGroup, SIGNAL(idClicked(int)), this, SLOT(setTypeStyle(int)));
}
Index: scribus/ui/directionselect.h
===================================================================
--- scribus/ui/directionselect.h (Revision 27090)
+++ scribus/ui/directionselect.h (Arbeitskopie)
@@ -16,6 +16,7 @@
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API DirectionSelect : public FormWidget
@@ -30,9 +31,9 @@
int getStyle();
int selectedId();
- QButtonGroup* buttonGroup { nullptr };
- QToolButton* RTL { nullptr };
- QToolButton* LTR { nullptr };
+ ButtonGroup* buttonGroup { nullptr };
+ ToolButton* RTL { nullptr };
+ ToolButton* LTR { nullptr };
public slots:
void iconSetChange();
Index: scribus/ui/flopwidget.cpp
===================================================================
--- scribus/ui/flopwidget.cpp (Revision 27090)
+++ scribus/ui/flopwidget.cpp (Arbeitskopie)
@@ -11,22 +11,22 @@
#include "scribusapp.h"
FlopWidget::FlopWidget(QWidget* parent) : FormWidget(parent)
-{
+{
- flopRealHeight = new QToolButton();
+ flopRealHeight = new ToolButton();
flopRealHeight->setCheckable(true);
flopRealHeight->setChecked(true);
- flopFontAscent = new QToolButton();
+ flopFontAscent = new ToolButton();
flopFontAscent->setCheckable(true);
- flopLineSpacing = new QToolButton();
+ flopLineSpacing = new ToolButton();
flopLineSpacing->setCheckable(true);
- flopBaselineGrid = new QToolButton();
+ flopBaselineGrid = new ToolButton();
flopBaselineGrid->setCheckable(true);
- flopGroup = new QButtonGroup();
+ flopGroup = new ButtonGroup();
flopGroup->setExclusive(true);
+ flopGroup->addButton(flopFontAscent, FontAscentID);
flopGroup->addButton(flopRealHeight, RealHeightID);
- flopGroup->addButton(flopFontAscent, FontAscentID);
flopGroup->addButton(flopLineSpacing, LineSpacingID);
flopGroup->addButton(flopBaselineGrid, BaselineGridID);
@@ -35,6 +35,9 @@
addWidget(flopLineSpacing);
addWidget(flopBaselineGrid);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
Index: scribus/ui/flopwidget.h
===================================================================
--- scribus/ui/flopwidget.h (Revision 27090)
+++ scribus/ui/flopwidget.h (Arbeitskopie)
@@ -9,7 +9,9 @@
#include <QButtonGroup>
+#include <QHBoxLayout>
#include <QToolButton>
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class ScribusDoc;
@@ -31,11 +33,11 @@
FlopWidget(QWidget* parent);
~FlopWidget() {};
- QButtonGroup *flopGroup;
- QToolButton *flopRealHeight = {nullptr};
- QToolButton *flopFontAscent = {nullptr};
- QToolButton *flopLineSpacing = {nullptr};
- QToolButton *flopBaselineGrid = {nullptr};
+ ButtonGroup *flopGroup;
+ ToolButton *flopRealHeight = {nullptr};
+ ToolButton *flopFontAscent = {nullptr};
+ ToolButton *flopLineSpacing = {nullptr};
+ ToolButton *flopBaselineGrid = {nullptr};
protected:
Index: scribus/ui/newdocdialog.cpp
===================================================================
--- scribus/ui/newdocdialog.cpp (Revision 27090)
+++ scribus/ui/newdocdialog.cpp (Arbeitskopie)
@@ -143,12 +142,12 @@
comboSortSizes->addItem( tr("Size Desc"), PageSizeList::DimensionDesc);
comboSortSizes->setCurrentIndex(0);
- pageOrientationButtons = new QButtonGroup();
+ pageOrientationButtons = new ButtonGroup();
pageOrientationButtons->addButton(buttonVertical, 0);
pageOrientationButtons->addButton(buttonHorizontal, 1);
pageOrientationButtons->button(orientation)->setChecked(true);
- pageLayoutButtons = new QButtonGroup();
+ pageLayoutButtons = new ButtonGroup();
pageLayoutButtons->addButton(buttonSinglePage, 0);
pageLayoutButtons->addButton(buttonDoublePageLeft, 1);
pageLayoutButtons->addButton(buttonDoublePageRight, 2);
Index: scribus/ui/newdocdialog.h
===================================================================
--- scribus/ui/newdocdialog.h (Revision 27090)
+++ scribus/ui/newdocdialog.h (Arbeitskopie)
@@ -34,6 +34,7 @@
#include "scribusstructs.h"
#include "ui/customfdialog.h"
#include "ui/nftwidget.h"
+#include "ui/widgets/buttongroup.h"
#include "ui_newdocdialog.h"
@@ -120,8 +120,8 @@
protected:
PrefsManager& prefsManager;
QStringList recentDocList;
- QButtonGroup* pageOrientationButtons;
- QButtonGroup* pageLayoutButtons;
+ ButtonGroup* pageOrientationButtons;
+ ButtonGroup* pageLayoutButtons;
double m_unitRatio { 1.0 };
int m_orientation { 0 };
Index: scribus/ui/propertiespalette_fill.cpp
===================================================================
--- scribus/ui/propertiespalette_fill.cpp (Revision 27090)
+++ scribus/ui/propertiespalette_fill.cpp (Arbeitskopie)
@@ -8,6 +8,7 @@
#include "selection.h"
#include "undomanager.h"
#include "ui/colorpicker/colorpicker.h"
+#include "ui/widgets/buttongroup.h"
PropertiesPalette_Fill::PropertiesPalette_Fill(QWidget *parent) :
QWidget(parent)
@@ -23,6 +24,10 @@
undoManager = UndoManager::instance();
+ ButtonGroup * fillRuleGroup = new ButtonGroup();
+ fillRuleGroup->addButton(evenOdd);
+ fillRuleGroup->addButton(nonZero);
+
iconSetChange();
languageChange();
Index: scribus/ui/propertiespalette_line.cpp
===================================================================
--- scribus/ui/propertiespalette_line.cpp (Revision 27090)
+++ scribus/ui/propertiespalette_line.cpp (Arbeitskopie)
@@ -39,15 +39,15 @@
setupUi(this);
setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
- buttonsCaps = new QButtonGroup();
+ buttonsCaps = new ButtonGroup();
buttonsCaps->addButton(buttonCapFlat, 0);
buttonsCaps->addButton(buttonCapSquare, 1);
buttonsCaps->addButton(buttonCapRound, 2);
- buttonsJoins = new QButtonGroup();
+ buttonsJoins = new ButtonGroup();
buttonsJoins->addButton(buttonJoinMiter, 0);
+ buttonsJoins->addButton(buttonJoinRound, 2);
buttonsJoins->addButton(buttonJoinBevel, 1);
- buttonsJoins->addButton(buttonJoinRound, 2);
lineType->addItem( tr("Custom"));
Index: scribus/ui/propertiespalette_line.h
===================================================================
--- scribus/ui/propertiespalette_line.h (Revision 27090)
+++ scribus/ui/propertiespalette_line.h (Arbeitskopie)
@@ -12,6 +12,7 @@
#include <QListWidgetItem>
#include "scribusapi.h"
#include "scguardedptr.h"
+#include "ui/widgets/buttongroup.h"
#include "units.h"
class ArrowChooser;
@@ -43,8 +44,8 @@
PageItem *m_item {nullptr};
ScribusMainWindow* m_ScMW {nullptr};
ScGuardedPtr<ScribusDoc> m_doc;
- QButtonGroup *buttonsCaps;
- QButtonGroup *buttonsJoins;
+ ButtonGroup *buttonsCaps;
+ ButtonGroup *buttonsJoins;
LineMarkerSelector *lineMarkerSelectorStart;
LineMarkerSelector *lineMarkerSelectorEnd;
Index: scribus/ui/propertiespalette_shape.cpp
===================================================================
--- scribus/ui/propertiespalette_shape.cpp (Revision 27090)
+++ scribus/ui/propertiespalette_shape.cpp (Arbeitskopie)
@@ -25,6 +25,7 @@
#include "scribusview.h"
#include "selection.h"
#include "units.h"
+#include "ui/widgets/buttongroup.h"
PropertiesPalette_Shape::PropertiesPalette_Shape( QWidget* parent)
: QWidget(parent)
@@ -38,9 +39,16 @@
iconSetChange();
languageChange();
+ ButtonGroup * bgFlow = new ButtonGroup();
+ bgFlow->addButton(textFlowDisabled);
+ bgFlow->addButton(textFlowUsesBoundingBox);
+ bgFlow->addButton(textFlowUsesContourLine);
+ bgFlow->addButton(textFlowUsesFrameShape);
+ bgFlow->addButton(textFlowUsesImageClipping);
+
connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
connect(ScQApp, SIGNAL(localeChanged()), this, SLOT(localeChange()));
connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool)));
- connect(textFlowBtnGroup, SIGNAL(idClicked(int)), this, SLOT(handleTextFlow()));
+ connect(bgFlow, SIGNAL(idClicked(int)), this, SLOT(handleTextFlow()));
connect(textFlowMargins, SIGNAL(valuesChanged(MarginStruct)), this, SLOT(handleTextFlow()));
Index: scribus/ui/propertywidget_fontfeatures.cpp
===================================================================
--- scribus/ui/propertywidget_fontfeatures.cpp (Revision 27090)
+++ scribus/ui/propertywidget_fontfeatures.cpp (Arbeitskopie)
@@ -16,6 +16,7 @@
#include "scribusapp.h"
#include "scribusdoc.h"
#include "selection.h"
+#include "ui/widgets/buttongroup.h"
#include "fonts/fontfeatures.h"
@@ -833,7 +834,7 @@
OrdinalCheck->installEventFilter(this);
SlashedZeroCheck->installEventFilter(this);
- QButtonGroup * groupCapitals = new QButtonGroup();
+ ButtonGroup * groupCapitals = new ButtonGroup();
groupCapitals->setExclusive(true);
groupCapitals->addButton(NormalCapRadio);
groupCapitals->addButton(SmallRadio);
@@ -845,19 +846,26 @@
groupCapitals->addButton(UnicaseRadio);
groupCapitals->addButton(TitlingRadio);
- QButtonGroup * groupFractions = new QButtonGroup();
+ ButtonGroup * groupPosition = new ButtonGroup();
+ groupPosition->setExclusive(true);
+ groupPosition->addButton(DefaultPosRadio);
+ groupPosition->addButton(SubscriptRadio);
+ groupPosition->addButton(SuperscriptRadio);
+ groupPosition->addButton(OrdinalCheck);
+
+ ButtonGroup * groupFractions = new ButtonGroup();
groupFractions->setExclusive(true);
groupFractions->addButton(DefaultFractionsRadio);
groupFractions->addButton(DiagonalRadio);
groupFractions->addButton(StackedRadio);
- QButtonGroup * groupNumeralStyle = new QButtonGroup();
+ ButtonGroup * groupNumeralStyle = new ButtonGroup();
groupNumeralStyle->setExclusive(true);
groupNumeralStyle->addButton(DefaultStyleRadio);
groupNumeralStyle->addButton(LiningRadio);
groupNumeralStyle->addButton(OldStyleRadio);
- QButtonGroup * groupNumeralWidth = new QButtonGroup();
+ ButtonGroup * groupNumeralWidth = new ButtonGroup();
groupNumeralWidth->setExclusive(true);
groupNumeralWidth->addButton(DefaultWidthRadio);
groupNumeralWidth->addButton(ProportionalRadio);
@@ -870,31 +878,10 @@
HistoricalCheck->setChecked(false);
NormalCapRadio->setChecked(true);
- // SmallRadio->setChecked(false);
- // SmallFromCRadio->setChecked(false);
- // AllSmallCapsRadio->setChecked(false);
- // PetiteRadio->setChecked(false);
- // PetiteCapRadio->setChecked(false);
- // AllPetiteCapsRadio->setChecked(false);
- // UnicaseRadio->setChecked(false);
- // TitlingRadio->setChecked(false);
-
DefaultStyleRadio->setChecked(true);
- // LiningRadio->setChecked(false);
- // OldStyleRadio->setChecked(false);
-
DefaultWidthRadio->setChecked(true);
- // ProportionalRadio->setChecked(false);
- // TabularRadio->setChecked(false);
-
DefaultFractionsRadio->setChecked(true);
- // DiagonalRadio->setChecked(false);
- // StackedRadio->setChecked(false);
-
DefaultPosRadio->setChecked(true);
- // SubscriptRadio->setChecked(false);
- // SuperscriptRadio->setChecked(false);
- // OrdinalCheck->setChecked(false);
SlashedZeroCheck->setChecked(false);
Index: scribus/ui/smalignselect.cpp
===================================================================
--- scribus/ui/smalignselect.cpp (Revision 27090)
+++ scribus/ui/smalignselect.cpp (Arbeitskopie)
@@ -4,6 +4,7 @@
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/
+#include <QLayoutItem>
#include <QToolTip>
#include "smalignselect.h"
#include "iconmanager.h"
@@ -12,6 +13,9 @@
SMAlignSelect::SMAlignSelect(QWidget *parent)
: AlignSelect(parent)
{
+ QSpacerItem * spacer = new QSpacerItem(4, 0, QSizePolicy::Fixed);
+ layout()->addItem(spacer);
+
parentButton = new QToolButton(this);
parentButton->setText( "");
parentButton->setToolTip( tr("Use parent style's alignment instead of overriding it"));
Index: scribus/ui/styleselect.cpp
===================================================================
--- scribus/ui/styleselect.cpp (Revision 27090)
+++ scribus/ui/styleselect.cpp (Arbeitskopie)
@@ -130,7 +130,7 @@
StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
{
ssLayout = new QHBoxLayout(this);
- ssLayout->setSpacing(4);
+ ssLayout->setSpacing(0);
ssLayout->setContentsMargins(0, 0, 0, 0);
UnderlineVal = new UnderlineValues( nullptr );
@@ -144,12 +144,18 @@
underlineButton->setMenu(UnderlinePop);
underlineButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( underlineButton );
+
+ ssLayout->addSpacing(4);
+
underlineWordButton = new QToolButton( this );
underlineWordButton->setText( "" );
underlineWordButton->setCheckable( true );
underlineWordButton->setMenu(UnderlinePop);
underlineWordButton->setPopupMode(QToolButton::DelayedPopup);
- ssLayout->addWidget( underlineWordButton );
+ ssLayout->addWidget( underlineWordButton );
+
+ ssLayout->addSpacing(4);
+
StrikeVal = new StrikeValues( nullptr );
StrikePop = new QMenu();
StrikeValAct = new QWidgetAction(this);
@@ -162,30 +168,40 @@
strikeoutButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( strikeoutButton );
- ssLayout->addSpacing(12);
+ ssLayout->addSpacing(16);
- subscriptButton = new QToolButton( this );
+ subscriptButton = new ToolButton( this );
subscriptButton->setText( "" );
subscriptButton->setCheckable( true );
ssLayout->addWidget( subscriptButton );
- superscriptButton = new QToolButton( this );
+ superscriptButton = new ToolButton( this );
superscriptButton->setText( "" );
superscriptButton->setCheckable( true );
ssLayout->addWidget( superscriptButton );
- ssLayout->addSpacing(12);
+ ButtonGroup *bgSub = new ButtonGroup();
+ bgSub->setExclusive(false);
+ bgSub->addButton(subscriptButton);
+ bgSub->addButton(superscriptButton);
- allcapsButton = new QToolButton( this );
+ ssLayout->addSpacing(16);
+
+ allcapsButton = new ToolButton( this );
allcapsButton->setText("");
allcapsButton->setCheckable( true );
ssLayout->addWidget( allcapsButton );
- smallcapsButton = new QToolButton( this );
+ smallcapsButton = new ToolButton( this );
smallcapsButton->setText("");
smallcapsButton->setCheckable( true );
ssLayout->addWidget( smallcapsButton );
- ssLayout->addSpacing(12);
+ ButtonGroup *bgCaps = new ButtonGroup();
+ bgCaps->setExclusive(false);
+ bgCaps->addButton(allcapsButton);
+ bgCaps->addButton(smallcapsButton);
+ ssLayout->addSpacing(16);
+
OutlineVal = new OutlineValues( nullptr );
OutlinePop = new QMenu();
OutlineValAct = new QWidgetAction(this);
@@ -198,6 +214,8 @@
outlineButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( outlineButton );
+ ssLayout->addSpacing(4);
+
ShadowVal = new ShadowValues( nullptr );
ShadowPop = new QMenu();
ShadowValAct = new QWidgetAction(this);
Index: scribus/ui/styleselect.h
===================================================================
--- scribus/ui/styleselect.h (Revision 27090)
+++ scribus/ui/styleselect.h (Arbeitskopie)
@@ -21,6 +21,7 @@
#include "scrspinbox.h"
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
class SCRIBUS_API StrikeValues : public QFrame
{
@@ -130,10 +131,10 @@
QHBoxLayout* ssLayout { nullptr };
QToolButton* underlineButton { nullptr };
QToolButton* underlineWordButton { nullptr };
- QToolButton* subscriptButton { nullptr };
- QToolButton* superscriptButton { nullptr };
- QToolButton* smallcapsButton { nullptr };
- QToolButton* allcapsButton { nullptr };
+ ToolButton* subscriptButton { nullptr };
+ ToolButton* superscriptButton { nullptr };
+ ToolButton* smallcapsButton { nullptr };
+ ToolButton* allcapsButton { nullptr };
QToolButton* strikeoutButton { nullptr };
QToolButton* outlineButton { nullptr };
QToolButton* shadowButton { nullptr };
|
|
|
Updated patch.. not sure why yours did not apply. Waiting for Jean to test. 17571-update.patch (53,163 bytes)
Index: CMakeLists_Sources.txt
===================================================================
--- CMakeLists_Sources.txt (revision 27094)
+++ CMakeLists_Sources.txt (working copy)
@@ -565,6 +565,8 @@
ui/delegates/sclistitemdelegate.cpp
ui/docks/dock_centralwidget.cpp
ui/docks/dock_panelbase.cpp
+ ui/factories/scribusproxystyle.cpp
+ ui/widgets/buttongroup.cpp
ui/widgets/color_button.cpp
ui/widgets/combo_blendmode.cpp
ui/widgets/combo_linestyle.cpp
Index: scribus.cpp
===================================================================
--- scribus.cpp (revision 27094)
+++ scribus.cpp (working copy)
@@ -239,6 +239,7 @@
#include "ui/tabmanager.h"
#include "ui/transformdialog.h"
#include "ui/viewtoolbar.h"
+#include "ui/factories/scribusproxystyle.h"
#include "undogui.h"
#include "undomanager.h"
#include "undostate.h"
@@ -6480,7 +6481,6 @@
LocaleManager::instance().setUserPreferredLocale(m_prefsManager.appPrefs.uiPrefs.userPreferredLocale);
ScQApp->setLocale();
- bool forceStyleUpdate = false;
bool useDefaultScratchColor = false;
if (m_prefsManager.appPrefs.displayPrefs.scratchColor == QApplication::palette().color(QPalette::Active, QPalette::Window))
useDefaultScratchColor = true;
@@ -6489,37 +6489,19 @@
QString newUIStylePalette = m_prefsManager.appPrefs.uiPrefs.stylePalette;
if (oldPrefs.uiPrefs.stylePalette != newUIStylePalette)
{
- forceStyleUpdate = true;
if (newUIStylePalette == "dark")
- {
- QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Dark);
-#if (defined Q_OS_LINUX)
- QPalette pal(QColor(49, 49, 49));
- QApplication::setPalette(pal);
-#endif
- }
+ ScribusProxyStyle::instance()->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Dark);
else if (newUIStylePalette == "light")
- {
- QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Light);
-#if (defined Q_OS_LINUX)
- QPalette pal(QColor(239, 239, 239));
- QApplication::setPalette(pal);
-#endif
- }
+ ScribusProxyStyle::instance()->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Light);
else
- {
- QApplication::styleHints()->unsetColorScheme();
-#if (defined Q_OS_LINUX)
- QApplication::setPalette(this->style()->standardPalette());
-#endif
- }
+ ScribusProxyStyle::instance()->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::System);
}
#endif
bool forceIconUpdate = false;
QString newUIStyle = m_prefsManager.guiStyle();
- if (oldPrefs.uiPrefs.style != newUIStyle || forceStyleUpdate == true)
+ if (oldPrefs.uiPrefs.style != newUIStyle)
{
forceIconUpdate = true;
@@ -6527,11 +6509,11 @@
if (!newUIStyle.isEmpty())
styleName = newUIStyle;
- QStyle * newStyle = QStyleFactory::create(styleName);
- if (newStyle)
- QApplication::setStyle(newStyle);
- else
- m_prefsManager.appPrefs.uiPrefs.style = oldPrefs.uiPrefs.style;
+ ScribusProxyStyle::instance()->setBaseStyleName(styleName);
+ // if (scStyle)
+ // ScQApp->setStyle(scStyle);
+ // else
+ // m_prefsManager.appPrefs.uiPrefs.style = oldPrefs.uiPrefs.style;
}
if (useDefaultScratchColor)
Index: scribusapp.cpp
===================================================================
--- scribusapp.cpp (revision 27094)
+++ scribusapp.cpp (working copy)
@@ -707,7 +707,16 @@
}
return true;
}
+ case QEvent::ApplicationPaletteChange:
+ {
+ IconManager &im = IconManager::instance();
+ im.rebuildCache();
+ emit iconSetChanged();
+ }
+ break;
default:
- return QApplication::event(event);
+ break;
}
+
+ return QApplication::event(event);
}
Index: scribuscore.cpp
===================================================================
--- scribuscore.cpp (revision 27094)
+++ scribuscore.cpp (working copy)
@@ -45,6 +45,7 @@
#include "scribus.h"
#include "scribusapp.h"
#include "ui/splash.h"
+#include "ui/factories/scribusproxystyle.h"
#include "undomanager.h"
#include "util_debug.h"
#include "util_ghostscript.h"
@@ -179,45 +180,41 @@
// This is a very basic implemenation of the UI theme palette.
// If necessary implement platform specific theme configurations here.
+
+ // Configure GUI
+ const QString& prefsUiStyle = m_prefsManager.appPrefs.uiPrefs.style;
+ QString qtStyle = nullptr;
+ if (prefsUiStyle.length() > 0)
+ {
+ QStringList availableStyles = QStyleFactory::keys();
+ if (availableStyles.contains(prefsUiStyle))
+ qtStyle = prefsUiStyle;
+ else
+ m_prefsManager.appPrefs.uiPrefs.style.clear();
+ }
+
+ ScribusProxyStyle* scStyle = new ScribusProxyStyle(qtStyle);
+ scStyle->setParent(qApp);
+
// Apply different palette only if the system UI palette is different.
#if (QT_VERSION >= QT_VERSION_CHECK(6, 8, 0))
if (m_prefsManager.appPrefs.uiPrefs.stylePalette == "dark" && QApplication::styleHints()->colorScheme() == Qt::ColorScheme::Light)
{
- QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Dark);
-
- // https://bugreports.qt.io/browse/QTBUG-132929
-#if (defined Q_OS_LINUX)
- QPalette pal(QColor(49, 49, 49));
- QApplication::setPalette(pal);
-#endif
+ scStyle->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Dark);
m_SplashScreen->setPixmap(m_iconManager.splashScreen());
}
else if (m_prefsManager.appPrefs.uiPrefs.stylePalette == "light" && QApplication::styleHints()->colorScheme() == Qt::ColorScheme::Dark)
{
- QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Light);
-
- // https://bugreports.qt.io/browse/QTBUG-132929
-#if (defined Q_OS_LINUX)
- QPalette pal(QColor(239, 239, 239));
- QApplication::setPalette(pal);
-#endif
+ scStyle->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Light);
m_SplashScreen->setPixmap(m_iconManager.splashScreen());
}
+ else
+ scStyle->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::System);
#endif
- // Configure GUI
- const QString& prefsUiStyle = m_prefsManager.appPrefs.uiPrefs.style;
- if (prefsUiStyle.length() > 0)
- {
- QStyle* qtStyle = nullptr;
- QStringList availableStyles = QStyleFactory::keys();
- if (availableStyles.contains(prefsUiStyle))
- qtStyle = QStyleFactory::create(prefsUiStyle);
- if (qtStyle)
- QApplication::setStyle(qtStyle);
- else
- m_prefsManager.appPrefs.uiPrefs.style.clear();
- }
+ qApp->setStyle(scStyle);
+ qApp->installEventFilter(scStyle);
+
QFont apf = QApplication::font();
apf.setPointSize(m_prefsManager.appPrefs.uiPrefs.applicationFontSize);
QApplication::setFont(apf);
Index: ui/alignselect.cpp
===================================================================
--- ui/alignselect.cpp (revision 27094)
+++ ui/alignselect.cpp (working copy)
@@ -16,26 +16,26 @@
AlignSelect::AlignSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ButtonGroup(this);
- TextL = new QToolButton( this );
+ TextL = new ToolButton( this );
TextL->setCheckable( true );
TextL->setChecked( true );
buttonGroup->addButton(TextL, 0);
- TextC = new QToolButton( this );
+ TextC = new ToolButton( this );
TextC->setCheckable( true );
buttonGroup->addButton(TextC, 1);
- TextR = new QToolButton( this );
+ TextR = new ToolButton( this );
TextR->setCheckable( true );
buttonGroup->addButton(TextR, 2);
- TextB = new QToolButton( this );
+ TextB = new ToolButton( this );
TextB->setCheckable( true );
buttonGroup->addButton(TextB, 3);
- TextF = new QToolButton( this );
+ TextF = new ToolButton( this );
TextF->setCheckable( true );
buttonGroup->addButton(TextF, 4);
@@ -45,6 +45,9 @@
addWidget(TextB);
addWidget(TextF);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
Index: ui/alignselect.h
===================================================================
--- ui/alignselect.h (revision 27094)
+++ ui/alignselect.h (working copy)
@@ -14,6 +14,7 @@
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API AlignSelect : public FormWidget
@@ -30,12 +31,12 @@
int selectedId() const;
int selected { 0 };
- QButtonGroup* buttonGroup { nullptr };
- QToolButton* TextL { nullptr };
- QToolButton* TextR { nullptr };
- QToolButton* TextC { nullptr };
- QToolButton* TextB { nullptr };
- QToolButton* TextF { nullptr };
+ ButtonGroup* buttonGroup { nullptr };
+ ToolButton* TextL { nullptr };
+ ToolButton* TextR { nullptr };
+ ToolButton* TextC { nullptr };
+ ToolButton* TextB { nullptr };
+ ToolButton* TextF { nullptr };
public slots:
void iconSetChange();
Index: ui/alignverticalselect.cpp
===================================================================
--- ui/alignverticalselect.cpp (revision 27094)
+++ ui/alignverticalselect.cpp (working copy)
@@ -16,19 +16,19 @@
AlignVerticalSelect::AlignVerticalSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ButtonGroup(this);
buttonGroup->setExclusive(true);
- TextT = new QToolButton( this );
+ TextT = new ToolButton( this );
TextT->setCheckable( true );
TextT->setChecked( true );
buttonGroup->addButton(TextT, 0);
- TextC = new QToolButton( this );
+ TextC = new ToolButton( this );
TextC->setCheckable( true );
buttonGroup->addButton(TextC, 1);
- TextB = new QToolButton( this );
+ TextB = new ToolButton( this );
TextB->setCheckable( true );
buttonGroup->addButton(TextB, 2);
@@ -36,6 +36,9 @@
addWidget(TextC);
addWidget(TextB);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
Index: ui/alignverticalselect.h
===================================================================
--- ui/alignverticalselect.h (revision 27094)
+++ ui/alignverticalselect.h (working copy)
@@ -14,6 +14,7 @@
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API AlignVerticalSelect : public FormWidget
@@ -28,10 +29,10 @@
void setStyle(int s);
int getStyle() const;
- QButtonGroup* buttonGroup { nullptr };
- QToolButton* TextT { nullptr };
- QToolButton* TextC { nullptr };
- QToolButton* TextB { nullptr };
+ ButtonGroup* buttonGroup { nullptr };
+ ToolButton* TextT { nullptr };
+ ToolButton* TextC { nullptr };
+ ToolButton* TextB { nullptr };
public slots:
void iconSetChange();
Index: ui/directionselect.cpp
===================================================================
--- ui/directionselect.cpp (revision 27094)
+++ ui/directionselect.cpp (working copy)
@@ -15,24 +15,32 @@
DirectionSelect::DirectionSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ButtonGroup(this);
- LTR = new QToolButton( this );
+ QHBoxLayout* lay = new QHBoxLayout();
+ lay->setContentsMargins(0, 0, 0, 0);
+ lay->setSpacing(0);
+ lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
+ setLayout(lay);
+
+ LTR = new ToolButton( this );
LTR->setCheckable( true );
LTR->setChecked( true );
addWidget( LTR );
buttonGroup->addButton(LTR, 0);
- RTL = new QToolButton( this );
+ RTL = new ToolButton( this );
RTL->setCheckable( true );
addWidget( RTL );
buttonGroup->addButton(RTL, 1);
- resize(minimumSizeHint());
+ lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
iconSetChange();
languageChange();
+ resize(minimumSizeHint());
+
connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
connect(buttonGroup, SIGNAL(idClicked(int)), this, SLOT(setTypeStyle(int)));
}
Index: ui/directionselect.h
===================================================================
--- ui/directionselect.h (revision 27094)
+++ ui/directionselect.h (working copy)
@@ -16,6 +16,7 @@
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API DirectionSelect : public FormWidget
@@ -30,9 +31,9 @@
int getStyle();
int selectedId();
- QButtonGroup* buttonGroup { nullptr };
- QToolButton* RTL { nullptr };
- QToolButton* LTR { nullptr };
+ ButtonGroup* buttonGroup { nullptr };
+ ToolButton* RTL { nullptr };
+ ToolButton* LTR { nullptr };
public slots:
void iconSetChange();
Index: ui/flopwidget.cpp
===================================================================
--- ui/flopwidget.cpp (revision 27094)
+++ ui/flopwidget.cpp (working copy)
@@ -11,22 +11,22 @@
#include "scribusapp.h"
FlopWidget::FlopWidget(QWidget* parent) : FormWidget(parent)
-{
+{
- flopRealHeight = new QToolButton();
+ flopRealHeight = new ToolButton();
flopRealHeight->setCheckable(true);
flopRealHeight->setChecked(true);
- flopFontAscent = new QToolButton();
+ flopFontAscent = new ToolButton();
flopFontAscent->setCheckable(true);
- flopLineSpacing = new QToolButton();
+ flopLineSpacing = new ToolButton();
flopLineSpacing->setCheckable(true);
- flopBaselineGrid = new QToolButton();
+ flopBaselineGrid = new ToolButton();
flopBaselineGrid->setCheckable(true);
- flopGroup = new QButtonGroup();
+ flopGroup = new ButtonGroup();
flopGroup->setExclusive(true);
+ flopGroup->addButton(flopFontAscent, FontAscentID);
flopGroup->addButton(flopRealHeight, RealHeightID);
- flopGroup->addButton(flopFontAscent, FontAscentID);
flopGroup->addButton(flopLineSpacing, LineSpacingID);
flopGroup->addButton(flopBaselineGrid, BaselineGridID);
@@ -35,6 +35,9 @@
addWidget(flopLineSpacing);
addWidget(flopBaselineGrid);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
Index: ui/flopwidget.h
===================================================================
--- ui/flopwidget.h (revision 27094)
+++ ui/flopwidget.h (working copy)
@@ -9,7 +9,9 @@
#include <QButtonGroup>
+#include <QHBoxLayout>
#include <QToolButton>
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class ScribusDoc;
@@ -31,11 +33,11 @@
FlopWidget(QWidget* parent);
~FlopWidget() {};
- QButtonGroup *flopGroup;
- QToolButton *flopRealHeight = {nullptr};
- QToolButton *flopFontAscent = {nullptr};
- QToolButton *flopLineSpacing = {nullptr};
- QToolButton *flopBaselineGrid = {nullptr};
+ ButtonGroup *flopGroup;
+ ToolButton *flopRealHeight = {nullptr};
+ ToolButton *flopFontAscent = {nullptr};
+ ToolButton *flopLineSpacing = {nullptr};
+ ToolButton *flopBaselineGrid = {nullptr};
protected:
Index: ui/newdocdialog.cpp
===================================================================
--- ui/newdocdialog.cpp (revision 27094)
+++ ui/newdocdialog.cpp (working copy)
@@ -143,12 +143,12 @@
comboSortSizes->addItem( tr("Size Desc"), PageSizeList::DimensionDesc);
comboSortSizes->setCurrentIndex(0);
- pageOrientationButtons = new QButtonGroup();
+ pageOrientationButtons = new ButtonGroup();
pageOrientationButtons->addButton(buttonVertical, 0);
pageOrientationButtons->addButton(buttonHorizontal, 1);
pageOrientationButtons->button(orientation)->setChecked(true);
- pageLayoutButtons = new QButtonGroup();
+ pageLayoutButtons = new ButtonGroup();
pageLayoutButtons->addButton(buttonSinglePage, 0);
pageLayoutButtons->addButton(buttonDoublePageLeft, 1);
pageLayoutButtons->addButton(buttonDoublePageRight, 2);
Index: ui/newdocdialog.h
===================================================================
--- ui/newdocdialog.h (revision 27094)
+++ ui/newdocdialog.h (working copy)
@@ -34,6 +34,7 @@
#include "scribusstructs.h"
#include "ui/customfdialog.h"
#include "ui/nftwidget.h"
+#include "ui/widgets/buttongroup.h"
#include "ui_newdocdialog.h"
@@ -120,8 +121,8 @@
protected:
PrefsManager& prefsManager;
QStringList recentDocList;
- QButtonGroup* pageOrientationButtons;
- QButtonGroup* pageLayoutButtons;
+ ButtonGroup* pageOrientationButtons;
+ ButtonGroup* pageLayoutButtons;
double m_unitRatio { 1.0 };
int m_orientation { 0 };
Index: ui/newdocdialog.ui
===================================================================
--- ui/newdocdialog.ui (revision 27094)
+++ ui/newdocdialog.ui (working copy)
@@ -123,8 +123,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>267</width>
- <height>564</height>
+ <width>320</width>
+ <height>588</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
@@ -330,7 +330,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -358,7 +358,7 @@
</spacer>
</item>
<item>
- <widget class="QToolButton" name="buttonVertical">
+ <widget class="ToolButton" name="buttonVertical">
<property name="text">
<string/>
</property>
@@ -374,7 +374,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonHorizontal">
+ <widget class="ToolButton" name="buttonHorizontal">
<property name="text">
<string/>
</property>
@@ -430,6 +430,9 @@
<string>Layout</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_9">
+ <property name="spacing">
+ <number>0</number>
+ </property>
<property name="leftMargin">
<number>0</number>
</property>
@@ -443,39 +446,35 @@
<number>0</number>
</property>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_10">
- <item>
- <widget class="QToolButton" name="buttonSinglePage">
- <property name="text">
- <string/>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="buttonDoublePageLeft">
- <property name="text">
- <string/>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="buttonDoublePageRight">
- <property name="text">
- <string/>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="ToolButton" name="buttonSinglePage">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
</item>
+ <item>
+ <widget class="ToolButton" name="buttonDoublePageLeft">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="ToolButton" name="buttonDoublePageRight">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
@@ -822,9 +821,14 @@
<container>1</container>
</customwidget>
<customwidget>
+ <class>ToolButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/buttongroup.h</header>
+ </customwidget>
+ <customwidget>
<class>ScrSpinBox</class>
<extends>QDoubleSpinBox</extends>
- <header>ui/scrspinbox.h</header>
+ <header location="global">ui/scrspinbox.h</header>
</customwidget>
<customwidget>
<class>NewMarginWidget</class>
Index: ui/propertiespalette_fill.cpp
===================================================================
--- ui/propertiespalette_fill.cpp (revision 27094)
+++ ui/propertiespalette_fill.cpp (working copy)
@@ -8,6 +8,7 @@
#include "selection.h"
#include "undomanager.h"
#include "ui/colorpicker/colorpicker.h"
+#include "ui/widgets/buttongroup.h"
PropertiesPalette_Fill::PropertiesPalette_Fill(QWidget *parent) :
QWidget(parent)
@@ -23,6 +24,10 @@
undoManager = UndoManager::instance();
+ ButtonGroup * fillRuleGroup = new ButtonGroup();
+ fillRuleGroup->addButton(evenOdd);
+ fillRuleGroup->addButton(nonZero);
+
iconSetChange();
languageChange();
Index: ui/propertiespalette_fill.ui
===================================================================
--- ui/propertiespalette_fill.ui (revision 27094)
+++ ui/propertiespalette_fill.ui (working copy)
@@ -151,7 +151,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -166,7 +166,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="evenOdd">
+ <widget class="ToolButton" name="evenOdd">
<property name="text">
<string/>
</property>
@@ -179,7 +179,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="nonZero">
+ <widget class="ToolButton" name="nonZero">
<property name="text">
<string/>
</property>
@@ -197,7 +197,7 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -228,6 +228,11 @@
<extends>QComboBox</extends>
<header>ui/widgets/combo_blendmode.h</header>
</customwidget>
+ <customwidget>
+ <class>ToolButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/buttongroup.h</header>
+ </customwidget>
</customwidgets>
<resources/>
<connections/>
Index: ui/propertiespalette_line.cpp
===================================================================
--- ui/propertiespalette_line.cpp (revision 27094)
+++ ui/propertiespalette_line.cpp (working copy)
@@ -39,15 +39,15 @@
setupUi(this);
setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
- buttonsCaps = new QButtonGroup();
+ buttonsCaps = new ButtonGroup();
buttonsCaps->addButton(buttonCapFlat, 0);
buttonsCaps->addButton(buttonCapSquare, 1);
buttonsCaps->addButton(buttonCapRound, 2);
- buttonsJoins = new QButtonGroup();
+ buttonsJoins = new ButtonGroup();
buttonsJoins->addButton(buttonJoinMiter, 0);
+ buttonsJoins->addButton(buttonJoinRound, 2);
buttonsJoins->addButton(buttonJoinBevel, 1);
- buttonsJoins->addButton(buttonJoinRound, 2);
lineType->addItem( tr("Custom"));
Index: ui/propertiespalette_line.h
===================================================================
--- ui/propertiespalette_line.h (revision 27094)
+++ ui/propertiespalette_line.h (working copy)
@@ -12,6 +12,7 @@
#include <QListWidgetItem>
#include "scribusapi.h"
#include "scguardedptr.h"
+#include "ui/widgets/buttongroup.h"
#include "units.h"
class ArrowChooser;
@@ -43,8 +44,8 @@
PageItem *m_item {nullptr};
ScribusMainWindow* m_ScMW {nullptr};
ScGuardedPtr<ScribusDoc> m_doc;
- QButtonGroup *buttonsCaps;
- QButtonGroup *buttonsJoins;
+ ButtonGroup *buttonsCaps;
+ ButtonGroup *buttonsJoins;
LineMarkerSelector *lineMarkerSelectorStart;
LineMarkerSelector *lineMarkerSelectorEnd;
Index: ui/propertiespalette_linebase.ui
===================================================================
--- ui/propertiespalette_linebase.ui (revision 27094)
+++ ui/propertiespalette_linebase.ui (working copy)
@@ -433,7 +433,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -448,7 +448,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="buttonCapFlat">
+ <widget class="ToolButton" name="buttonCapFlat">
<property name="text">
<string/>
</property>
@@ -461,7 +461,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonCapSquare">
+ <widget class="ToolButton" name="buttonCapSquare">
<property name="text">
<string/>
</property>
@@ -471,7 +471,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonCapRound">
+ <widget class="ToolButton" name="buttonCapRound">
<property name="text">
<string/>
</property>
@@ -495,7 +495,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -510,7 +510,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="buttonJoinMiter">
+ <widget class="ToolButton" name="buttonJoinMiter">
<property name="text">
<string/>
</property>
@@ -520,7 +520,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonJoinRound">
+ <widget class="ToolButton" name="buttonJoinRound">
<property name="text">
<string/>
</property>
@@ -530,7 +530,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonJoinBevel">
+ <widget class="ToolButton" name="buttonJoinBevel">
<property name="text">
<string/>
</property>
@@ -567,9 +567,9 @@
<container>1</container>
</customwidget>
<customwidget>
- <class>ColorButton</class>
+ <class>ToolButton</class>
<extends>QToolButton</extends>
- <header>ui/widgets/color_button.h</header>
+ <header>ui/widgets/buttongroup.h</header>
</customwidget>
<customwidget>
<class>ScrSpinBox</class>
@@ -577,6 +577,11 @@
<header location="global">ui/scrspinbox.h</header>
</customwidget>
<customwidget>
+ <class>ColorButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/color_button.h</header>
+ </customwidget>
+ <customwidget>
<class>LineCombo</class>
<extends>QComboBox</extends>
<header>ui/linecombo.h</header>
Index: ui/propertiespalette_shape.cpp
===================================================================
--- ui/propertiespalette_shape.cpp (revision 27094)
+++ ui/propertiespalette_shape.cpp (working copy)
@@ -38,11 +38,18 @@
iconSetChange();
languageChange();
+ ButtonGroup * bgFlow = new ButtonGroup();
+ bgFlow->addButton(textFlowDisabled);
+ bgFlow->addButton(textFlowUsesBoundingBox);
+ bgFlow->addButton(textFlowUsesContourLine);
+ bgFlow->addButton(textFlowUsesFrameShape);
+ bgFlow->addButton(textFlowUsesImageClipping);
+
connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
connect(ScQApp, SIGNAL(localeChanged()), this, SLOT(localeChange()));
connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool)));
- connect(textFlowBtnGroup, SIGNAL(idClicked(int)), this, SLOT(handleTextFlow()));
+ connect(bgFlow, SIGNAL(idClicked(int)), this, SLOT(handleTextFlow()));
connect(editShape, SIGNAL(clicked()) , this, SLOT(handleShapeEdit()));
connect(roundRect, SIGNAL(valueChanged(double)) , this, SLOT(handleCornerRadius()));
connect(customShape, SIGNAL(FormSel(int,int,qreal*)), this, SLOT(handleNewShape(int,int,qreal*)));
Index: ui/propertiespalette_shapebase.ui
===================================================================
--- ui/propertiespalette_shapebase.ui (revision 27094)
+++ ui/propertiespalette_shapebase.ui (working copy)
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>238</width>
- <height>107</height>
+ <height>117</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@@ -54,10 +54,10 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -93,7 +93,7 @@
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -122,7 +122,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -137,7 +137,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="textFlowDisabled">
+ <widget class="ToolButton" name="textFlowDisabled">
<property name="toolTip">
<string>Text flow around frame disabled</string>
</property>
@@ -148,17 +148,14 @@
<bool>true</bool>
</property>
<property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
+ <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
</property>
- <attribute name="buttonGroup">
- <string notr="true">textFlowBtnGroup</string>
- </attribute>
</widget>
</item>
<item>
- <widget class="QToolButton" name="textFlowUsesFrameShape">
+ <widget class="ToolButton" name="textFlowUsesBoundingBox">
<property name="toolTip">
- <string>Text flow around frame shape</string>
+ <string>Text flow around bounding box</string>
</property>
<property name="checkable">
<bool>true</bool>
@@ -167,17 +164,14 @@
<bool>true</bool>
</property>
<property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
+ <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
</property>
- <attribute name="buttonGroup">
- <string notr="true">textFlowBtnGroup</string>
- </attribute>
</widget>
</item>
<item>
- <widget class="QToolButton" name="textFlowUsesBoundingBox">
+ <widget class="ToolButton" name="textFlowUsesFrameShape">
<property name="toolTip">
- <string>Text flow around bounding box</string>
+ <string>Text flow around frame shape</string>
</property>
<property name="checkable">
<bool>true</bool>
@@ -186,15 +180,12 @@
<bool>true</bool>
</property>
<property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
+ <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
</property>
- <attribute name="buttonGroup">
- <string notr="true">textFlowBtnGroup</string>
- </attribute>
</widget>
</item>
<item>
- <widget class="QToolButton" name="textFlowUsesContourLine">
+ <widget class="ToolButton" name="textFlowUsesContourLine">
<property name="toolTip">
<string>Text flow around contour line</string>
</property>
@@ -205,15 +196,12 @@
<bool>true</bool>
</property>
<property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
+ <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
</property>
- <attribute name="buttonGroup">
- <string notr="true">textFlowBtnGroup</string>
- </attribute>
</widget>
</item>
<item>
- <widget class="QToolButton" name="textFlowUsesImageClipping">
+ <widget class="ToolButton" name="textFlowUsesImageClipping">
<property name="toolTip">
<string>Text flow around image clip path</string>
</property>
@@ -224,11 +212,8 @@
<bool>true</bool>
</property>
<property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
+ <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
</property>
- <attribute name="buttonGroup">
- <string notr="true">textFlowBtnGroup</string>
- </attribute>
</widget>
</item>
</layout>
@@ -237,7 +222,7 @@
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -250,9 +235,29 @@
</layout>
</item>
<item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="NewMarginWidget" name="textFlowMargins" native="true"/>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Orientation::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
<spacer name="verticalSpacer">
<property name="orientation">
- <enum>Qt::Vertical</enum>
+ <enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -272,11 +277,22 @@
<container>1</container>
</customwidget>
<customwidget>
+ <class>ToolButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/buttongroup.h</header>
+ </customwidget>
+ <customwidget>
<class>ScrSpinBox</class>
<extends>QDoubleSpinBox</extends>
- <header>ui/scrspinbox.h</header>
+ <header location="global">ui/scrspinbox.h</header>
</customwidget>
<customwidget>
+ <class>NewMarginWidget</class>
+ <extends>QWidget</extends>
+ <header>ui/newmarginwidget.h</header>
+ <container>1</container>
+ </customwidget>
+ <customwidget>
<class>Autoforms</class>
<extends>QToolButton</extends>
<header>ui/autoform.h</header>
@@ -284,7 +300,4 @@
</customwidgets>
<resources/>
<connections/>
- <buttongroups>
- <buttongroup name="textFlowBtnGroup"/>
- </buttongroups>
</ui>
Index: ui/propertywidget_alignment.ui
===================================================================
--- ui/propertywidget_alignment.ui (revision 27094)
+++ ui/propertywidget_alignment.ui (working copy)
@@ -30,7 +30,7 @@
<number>8</number>
</property>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <layout class="QHBoxLayout" name="horizontalLayout_5" stretch="0,0,0,1">
<property name="spacing">
<number>16</number>
</property>
Index: ui/propertywidget_fontfeatures.cpp
===================================================================
--- ui/propertywidget_fontfeatures.cpp (revision 27094)
+++ ui/propertywidget_fontfeatures.cpp (working copy)
@@ -16,10 +16,9 @@
#include "scribusapp.h"
#include "scribusdoc.h"
#include "selection.h"
-
#include "fonts/fontfeatures.h"
+#include "ui/widgets/buttongroup.h"
-
PropertyWidget_FontFeatures::PropertyWidget_FontFeatures(QWidget* parent) : QFrame(parent)
{
setupUi(this);
@@ -833,7 +832,7 @@
OrdinalCheck->installEventFilter(this);
SlashedZeroCheck->installEventFilter(this);
- QButtonGroup * groupCapitals = new QButtonGroup();
+ ButtonGroup * groupCapitals = new ButtonGroup();
groupCapitals->setExclusive(true);
groupCapitals->addButton(NormalCapRadio);
groupCapitals->addButton(SmallRadio);
@@ -845,19 +844,20 @@
groupCapitals->addButton(UnicaseRadio);
groupCapitals->addButton(TitlingRadio);
- QButtonGroup * groupFractions = new QButtonGroup();
- groupFractions->setExclusive(true);
- groupFractions->addButton(DefaultFractionsRadio);
- groupFractions->addButton(DiagonalRadio);
- groupFractions->addButton(StackedRadio);
+ ButtonGroup * groupPosition = new ButtonGroup();
+ groupPosition->setExclusive(true);
+ groupPosition->addButton(DefaultPosRadio);
+ groupPosition->addButton(SubscriptRadio);
+ groupPosition->addButton(SuperscriptRadio);
+ groupPosition->addButton(OrdinalCheck);
- QButtonGroup * groupNumeralStyle = new QButtonGroup();
+ ButtonGroup * groupNumeralStyle = new ButtonGroup();
groupNumeralStyle->setExclusive(true);
groupNumeralStyle->addButton(DefaultStyleRadio);
groupNumeralStyle->addButton(LiningRadio);
groupNumeralStyle->addButton(OldStyleRadio);
- QButtonGroup * groupNumeralWidth = new QButtonGroup();
+ ButtonGroup * groupNumeralWidth = new ButtonGroup();
groupNumeralWidth->setExclusive(true);
groupNumeralWidth->addButton(DefaultWidthRadio);
groupNumeralWidth->addButton(ProportionalRadio);
@@ -870,32 +870,10 @@
HistoricalCheck->setChecked(false);
NormalCapRadio->setChecked(true);
- // SmallRadio->setChecked(false);
- // SmallFromCRadio->setChecked(false);
- // AllSmallCapsRadio->setChecked(false);
- // PetiteRadio->setChecked(false);
- // PetiteCapRadio->setChecked(false);
- // AllPetiteCapsRadio->setChecked(false);
- // UnicaseRadio->setChecked(false);
- // TitlingRadio->setChecked(false);
-
DefaultStyleRadio->setChecked(true);
- // LiningRadio->setChecked(false);
- // OldStyleRadio->setChecked(false);
-
DefaultWidthRadio->setChecked(true);
- // ProportionalRadio->setChecked(false);
- // TabularRadio->setChecked(false);
-
DefaultFractionsRadio->setChecked(true);
- // DiagonalRadio->setChecked(false);
- // StackedRadio->setChecked(false);
-
DefaultPosRadio->setChecked(true);
- // SubscriptRadio->setChecked(false);
- // SuperscriptRadio->setChecked(false);
- // OrdinalCheck->setChecked(false);
-
SlashedZeroCheck->setChecked(false);
StyleSet01->setChecked(false);
Index: ui/propertywidget_fontfeaturesbase.ui
===================================================================
--- ui/propertywidget_fontfeaturesbase.ui (revision 27094)
+++ ui/propertywidget_fontfeaturesbase.ui (working copy)
@@ -44,10 +44,10 @@
<item row="11" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
- <widget class="QToolButton" name="DefaultWidthRadio">
+ <widget class="ToolButton" name="DefaultWidthRadio">
<property name="toolTip">
<string>Default numbers width</string>
</property>
@@ -66,7 +66,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="ProportionalRadio">
+ <widget class="ToolButton" name="ProportionalRadio">
<property name="toolTip">
<string>Proportional Figures (pnum)</string>
</property>
@@ -82,7 +82,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="TabularRadio">
+ <widget class="ToolButton" name="TabularRadio">
<property name="toolTip">
<string>Tabular Figures (tnum)</string>
</property>
@@ -135,10 +135,10 @@
<item row="8" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_9">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
- <widget class="QToolButton" name="DefaultPosRadio">
+ <widget class="ToolButton" name="DefaultPosRadio">
<property name="toolTip">
<string>Normal position</string>
</property>
@@ -157,7 +157,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="SubscriptRadio">
+ <widget class="ToolButton" name="SubscriptRadio">
<property name="toolTip">
<string>Subscript (subs)</string>
</property>
@@ -173,7 +173,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="SuperscriptRadio">
+ <widget class="ToolButton" name="SuperscriptRadio">
<property name="toolTip">
<string>Superscript (sups)</string>
</property>
@@ -189,7 +189,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="OrdinalCheck">
+ <widget class="ToolButton" name="OrdinalCheck">
<property name="toolTip">
<string>Ordinals (ordn)</string>
</property>
@@ -406,10 +406,10 @@
<item row="7" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
- <widget class="QToolButton" name="NormalCapRadio">
+ <widget class="ToolButton" name="NormalCapRadio">
<property name="toolTip">
<string>Normal capitals</string>
</property>
@@ -428,7 +428,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="SmallRadio">
+ <widget class="ToolButton" name="SmallRadio">
<property name="toolTip">
<string>Small capitals (smcp)</string>
</property>
@@ -444,7 +444,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="SmallFromCRadio">
+ <widget class="ToolButton" name="SmallFromCRadio">
<property name="toolTip">
<string>Small capitals from capitals (c2sc)</string>
</property>
@@ -460,7 +460,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="AllSmallCapsRadio">
+ <widget class="ToolButton" name="AllSmallCapsRadio">
<property name="toolTip">
<string>All Small Caps (c2sc + smcp)</string>
</property>
@@ -476,7 +476,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="PetiteRadio">
+ <widget class="ToolButton" name="PetiteRadio">
<property name="toolTip">
<string>Petite capitals (pcap)</string>
</property>
@@ -492,7 +492,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="PetiteCapRadio">
+ <widget class="ToolButton" name="PetiteCapRadio">
<property name="toolTip">
<string>Petite capitals from capitals (c2pc)</string>
</property>
@@ -508,7 +508,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="AllPetiteCapsRadio">
+ <widget class="ToolButton" name="AllPetiteCapsRadio">
<property name="toolTip">
<string>All Petite Caps (c2pc + pcap)</string>
</property>
@@ -524,7 +524,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="UnicaseRadio">
+ <widget class="ToolButton" name="UnicaseRadio">
<property name="toolTip">
<string>Unicase (unic)</string>
</property>
@@ -540,7 +540,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="TitlingRadio">
+ <widget class="ToolButton" name="TitlingRadio">
<property name="toolTip">
<string>Titling (titl)</string>
</property>
@@ -622,10 +622,10 @@
<item row="12" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_8">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
- <widget class="QToolButton" name="DefaultFractionsRadio">
+ <widget class="ToolButton" name="DefaultFractionsRadio">
<property name="toolTip">
<string>No fractions</string>
</property>
@@ -644,7 +644,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="DiagonalRadio">
+ <widget class="ToolButton" name="DiagonalRadio">
<property name="toolTip">
<string>Fractions (frac)</string>
</property>
@@ -660,7 +660,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="StackedRadio">
+ <widget class="ToolButton" name="StackedRadio">
<property name="toolTip">
<string>Alternative Fractions (afrc)</string>
</property>
@@ -745,10 +745,10 @@
<item row="10" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
- <widget class="QToolButton" name="DefaultStyleRadio">
+ <widget class="ToolButton" name="DefaultStyleRadio">
<property name="toolTip">
<string>Default numbers style</string>
</property>
@@ -767,7 +767,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="LiningRadio">
+ <widget class="ToolButton" name="LiningRadio">
<property name="toolTip">
<string>Lining Figures (lnum)</string>
</property>
@@ -783,7 +783,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="OldStyleRadio">
+ <widget class="ToolButton" name="OldStyleRadio">
<property name="toolTip">
<string>Oldstyle Figures (onum)</string>
</property>
@@ -1127,6 +1127,11 @@
<extends>QToolButton</extends>
<header>ui/widgets/switch.h</header>
</customwidget>
+ <customwidget>
+ <class>ToolButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/buttongroup.h</header>
+ </customwidget>
</customwidgets>
<tabstops>
<tabstop>CommonCheck</tabstop>
Index: ui/smalignselect.cpp
===================================================================
--- ui/smalignselect.cpp (revision 27094)
+++ ui/smalignselect.cpp (working copy)
@@ -4,6 +4,8 @@
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/
+
+#include <QLayoutItem>
#include <QToolTip>
#include "smalignselect.h"
#include "iconmanager.h"
@@ -12,6 +14,9 @@
SMAlignSelect::SMAlignSelect(QWidget *parent)
: AlignSelect(parent)
{
+ QSpacerItem * spacer = new QSpacerItem(4, 0, QSizePolicy::Fixed);
+ layout()->addItem(spacer);
+
parentButton = new QToolButton(this);
parentButton->setText( "");
parentButton->setToolTip( tr("Use parent style's alignment instead of overriding it"));
Index: ui/styleselect.cpp
===================================================================
--- ui/styleselect.cpp (revision 27094)
+++ ui/styleselect.cpp (working copy)
@@ -6,6 +6,7 @@
*/
#include <QEvent>
+#include <QtWidgets/qbuttongroup.h>
#include "iconmanager.h"
#include "scribusapp.h"
@@ -130,7 +131,7 @@
StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
{
ssLayout = new QHBoxLayout(this);
- ssLayout->setSpacing(4);
+ ssLayout->setSpacing(0);
ssLayout->setContentsMargins(0, 0, 0, 0);
UnderlineVal = new UnderlineValues( nullptr );
@@ -144,6 +145,9 @@
underlineButton->setMenu(UnderlinePop);
underlineButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( underlineButton );
+
+ ssLayout->addSpacing(4);
+
underlineWordButton = new QToolButton( this );
underlineWordButton->setText( "" );
underlineWordButton->setCheckable( true );
@@ -162,30 +166,40 @@
strikeoutButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( strikeoutButton );
- ssLayout->addSpacing(12);
+ ssLayout->addSpacing(16);
- subscriptButton = new QToolButton( this );
+ subscriptButton = new ToolButton( this );
subscriptButton->setText( "" );
subscriptButton->setCheckable( true );
ssLayout->addWidget( subscriptButton );
- superscriptButton = new QToolButton( this );
+ superscriptButton = new ToolButton( this );
superscriptButton->setText( "" );
superscriptButton->setCheckable( true );
ssLayout->addWidget( superscriptButton );
- ssLayout->addSpacing(12);
+ ButtonGroup *bgSub = new ButtonGroup();
+ bgSub->setExclusive(false);
+ bgSub->addButton(subscriptButton);
+ bgSub->addButton(superscriptButton);
- allcapsButton = new QToolButton( this );
+ ssLayout->addSpacing(16);
+
+ allcapsButton = new ToolButton( this );
allcapsButton->setText("");
allcapsButton->setCheckable( true );
ssLayout->addWidget( allcapsButton );
- smallcapsButton = new QToolButton( this );
+ smallcapsButton = new ToolButton( this );
smallcapsButton->setText("");
smallcapsButton->setCheckable( true );
ssLayout->addWidget( smallcapsButton );
- ssLayout->addSpacing(12);
+ ButtonGroup *bgCaps = new ButtonGroup();
+ bgCaps->setExclusive(false);
+ bgCaps->addButton(allcapsButton);
+ bgCaps->addButton(smallcapsButton);
+ ssLayout->addSpacing(16);
+
OutlineVal = new OutlineValues( nullptr );
OutlinePop = new QMenu();
OutlineValAct = new QWidgetAction(this);
@@ -198,6 +212,8 @@
outlineButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( outlineButton );
+ ssLayout->addSpacing(4);
+
ShadowVal = new ShadowValues( nullptr );
ShadowPop = new QMenu();
ShadowValAct = new QWidgetAction(this);
Index: ui/styleselect.h
===================================================================
--- ui/styleselect.h (revision 27094)
+++ ui/styleselect.h (working copy)
@@ -21,6 +21,7 @@
#include "scrspinbox.h"
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
class SCRIBUS_API StrikeValues : public QFrame
{
@@ -130,10 +131,10 @@
QHBoxLayout* ssLayout { nullptr };
QToolButton* underlineButton { nullptr };
QToolButton* underlineWordButton { nullptr };
- QToolButton* subscriptButton { nullptr };
- QToolButton* superscriptButton { nullptr };
- QToolButton* smallcapsButton { nullptr };
- QToolButton* allcapsButton { nullptr };
+ ToolButton* subscriptButton { nullptr };
+ ToolButton* superscriptButton { nullptr };
+ ToolButton* smallcapsButton { nullptr };
+ ToolButton* allcapsButton { nullptr };
QToolButton* strikeoutButton { nullptr };
QToolButton* outlineButton { nullptr };
QToolButton* shadowButton { nullptr };
|
|
|
After some tests on Linux (Ubuntu, Manjaro KDE, Manjaro xfce, Linux Mint) and Windows 10 and 11, I came to the conclusion that the patch works as intended only when using Qt Fusion theme on these systems. When using Qt Breeze theme (default theme on KDE), Qt kvantum theme, or Qt windows11 theme, the button group widgets are not visually grouped liked they are with Fusion theme. Could this be improved ? Here are a few screenshots of PP alignment section with different themes. |
|
|
Updated patch. I could not make it work for the other UI themes. It seems like they are not fully passing everything to the QStyle and the overrides in ScribusProxyStyle will not apply. buttongroup_2025-12-13_01.diff (63,459 bytes)
diff --git a/.gitignore b/.gitignore
index 567609b12..1caa550c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,4 @@
build/
+.qtcreator/CMakeLists.txt.user
+scribus.appdata.xml
+scribus.desktop
diff --git a/scribus/CMakeLists_Sources.txt b/scribus/CMakeLists_Sources.txt
index afb5817be..efb477594 100644
--- a/scribus/CMakeLists_Sources.txt
+++ b/scribus/CMakeLists_Sources.txt
@@ -566,6 +566,7 @@ set(SCRIBUS_SOURCES
ui/docks/dock_centralwidget.cpp
ui/docks/dock_panelbase.cpp
ui/factories/scribusproxystyle.cpp
+ ui/widgets/buttongroup.cpp
ui/widgets/color_button.cpp
ui/widgets/color_slider.cpp
ui/widgets/combo_blendmode.cpp
diff --git a/scribus/ui/aligndistribute.cpp b/scribus/ui/aligndistribute.cpp
index 8ae23e937..060848c04 100644
--- a/scribus/ui/aligndistribute.cpp
+++ b/scribus/ui/aligndistribute.cpp
@@ -75,17 +75,18 @@ AlignDistributePalette::AlignDistributePalette(QWidget* parent) : DockPanelBase(
//set up scrspinboxes
ad->distributeDistSpinBox->setValues(-10000.0, 10000.0, 2, 0.0);
- groupReference = new QButtonGroup();
+ groupReference = new ScButtonGroup();
groupReference->addButton(ad->buttonReferenceFirst, 0);
+ groupReference->addButton(ad->buttonReferenceSelection, 5);
groupReference->addButton(ad->buttonReferenceLast, 1);
groupReference->addButton(ad->buttonReferencePage, 2);
groupReference->addButton(ad->buttonReferenceMargins, 3);
groupReference->addButton(ad->buttonReferenceGuide, 4);
- groupReference->addButton(ad->buttonReferenceSelection, 5);
+
ad->buttonReferenceFirst->setChecked(true);
- groupMode = new QButtonGroup();
+ groupMode = new ScButtonGroup();
groupMode->addButton(ad->buttonModeMove, 0);
groupMode->addButton(ad->buttonModeResize, 1);
ad->buttonModeMove->setChecked(true);
diff --git a/scribus/ui/aligndistribute.h b/scribus/ui/aligndistribute.h
index 799eebaee..c4934f28f 100644
--- a/scribus/ui/aligndistribute.h
+++ b/scribus/ui/aligndistribute.h
@@ -32,10 +32,11 @@ for which a new license (GPL+exception) is in place.
class QEvent;
+#include "docks/dock_panelbase.h"
#include "scribusapi.h"
#include "scribusdoc.h"
#include "ui/scdockpalette.h"
-#include "docks/dock_panelbase.h"
+#include "ui/widgets/buttongroup.h"
class QComboBox;
class QLabel;
@@ -81,8 +82,8 @@ public slots:
protected:
ScribusView *currView { nullptr };
AlignDistribute * ad {nullptr};
- QButtonGroup* groupReference;
- QButtonGroup* groupMode;
+ ScButtonGroup* groupReference;
+ ScButtonGroup* groupMode;
void changeEvent(QEvent *e) override;
diff --git a/scribus/ui/aligndistribute.ui b/scribus/ui/aligndistribute.ui
index 0f59ef964..523e2f735 100644
--- a/scribus/ui/aligndistribute.ui
+++ b/scribus/ui/aligndistribute.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>322</width>
- <height>426</height>
+ <height>429</height>
</rect>
</property>
<property name="windowTitle">
@@ -63,7 +63,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -78,7 +78,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="buttonReferenceFirst">
+ <widget class="ScToolButton" name="buttonReferenceFirst">
<property name="text">
<string/>
</property>
@@ -88,7 +88,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonReferenceSelection">
+ <widget class="ScToolButton" name="buttonReferenceSelection">
<property name="text">
<string/>
</property>
@@ -98,7 +98,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonReferenceLast">
+ <widget class="ScToolButton" name="buttonReferenceLast">
<property name="text">
<string/>
</property>
@@ -108,7 +108,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonReferencePage">
+ <widget class="ScToolButton" name="buttonReferencePage">
<property name="text">
<string/>
</property>
@@ -118,7 +118,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonReferenceMargins">
+ <widget class="ScToolButton" name="buttonReferenceMargins">
<property name="text">
<string/>
</property>
@@ -147,7 +147,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -162,7 +162,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="buttonModeMove">
+ <widget class="ScToolButton" name="buttonModeMove">
<property name="text">
<string/>
</property>
@@ -172,7 +172,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonModeResize">
+ <widget class="ScToolButton" name="buttonModeResize">
<property name="text">
<string/>
</property>
@@ -1137,10 +1137,15 @@
<addpagemethod>setWidget</addpagemethod>
<container>1</container>
</customwidget>
+ <customwidget>
+ <class>ScToolButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/buttongroup.h</header>
+ </customwidget>
<customwidget>
<class>ScrSpinBox</class>
<extends>QDoubleSpinBox</extends>
- <header>ui/scrspinbox.h</header>
+ <header location="global">ui/scrspinbox.h</header>
</customwidget>
<customwidget>
<class>PulsingToolButton</class>
diff --git a/scribus/ui/alignselect.cpp b/scribus/ui/alignselect.cpp
index 725617ac4..7e98650c2 100644
--- a/scribus/ui/alignselect.cpp
+++ b/scribus/ui/alignselect.cpp
@@ -16,26 +16,26 @@ for which a new license (GPL+exception) is in place.
AlignSelect::AlignSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ScButtonGroup(this);
- TextL = new QToolButton( this );
+ TextL = new ScToolButton( this );
TextL->setCheckable( true );
TextL->setChecked( true );
buttonGroup->addButton(TextL, 0);
- TextC = new QToolButton( this );
+ TextC = new ScToolButton( this );
TextC->setCheckable( true );
buttonGroup->addButton(TextC, 1);
- TextR = new QToolButton( this );
+ TextR = new ScToolButton( this );
TextR->setCheckable( true );
buttonGroup->addButton(TextR, 2);
- TextB = new QToolButton( this );
+ TextB = new ScToolButton( this );
TextB->setCheckable( true );
buttonGroup->addButton(TextB, 3);
- TextF = new QToolButton( this );
+ TextF = new ScToolButton( this );
TextF->setCheckable( true );
buttonGroup->addButton(TextF, 4);
@@ -45,6 +45,9 @@ AlignSelect::AlignSelect(QWidget* parent) : FormWidget(parent)
addWidget(TextB);
addWidget(TextF);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
diff --git a/scribus/ui/alignselect.h b/scribus/ui/alignselect.h
index 9bd60ff9c..16399fe22 100644
--- a/scribus/ui/alignselect.h
+++ b/scribus/ui/alignselect.h
@@ -14,6 +14,7 @@ for which a new license (GPL+exception) is in place.
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API AlignSelect : public FormWidget
@@ -30,12 +31,12 @@ public:
int selectedId() const;
int selected { 0 };
- QButtonGroup* buttonGroup { nullptr };
- QToolButton* TextL { nullptr };
- QToolButton* TextR { nullptr };
- QToolButton* TextC { nullptr };
- QToolButton* TextB { nullptr };
- QToolButton* TextF { nullptr };
+ ScButtonGroup* buttonGroup { nullptr };
+ ScToolButton* TextL { nullptr };
+ ScToolButton* TextR { nullptr };
+ ScToolButton* TextC { nullptr };
+ ScToolButton* TextB { nullptr };
+ ScToolButton* TextF { nullptr };
public slots:
void iconSetChange();
diff --git a/scribus/ui/alignverticalselect.cpp b/scribus/ui/alignverticalselect.cpp
index 13a623496..c9e34efc5 100644
--- a/scribus/ui/alignverticalselect.cpp
+++ b/scribus/ui/alignverticalselect.cpp
@@ -16,19 +16,19 @@ for which a new license (GPL+exception) is in place.
AlignVerticalSelect::AlignVerticalSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ScButtonGroup(this);
buttonGroup->setExclusive(true);
- TextT = new QToolButton( this );
+ TextT = new ScToolButton( this );
TextT->setCheckable( true );
TextT->setChecked( true );
buttonGroup->addButton(TextT, 0);
- TextC = new QToolButton( this );
+ TextC = new ScToolButton( this );
TextC->setCheckable( true );
buttonGroup->addButton(TextC, 1);
- TextB = new QToolButton( this );
+ TextB = new ScToolButton( this );
TextB->setCheckable( true );
buttonGroup->addButton(TextB, 2);
@@ -36,6 +36,9 @@ AlignVerticalSelect::AlignVerticalSelect(QWidget* parent) : FormWidget(parent)
addWidget(TextC);
addWidget(TextB);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
diff --git a/scribus/ui/alignverticalselect.h b/scribus/ui/alignverticalselect.h
index 4a5d6b0b0..04fa43765 100644
--- a/scribus/ui/alignverticalselect.h
+++ b/scribus/ui/alignverticalselect.h
@@ -14,6 +14,7 @@ for which a new license (GPL+exception) is in place.
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API AlignVerticalSelect : public FormWidget
@@ -28,10 +29,10 @@ public:
void setStyle(int s);
int getStyle() const;
- QButtonGroup* buttonGroup { nullptr };
- QToolButton* TextT { nullptr };
- QToolButton* TextC { nullptr };
- QToolButton* TextB { nullptr };
+ ScButtonGroup* buttonGroup { nullptr };
+ ScToolButton* TextT { nullptr };
+ ScToolButton* TextC { nullptr };
+ ScToolButton* TextB { nullptr };
public slots:
void iconSetChange();
diff --git a/scribus/ui/colorpicker/colorpicker_enum.h b/scribus/ui/colorpicker/colorpicker_enum.h
index ca6427b6b..5888a6c0a 100644
--- a/scribus/ui/colorpicker/colorpicker_enum.h
+++ b/scribus/ui/colorpicker/colorpicker_enum.h
@@ -100,7 +100,6 @@ struct CPGradientVectorData
double C4Y = 0.0;
double C5X = 0.0;
double C5Y = 0.0;
-
};
struct CPColorData
diff --git a/scribus/ui/directionselect.cpp b/scribus/ui/directionselect.cpp
index 24556ec8f..6b38de7c3 100644
--- a/scribus/ui/directionselect.cpp
+++ b/scribus/ui/directionselect.cpp
@@ -15,24 +15,32 @@ for which a new license (GPL+exception) is in place.
DirectionSelect::DirectionSelect(QWidget* parent) : FormWidget(parent)
{
- buttonGroup = new QButtonGroup(this);
+ buttonGroup = new ScButtonGroup(this);
- LTR = new QToolButton( this );
+ QHBoxLayout* lay = new QHBoxLayout();
+ lay->setContentsMargins(0, 0, 0, 0);
+ lay->setSpacing(0);
+ lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
+ setLayout(lay);
+
+ LTR = new ScToolButton( this );
LTR->setCheckable( true );
LTR->setChecked( true );
addWidget( LTR );
buttonGroup->addButton(LTR, 0);
- RTL = new QToolButton( this );
+ RTL = new ScToolButton( this );
RTL->setCheckable( true );
addWidget( RTL );
buttonGroup->addButton(RTL, 1);
- resize(minimumSizeHint());
+ lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
iconSetChange();
languageChange();
+ resize(minimumSizeHint());
+
connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
connect(buttonGroup, SIGNAL(idClicked(int)), this, SLOT(setTypeStyle(int)));
}
diff --git a/scribus/ui/directionselect.h b/scribus/ui/directionselect.h
index 3d69cd683..624b21d8f 100644
--- a/scribus/ui/directionselect.h
+++ b/scribus/ui/directionselect.h
@@ -16,6 +16,7 @@ for which a new license (GPL+exception) is in place.
class QEvent;
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class SCRIBUS_API DirectionSelect : public FormWidget
@@ -30,9 +31,9 @@ class SCRIBUS_API DirectionSelect : public FormWidget
int getStyle();
int selectedId();
- QButtonGroup* buttonGroup { nullptr };
- QToolButton* RTL { nullptr };
- QToolButton* LTR { nullptr };
+ ScButtonGroup* buttonGroup { nullptr };
+ ScToolButton* RTL { nullptr };
+ ScToolButton* LTR { nullptr };
public slots:
void iconSetChange();
diff --git a/scribus/ui/factories/scribusproxystyle.cpp b/scribus/ui/factories/scribusproxystyle.cpp
index 94ce7dbde..66e7e00ee 100644
--- a/scribus/ui/factories/scribusproxystyle.cpp
+++ b/scribus/ui/factories/scribusproxystyle.cpp
@@ -18,6 +18,7 @@
#include "prefsmanager.h"
#include "scribus.h"
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/color_slider.h"
#include "util_gui.h"
@@ -66,12 +67,86 @@ ScribusProxyStyle* ScribusProxyStyle::instance()
return static_cast<ScribusProxyStyle*>(qApp->style());
}
+void ScribusProxyStyle::drawControl(ControlElement ce, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
+{
+ switch (ce)
+ {
+ case QStyle::ControlElement::CE_ToolButtonLabel:
+ {
+ QStyleOptionToolButton soButton = *qstyleoption_cast<const QStyleOptionToolButton *>(option);
+ const ScToolButton *wdg = qobject_cast<const ScToolButton *>(widget);
+
+ if (wdg)
+ {
+ QRect rect = soButton.rect;
+ int t = widget->rect().top() + 4;
+ int b = widget->rect().bottom() - 4;
+ int r = widget->rect().right();
+
+ switch (wdg->position())
+ {
+ case ScToolButton::Right:
+ soButton.rect.adjust(0, 0, rect.width() / 2, 0);
+ break;
+ case ScToolButton::Left:
+ soButton.rect.adjust(-rect.width() / 2, 0, 0, 0);
+ painter->setPen(option->palette.color(QPalette::Mid));
+ painter->drawLine(r, t, r, b);
+ break;
+ case ScToolButton::Center:
+ soButton.rect.adjust(-rect.width() / 2, 0, rect.width() / 2, 0);
+ painter->setPen(option->palette.color(QPalette::Mid));
+ painter->drawLine(r, t, r, b);
+ break;
+ default:
+ // do nothing
+ break;
+ }
+
+ return QProxyStyle::drawControl(ce, &soButton, painter, widget);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ return QProxyStyle::drawControl(ce, option, painter, widget);
+}
+
QRect ScribusProxyStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *option, SubControl sc, const QWidget *widget) const
{
QRect rect = QProxyStyle::subControlRect(cc, option, sc, widget);
switch (cc)
{
+ case QStyle::ComplexControl::CC_ToolButton:
+ {
+ const QStyleOptionToolButton *soButton = qstyleoption_cast<const QStyleOptionToolButton *>(option);
+ const ScToolButton *wdg = qobject_cast<const ScToolButton *>(widget);
+
+ if (soButton && wdg)
+ {
+ switch (wdg->position())
+ {
+ case ScToolButton::Left:
+ rect.adjust(0, 0, rect.width(), 0);
+ break;
+ case ScToolButton::Center:
+ rect.adjust(-rect.width() / 2, 0, rect.width() / 2, 0);
+ break;
+ case ScToolButton::Right:
+ rect.adjust(-rect.width(), 0, 0, 0);
+ break;
+ default:
+ // do nothing
+ break;
+ }
+
+ return visualRect(soButton->direction, soButton->rect, rect);
+ }
+ }
+ break;
case QStyle::ComplexControl::CC_Slider:
{
const QStyleOptionSlider *soSlider = qstyleoption_cast<const QStyleOptionSlider *>(option);
@@ -225,6 +300,7 @@ void ScribusProxyStyle::drawComplexControl(ComplexControl cc, const QStyleOption
}
QProxyStyle::drawComplexControl(cc, opt, painter, widget);
+
}
bool ScribusProxyStyle::eventFilter(QObject *object, QEvent *event)
diff --git a/scribus/ui/factories/scribusproxystyle.h b/scribus/ui/factories/scribusproxystyle.h
index 308d8594b..2c7d122bf 100644
--- a/scribus/ui/factories/scribusproxystyle.h
+++ b/scribus/ui/factories/scribusproxystyle.h
@@ -21,6 +21,7 @@ public:
static ScribusProxyStyle* instance();
QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget = nullptr) const override;
+ void drawControl(QStyle::ControlElement el, const QStyleOption *opt, QPainter *painter, const QWidget *widget = nullptr) const override;
void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *painter, const QWidget *widget) const override;
protected:
diff --git a/scribus/ui/flopwidget.cpp b/scribus/ui/flopwidget.cpp
index 0b3a537b9..41340fe06 100644
--- a/scribus/ui/flopwidget.cpp
+++ b/scribus/ui/flopwidget.cpp
@@ -11,22 +11,22 @@ for which a new license (GPL+exception) is in place.
#include "scribusapp.h"
FlopWidget::FlopWidget(QWidget* parent) : FormWidget(parent)
-{
+{
- flopRealHeight = new QToolButton();
+ flopRealHeight = new ScToolButton();
flopRealHeight->setCheckable(true);
flopRealHeight->setChecked(true);
- flopFontAscent = new QToolButton();
+ flopFontAscent = new ScToolButton();
flopFontAscent->setCheckable(true);
- flopLineSpacing = new QToolButton();
+ flopLineSpacing = new ScToolButton();
flopLineSpacing->setCheckable(true);
- flopBaselineGrid = new QToolButton();
+ flopBaselineGrid = new ScToolButton();
flopBaselineGrid->setCheckable(true);
- flopGroup = new QButtonGroup();
+ flopGroup = new ScButtonGroup();
flopGroup->setExclusive(true);
- flopGroup->addButton(flopRealHeight, RealHeightID);
flopGroup->addButton(flopFontAscent, FontAscentID);
+ flopGroup->addButton(flopRealHeight, RealHeightID);
flopGroup->addButton(flopLineSpacing, LineSpacingID);
flopGroup->addButton(flopBaselineGrid, BaselineGridID);
@@ -35,6 +35,9 @@ FlopWidget::FlopWidget(QWidget* parent) : FormWidget(parent)
addWidget(flopLineSpacing);
addWidget(flopBaselineGrid);
+ // Modifiy layout spacing. Layout is created by addWidget()
+ layout()->setSpacing(0);
+
iconSetChange();
languageChange();
diff --git a/scribus/ui/flopwidget.h b/scribus/ui/flopwidget.h
index cdb682da5..0e4dbff85 100644
--- a/scribus/ui/flopwidget.h
+++ b/scribus/ui/flopwidget.h
@@ -9,7 +9,9 @@ for which a new license (GPL+exception) is in place.
#include <QButtonGroup>
+#include <QHBoxLayout>
#include <QToolButton>
+#include "ui/widgets/buttongroup.h"
#include "ui/widgets/form_widget.h"
class ScribusDoc;
@@ -31,11 +33,11 @@ public:
FlopWidget(QWidget* parent);
~FlopWidget() {};
- QButtonGroup *flopGroup;
- QToolButton *flopRealHeight = {nullptr};
- QToolButton *flopFontAscent = {nullptr};
- QToolButton *flopLineSpacing = {nullptr};
- QToolButton *flopBaselineGrid = {nullptr};
+ ScButtonGroup *flopGroup;
+ ScToolButton *flopRealHeight = {nullptr};
+ ScToolButton *flopFontAscent = {nullptr};
+ ScToolButton *flopLineSpacing = {nullptr};
+ ScToolButton *flopBaselineGrid = {nullptr};
protected:
diff --git a/scribus/ui/newdocdialog.cpp b/scribus/ui/newdocdialog.cpp
index 4a5c52eb9..8e1c6ab62 100644
--- a/scribus/ui/newdocdialog.cpp
+++ b/scribus/ui/newdocdialog.cpp
@@ -143,12 +143,12 @@ void NewDocDialog::createNewDocPage()
comboSortSizes->addItem( tr("Size Desc"), PageSizeList::DimensionDesc);
comboSortSizes->setCurrentIndex(0);
- pageOrientationButtons = new QButtonGroup();
+ pageOrientationButtons = new ScButtonGroup();
pageOrientationButtons->addButton(buttonVertical, 0);
pageOrientationButtons->addButton(buttonHorizontal, 1);
pageOrientationButtons->button(orientation)->setChecked(true);
- pageLayoutButtons = new QButtonGroup();
+ pageLayoutButtons = new ScButtonGroup();
pageLayoutButtons->addButton(buttonSinglePage, 0);
pageLayoutButtons->addButton(buttonDoublePageLeft, 1);
pageLayoutButtons->addButton(buttonDoublePageRight, 2);
diff --git a/scribus/ui/newdocdialog.h b/scribus/ui/newdocdialog.h
index a65550f3d..eacc7075a 100644
--- a/scribus/ui/newdocdialog.h
+++ b/scribus/ui/newdocdialog.h
@@ -34,6 +34,7 @@ class QSpinBox;
#include "scribusstructs.h"
#include "ui/customfdialog.h"
#include "ui/nftwidget.h"
+#include "ui/widgets/buttongroup.h"
#include "ui_newdocdialog.h"
@@ -120,8 +121,8 @@ private slots:
protected:
PrefsManager& prefsManager;
QStringList recentDocList;
- QButtonGroup* pageOrientationButtons;
- QButtonGroup* pageLayoutButtons;
+ ScButtonGroup* pageOrientationButtons;
+ ScButtonGroup* pageLayoutButtons;
double m_unitRatio { 1.0 };
int m_orientation { 0 };
diff --git a/scribus/ui/newdocdialog.ui b/scribus/ui/newdocdialog.ui
index 53c60dcff..a8b235536 100644
--- a/scribus/ui/newdocdialog.ui
+++ b/scribus/ui/newdocdialog.ui
@@ -123,8 +123,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>267</width>
- <height>564</height>
+ <width>319</width>
+ <height>582</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
@@ -330,7 +330,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -358,7 +358,7 @@
</spacer>
</item>
<item>
- <widget class="QToolButton" name="buttonVertical">
+ <widget class="ScToolButton" name="buttonVertical">
<property name="text">
<string/>
</property>
@@ -374,7 +374,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonHorizontal">
+ <widget class="ScToolButton" name="buttonHorizontal">
<property name="text">
<string/>
</property>
@@ -430,6 +430,9 @@
<string>Layout</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_9">
+ <property name="spacing">
+ <number>0</number>
+ </property>
<property name="leftMargin">
<number>0</number>
</property>
@@ -443,38 +446,34 @@
<number>0</number>
</property>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_10">
- <item>
- <widget class="QToolButton" name="buttonSinglePage">
- <property name="text">
- <string/>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="buttonDoublePageLeft">
- <property name="text">
- <string/>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="buttonDoublePageRight">
- <property name="text">
- <string/>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="ScToolButton" name="buttonSinglePage">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="ScToolButton" name="buttonDoublePageLeft">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="ScToolButton" name="buttonDoublePageRight">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
</item>
</layout>
</widget>
@@ -821,10 +820,15 @@
<addpagemethod>setWidget</addpagemethod>
<container>1</container>
</customwidget>
+ <customwidget>
+ <class>ScToolButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/buttongroup.h</header>
+ </customwidget>
<customwidget>
<class>ScrSpinBox</class>
<extends>QDoubleSpinBox</extends>
- <header>ui/scrspinbox.h</header>
+ <header location="global">ui/scrspinbox.h</header>
</customwidget>
<customwidget>
<class>NewMarginWidget</class>
diff --git a/scribus/ui/propertiespalette_fill.cpp b/scribus/ui/propertiespalette_fill.cpp
index 6ccfe74fc..fc734d281 100644
--- a/scribus/ui/propertiespalette_fill.cpp
+++ b/scribus/ui/propertiespalette_fill.cpp
@@ -8,6 +8,7 @@
#include "selection.h"
#include "undomanager.h"
#include "ui/colorpicker/colorpicker.h"
+#include "ui/widgets/buttongroup.h"
PropertiesPalette_Fill::PropertiesPalette_Fill(QWidget *parent) :
QWidget(parent)
@@ -23,6 +24,10 @@ PropertiesPalette_Fill::PropertiesPalette_Fill(QWidget *parent) :
undoManager = UndoManager::instance();
+ ScButtonGroup * fillRuleGroup = new ScButtonGroup();
+ fillRuleGroup->addButton(evenOdd);
+ fillRuleGroup->addButton(nonZero);
+
iconSetChange();
languageChange();
diff --git a/scribus/ui/propertiespalette_fill.ui b/scribus/ui/propertiespalette_fill.ui
index d3836a2d5..5dd9cd327 100644
--- a/scribus/ui/propertiespalette_fill.ui
+++ b/scribus/ui/propertiespalette_fill.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>335</width>
+ <width>348</width>
<height>68</height>
</rect>
</property>
@@ -151,7 +151,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -166,7 +166,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="evenOdd">
+ <widget class="ScToolButton" name="evenOdd">
<property name="text">
<string/>
</property>
@@ -179,7 +179,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="nonZero">
+ <widget class="ScToolButton" name="nonZero">
<property name="text">
<string/>
</property>
@@ -197,7 +197,7 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -218,6 +218,11 @@
<header>ui/widgets/form_widget.h</header>
<container>1</container>
</customwidget>
+ <customwidget>
+ <class>ScToolButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/buttongroup.h</header>
+ </customwidget>
<customwidget>
<class>ColorButton</class>
<extends>QToolButton</extends>
diff --git a/scribus/ui/propertiespalette_line.cpp b/scribus/ui/propertiespalette_line.cpp
index f551aab15..ab40fd1ec 100644
--- a/scribus/ui/propertiespalette_line.cpp
+++ b/scribus/ui/propertiespalette_line.cpp
@@ -39,15 +39,15 @@ PropertiesPalette_Line::PropertiesPalette_Line( QWidget* parent) : QWidget(paren
setupUi(this);
setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
- buttonsCaps = new QButtonGroup();
+ buttonsCaps = new ScButtonGroup();
buttonsCaps->addButton(buttonCapFlat, 0);
buttonsCaps->addButton(buttonCapSquare, 1);
buttonsCaps->addButton(buttonCapRound, 2);
- buttonsJoins = new QButtonGroup();
+ buttonsJoins = new ScButtonGroup();
buttonsJoins->addButton(buttonJoinMiter, 0);
- buttonsJoins->addButton(buttonJoinBevel, 1);
buttonsJoins->addButton(buttonJoinRound, 2);
+ buttonsJoins->addButton(buttonJoinBevel, 1);
lineType->addItem( tr("Custom"));
diff --git a/scribus/ui/propertiespalette_line.h b/scribus/ui/propertiespalette_line.h
index d22b310da..01b9530af 100644
--- a/scribus/ui/propertiespalette_line.h
+++ b/scribus/ui/propertiespalette_line.h
@@ -12,6 +12,7 @@ for which a new license (GPL+exception) is in place.
#include <QListWidgetItem>
#include "scribusapi.h"
#include "scguardedptr.h"
+#include "ui/widgets/buttongroup.h"
#include "units.h"
class ArrowChooser;
@@ -43,8 +44,8 @@ protected:
PageItem *m_item {nullptr};
ScribusMainWindow* m_ScMW {nullptr};
ScGuardedPtr<ScribusDoc> m_doc;
- QButtonGroup *buttonsCaps;
- QButtonGroup *buttonsJoins;
+ ScButtonGroup *buttonsCaps;
+ ScButtonGroup *buttonsJoins;
LineMarkerSelector *lineMarkerSelectorStart;
LineMarkerSelector *lineMarkerSelectorEnd;
diff --git a/scribus/ui/propertiespalette_linebase.ui b/scribus/ui/propertiespalette_linebase.ui
index 084d424bb..1f15c6640 100644
--- a/scribus/ui/propertiespalette_linebase.ui
+++ b/scribus/ui/propertiespalette_linebase.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>315</width>
+ <width>327</width>
<height>235</height>
</rect>
</property>
@@ -433,7 +433,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -448,7 +448,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="buttonCapFlat">
+ <widget class="ScToolButton" name="buttonCapFlat">
<property name="text">
<string/>
</property>
@@ -461,7 +461,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonCapSquare">
+ <widget class="ScToolButton" name="buttonCapSquare">
<property name="text">
<string/>
</property>
@@ -471,7 +471,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonCapRound">
+ <widget class="ScToolButton" name="buttonCapRound">
<property name="text">
<string/>
</property>
@@ -495,7 +495,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -510,7 +510,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="buttonJoinMiter">
+ <widget class="ScToolButton" name="buttonJoinMiter">
<property name="text">
<string/>
</property>
@@ -520,7 +520,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonJoinRound">
+ <widget class="ScToolButton" name="buttonJoinRound">
<property name="text">
<string/>
</property>
@@ -530,7 +530,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="buttonJoinBevel">
+ <widget class="ScToolButton" name="buttonJoinBevel">
<property name="text">
<string/>
</property>
@@ -567,15 +567,25 @@
<container>1</container>
</customwidget>
<customwidget>
- <class>ColorButton</class>
+ <class>ScToolButton</class>
<extends>QToolButton</extends>
- <header>ui/widgets/color_button.h</header>
+ <header>ui/widgets/buttongroup.h</header>
</customwidget>
<customwidget>
<class>ScrSpinBox</class>
<extends>QDoubleSpinBox</extends>
<header location="global">ui/scrspinbox.h</header>
</customwidget>
+ <customwidget>
+ <class>ColorButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/color_button.h</header>
+ </customwidget>
+ <customwidget>
+ <class>ComboBlendMode</class>
+ <extends>QComboBox</extends>
+ <header>ui/widgets/combo_blendmode.h</header>
+ </customwidget>
<customwidget>
<class>LineCombo</class>
<extends>QComboBox</extends>
@@ -587,11 +597,6 @@
<header>ui/dasheditor.h</header>
<container>1</container>
</customwidget>
- <customwidget>
- <class>ComboBlendMode</class>
- <extends>QComboBox</extends>
- <header>ui/widgets/combo_blendmode.h</header>
- </customwidget>
<customwidget>
<class>ComboLineStyle</class>
<extends>QComboBox</extends>
diff --git a/scribus/ui/propertiespalette_shape.cpp b/scribus/ui/propertiespalette_shape.cpp
index e34647e9c..7f21b1a35 100644
--- a/scribus/ui/propertiespalette_shape.cpp
+++ b/scribus/ui/propertiespalette_shape.cpp
@@ -38,11 +38,18 @@ PropertiesPalette_Shape::PropertiesPalette_Shape( QWidget* parent)
iconSetChange();
languageChange();
+ ScButtonGroup * bgFlow = new ScButtonGroup();
+ bgFlow->addButton(textFlowDisabled);
+ bgFlow->addButton(textFlowUsesBoundingBox);
+ bgFlow->addButton(textFlowUsesContourLine);
+ bgFlow->addButton(textFlowUsesFrameShape);
+ bgFlow->addButton(textFlowUsesImageClipping);
+
connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
connect(ScQApp, SIGNAL(localeChanged()), this, SLOT(localeChange()));
connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool)));
- connect(textFlowBtnGroup, SIGNAL(idClicked(int)), this, SLOT(handleTextFlow()));
+ connect(bgFlow, SIGNAL(idClicked(int)), this, SLOT(handleTextFlow()));
connect(editShape, SIGNAL(clicked()) , this, SLOT(handleShapeEdit()));
connect(roundRect, SIGNAL(valueChanged(double)) , this, SLOT(handleCornerRadius()));
connect(customShape, SIGNAL(FormSel(int,int,qreal*)), this, SLOT(handleNewShape(int,int,qreal*)));
diff --git a/scribus/ui/propertiespalette_shapebase.ui b/scribus/ui/propertiespalette_shapebase.ui
index 48125e54a..8ccd18b6a 100644
--- a/scribus/ui/propertiespalette_shapebase.ui
+++ b/scribus/ui/propertiespalette_shapebase.ui
@@ -54,10 +54,10 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -93,7 +93,7 @@
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -122,7 +122,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
@@ -137,7 +137,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="textFlowDisabled">
+ <widget class="ScToolButton" name="textFlowDisabled">
<property name="toolTip">
<string>Text flow around frame disabled</string>
</property>
@@ -148,17 +148,14 @@
<bool>true</bool>
</property>
<property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
+ <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
</property>
- <attribute name="buttonGroup">
- <string notr="true">textFlowBtnGroup</string>
- </attribute>
</widget>
</item>
<item>
- <widget class="QToolButton" name="textFlowUsesFrameShape">
+ <widget class="ScToolButton" name="textFlowUsesBoundingBox">
<property name="toolTip">
- <string>Text flow around frame shape</string>
+ <string>Text flow around bounding box</string>
</property>
<property name="checkable">
<bool>true</bool>
@@ -167,17 +164,14 @@
<bool>true</bool>
</property>
<property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
+ <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
</property>
- <attribute name="buttonGroup">
- <string notr="true">textFlowBtnGroup</string>
- </attribute>
</widget>
</item>
<item>
- <widget class="QToolButton" name="textFlowUsesBoundingBox">
+ <widget class="ScToolButton" name="textFlowUsesFrameShape">
<property name="toolTip">
- <string>Text flow around bounding box</string>
+ <string>Text flow around frame shape</string>
</property>
<property name="checkable">
<bool>true</bool>
@@ -186,15 +180,12 @@
<bool>true</bool>
</property>
<property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
+ <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
</property>
- <attribute name="buttonGroup">
- <string notr="true">textFlowBtnGroup</string>
- </attribute>
</widget>
</item>
<item>
- <widget class="QToolButton" name="textFlowUsesContourLine">
+ <widget class="ScToolButton" name="textFlowUsesContourLine">
<property name="toolTip">
<string>Text flow around contour line</string>
</property>
@@ -205,15 +196,12 @@
<bool>true</bool>
</property>
<property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
+ <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
</property>
- <attribute name="buttonGroup">
- <string notr="true">textFlowBtnGroup</string>
- </attribute>
</widget>
</item>
<item>
- <widget class="QToolButton" name="textFlowUsesImageClipping">
+ <widget class="ScToolButton" name="textFlowUsesImageClipping">
<property name="toolTip">
<string>Text flow around image clip path</string>
</property>
@@ -224,11 +212,8 @@
<bool>true</bool>
</property>
<property name="toolButtonStyle">
- <enum>Qt::ToolButtonIconOnly</enum>
+ <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
</property>
- <attribute name="buttonGroup">
- <string notr="true">textFlowBtnGroup</string>
- </attribute>
</widget>
</item>
</layout>
@@ -237,7 +222,7 @@
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -252,7 +237,7 @@
<item>
<spacer name="verticalSpacer">
<property name="orientation">
- <enum>Qt::Vertical</enum>
+ <enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -271,10 +256,15 @@
<header>ui/widgets/form_widget.h</header>
<container>1</container>
</customwidget>
+ <customwidget>
+ <class>ScToolButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/buttongroup.h</header>
+ </customwidget>
<customwidget>
<class>ScrSpinBox</class>
<extends>QDoubleSpinBox</extends>
- <header>ui/scrspinbox.h</header>
+ <header location="global">ui/scrspinbox.h</header>
</customwidget>
<customwidget>
<class>Autoforms</class>
@@ -284,7 +274,4 @@
</customwidgets>
<resources/>
<connections/>
- <buttongroups>
- <buttongroup name="textFlowBtnGroup"/>
- </buttongroups>
</ui>
diff --git a/scribus/ui/propertywidget_alignment.ui b/scribus/ui/propertywidget_alignment.ui
index 2f3543edc..e208b1d61 100644
--- a/scribus/ui/propertywidget_alignment.ui
+++ b/scribus/ui/propertywidget_alignment.ui
@@ -30,7 +30,7 @@
<number>8</number>
</property>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <layout class="QHBoxLayout" name="horizontalLayout_5" stretch="0,0,0,1">
<property name="spacing">
<number>16</number>
</property>
diff --git a/scribus/ui/propertywidget_fontfeatures.cpp b/scribus/ui/propertywidget_fontfeatures.cpp
index 3e2dbd002..9ee39972a 100644
--- a/scribus/ui/propertywidget_fontfeatures.cpp
+++ b/scribus/ui/propertywidget_fontfeatures.cpp
@@ -18,6 +18,7 @@ for which a new license (GPL+exception) is in place.
#include "selection.h"
#include "fonts/fontfeatures.h"
+#include "ui/widgets/buttongroup.h"
PropertyWidget_FontFeatures::PropertyWidget_FontFeatures(QWidget* parent) : QFrame(parent)
@@ -833,7 +834,7 @@ void PropertyWidget_FontFeatures::initWidgets()
OrdinalCheck->installEventFilter(this);
SlashedZeroCheck->installEventFilter(this);
- QButtonGroup * groupCapitals = new QButtonGroup();
+ ScButtonGroup * groupCapitals = new ScButtonGroup();
groupCapitals->setExclusive(true);
groupCapitals->addButton(NormalCapRadio);
groupCapitals->addButton(SmallRadio);
@@ -845,19 +846,26 @@ void PropertyWidget_FontFeatures::initWidgets()
groupCapitals->addButton(UnicaseRadio);
groupCapitals->addButton(TitlingRadio);
- QButtonGroup * groupFractions = new QButtonGroup();
+ ScButtonGroup * groupPosition = new ScButtonGroup();
+ groupPosition->setExclusive(true);
+ groupPosition->addButton(DefaultPosRadio);
+ groupPosition->addButton(SubscriptRadio);
+ groupPosition->addButton(SuperscriptRadio);
+ groupPosition->addButton(OrdinalCheck);
+
+ ScButtonGroup * groupFractions = new ScButtonGroup();
groupFractions->setExclusive(true);
groupFractions->addButton(DefaultFractionsRadio);
groupFractions->addButton(DiagonalRadio);
groupFractions->addButton(StackedRadio);
- QButtonGroup * groupNumeralStyle = new QButtonGroup();
+ ScButtonGroup * groupNumeralStyle = new ScButtonGroup();
groupNumeralStyle->setExclusive(true);
groupNumeralStyle->addButton(DefaultStyleRadio);
groupNumeralStyle->addButton(LiningRadio);
groupNumeralStyle->addButton(OldStyleRadio);
- QButtonGroup * groupNumeralWidth = new QButtonGroup();
+ ScButtonGroup * groupNumeralWidth = new ScButtonGroup();
groupNumeralWidth->setExclusive(true);
groupNumeralWidth->addButton(DefaultWidthRadio);
groupNumeralWidth->addButton(ProportionalRadio);
@@ -870,31 +878,14 @@ void PropertyWidget_FontFeatures::initWidgets()
HistoricalCheck->setChecked(false);
NormalCapRadio->setChecked(true);
- // SmallRadio->setChecked(false);
- // SmallFromCRadio->setChecked(false);
- // AllSmallCapsRadio->setChecked(false);
- // PetiteRadio->setChecked(false);
- // PetiteCapRadio->setChecked(false);
- // AllPetiteCapsRadio->setChecked(false);
- // UnicaseRadio->setChecked(false);
- // TitlingRadio->setChecked(false);
DefaultStyleRadio->setChecked(true);
- // LiningRadio->setChecked(false);
- // OldStyleRadio->setChecked(false);
DefaultWidthRadio->setChecked(true);
- // ProportionalRadio->setChecked(false);
- // TabularRadio->setChecked(false);
DefaultFractionsRadio->setChecked(true);
- // DiagonalRadio->setChecked(false);
- // StackedRadio->setChecked(false);
DefaultPosRadio->setChecked(true);
- // SubscriptRadio->setChecked(false);
- // SuperscriptRadio->setChecked(false);
- // OrdinalCheck->setChecked(false);
SlashedZeroCheck->setChecked(false);
diff --git a/scribus/ui/propertywidget_fontfeaturesbase.ui b/scribus/ui/propertywidget_fontfeaturesbase.ui
index d70f42f48..71def0200 100644
--- a/scribus/ui/propertywidget_fontfeaturesbase.ui
+++ b/scribus/ui/propertywidget_fontfeaturesbase.ui
@@ -44,10 +44,10 @@
<item row="11" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
- <widget class="QToolButton" name="DefaultWidthRadio">
+ <widget class="ScToolButton" name="DefaultWidthRadio">
<property name="toolTip">
<string>Default numbers width</string>
</property>
@@ -66,7 +66,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="ProportionalRadio">
+ <widget class="ScToolButton" name="ProportionalRadio">
<property name="toolTip">
<string>Proportional Figures (pnum)</string>
</property>
@@ -82,7 +82,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="TabularRadio">
+ <widget class="ScToolButton" name="TabularRadio">
<property name="toolTip">
<string>Tabular Figures (tnum)</string>
</property>
@@ -135,10 +135,10 @@
<item row="8" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_9">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
- <widget class="QToolButton" name="DefaultPosRadio">
+ <widget class="ScToolButton" name="DefaultPosRadio">
<property name="toolTip">
<string>Normal position</string>
</property>
@@ -157,7 +157,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="SubscriptRadio">
+ <widget class="ScToolButton" name="SubscriptRadio">
<property name="toolTip">
<string>Subscript (subs)</string>
</property>
@@ -173,7 +173,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="SuperscriptRadio">
+ <widget class="ScToolButton" name="SuperscriptRadio">
<property name="toolTip">
<string>Superscript (sups)</string>
</property>
@@ -189,7 +189,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="OrdinalCheck">
+ <widget class="ScToolButton" name="OrdinalCheck">
<property name="toolTip">
<string>Ordinals (ordn)</string>
</property>
@@ -406,10 +406,10 @@
<item row="7" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
- <widget class="QToolButton" name="NormalCapRadio">
+ <widget class="ScToolButton" name="NormalCapRadio">
<property name="toolTip">
<string>Normal capitals</string>
</property>
@@ -428,7 +428,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="SmallRadio">
+ <widget class="ScToolButton" name="SmallRadio">
<property name="toolTip">
<string>Small capitals (smcp)</string>
</property>
@@ -444,7 +444,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="SmallFromCRadio">
+ <widget class="ScToolButton" name="SmallFromCRadio">
<property name="toolTip">
<string>Small capitals from capitals (c2sc)</string>
</property>
@@ -460,7 +460,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="AllSmallCapsRadio">
+ <widget class="ScToolButton" name="AllSmallCapsRadio">
<property name="toolTip">
<string>All Small Caps (c2sc + smcp)</string>
</property>
@@ -476,7 +476,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="PetiteRadio">
+ <widget class="ScToolButton" name="PetiteRadio">
<property name="toolTip">
<string>Petite capitals (pcap)</string>
</property>
@@ -492,7 +492,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="PetiteCapRadio">
+ <widget class="ScToolButton" name="PetiteCapRadio">
<property name="toolTip">
<string>Petite capitals from capitals (c2pc)</string>
</property>
@@ -508,7 +508,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="AllPetiteCapsRadio">
+ <widget class="ScToolButton" name="AllPetiteCapsRadio">
<property name="toolTip">
<string>All Petite Caps (c2pc + pcap)</string>
</property>
@@ -524,7 +524,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="UnicaseRadio">
+ <widget class="ScToolButton" name="UnicaseRadio">
<property name="toolTip">
<string>Unicase (unic)</string>
</property>
@@ -540,7 +540,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="TitlingRadio">
+ <widget class="ScToolButton" name="TitlingRadio">
<property name="toolTip">
<string>Titling (titl)</string>
</property>
@@ -622,10 +622,10 @@
<item row="12" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_8">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
- <widget class="QToolButton" name="DefaultFractionsRadio">
+ <widget class="ScToolButton" name="DefaultFractionsRadio">
<property name="toolTip">
<string>No fractions</string>
</property>
@@ -644,7 +644,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="DiagonalRadio">
+ <widget class="ScToolButton" name="DiagonalRadio">
<property name="toolTip">
<string>Fractions (frac)</string>
</property>
@@ -660,7 +660,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="StackedRadio">
+ <widget class="ScToolButton" name="StackedRadio">
<property name="toolTip">
<string>Alternative Fractions (afrc)</string>
</property>
@@ -745,10 +745,10 @@
<item row="10" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="spacing">
- <number>4</number>
+ <number>0</number>
</property>
<item>
- <widget class="QToolButton" name="DefaultStyleRadio">
+ <widget class="ScToolButton" name="DefaultStyleRadio">
<property name="toolTip">
<string>Default numbers style</string>
</property>
@@ -767,7 +767,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="LiningRadio">
+ <widget class="ScToolButton" name="LiningRadio">
<property name="toolTip">
<string>Lining Figures (lnum)</string>
</property>
@@ -783,7 +783,7 @@
</widget>
</item>
<item>
- <widget class="QToolButton" name="OldStyleRadio">
+ <widget class="ScToolButton" name="OldStyleRadio">
<property name="toolTip">
<string>Oldstyle Figures (onum)</string>
</property>
@@ -1122,6 +1122,11 @@
</layout>
</widget>
<customwidgets>
+ <customwidget>
+ <class>ScToolButton</class>
+ <extends>QToolButton</extends>
+ <header>ui/widgets/buttongroup.h</header>
+ </customwidget>
<customwidget>
<class>Switch</class>
<extends>QToolButton</extends>
diff --git a/scribus/ui/smalignselect.cpp b/scribus/ui/smalignselect.cpp
index 115cea254..35d6064e3 100644
--- a/scribus/ui/smalignselect.cpp
+++ b/scribus/ui/smalignselect.cpp
@@ -4,6 +4,7 @@ to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/
+#include <QLayoutItem>
#include <QToolTip>
#include "smalignselect.h"
#include "iconmanager.h"
@@ -12,6 +13,9 @@ for which a new license (GPL+exception) is in place.
SMAlignSelect::SMAlignSelect(QWidget *parent)
: AlignSelect(parent)
{
+ QSpacerItem * spacer = new QSpacerItem(4, 0, QSizePolicy::Fixed);
+ layout()->addItem(spacer);
+
parentButton = new QToolButton(this);
parentButton->setText( "");
parentButton->setToolTip( tr("Use parent style's alignment instead of overriding it"));
diff --git a/scribus/ui/styleselect.cpp b/scribus/ui/styleselect.cpp
index ab7c67732..102516091 100644
--- a/scribus/ui/styleselect.cpp
+++ b/scribus/ui/styleselect.cpp
@@ -6,6 +6,7 @@ for which a new license (GPL+exception) is in place.
*/
#include <QEvent>
+#include <QButtonGroup>
#include "iconmanager.h"
#include "scribusapp.h"
@@ -130,7 +131,7 @@ void ShadowValues::languageChange()
StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
{
ssLayout = new QHBoxLayout(this);
- ssLayout->setSpacing(4);
+ ssLayout->setSpacing(0);
ssLayout->setContentsMargins(0, 0, 0, 0);
UnderlineVal = new UnderlineValues( nullptr );
@@ -138,18 +139,26 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
UnderlineValAct = new QWidgetAction(this);
UnderlineValAct->setDefaultWidget(UnderlineVal);
UnderlinePop->addAction(UnderlineValAct);
- underlineButton = new QToolButton( this );
+ underlineButton = new ScToolButton( this );
underlineButton->setText( "" );
underlineButton->setCheckable( true );
underlineButton->setMenu(UnderlinePop);
underlineButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( underlineButton );
- underlineWordButton = new QToolButton( this );
+ underlineWordButton = new ScToolButton( this );
underlineWordButton->setText( "" );
underlineWordButton->setCheckable( true );
underlineWordButton->setMenu(UnderlinePop);
underlineWordButton->setPopupMode(QToolButton::DelayedPopup);
- ssLayout->addWidget( underlineWordButton );
+ ssLayout->addWidget( underlineWordButton );
+
+ ScButtonGroup *bgUnderline = new ScButtonGroup();
+ bgUnderline->setExclusive(false);
+ bgUnderline->addButton(underlineButton);
+ bgUnderline->addButton(underlineWordButton);
+
+ ssLayout->addSpacing(4);
+
StrikeVal = new StrikeValues( nullptr );
StrikePop = new QMenu();
StrikeValAct = new QWidgetAction(this);
@@ -162,29 +171,39 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
strikeoutButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( strikeoutButton );
- ssLayout->addSpacing(12);
+ ssLayout->addSpacing(16);
- subscriptButton = new QToolButton( this );
+ subscriptButton = new ScToolButton( this );
subscriptButton->setText( "" );
subscriptButton->setCheckable( true );
ssLayout->addWidget( subscriptButton );
- superscriptButton = new QToolButton( this );
+ superscriptButton = new ScToolButton( this );
superscriptButton->setText( "" );
superscriptButton->setCheckable( true );
ssLayout->addWidget( superscriptButton );
- ssLayout->addSpacing(12);
+ ScButtonGroup *bgSub = new ScButtonGroup();
+ bgSub->setExclusive(false);
+ bgSub->addButton(subscriptButton);
+ bgSub->addButton(superscriptButton);
- allcapsButton = new QToolButton( this );
+ ssLayout->addSpacing(16);
+
+ allcapsButton = new ScToolButton( this );
allcapsButton->setText("");
allcapsButton->setCheckable( true );
ssLayout->addWidget( allcapsButton );
- smallcapsButton = new QToolButton( this );
+ smallcapsButton = new ScToolButton( this );
smallcapsButton->setText("");
smallcapsButton->setCheckable( true );
ssLayout->addWidget( smallcapsButton );
- ssLayout->addSpacing(12);
+ ScButtonGroup *bgCaps = new ScButtonGroup();
+ bgCaps->setExclusive(false);
+ bgCaps->addButton(allcapsButton);
+ bgCaps->addButton(smallcapsButton);
+
+ ssLayout->addSpacing(16);
OutlineVal = new OutlineValues( nullptr );
OutlinePop = new QMenu();
@@ -198,6 +217,8 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
outlineButton->setPopupMode(QToolButton::DelayedPopup);
ssLayout->addWidget( outlineButton );
+ ssLayout->addSpacing(4);
+
ShadowVal = new ShadowValues( nullptr );
ShadowPop = new QMenu();
ShadowValAct = new QWidgetAction(this);
diff --git a/scribus/ui/styleselect.h b/scribus/ui/styleselect.h
index ae4905e9d..fd2b2c200 100644
--- a/scribus/ui/styleselect.h
+++ b/scribus/ui/styleselect.h
@@ -21,6 +21,7 @@ class QEvent;
#include "scrspinbox.h"
#include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
class SCRIBUS_API StrikeValues : public QFrame
{
@@ -128,12 +129,12 @@ signals:
protected:
QHBoxLayout* ssLayout { nullptr };
- QToolButton* underlineButton { nullptr };
- QToolButton* underlineWordButton { nullptr };
- QToolButton* subscriptButton { nullptr };
- QToolButton* superscriptButton { nullptr };
- QToolButton* smallcapsButton { nullptr };
- QToolButton* allcapsButton { nullptr };
+ ScToolButton* underlineButton { nullptr };
+ ScToolButton* underlineWordButton { nullptr };
+ ScToolButton* subscriptButton { nullptr };
+ ScToolButton* superscriptButton { nullptr };
+ ScToolButton* smallcapsButton { nullptr };
+ ScToolButton* allcapsButton { nullptr };
QToolButton* strikeoutButton { nullptr };
QToolButton* outlineButton { nullptr };
QToolButton* shadowButton { nullptr };
diff --git a/scribus/ui/widgets/buttongroup.cpp b/scribus/ui/widgets/buttongroup.cpp
new file mode 100644
index 000000000..5360f9a64
--- /dev/null
+++ b/scribus/ui/widgets/buttongroup.cpp
@@ -0,0 +1,73 @@
+#include "buttongroup.h"
+
+#include <QAbstractButton>
+#include <QApplication>
+#include <QEvent>
+#include <QPainter>
+#include <QStyleHints>
+#include <QStyleOption>
+#include <QStylePainter>
+
+ScButtonGroup::ScButtonGroup(QWidget *parent) : QButtonGroup(parent) {}
+
+void ScButtonGroup::addButton(QAbstractButton *button, int id)
+{
+ button->installEventFilter(this);
+ QButtonGroup::addButton(button, id);
+ updateGroup();
+}
+
+void ScButtonGroup::removeButton(QAbstractButton *button)
+{
+ button->removeEventFilter(this);
+ QButtonGroup::removeButton(button);
+ updateGroup();
+}
+
+void ScButtonGroup::setAutoStyle(bool autoStyle)
+{
+ m_autoStyle = autoStyle;
+ updateGroup();
+}
+
+void ScButtonGroup::updateGroup()
+{
+ QList<int> visButtons;
+
+ // First gather all visible items
+ for( int i = 0; i < buttons().size(); ++i )
+ {
+ if (buttons().at(i)->isVisible())
+ visButtons.append(i);
+ }
+
+ int count = visButtons.size();
+
+ // Apply style to visible buttons
+ for( int i = 0; i < count; ++i )
+ {
+ ScToolButton *tb = qobject_cast<ScToolButton*>(buttons().at(visButtons.at(i)));
+ if (!tb)
+ return;
+
+ if (!m_autoStyle || count == 1)
+ tb->setPosition(ScToolButton::None);
+ else
+ {
+ if (i == 0) // left
+ tb->setPosition(ScToolButton::Left);
+ else if (i == count - 1) // right
+ tb->setPosition(ScToolButton::Right);
+ else // center
+ tb->setPosition(ScToolButton::Center);
+ }
+ }
+}
+
+bool ScButtonGroup::eventFilter(QObject *object, QEvent *event)
+{
+ if (object != nullptr && (event->type() == QEvent::Show || event->type() == QEvent::Hide))
+ updateGroup();
+
+ return QObject::eventFilter(object, event);
+}
diff --git a/scribus/ui/widgets/buttongroup.h b/scribus/ui/widgets/buttongroup.h
new file mode 100644
index 000000000..3e2926697
--- /dev/null
+++ b/scribus/ui/widgets/buttongroup.h
@@ -0,0 +1,49 @@
+#ifndef SCBUTTONGROUP_H
+#define SCBUTTONGROUP_H
+
+#include <QButtonGroup>
+#include <QProxyStyle>
+#include <QToolButton>
+#include <QWidget>
+
+class ScToolButton : public QToolButton
+{
+ Q_OBJECT
+public:
+ enum Position
+ {
+ None = 0,
+ Left,
+ Center,
+ Right
+ };
+
+ ScToolButton(QWidget* parent = nullptr) : QToolButton(parent) {};
+
+ Position position() const { return m_position; };
+ void setPosition(Position position) { m_position = position; };
+
+private:
+ Position m_position = Position::None;
+};
+
+class ScButtonGroup : public QButtonGroup
+{
+ Q_OBJECT
+
+public:
+ ScButtonGroup(QWidget* parent = nullptr);
+
+ void addButton(QAbstractButton *button, int id = -1);
+ void removeButton(QAbstractButton *button);
+
+ bool autoStyle() { return m_autoStyle;}
+ void setAutoStyle(bool autoStyle) ;
+
+protected:
+ void updateGroup();
+ bool eventFilter(QObject *object, QEvent *event);
+ bool m_autoStyle = true;
+};
+
+#endif // SCBUTTONGROUP_H
diff --git a/scribus/ui/widgets/pulsing_toolbutton.cpp b/scribus/ui/widgets/pulsing_toolbutton.cpp
index bdfdf2906..4c453be24 100644
--- a/scribus/ui/widgets/pulsing_toolbutton.cpp
+++ b/scribus/ui/widgets/pulsing_toolbutton.cpp
@@ -14,7 +14,7 @@
#include <QWidget>
PulsingToolButton::PulsingToolButton(QWidget *parent):
- QToolButton(parent)
+ ScToolButton(parent)
{
}
@@ -22,7 +22,7 @@ void PulsingToolButton::paintEvent(QPaintEvent* event)
{
if (m_transition == nullptr)
{
- QToolButton::paintEvent(event);
+ ScToolButton::paintEvent(event);
return;
}
diff --git a/scribus/ui/widgets/pulsing_toolbutton.h b/scribus/ui/widgets/pulsing_toolbutton.h
index e28a40a70..cedf40fa5 100644
--- a/scribus/ui/widgets/pulsing_toolbutton.h
+++ b/scribus/ui/widgets/pulsing_toolbutton.h
@@ -19,11 +19,12 @@
#include <QColor>
#include <QToolButton>
#include <QVariantAnimation>
+#include "ui/widgets/buttongroup.h"
class QPaintEvent;
class QWidget;
-class PulsingToolButton : public QToolButton
+class PulsingToolButton : public ScToolButton
{
Q_OBJECT
|
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2025-07-04 21:26 | nitramr | New Issue | |
| 2025-07-04 21:26 | nitramr | Status | new => assigned |
| 2025-07-04 21:26 | nitramr | Assigned To | => nitramr |
| 2025-07-04 21:26 | nitramr | File Added: buttongroup_2025-07-04_01.patch | |
| 2025-07-04 21:26 | nitramr | File Added: files.zip | |
| 2025-07-04 21:26 | nitramr | File Added: preview.png | |
| 2025-07-06 17:08 | jghali | Note Added: 0052878 | |
| 2025-07-06 17:17 | jghali | Note Added: 0052879 | |
| 2025-07-06 17:17 | jghali | File Added: 17571_buttongroup_windows.png | |
| 2025-10-22 21:55 | nitramr | Note Added: 0053100 | |
| 2025-10-22 21:55 | nitramr | File Added: buttongroup_2025-10-22_01.patch | |
| 2025-10-22 21:55 | nitramr | File Added: files-2.zip | |
| 2025-10-22 22:21 | nitramr | Relationship added | related to 0017391 |
| 2025-10-25 13:08 | nitramr | File Deleted: buttongroup_2025-10-22_01.patch | |
| 2025-10-25 13:08 | nitramr | File Deleted: files-2.zip | |
| 2025-10-25 13:09 | nitramr | Note Added: 0053119 | |
| 2025-10-25 13:09 | nitramr | File Added: buttongroup_2025-10-22_01.patch | |
| 2025-10-25 13:09 | nitramr | File Added: files-2.zip | |
| 2025-10-25 19:26 | cbradney | Note Added: 0053123 | |
| 2025-10-25 19:26 | cbradney | File Added: 17571-update.patch | |
| 2025-10-27 19:19 | nitramr | Relationship added | related to 0017624 |
| 2025-11-15 11:44 | jghali | Note Added: 0053262 | |
| 2025-11-15 11:44 | jghali | File Added: 17571_alignment_manjaro_breeze.png | |
| 2025-11-15 11:44 | jghali | File Added: 17571_alignment_manjaro_kvantum.png | |
| 2025-11-15 11:44 | jghali | File Added: 17571_alignment_manjaro_fusion.png | |
| 2025-11-15 11:44 | jghali | File Added: 17571_alignment_win11_windows11.png | |
| 2025-11-15 12:25 | jghali | Note Edited: 0053262 | |
| 2025-12-13 19:53 | nitramr | Note Added: 0053371 | |
| 2025-12-13 19:53 | nitramr | File Added: buttongroup_2025-12-13_01.diff |