34#include <QApplication>
38#include <QStyleOption>
45#include <kconfiggroup.h>
46#include <klocalizedstring.h>
54 setCursor(Qt::PointingHandCursor);
58 : QLabel(text, parent)
60 setCursor(Qt::PointingHandCursor);
69 QLabel::mousePressEvent(event);
75 if (event->button() == Qt::LeftButton)
83 QLabel::mouseReleaseEvent(event);
85 if (event->button() == Qt::LeftButton)
106 QLabel::keyPressEvent(e);
114 setCursor(Qt::PointingHandCursor);
121 setCursor(Qt::PointingHandCursor);
130 QLabel::mouseReleaseEvent(event);
132 if (event->button() == Qt::LeftButton)
142 QLabel::mousePressEvent(event);
148 if (event->button() == Qt::LeftButton)
167 QLabel::keyPressEvent(e);
173 : QWidget(parent), m_arrowType(Qt::DownArrow)
175 setCursor(Qt::PointingHandCursor);
176 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
202 if (event->button() == Qt::LeftButton)
210 if (event->button() == Qt::LeftButton)
223 QStyleOptionFrame opt;
226 opt.midLineWidth = 0;
239 unsigned int x = 0, y = 0;
242 x = (width() -
m_size) / 2;
247 x = (width() -
m_size) / 2;
253 y = (height() -
m_size) / 2;
258 y = (height() -
m_size) / 2;
269 QStyle::PrimitiveElement e = QStyle::PE_IndicatorArrowLeft;
274 e = QStyle::PE_IndicatorArrowLeft;
277 e = QStyle::PE_IndicatorArrowRight;
280 e = QStyle::PE_IndicatorArrowUp;
283 e = QStyle::PE_IndicatorArrowDown;
289 opt.state |= QStyle::State_Enabled;
292 style()->drawPrimitive( e, &opt, &
p,
this );
317 expandByDefault =
true;
335 : QWidget(parent), d(new
Private)
337 d->grid =
new QGridLayout(
this);
339 d->hbox =
new QWidget(
this);
341 d->checkBox =
new QCheckBox(
d->hbox);
342 d->pixmapLabel =
new QLabel(
d->hbox);
345 QHBoxLayout*
const hlay =
new QHBoxLayout(
d->hbox);
346 hlay->addWidget(
d->arrow);
347 hlay->addWidget(
d->checkBox);
348 hlay->addWidget(
d->pixmapLabel);
349 hlay->addWidget(
d->clickLabel, 10);
350 hlay->setContentsMargins(0, 0, 0, 0);
352 const int styleSpacing = QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing);
353 hlay->setSpacing(styleSpacing);
355 d->pixmapLabel->installEventFilter(
this);
356 d->pixmapLabel->setCursor(Qt::PointingHandCursor);
358 d->hbox->setCursor(Qt::PointingHandCursor);
361 d->grid->addWidget(
d->line, 0, 0, 1, 3);
362 d->grid->addWidget(
d->hbox, 1, 0, 1, 3);
363 d->grid->setColumnStretch(2, 10);
364 d->grid->setContentsMargins(styleSpacing, styleSpacing, styleSpacing, styleSpacing);
365 d->grid->setSpacing(styleSpacing);
373 connect(
d->checkBox, &QCheckBox::toggled,
384 d->checkBox->setVisible(b);
389 return d->checkBox->isVisible();
394 d->checkBox->setChecked(b);
399 return d->checkBox->isChecked();
404 d->line->setVisible(b);
409 return d->line->isVisible();
414 d->clickLabel->setText(QString(
"<qt><b>%1</b></qt>").arg(txt));
419 return d->clickLabel->text();
424 d->pixmapLabel->setPixmap(
icon.pixmap(style()->pixelMetric(QStyle::PM_SmallIconSize)));
429#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
430 return QIcon(*
d->pixmapLabel->pixmap());
432 return QIcon(
d->pixmapLabel->pixmap());
441 d->containerWidget->setParent(
this);
442 d->grid->addWidget(
d->containerWidget, 2, 0, 1, 3);
448 return d->containerWidget;
453 d->expandByDefault = b;
458 return d->expandByDefault;
463 if (
d->containerWidget)
465 d->containerWidget->setVisible(b);
468 d->arrow->setArrowType(Qt::DownArrow);
470 d->arrow->setArrowType(Qt::RightArrow);
478 return (
d->arrow->arrowType() == Qt::DownArrow);
483 if (
d->containerWidget)
489 if ( obj ==
d->pixmapLabel)
491 if ( ev->type() == QEvent::MouseButtonRelease)
504 return QWidget::eventFilter(obj, ev);
520 void createItem(
int index, QWidget*
const w,
const QIcon& icon,
const QString& txt,
521 const QString& objName,
bool expandBydefault)
525 exp->
setIcon(icon.pixmap(QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize)));
528 exp->setObjectName(objName);
533 vbox->insertWidget(index, exp);
534 wList.insert(index, exp);
538 vbox->addWidget(exp);
542 parent->connect(exp, SIGNAL(signalExpanded(
bool)),
543 parent, SLOT(slotItemExpanded(
bool)));
545 parent->connect(exp, SIGNAL(signalToggled(
bool)),
546 parent, SLOT(slotItemToggled(
bool)));
559 : QScrollArea(parent), d(new
Private(this))
561 setFrameStyle(QFrame::NoFrame);
562 setWidgetResizable(
true);
563 QWidget*
const main =
new QWidget(viewport());
564 d->vbox =
new QVBoxLayout(
main);
565 d->vbox->setContentsMargins(0, 0, 0, 0);
566 d->vbox->setSpacing(QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing));
569 setAutoFillBackground(
false);
570 viewport()->setAutoFillBackground(
false);
571 main->setAutoFillBackground(
false);
582 if (index >
d->wList.count() || index < 0)
return;
583 d->wList[index]->setCheckBoxVisible(b);
588 if (index >
d->wList.count() || index < 0)
return false;
589 return d->wList[index]->checkBoxIsVisible();
594 if (index >
d->wList.count() || index < 0)
return;
595 d->wList[index]->setChecked(b);
600 if (index >
d->wList.count() || index < 0)
return false;
601 return d->wList[index]->isChecked();
605 const QString& objName,
bool expandBydefault)
607 d->createItem(-1, w, icon, txt, objName, expandBydefault);
611 const QString& objName,
bool expandBydefault)
613 addItem(w, QIcon(), txt, objName, expandBydefault);
618 d->vbox->addStretch(10);
622 const QString& objName,
bool expandBydefault)
624 d->createItem(index, w, icon, txt, objName, expandBydefault);
650 const QString& objName,
bool expandBydefault)
652 insertItem(index, w, QIcon(), txt, objName, expandBydefault);
657 d->vbox->insertStretch(index, 10);
662 if (index >
d->wList.count() || index < 0)
return;
663 d->wList[index]->hide();
664 d->wList.removeAt(index);
669 if (index >
d->wList.count() || index < 0)
return;
670 d->wList[index]->setText(txt);
675 if (index >
d->wList.count() || index < 0)
return QString();
676 return d->wList[index]->text();
681 if (index >
d->wList.count() || index < 0)
return;
682 d->wList[index]->setIcon(icon.pixmap(style()->pixelMetric(QStyle::PM_SmallIconSize)));
687 if (index >
d->wList.count() || index < 0)
return QIcon();
688 return d->wList[index]->icon();
693 return d->wList.count();
698 if (index >
d->wList.count() || index < 0)
return;
699 d->wList[index]->setToolTip(tip);
704 if (index >
d->wList.count() || index < 0)
return QString();
705 return d->wList[index]->toolTip();
710 if (index >
d->wList.count() || index < 0)
return;
711 d->wList[index]->setEnabled(enabled);
716 if (index >
d->wList.count() || index < 0)
return false;
717 return d->wList[index]->isEnabled();
722 if (index >
d->wList.count() || index < 0)
return 0;
723 return d->wList[index];
728 for (
int i = 0 ; i <
count(); ++i)
740 if (index >
d->wList.count() || index < 0)
return;
751 if (index >
d->wList.count() || index < 0)
return false;
755 if (!exp)
return false;
762 for (
int i = 0 ; i <
count(); ++i)
768 exp->
setExpanded(group.readEntry(QString(
"%1 Expanded").arg(exp->objectName()),
776 for (
int i = 0 ; i <
count(); ++i)
782 group.writeEntry(QString(
"%1 Expanded").arg(exp->objectName()),
809 while (item <
count())
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void setAdjustedText(const QString &text=QString())
void paintEvent(QPaintEvent *event) override
Qt::ArrowType arrowType() const
void mouseReleaseEvent(QMouseEvent *event) override
Qt::ArrowType m_arrowType
QSize sizeHint() const override
void setArrowType(Qt::ArrowType arrowType)
~RArrowClickLabel() override
void mousePressEvent(QMouseEvent *event) override
RArrowClickLabel(QWidget *const parent=0)
void mousePressEvent(QMouseEvent *event) override
void activated()
Emitted when activated, by mouse or key press.
void keyPressEvent(QKeyEvent *event) override
void mouseReleaseEvent(QMouseEvent *event) override
RClickLabel(QWidget *const parent=0)
void leftClicked()
Emitted when activated by left mouse click.
void setIsToolBox(bool b)
void slotItemExpanded(bool b)
~RExpanderBoxExclusive() override
RExpanderBoxExclusive(QWidget *const parent=0)
void setChecked(int index, bool b)
virtual void writeSettings(KConfigGroup &group)
void slotItemToggled(bool b)
virtual void readSettings(KConfigGroup &group)
bool isChecked(int index) const
void setItemText(int index, const QString &txt)
void slotItemExpanded(bool b)
bool isItemEnabled(int index) const
int indexOf(RLabelExpander *const widget) const
void setItemToolTip(int index, const QString &tip)
void addItem(QWidget *const w, const QIcon &icon, const QString &txt, const QString &objName, bool expandBydefault)
bool isItemExpanded(int index) const
void signalItemExpanded(int index, bool b)
RLabelExpander * widget(int index) const
void insertItem(int index, QWidget *const w, const QIcon &icon, const QString &txt, const QString &objName, bool expandBydefault)
QIcon itemIcon(int index) const
void removeItem(int index)
void createItem(int index, QWidget *const w, const QIcon &icon, const QString &txt, const QString &objName, bool expandBydefault)
QString itemText(int index) const
void setItemExpanded(int index, bool b)
QString itemToolTip(int index) const
QList< RLabelExpander * > wList
void setItemIcon(int index, const QIcon &icon)
Private(RExpanderBox *const box)
void setCheckBoxVisible(int index, bool b)
void signalItemToggled(int index, bool b)
void setItemEnabled(int index, bool enabled)
void insertStretch(int index)
bool checkBoxIsVisible(int index) const
RExpanderBox(QWidget *const parent=0)
void setLineVisible(bool b)
RLabelExpander(QWidget *const parent=0)
~RLabelExpander() override
void signalExpanded(bool)
bool isExpandByDefault() const
bool eventFilter(QObject *obj, QEvent *ev) override
QWidget * containerWidget
void setWidget(QWidget *const widget)
void setText(const QString &txt)
void setCheckBoxVisible(bool b)
bool lineIsVisible() const
void slotToggleContainer()
bool checkBoxIsVisible() const
void setExpandByDefault(bool b)
void setIcon(const QIcon &icon)
void mousePressEvent(QMouseEvent *event) override
RSqueezedClickLabel(QWidget *const parent=0)
~RSqueezedClickLabel() override
void keyPressEvent(QKeyEvent *event) override
void mouseReleaseEvent(QMouseEvent *event) override
int main(int argc, char **argv)
A widget to host settings as expander box.