diff --git a/scribus/CMakeLists_Sources.txt b/scribus/CMakeLists_Sources.txt index 0dacfd208..42b162e1a 100644 --- a/scribus/CMakeLists_Sources.txt +++ b/scribus/CMakeLists_Sources.txt @@ -571,6 +571,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 990233a49..954e04b55 100644 --- a/scribus/ui/aligndistribute.ui +++ b/scribus/ui/aligndistribute.ui @@ -63,7 +63,7 @@ - 4 + 0 0 @@ -78,7 +78,7 @@ 0 - + @@ -88,7 +88,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -147,7 +147,7 @@ - 4 + 0 0 @@ -162,7 +162,7 @@ 0 - + @@ -172,7 +172,7 @@ - + @@ -647,10 +647,15 @@ setWidget 1 + + ScToolButton + QToolButton +
ui/widgets/buttongroup.h
+
ScrSpinBox QDoubleSpinBox -
ui/scrspinbox.h
+
ui/scrspinbox.h
PulsingToolButton 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/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 c06356707..9c57ba13d 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(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(option); + const ScToolButton *wdg = qobject_cast(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(option); + const ScToolButton *wdg = qobject_cast(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(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 3891ebe32..d9c01f1b6 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 +#include #include +#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 9db23ccdd..5638c3964 100644 --- a/scribus/ui/newdocdialog.cpp +++ b/scribus/ui/newdocdialog.cpp @@ -154,12 +154,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(m_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 82476e675..bf2338bd8 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" @@ -121,8 +122,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 679b94677..21a984baf 100644 --- a/scribus/ui/newdocdialog.ui +++ b/scribus/ui/newdocdialog.ui @@ -384,7 +384,7 @@ - 4 + 0 0 @@ -412,7 +412,7 @@
- + @@ -428,7 +428,7 @@ - + @@ -501,8 +501,11 @@ + + 0 + - + @@ -512,7 +515,7 @@ - + @@ -522,7 +525,7 @@ - + @@ -531,6 +534,19 @@ + + + + Qt::Orientation::Horizontal + + + + 4 + 0 + + + + @@ -888,10 +904,15 @@ setWidget 1 + + ScToolButton + QToolButton +
ui/widgets/buttongroup.h
+
ScrSpinBox QDoubleSpinBox -
ui/scrspinbox.h
+
ui/scrspinbox.h
NewMarginWidget diff --git a/scribus/ui/propertiespalette_fill.cpp b/scribus/ui/propertiespalette_fill.cpp index 1ff27e908..2c2ef7227 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 @@ 0 0 - 335 + 348 68
@@ -151,7 +151,7 @@ - 4 + 0 0 @@ -166,7 +166,7 @@ 0 - + @@ -179,7 +179,7 @@ - + @@ -197,7 +197,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -218,6 +218,11 @@
ui/widgets/form_widget.h
1 + + ScToolButton + QToolButton +
ui/widgets/buttongroup.h
+
ColorButton QToolButton diff --git a/scribus/ui/propertiespalette_line.cpp b/scribus/ui/propertiespalette_line.cpp index 627e961a7..be9b16a2e 100644 --- a/scribus/ui/propertiespalette_line.cpp +++ b/scribus/ui/propertiespalette_line.cpp @@ -36,21 +36,21 @@ const double HAIRLINE = 0.001; PropertiesPalette_Line::PropertiesPalette_Line( QWidget* parent) : QWidget(parent) { - setupUi(this); - setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum)); - - buttonsCaps = new QButtonGroup(); - buttonsCaps->addButton(buttonCapFlat, 0); - buttonsCaps->addButton(buttonCapSquare, 1); - buttonsCaps->addButton(buttonCapRound, 2); - - buttonsJoins = new QButtonGroup(); - buttonsJoins->addButton(buttonJoinMiter, 0); - buttonsJoins->addButton(buttonJoinBevel, 1); - buttonsJoins->addButton(buttonJoinRound, 2); - - lineType->addItem( tr("Custom")); - + setupUi(this); + setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum)); + + buttonsCaps = new ScButtonGroup(); + buttonsCaps->addButton(buttonCapFlat, 0); + buttonsCaps->addButton(buttonCapSquare, 1); + buttonsCaps->addButton(buttonCapRound, 2); + + buttonsJoins = new ScButtonGroup(); + buttonsJoins->addButton(buttonJoinMiter, 0); + buttonsJoins->addButton(buttonJoinRound, 2); + buttonsJoins->addButton(buttonJoinBevel, 1); + + lineType->addItem( tr("Custom")); + lineMarkerSelectorStart = new LineMarkerSelector(); lineMarkerSelectorStart->setArrowDirection(ArrowDirection::StartArrow); PopupMenu *menuLineMarkerStart = new PopupMenu(lineMarkerSelectorStart); 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 #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 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..9008f37b0 100644 --- a/scribus/ui/propertiespalette_linebase.ui +++ b/scribus/ui/propertiespalette_linebase.ui @@ -3,13 +3,13 @@ PropertiesPalette_LineBase - - 0 - 0 - 315 - 235 - - + + 0 + 0 + 327 + 235 + +
8 @@ -430,13 +430,13 @@ 8 - - - - 4 - - - 0 + + + + 0 + + + 0 0 @@ -445,36 +445,36 @@ 0 - 0 - - - - - - + 0 + + + + + + true false - - - - - - - + + + + + + + true - - - - - - - + + + + + + + true @@ -492,13 +492,13 @@ 8 - - - - 4 - - - 0 + + + + 0 + + + 0 0 @@ -507,33 +507,33 @@ 0 - 0 - - - - - - + 0 + + + + + + true - - - - - - - + + + + + + + true - - - - - - - + + + + + + + true @@ -564,37 +564,42 @@ FormWidget QWidget
ui/widgets/form_widget.h
- 1 - - - ColorButton - QToolButton -
ui/widgets/color_button.h
-
- - ScrSpinBox - QDoubleSpinBox -
ui/scrspinbox.h
-
- - LineCombo - QComboBox + 1 + + + ScToolButton + QToolButton +
ui/widgets/buttongroup.h
+
+ + ScrSpinBox + QDoubleSpinBox +
ui/scrspinbox.h
+
+ + ColorButton + QToolButton +
ui/widgets/color_button.h
+
+ + ComboBlendMode + QComboBox +
ui/widgets/combo_blendmode.h
+
+ + LineCombo + QComboBox
ui/linecombo.h
DashEditor QFrame -
ui/dasheditor.h
- 1 -
- - ComboBlendMode - QComboBox -
ui/widgets/combo_blendmode.h
-
- - ComboLineStyle - QComboBox +
ui/dasheditor.h
+ 1 +
+ + ComboLineStyle + QComboBox
ui/widgets/combo_linestyle.h
diff --git a/scribus/ui/propertiespalette_shape.cpp b/scribus/ui/propertiespalette_shape.cpp index e34647e9c..12255f9fb 100644 --- a/scribus/ui/propertiespalette_shape.cpp +++ b/scribus/ui/propertiespalette_shape.cpp @@ -35,17 +35,24 @@ PropertiesPalette_Shape::PropertiesPalette_Shape( QWidget* parent) setupUi(this); setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum)); - iconSetChange(); - languageChange(); - - 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(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*))); + 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(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*))); roundRect->showValue(0); } diff --git a/scribus/ui/propertiespalette_shapebase.ui b/scribus/ui/propertiespalette_shapebase.ui index 48125e54a..039f2cec3 100644 --- a/scribus/ui/propertiespalette_shapebase.ui +++ b/scribus/ui/propertiespalette_shapebase.ui @@ -51,16 +51,16 @@
- - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + 16 0 @@ -90,13 +90,13 @@
- - - - Qt::Horizontal - - - + + + + Qt::Orientation::Horizontal + + + 0 0 @@ -119,13 +119,13 @@ 8 - - - - 4 - - - 0 + + + + 0 + + + 0 0 @@ -134,113 +134,98 @@ 0 - 0 - - - - - Text flow around frame disabled - + 0 + + + + + Text flow around frame disabled + true - true - - - Qt::ToolButtonIconOnly - - - textFlowBtnGroup - - - - - - - Text flow around frame shape - - - true + true + + + Qt::ToolButtonStyle::ToolButtonIconOnly + + + + + + + Text flow around bounding box + + + true - true - - - Qt::ToolButtonIconOnly - - - textFlowBtnGroup - - - - - - - Text flow around bounding box - - - true + true + + + Qt::ToolButtonStyle::ToolButtonIconOnly + + + + + + + Text flow around frame shape + + + true - true - - - Qt::ToolButtonIconOnly - - - textFlowBtnGroup - - - - - - - Text flow around contour line - + true + + + Qt::ToolButtonStyle::ToolButtonIconOnly + + + + + + + Text flow around contour line + true - true - - - Qt::ToolButtonIconOnly - - - textFlowBtnGroup - - - - - - - Text flow around image clip path - + true + + + Qt::ToolButtonStyle::ToolButtonIconOnly + + + + + + + Text flow around image clip path + true - true - - - Qt::ToolButtonIconOnly - - - textFlowBtnGroup - - - -
+ true + + + Qt::ToolButtonStyle::ToolButtonIconOnly + +
+
+
- - - - Qt::Horizontal - - - + + + + Qt::Orientation::Horizontal + + + 40 20 @@ -249,13 +234,13 @@
- - - - Qt::Vertical - - - + + + + Qt::Orientation::Vertical + + + 20 0 @@ -268,23 +253,25 @@ FormWidget QWidget -
ui/widgets/form_widget.h
- 1 -
- - ScrSpinBox - QDoubleSpinBox -
ui/scrspinbox.h
-
- - Autoforms +
ui/widgets/form_widget.h
+ 1 +
+ + ScToolButton + QToolButton +
ui/widgets/buttongroup.h
+
+ + ScrSpinBox + QDoubleSpinBox +
ui/scrspinbox.h
+
+ + Autoforms QToolButton
ui/autoform.h
- - - - - - - + + + + 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 @@ 8
- + 16 diff --git a/scribus/ui/propertywidget_fontfeatures.cpp b/scribus/ui/propertywidget_fontfeatures.cpp index ccd12e9d5..ac65abc2f 100644 --- a/scribus/ui/propertywidget_fontfeatures.cpp +++ b/scribus/ui/propertywidget_fontfeatures.cpp @@ -15,12 +15,13 @@ for which a new license (GPL+exception) is in place. #include "scribus.h" #include "scribusapp.h" #include "scribusdoc.h" -#include "selection.h" - -#include "fonts/fontfeatures.h" - - -PropertyWidget_FontFeatures::PropertyWidget_FontFeatures(QWidget* parent) : QFrame(parent) +#include "selection.h" + +#include "fonts/fontfeatures.h" +#include "ui/widgets/buttongroup.h" + + +PropertyWidget_FontFeatures::PropertyWidget_FontFeatures(QWidget* parent) : QFrame(parent) { setupUi(this); @@ -830,74 +831,64 @@ void PropertyWidget_FontFeatures::initWidgets() StackedRadio->installEventFilter(this); SubscriptRadio->installEventFilter(this); SuperscriptRadio->installEventFilter(this); - OrdinalCheck->installEventFilter(this); - SlashedZeroCheck->installEventFilter(this); - - QButtonGroup * groupCapitals = new QButtonGroup(); - groupCapitals->setExclusive(true); - groupCapitals->addButton(NormalCapRadio); - groupCapitals->addButton(SmallRadio); + OrdinalCheck->installEventFilter(this); + SlashedZeroCheck->installEventFilter(this); + + ScButtonGroup * groupCapitals = new ScButtonGroup(); + groupCapitals->setExclusive(true); + groupCapitals->addButton(NormalCapRadio); + groupCapitals->addButton(SmallRadio); groupCapitals->addButton(SmallFromCRadio); groupCapitals->addButton(AllSmallCapsRadio); groupCapitals->addButton(PetiteRadio); groupCapitals->addButton(PetiteCapRadio); groupCapitals->addButton(AllPetiteCapsRadio); - groupCapitals->addButton(UnicaseRadio); - groupCapitals->addButton(TitlingRadio); - - QButtonGroup * groupFractions = new QButtonGroup(); - groupFractions->setExclusive(true); - groupFractions->addButton(DefaultFractionsRadio); - groupFractions->addButton(DiagonalRadio); - groupFractions->addButton(StackedRadio); - - QButtonGroup * groupNumeralStyle = new QButtonGroup(); - groupNumeralStyle->setExclusive(true); - groupNumeralStyle->addButton(DefaultStyleRadio); - groupNumeralStyle->addButton(LiningRadio); - groupNumeralStyle->addButton(OldStyleRadio); - - QButtonGroup * groupNumeralWidth = new QButtonGroup(); - groupNumeralWidth->setExclusive(true); - groupNumeralWidth->addButton(DefaultWidthRadio); - groupNumeralWidth->addButton(ProportionalRadio); + groupCapitals->addButton(UnicaseRadio); + groupCapitals->addButton(TitlingRadio); + + 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); + + ScButtonGroup * groupNumeralStyle = new ScButtonGroup(); + groupNumeralStyle->setExclusive(true); + groupNumeralStyle->addButton(DefaultStyleRadio); + groupNumeralStyle->addButton(LiningRadio); + groupNumeralStyle->addButton(OldStyleRadio); + + ScButtonGroup * groupNumeralWidth = new ScButtonGroup(); + groupNumeralWidth->setExclusive(true); + groupNumeralWidth->addButton(DefaultWidthRadio); + groupNumeralWidth->addButton(ProportionalRadio); groupNumeralWidth->addButton(TabularRadio); CommonCheck->setChecked(true); ContextualCheck->setChecked(true); DiscretionaryCheck->setChecked(false); - 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); - + HistoricalCheck->setChecked(false); + + NormalCapRadio->setChecked(true); + + DefaultStyleRadio->setChecked(true); + + DefaultWidthRadio->setChecked(true); + + DefaultFractionsRadio->setChecked(true); + + DefaultPosRadio->setChecked(true); + + SlashedZeroCheck->setChecked(false); + StyleSet01->setChecked(false); StyleSet02->setChecked(false); StyleSet03->setChecked(false); diff --git a/scribus/ui/propertywidget_fontfeaturesbase.ui b/scribus/ui/propertywidget_fontfeaturesbase.ui index d70f42f48..a19117592 100644 --- a/scribus/ui/propertywidget_fontfeaturesbase.ui +++ b/scribus/ui/propertywidget_fontfeaturesbase.ui @@ -41,16 +41,16 @@
- - - - 4 - - - - - Default numbers width - + + + + 0 + + + + + Default numbers width + @@ -63,13 +63,13 @@ true - - - - - - Proportional Figures (pnum) - + + + + + + Proportional Figures (pnum) + @@ -79,13 +79,13 @@ true - - - - - - Tabular Figures (tnum) - + + + + + + Tabular Figures (tnum) + @@ -132,16 +132,16 @@ - - - - 4 - - - - - Normal position - + + + + 0 + + + + + Normal position + @@ -154,13 +154,13 @@ true - - - - - - Subscript (subs) - + + + + + + Subscript (subs) + @@ -170,13 +170,13 @@ true - - - - - - Superscript (sups) - + + + + + + Superscript (sups) + @@ -186,13 +186,13 @@ true - - - - - - Ordinals (ordn) - + + + + + + Ordinals (ordn) + @@ -403,16 +403,16 @@ - - - - 4 - - - - - Normal capitals - + + + + 0 + + + + + Normal capitals + @@ -425,13 +425,13 @@ true - - - - - - Small capitals (smcp) - + + + + + + Small capitals (smcp) + @@ -441,13 +441,13 @@ true - - - - - - Small capitals from capitals (c2sc) - + + + + + + Small capitals from capitals (c2sc) + @@ -457,13 +457,13 @@ true - - - - - - All Small Caps (c2sc + smcp) - + + + + + + All Small Caps (c2sc + smcp) + @@ -473,13 +473,13 @@ true - - - - - - Petite capitals (pcap) - + + + + + + Petite capitals (pcap) + @@ -489,13 +489,13 @@ true - - - - - - Petite capitals from capitals (c2pc) - + + + + + + Petite capitals from capitals (c2pc) + @@ -505,13 +505,13 @@ true - - - - - - All Petite Caps (c2pc + pcap) - + + + + + + All Petite Caps (c2pc + pcap) + @@ -521,13 +521,13 @@ true - - - - - - Unicase (unic) - + + + + + + Unicase (unic) + @@ -537,13 +537,13 @@ true - - - - - - Titling (titl) - + + + + + + Titling (titl) + @@ -619,16 +619,16 @@ - - - - 4 - - - - - No fractions - + + + + 0 + + + + + No fractions + @@ -641,13 +641,13 @@ true - - - - - - Fractions (frac) - + + + + + + Fractions (frac) + @@ -657,13 +657,13 @@ true - - - - - - Alternative Fractions (afrc) - + + + + + + Alternative Fractions (afrc) + @@ -742,16 +742,16 @@ - - - - 4 - - - - - Default numbers style - + + + + 0 + + + + + Default numbers style + @@ -764,13 +764,13 @@ true - - - - - - Lining Figures (lnum) - + + + + + + Lining Figures (lnum) + @@ -780,13 +780,13 @@ true - - - - - - Oldstyle Figures (onum) - + + + + + + Oldstyle Figures (onum) + @@ -1119,12 +1119,17 @@ - - - - - Switch - QToolButton + + + + + ScToolButton + QToolButton +
ui/widgets/buttongroup.h
+
+ + Switch + QToolButton
ui/widgets/switch.h
diff --git a/scribus/ui/smalignselect.cpp b/scribus/ui/smalignselect.cpp index 115cea254..ba37bc45b 100644 --- a/scribus/ui/smalignselect.cpp +++ b/scribus/ui/smalignselect.cpp @@ -1,20 +1,24 @@ /* For general Scribus (>=1.3.2) copyright and licensing information please refer 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 -#include "smalignselect.h" -#include "iconmanager.h" +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 +#include +#include "smalignselect.h" +#include "iconmanager.h" #include "scribusapp.h" -SMAlignSelect::SMAlignSelect(QWidget *parent) - : AlignSelect(parent) -{ - parentButton = new QToolButton(this); - parentButton->setText( ""); - parentButton->setToolTip( tr("Use parent style's alignment instead of overriding it")); +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")); addWidget( parentButton ); resize(minimumSizeHint()); parentButton->hide(); 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 +#include #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..1b5f1966c --- /dev/null +++ b/scribus/ui/widgets/buttongroup.cpp @@ -0,0 +1,73 @@ +#include "buttongroup.h" + +#include +#include +#include +#include +#include +#include +#include + +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 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(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 +#include +#include +#include + +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 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 #include #include +#include "ui/widgets/buttongroup.h" class QPaintEvent; class QWidget; -class PulsingToolButton : public QToolButton +class PulsingToolButton : public ScToolButton { Q_OBJECT