View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0017283 | Scribus | General | public | 2024-10-04 21:31 | 2024-10-23 18:42 |
| Reporter | nitramr | Assigned To | nitramr | ||
| Priority | normal | Severity | minor | Reproducibility | N/A |
| Status | closed | Resolution | fixed | ||
| Platform | Desktop PC | OS | Ubuntu | OS Version | 24.04 64-bit |
| Product Version | 1.7.0.svn | ||||
| Target Version | 1.7.0 | Fixed in Version | 1.7.0.svn | ||
| Summary | 0017283: Fixes for UI widgets | ||||
| Description | The attached patch includes the following fixes and improvements: 1. Switch - Bug fix: toggle animation was strangely interrupted when toggle state changed during the animation 2. FontListModel - Bug fix: Scribus crashes if font.scName is empty 3. IconManager - Improvement: support for non-squared icons/images - Improvement: Non-squared images have an auto aspect ratio scaling if one size is invalid (-1) or not specified 4. ColorListBox - Bug fix: color box border was always black, even on dark UI. Now it uses the window text color 5. FormWidget - Improvement: Support for Icon and Label at the same time - Improvement: Separate position and visibility setting for the icon 6. SectionContainer - Improvement: New configurable header style and size available | ||||
| Tags | No tags attached. | ||||
| Attached Files | fixes_2024-10-04_01.patch (24,779 bytes)
Index: scribus/ui/widgets/switch.cpp
===================================================================
--- scribus/ui/widgets/switch.cpp (Revision 26312)
+++ scribus/ui/widgets/switch.cpp (Arbeitskopie)
@@ -64,16 +64,14 @@
void Switch::animate(bool toggled)
{
+ m_anim->stop();
+ m_anim->setDuration(120);
+ m_anim->setStartValue(position());
+
if (toggled)
- {
- m_anim->setStartValue(m_margin + m_radius);
m_anim->setEndValue(width() - m_radius - m_margin);
- }
else
- {
- m_anim->setStartValue(position());
m_anim->setEndValue(m_margin + m_radius);
- }
- m_anim->setDuration(120);
+
m_anim->start();
}
Index: scribus/fontlistmodel.cpp
===================================================================
--- scribus/fontlistmodel.cpp (Revision 26312)
+++ scribus/fontlistmodel.cpp (Arbeitskopie)
@@ -198,6 +198,8 @@
case FontListModel::FontFile:
return font.fontPath();
case FontListModel::SortIndex:
+ if (font.scName().isEmpty())
+ return font.scName();
if (font.scName().at(0) == QChar('.'))
return font.scName().mid(1).toLower();
return font.scName().toLower();
Index: scribus/iconmanager.cpp
===================================================================
--- scribus/iconmanager.cpp (Revision 26312)
+++ scribus/iconmanager.cpp (Arbeitskopie)
@@ -81,10 +81,20 @@
return QIcon(loadPixmap(name, width));
}
+QIcon IconManager::loadIcon(const QString &name, QSize size)
+{
+ return QIcon(loadPixmap(name, size));
+}
+
QPixmap IconManager::loadPixmap(const QString &name, int width)
{
- QString cName = buildName(name, "icon_", QString::number(width));
+ return loadPixmap(name, QSize(width, width));
+}
+QPixmap IconManager::loadPixmap(const QString &name, QSize size)
+{
+ QString cName = buildName(name, "icon_", QString::number(size.width()) + "_" + QString::number(size.height()));
+
// Use icon from icon cache
if (m_pxCache.contains(cName))
return *m_pxCache[cName];
@@ -93,7 +103,7 @@
if (m_lookupTable.contains(name))
{
Item item = m_lookupTable[name];
- m_pxCache.insert(cName, pixmapFromFile(item.filePath, item.color, width));
+ m_pxCache.insert(cName, pixmapFromFile(item.filePath, item.color, size));
return *m_pxCache[cName];
}
@@ -422,7 +432,7 @@
}
#endif
-QPixmap *IconManager::pixmapFromFile(const QString filePath, QColor color, int width)
+QPixmap *IconManager::pixmapFromFile(const QString filePath, QColor color, QSize size)
{
QDomDocument document;
// Load SVG file
@@ -433,13 +443,37 @@
QSvgRenderer svgRenderer(document.toByteArray());
- QSize size = (width > -1) ? QSize(width, width) : svgRenderer.defaultSize();
- QPixmap *iconPixmap = new QPixmap(size * m_devicePixelRatio);
+ double svgWidth = svgRenderer.defaultSize().width();
+ double svgHeight = svgRenderer.defaultSize().height();
+ double width = (size.width() > 0) ? size.width() : svgWidth;
+ double height = (size.height() > 0) ? size.height() : svgHeight;
+
+ QSize newSize(QSize(width, height));
+
+ // invalid width
+ if (size.width() < 1)
+ {
+ double scaleFactor = (svgHeight > height) ? svgHeight / height : height / svgHeight;
+ newSize.setWidth(svgWidth * scaleFactor);
+ }
+
+ // invalid height
+ if (size.height() < 1)
+ {
+ double scaleFactor = (svgWidth > width) ? svgWidth / width : width / svgWidth;
+ newSize.setHeight(svgHeight * scaleFactor);
+ }
+
+ // something goes wrong and we fallback to original SVG size
+ if (!newSize.isValid())
+ newSize = svgRenderer.defaultSize();
+
+ QPixmap *iconPixmap = new QPixmap(newSize * m_devicePixelRatio);
iconPixmap->setDevicePixelRatio(m_devicePixelRatio);
iconPixmap->fill(Qt::transparent);
QPainter painter(iconPixmap);
- svgRenderer.render(&painter, QRect(QPoint(0, 0), size));
+ svgRenderer.render(&painter, QRect(QPoint(0, 0), newSize));
painter.end();
return iconPixmap;
@@ -452,8 +486,9 @@
QPixmap *IconManager::pixmapFromPainterPath(QPainterPath path)
{
- QSize size(path.boundingRect().width(), path.boundingRect().height());
- QPixmap pixmap(size);
+ QSize size(path.boundingRect().size().toSize());
+ QPixmap pixmap(size * m_devicePixelRatio);
+ pixmap.setDevicePixelRatio(m_devicePixelRatio);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::Antialiasing, true);
Index: scribus/iconmanager.h
===================================================================
--- scribus/iconmanager.h (Revision 26312)
+++ scribus/iconmanager.h (Arbeitskopie)
@@ -52,7 +52,9 @@
QCursor loadCursor(const QString& name, int hotX = -1, int hotY = -1, int width = -1);
QIcon loadIcon(const QString& name, int width = -1);
+ QIcon loadIcon(const QString& name, QSize size);
QPixmap loadPixmap(const QString& name, int width = -1);
+ QPixmap loadPixmap(const QString& name, QSize size);
void addIconFromPainterPath(const QString & name, QPainterPath path);
@@ -100,7 +102,7 @@
bool createLookupTable();
bool readXMLFile(QString filePath, QDomDocument &document, QString fileExtension);
- QPixmap *pixmapFromFile(const QString filePath, QColor color, int width = -1);
+ QPixmap *pixmapFromFile(const QString filePath, QColor color, QSize size);
QPixmap *pixmapFromPainterPath(QPainterPath path);
QString buildName(const QString &name, const QString &prefix = "", const QString &suffix = "") const;
Index: scribus/ui/colorlistbox.cpp
===================================================================
--- scribus/ui/colorlistbox.cpp (Revision 26312)
+++ scribus/ui/colorlistbox.cpp (Arbeitskopie)
@@ -26,6 +26,7 @@
#include "scribusapp.h"
#include "scribusdoc.h"
#include "util_color.h"
+#include "util_gui.h"
class SCRIBUS_API ColorSmallItemDelegate : public ScListBoxPixmap<15, 15>
{
@@ -79,12 +80,8 @@
{
ColorPixmapValue item(data.value<ColorPixmapValue>());
QColor rgb = ScColorEngine::getDisplayColor(item.m_color, item.m_doc);
- pPixmap->fill(rgb);
QPainter painter(pPixmap);
- painter.setBrush(Qt::NoBrush);
- QPen b(Qt::black, 1);
- painter.setPen(b);
- painter.drawRect(0, 0, 15, 15);
+ drawColorBox(&painter, QRect(0, 0, pPixmap->width(), pPixmap->height()), rgb);
painter.end();
}
}
@@ -97,7 +94,9 @@
{
ColorPixmapValue item(data.value<ColorPixmapValue>());
QColor rgb = ScColorEngine::getDisplayColor(item.m_color, item.m_doc);
- pPixmap->fill(rgb);
+ QPainter painter(pPixmap);
+ drawColorBox(&painter, QRect(0, 0, pPixmap->width(), pPixmap->height()), rgb);
+ painter.end();
}
}
@@ -110,15 +109,10 @@
if (data.canConvert<ColorPixmapValue>())
{
- ColorPixmapValue item(data.value<ColorPixmapValue>());
-
+ ColorPixmapValue item(data.value<ColorPixmapValue>());
QColor rgb = ScColorEngine::getDisplayColor(item.m_color, item.m_doc);
- smallPix.fill(rgb);
QPainter painter(&smallPix);
- painter.setBrush(Qt::NoBrush);
- QPen b(Qt::black, 1);
- painter.setPen(b);
- painter.drawRect(0, 0, 15, 15);
+ drawColorBox(&painter, QRect(0, 0, smallPix.width(), smallPix.height()), rgb);
painter.end();
paintAlert(smallPix, *pPixmap, 0, 0);
Index: scribus/ui/widgets/form_widget.cpp
===================================================================
--- scribus/ui/widgets/form_widget.cpp (Revision 26312)
+++ scribus/ui/widgets/form_widget.cpp (Arbeitskopie)
@@ -12,11 +12,9 @@
FormWidget::FormWidget(QWidget *parent)
: QWidget(parent)
{
- QSizePolicy policy(QSizePolicy::Preferred, QSizePolicy::Minimum);
m_font = this->font();
- m_devicePixelRatio = qApp->devicePixelRatio();
- setSizePolicy(policy);
+ setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
calculateFrame();
}
@@ -29,8 +27,13 @@
QSize FormWidget::minimumSizeHint() const
{
- int w = 0, h = 0;
- labelSize(w,h);
+ int l = 0;
+ int t = 0;
+ int r = 0;
+ int b = 0;
+ int w = 0;
+ int h = 0;
+ labelSize(l, t, r, b, w, h);
return QSize(w, h).expandedTo(QWidget::minimumSizeHint());
}
@@ -43,26 +46,15 @@
void FormWidget::calculateFrame()
{
+ int l = 0;
+ int t = 0;
+ int r = 0;
+ int b = 0;
+ int w = 0;
+ int h = 0;
+ labelSize(l, t, r, b, w, h);
+ setContentsMargins(l, t, r, b);
- int w, h;
- labelSize(w,h);
-
- switch (m_position)
- {
- case Left:
- setContentsMargins(w, 0, 0, 0);
- break;
- case Right:
- setContentsMargins(0, 0, w, 0);
- break;
- case Top:
- setContentsMargins(0, h, 0, 0);
- break;
- case Bottom:
- setContentsMargins(0, 0, 0, h);
- break;
- }
-
update();
}
@@ -71,7 +63,7 @@
m_shortcutId = 0;
m_hasShortcut = false;
- if (hasPixmap() || m_label.isEmpty() || m_labelVisibility == false)
+ if (m_label.isEmpty() || m_labelVisibility == false)
return;
if (!m_label.contains(QLatin1Char('&')))
@@ -93,7 +85,7 @@
{
QWidget::paintEvent(e);
- if (!labelVisibility()) return;
+ if (!labelVisibility() && !iconVisibility()) return;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
@@ -111,67 +103,85 @@
painter.setPen(pen);
painter.setFont(tmpFont);
- QRect r = rect();
+ QRect rLabel = rect();
+ QRect rIcon = rect();
QPixmap pix = m_pixmap;
+ pix.setDevicePixelRatio(devicePixelRatio());
+ QRect rWidgets = contentsRect();
- if (hasPixmap() && pix.size() != m_pixmapSize)
- pix = pix.scaled(m_pixmapSize * m_devicePixelRatio, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ // painter.setBrush(Qt::NoBrush);
+ // painter.setPen(Qt::magenta);
+ // painter.drawRect(rect());
+ // painter.setPen(Qt::blue);
+ // painter.drawRect(rWidgets);
+ if (canUsePixmap() && pix.size() != m_pixmapSize)
+ pix = pix.scaled(m_pixmapSize * devicePixelRatio(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
+
if (!isEnabled())
pix = style->generatedIconPixmap(QIcon::Disabled, pix, &opt);
+ if (canUsePixmap())
+ {
+ rIcon = QRect(0, 0, m_pixmap.deviceIndependentSize().width(), m_pixmap.deviceIndependentSize().height());
+ rIcon.moveCenter(rWidgets.center());
- switch (m_position){
- case Left:
- if (hasPixmap())
- {
- r= QRect (0, (height() - m_pixmap.height()) / 2, m_pixmap.width(), m_pixmap.height());
- style->drawItemPixmap(&painter, r, align, pix);
-
+ switch (m_iconPosition){
+ default:
+ case Left:
+ rIcon.moveLeft(0);
+ rLabel = rLabel.adjusted(rIcon.width() + m_space, 0, 0, 0);
+ break;
+ case Right:
+ rIcon.moveRight(width());
+ rLabel = rLabel.adjusted(0, 0, -rIcon.width() - m_space, 0);
+ break;
+ case Top:
+ rIcon.moveTop(0);
+ rLabel = rLabel.adjusted(0, rIcon.height() + m_space, 0, 0);
+ break;
+ case Bottom:
+ rIcon.moveBottom(height());
+ rLabel = rLabel.adjusted(0, 0, 0, -rIcon.height() - m_space);
+ break;
}
- else
- style->drawItemText(&painter, r, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole());
- break;
- case Right:
- if (hasPixmap())
- {
- r= QRect (width() - m_pixmap.width(), (height() - m_pixmap.height()) / 2, m_pixmap.width(), m_pixmap.height());
- style->drawItemPixmap(&painter, r, align, pix);
- }
- else
- style->drawItemText(&painter, r, Qt::AlignRight | Qt::AlignVCenter | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole());
+ style->drawItemPixmap(&painter, rIcon, align, pix);
- break;
- case Top:
- if (hasPixmap())
- {
- r= QRect ((width() - m_pixmap.width()) / 2, 0, m_pixmap.width(), m_pixmap.height());
- style->drawItemPixmap(&painter, r, align, pix);
- }
- else
- style->drawItemText(&painter, r, Qt::AlignHCenter | Qt::AlignTop | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole());
+ // painter.setBrush(Qt::NoBrush);
+ // painter.setPen(Qt::red);
+ // painter.drawRect(rIcon);
+ }
- break;
- case Bottom:
- if (hasPixmap())
- {
- r= QRect ((width() - m_pixmap.width()) / 2, height() - m_pixmap.height(), m_pixmap.width(), m_pixmap.height());
- style->drawItemPixmap(&painter, r, align, pix);
+ if (canUseLabel())
+ {
+ switch (m_position){
+ case Left:
+ style->drawItemText(&painter, rLabel, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole());
+ break;
+ case Right:
+ style->drawItemText(&painter, rLabel, Qt::AlignRight | Qt::AlignVCenter | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole());
+ break;
+ case Top:
+ style->drawItemText(&painter, rLabel, Qt::AlignHCenter | Qt::AlignTop | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole());
+ break;
+ case Bottom:
+ style->drawItemText(&painter, rLabel, Qt::AlignHCenter | Qt::AlignBottom | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole());
+ break;
}
- else
- style->drawItemText(&painter, r, Qt::AlignHCenter | Qt::AlignBottom | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole());
- break;
+ // painter.setBrush(Qt::NoBrush);
+ // painter.setPen(Qt::green);
+ // painter.drawRect(rLabel);
}
}
bool FormWidget::event(QEvent *e)
-{
- QEvent::Type type = e->type();
+{
#ifndef EXCLUDE_FOR_DESIGNER_PLUGIN
+ QEvent::Type type = e->type();
if (type == QEvent::Shortcut && this->layout()->count() > 0) {
QShortcutEvent *se = static_cast<QShortcutEvent *>(e);
if (se->shortcutId() == m_shortcutId) {
@@ -243,53 +253,89 @@
* ********************************************************************************* */
-void FormWidget::labelSize(int &w, int &h) const
+void FormWidget::labelSize(int &l, int &t, int &r, int &b, int &w, int &h) const
{
+ l = 0;
+ t = 0;
+ r = 0;
+ b = 0;
w = 0;
h = 0;
- if (hasPixmap())
+ if (canUsePixmap())
{
- w = m_pixmapSize.width() * m_devicePixelRatio + m_space;
- h = m_pixmapSize.height() * m_devicePixelRatio + m_space;
- }
- else
- {
+ int iconWidth = m_pixmapSize.width() + m_space;
+ int iconHeight = m_pixmapSize.height() + m_space;
- if ((m_label.isEmpty() && m_preserveLabelSpace == false) || m_labelVisibility == false)
+ w += iconWidth;
+ h += iconHeight;
+
+ switch (m_iconPosition)
{
- w = 0;
- h = 0;
+ case Left:
+ l += iconWidth;
+ break;
+ case Right:
+ r += iconWidth;
+ break;
+ case Top:
+ t += iconHeight;
+ break;
+ case Bottom:
+ b += iconHeight;
+ break;
}
- else
- {
- QFont tmpFont(m_font);
- if (m_useSmallFont)
- tmpFont.setPointSize(smallFontSize());
- QFontMetrics metrics(tmpFont);
- QString label = m_label;
+ }
- // calculate width without hidden "&"
- if (m_hasShortcut)
+ if (canUseLabel())
+ {
+ QFont tmpFont(m_font);
+ if (m_useSmallFont)
+ tmpFont.setPointSize(smallFontSize());
+
+ QFontMetrics metrics(tmpFont);
+ QString label = m_label;
+
+ // calculate width without hidden "&"
+ if (m_hasShortcut)
+ {
+ int pos = 0;
+ while ( pos < m_label.size())
{
- int pos = 0;
- while ( pos < m_label.size())
- {
- int index = label.indexOf(QLatin1String("&"), pos);
+ int index = label.indexOf(QLatin1String("&"), pos);
- if (pos == index)
- label = label.replace(index, 1, "");
+ if (pos == index)
+ label = label.replace(index, 1, "");
- pos++;
- }
+ pos++;
}
+ }
- w = metrics.horizontalAdvance(label) + metrics.horizontalAdvance(QLatin1Char(' ')) + m_space;
- h = metrics.height() + m_space;
+ int labelWidth = metrics.horizontalAdvance(label) + metrics.horizontalAdvance(QLatin1Char(' ')) + m_space;
+ int labelHeight = metrics.height() + m_space;
+ w += labelWidth;
+ h += labelHeight;
+
+ switch (m_position)
+ {
+ case Left:
+ l += labelWidth;
+ break;
+ case Right:
+ r += labelWidth;
+ break;
+ case Top:
+ t += labelHeight;
+ break;
+ case Bottom:
+ b += labelHeight;
+ break;
}
+
}
+
}
int FormWidget::smallFontSize() const
@@ -338,6 +384,12 @@
calculateFrame();
}
+void FormWidget::setIconDirection(LabelPosition direction)
+{
+ m_iconPosition = direction;
+ calculateFrame();
+}
+
void FormWidget::setFont(QFont font)
{
m_font = font;
@@ -359,7 +411,6 @@
void FormWidget::setPixmap(QPixmap icon)
{
m_pixmap = icon;
- updateShortcut();
calculateFrame();
}
@@ -370,6 +421,12 @@
calculateFrame();
}
+void FormWidget::setIconVisibility(bool visible)
+{
+ m_iconVisibility = visible;
+ calculateFrame();
+}
+
void FormWidget::addWidget(QWidget* widget)
{
if (layout() != nullptr)
Index: scribus/ui/widgets/form_widget.h
===================================================================
--- scribus/ui/widgets/form_widget.h (Revision 26312)
+++ scribus/ui/widgets/form_widget.h (Arbeitskopie)
@@ -15,17 +15,19 @@
class FormWidget : public QWidget
{
Q_OBJECT
- Q_CLASSINFO("Version", "1.1.0")
+ Q_CLASSINFO("Version", "1.2.0")
Q_PROPERTY(QString label READ text WRITE setText)
Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
Q_PROPERTY(QSize pixmapSize READ pixmapSize WRITE setPixmapSize)
Q_PROPERTY(LabelPosition direction READ direction WRITE setDirection)
+ Q_PROPERTY(LabelPosition iconDirection READ iconDirection WRITE setIconDirection)
Q_PROPERTY(QFont font READ font WRITE setFont STORED true)
Q_PROPERTY(bool useSmallFont READ useSmallFont WRITE setUseSmallFont)
Q_PROPERTY(int space READ space WRITE setSpace)
Q_PROPERTY(bool preserveLabelSpace READ preserveLabelSpace WRITE setPreserveLabelSpace)
Q_PROPERTY(bool labelVisibility READ labelVisibility WRITE setLabelVisibility)
+ Q_PROPERTY(bool iconVisibility READ iconVisibility WRITE setIconVisibility)
public:
@@ -43,6 +45,9 @@
void setLabelVisibility(bool visible);
bool labelVisibility() { return m_labelVisibility; };
+ void setIconVisibility(bool visible);
+ bool iconVisibility() const { return m_iconVisibility; };
+
void setPreserveLabelSpace(bool preserveSpace);
bool preserveLabelSpace() { return m_preserveLabelSpace; };
@@ -49,6 +54,9 @@
void setDirection(FormWidget::LabelPosition direction);
FormWidget::LabelPosition direction() { return m_position; };
+ void setIconDirection(FormWidget::LabelPosition direction);
+ FormWidget::LabelPosition iconDirection() { return m_iconPosition; };
+
void setFont(QFont font);
QFont font() { return m_font; };
@@ -66,7 +74,8 @@
void setPixmapSize(QSize size);
QSize pixmapSize() { return m_pixmapSize; };
- bool hasPixmap() const { return !m_pixmap.isNull(); };
+ bool canUsePixmap() const { return (!m_pixmap.isNull() && m_iconVisibility); };
+ bool canUseLabel() const { return (!m_label.isEmpty() && m_labelVisibility) || (m_preserveLabelSpace && m_labelVisibility); };
void addWidget(QWidget* widget);
@@ -76,21 +85,22 @@
private:
LabelPosition m_position {LabelPosition::Bottom};
+ LabelPosition m_iconPosition {LabelPosition::Left};
int m_space {4};
QSize m_pixmapSize {QSize(16,16)};
QString m_label {"Label"};
QFont m_font;
QPixmap m_pixmap {QPixmap()};
+ bool m_iconVisibility {true};
bool m_preserveLabelSpace {false};
bool m_labelVisibility {true};
bool m_hasShortcut {false};
int m_shortcutId {0};
- qreal m_devicePixelRatio {1.0};
bool m_useSmallFont {true};
void calculateFrame();
void updateShortcut();
- void labelSize(int &w, int &h) const;
+ void labelSize(int &l, int &t, int &r, int &b, int &w, int &h) const;
};
Index: scribus/ui/widgets/section_container.cpp
===================================================================
--- scribus/ui/widgets/section_container.cpp (Revision 26312)
+++ scribus/ui/widgets/section_container.cpp (Arbeitskopie)
@@ -109,6 +109,57 @@
return m_hasStyle;
}
+void SectionContainer::setHeaderType(SectionContainerHeader::HeaderType type)
+{
+ header->m_headerType = type;
+
+ QFont fnt = font();
+
+ if (type == SectionContainerHeader::Header)
+ fnt.setBold(true);
+
+ header->labelTitle->setFont(fnt);
+
+ update();
+}
+
+SectionContainerHeader::HeaderType SectionContainer::headerType() const
+{
+ return header->m_headerType;
+}
+
+void SectionContainer::setHeaderSize(SectionContainerHeader::HeaderSize size)
+{
+ int pt = 4;
+ int pb = 4;
+
+ switch (size)
+ {
+ case SectionContainerHeader::Large:
+ pt = 8;
+ pb = 4;
+
+ break;
+ case SectionContainerHeader::Condensed:
+ pt = 2;
+ pb = 2;
+ break;
+ default:
+ case SectionContainerHeader::Normal:
+ break;
+ }
+
+ header->m_headerSize = size;
+ header->layoutHeader->setContentsMargins(4, pt, 4, pb);
+ header->setFixedHeight(header->buttonCollapse->height() + pt + pb);
+
+}
+
+SectionContainerHeader::HeaderSize SectionContainer::headerSize() const
+{
+ return header->m_headerSize;
+}
+
void SectionContainer::setCanSaveState(bool saveState)
{
m_canSaveState = saveState;
@@ -375,13 +426,13 @@
return;
int lineWidth = 1;
- QColor bottomLineColor(palette().color(QPalette::Dark));
+ QColor bottomLineColor(palette().color(QPalette::Mid));
QPainter painter(this);
// Bottom Line
painter.setPen(QPen(bottomLineColor, lineWidth));
- painter.drawLine(8, this->height() - lineWidth, this->width() - 8,
+ painter.drawLine(0, this->height() - lineWidth, this->width(),
this->height() - lineWidth);
}
@@ -439,7 +490,6 @@
SectionContainerHeader::SectionContainerHeader(QString title, QWidget *parent) : QWidget(parent)
{
int padding = 6;
- m_hasStyle = true;
layoutHeader = new QHBoxLayout;
layoutHeaderPrefix = new QHBoxLayout;
@@ -493,39 +543,41 @@
{
Q_UNUSED(event)
- if (!m_hasStyle)
- return;
-
int lineWidth = 1;
- // QColor topLineColor( palette().color(QPalette::Mid) );
- QColor bottomLineColor(palette().color(QPalette::Dark));
+ int headerHeight = this->height();
+ QColor bottomLineColor(palette().color(QPalette::Mid));
+ QRect headerRect(0, 0, this->width(), headerHeight - lineWidth);
+ QPainter painter(this);
+ painter.setPen(Qt::NoPen);
+
+ if (m_hasStyle)
+ {
+
#ifndef EXCLUDE_FOR_DESIGNER_PLUGIN
- QColor bgColor = colorByRole(QPalette::WindowText, 0.07, isEnabled());
+ QColor bgColor = colorByRole(QPalette::WindowText, 0.16, isEnabled());
+
+ if (m_headerType == SectionContainerHeader::Subheader)
+ bgColor = colorByRole(QPalette::WindowText, 0.08, isEnabled());
#else
- QColor bgColor(palette().color(QPalette::WindowText));
- bgColor.setAlphaF(0.07f);
+ QColor bgColor(palette().color(QPalette::WindowText));
+ bgColor.setAlphaF(0.16f);
+
+ if (m_headerType == SectionContainerHeader::Subheader)
+ bgColor.setAlphaF(0.08f);
#endif
- int headerHeight = this->height();
- QRect headerRect(0, 0, this->width(), headerHeight - lineWidth);
+ painter.setBrush(bgColor);
+ painter.drawRect(headerRect);
+ }
- QPainter painter(this);
-
- painter.setPen(Qt::NoPen);
- painter.setBrush(bgColor);
- painter.drawRect(headerRect);
-
painter.setBrush(Qt::NoBrush);
- // Top Line
- // painter.setPen( QPen(topLineColor, lineWidth) );
- // painter.drawLine( 0, 0,this->width(), 0 );
-
// Bottom Line
painter.setPen(QPen(bottomLineColor, lineWidth));
painter.drawLine(0, headerHeight - lineWidth, this->width(),
headerHeight - lineWidth);
+ painter.end();
}
void SectionContainerHeader::mousePressEvent(QMouseEvent *mouseEvent)
Index: scribus/ui/widgets/section_container.h
===================================================================
--- scribus/ui/widgets/section_container.h (Revision 26312)
+++ scribus/ui/widgets/section_container.h (Arbeitskopie)
@@ -23,6 +23,20 @@
friend class SectionContainer;
public:
+
+ enum HeaderType {
+ Header = 1,
+ Subheader = 2
+ };
+ Q_ENUM(HeaderType)
+
+ enum HeaderSize {
+ Normal = 0,
+ Large = 1,
+ Condensed = 2
+ };
+ Q_ENUM(HeaderSize)
+
SectionContainerHeader(QWidget *parent = nullptr);
SectionContainerHeader(QString title, QWidget *parent = nullptr);
@@ -35,6 +49,8 @@
QLabel* labelTitle { nullptr };
+ HeaderType m_headerType = {HeaderType::Subheader};
+ HeaderSize m_headerSize = {HeaderSize::Normal};
bool m_hasStyle { true };
protected:
@@ -55,12 +71,13 @@
class SectionContainer : public QWidget
{
Q_OBJECT
- Q_CLASSINFO("Version", "1.0.0")
+ Q_CLASSINFO("Version", "1.1.0")
Q_PROPERTY(QString title READ text WRITE setText)
Q_PROPERTY(bool isCollapsible READ isCollapsible WRITE setIsCollapsible)
Q_PROPERTY(bool isCollapsed READ isCollapsed WRITE setIsCollapsed)
Q_PROPERTY(bool hasStyle READ hasStyle WRITE setHasStyle)
+ Q_PROPERTY(SectionContainerHeader::HeaderType headerType READ headerType WRITE setHeaderType)
public:
@@ -76,6 +93,12 @@
void setHasStyle(bool hasStyle);
bool hasStyle() const;
+ void setHeaderType(SectionContainerHeader::HeaderType type);
+ SectionContainerHeader::HeaderType headerType() const;
+
+ void setHeaderSize(SectionContainerHeader::HeaderSize size);
+ SectionContainerHeader::HeaderSize headerSize() const;
+
void setCanSaveState(bool saveState);
bool canSaveState();
| ||||
| Patch | Yes | ||||
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2024-10-04 21:31 | nitramr | New Issue | |
| 2024-10-04 21:31 | nitramr | File Added: fixes_2024-10-04_01.patch | |
| 2024-10-07 05:25 | cbradney | Assigned To | => nitramr |
| 2024-10-07 05:25 | cbradney | Status | new => resolved |
| 2024-10-07 05:25 | cbradney | Resolution | open => fixed |
| 2024-10-07 05:25 | cbradney | Fixed in Version | => 1.7.0.svn |
| 2024-10-23 18:42 | cbradney | Status | resolved => closed |