plasma: implement configuration interface for tasks applet

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2023-10-09 02:11:57 +03:00
parent 51928a9c9e
commit ebcdc394b2
3 changed files with 92 additions and 9 deletions

View file

@ -18,6 +18,9 @@
#include "tasks.h"
#include <QGridLayout>
#include <QLabel>
#include <QSpacerItem>
#include <Plasma/Animation>
#include <Plasma/Svg>
#include <Plasma/FrameSvg>
@ -32,6 +35,7 @@
// standard issue margin/spacing
static const int s_spacing = 6;
static const TasksApplet::ToolTipMode s_defaultooltipmode = TasksApplet::ToolTipPreview;
static bool kIsPanel(const Plasma::FormFactor formfactor)
{
@ -74,12 +78,14 @@ class TasksSvg : public Plasma::SvgWidget
{
Q_OBJECT
public:
TasksSvg(const WId task, QGraphicsItem *parent = nullptr);
TasksSvg(const WId task, const TasksApplet::ToolTipMode tooltipmode, QGraphicsItem *parent = nullptr);
WId task() const;
void animatedShow();
void animatedRemove();
void setup(const TasksApplet::ToolTipMode tooltipmode);
protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) final;
QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const final;
@ -101,16 +107,18 @@ private:
Plasma::FrameSvg* m_framesvg;
QPixmap m_pixmap;
QString m_name;
TasksApplet::ToolTipMode m_tooltipmode;
// for updateGeometry()
friend TasksApplet;
};
TasksSvg::TasksSvg(const WId task, QGraphicsItem *parent)
TasksSvg::TasksSvg(const WId task, const TasksApplet::ToolTipMode tooltipmode, QGraphicsItem *parent)
: Plasma::SvgWidget(parent),
m_task(task),
m_hovered(false),
m_framesvg(nullptr)
m_framesvg(nullptr),
m_tooltipmode(tooltipmode)
{
updatePixmapAndToolTip();
slotUpdateSvg();
@ -164,6 +172,12 @@ void TasksSvg::animatedRemove()
animation->start(QAbstractAnimation::DeleteWhenStopped);
}
void TasksSvg::setup(const TasksApplet::ToolTipMode tooltipmode)
{
m_tooltipmode = tooltipmode;
updatePixmapAndToolTip();
}
void TasksSvg::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
@ -248,8 +262,22 @@ void TasksSvg::updatePixmapAndToolTip()
if (!m_name.isEmpty()) {
plasmatooltip.setMainText(QString::fromLatin1("<center>%1</center>").arg(m_name));
}
plasmatooltip.setWindowToPreview(m_task);
plasmatooltip.setClickable(true);
switch (m_tooltipmode) {
case TasksApplet::ToolTipNone: {
break;
}
case TasksApplet::ToolTipPreview: {
plasmatooltip.setWindowToPreview(m_task);
plasmatooltip.setClickable(true);
break;
}
case TasksApplet::ToolTipHighlight: {
plasmatooltip.setWindowToPreview(m_task);
plasmatooltip.setHighlightWindows(true);
plasmatooltip.setClickable(true);
break;
}
}
Plasma::ToolTipManager::self()->setContent(this, plasmatooltip);
}
@ -295,10 +323,13 @@ void TasksSvg::slotUpdateSvg()
TasksApplet::TasksApplet(QObject *parent, const QVariantList &args)
: Plasma::Applet(parent, args),
m_layout(nullptr),
m_spacer(nullptr)
m_spacer(nullptr),
m_tooltipmode(s_defaultooltipmode),
m_tooltipmodebox(nullptr)
{
KGlobal::locale()->insertCatalog("plasma_applet_tasks");
setAspectRatioMode(Plasma::AspectRatioMode::IgnoreAspectRatio);
setHasConfigurationInterface(true);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
m_layout = new QGraphicsLinearLayout(Qt::Horizontal, this);
@ -312,6 +343,9 @@ TasksApplet::TasksApplet(QObject *parent, const QVariantList &args)
void TasksApplet::init()
{
KConfigGroup configgroup = config();
m_tooltipmode = static_cast<TasksApplet::ToolTipMode>(configgroup.readEntry("tooltipMode", static_cast<int>(s_defaultooltipmode)));
foreach (const WId task, KTaskManager::self()->tasks()) {
slotTaskAdded(task);
}
@ -330,6 +364,30 @@ void TasksApplet::init()
);
}
void TasksApplet::createConfigurationInterface(KConfigDialog *parent)
{
QWidget* widget = new QWidget();
QGridLayout* widgetlayout = new QGridLayout(widget);
QLabel* pagermodelabel = new QLabel(widget);
pagermodelabel->setText(i18n("Tooltip:"));
widgetlayout->addWidget(pagermodelabel, 0, 0);
m_tooltipmodebox = new QComboBox(widget);
m_tooltipmodebox->addItem(i18n("Task name"), static_cast<int>(TasksApplet::ToolTipPreview));
m_tooltipmodebox->addItem(i18n("Task name and preview"), static_cast<int>(TasksApplet::ToolTipPreview));
m_tooltipmodebox->addItem(i18n("Task name, preview and highlight window"), static_cast<int>(TasksApplet::ToolTipHighlight));
m_tooltipmodebox->setCurrentIndex(static_cast<int>(m_tooltipmode));
widgetlayout->addWidget(m_tooltipmodebox, 0, 1);
QSpacerItem* spacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Expanding);
widgetlayout->addItem(spacer, 1, 0, 1, 2);
widget->setLayout(widgetlayout);
parent->addPage(widget, i18n("General"), "preferences-system-windows");
connect(parent, SIGNAL(applyClicked()), this, SLOT(slotConfigAccepted()));
connect(parent, SIGNAL(okClicked()), this, SLOT(slotConfigAccepted()));
connect(m_tooltipmodebox, SIGNAL(currentIndexChanged(int)), parent, SLOT(settingsModified()));
}
void TasksApplet::constraintsEvent(Plasma::Constraints constraints)
{
// update once
@ -373,7 +431,7 @@ void TasksApplet::slotTaskAdded(const WId task)
{
QMutexLocker locker(&m_mutex);
m_layout->removeItem(m_spacer);
TasksSvg* taskssvg = new TasksSvg(task, this);
TasksSvg* taskssvg = new TasksSvg(task, m_tooltipmode, this);
m_layout->addItem(taskssvg);
m_taskssvgs.append(taskssvg);
taskssvg->setPreferredSize(kTaskSize(size(), formFactor()));
@ -416,5 +474,19 @@ void TasksApplet::slotCurrentDesktopChanged(const int desktop)
}
}
void TasksApplet::slotConfigAccepted()
{
Q_ASSERT(m_tooltipmodebox != nullptr);
const int tooltipmodeindex = m_tooltipmodebox->currentIndex();
m_tooltipmode = static_cast<TasksApplet::ToolTipMode>(tooltipmodeindex);
KConfigGroup configgroup = config();
configgroup.writeEntry("tooltipMode", tooltipmodeindex);
QMutexLocker locker(&m_mutex);
foreach (TasksSvg* taskssvg, m_taskssvgs) {
taskssvg->setup(m_tooltipmode);
}
emit configNeedsSaving();
}
#include "moc_tasks.cpp"
#include "tasks.moc"

View file

@ -22,8 +22,10 @@
#include "kworkspace/ktaskmanager.h"
#include <QMutex>
#include <QComboBox>
#include <QGraphicsLinearLayout>
#include <Plasma/Applet>
#include <KConfigDialog>
class TasksSvg;
@ -31,15 +33,23 @@ class TasksApplet : public Plasma::Applet
{
Q_OBJECT
public:
enum ToolTipMode {
ToolTipNone = 0,
ToolTipPreview = 1,
ToolTipHighlight = 2
};
TasksApplet(QObject *parent, const QVariantList &args);
// Plasma::Applet reimplementation
void init() final;
void createConfigurationInterface(KConfigDialog *parent) final;
private Q_SLOTS:
void slotTaskAdded(const WId task);
void slotTaskRemoved(const WId task);
void slotCurrentDesktopChanged(const int desktop);
void slotConfigAccepted();
protected:
// Plasma::Applet reimplementation
@ -52,6 +62,8 @@ private:
QGraphicsLinearLayout* m_layout;
QGraphicsWidget* m_spacer;
QList<TasksSvg*> m_taskssvgs;
TasksApplet::ToolTipMode m_tooltipmode;
QComboBox* m_tooltipmodebox;
};
K_EXPORT_PLASMA_APPLET(tasks, TasksApplet)

View file

@ -43,10 +43,9 @@ plugin=tasks
zvalue=0
[Containments][1][Applets][4][Configuration]
highlightWindows=false
tooltipMode=1
showOnlyCurrentDesktop=true
showOnlyCurrentScreen=false
showToolTip=true
[Containments][1][Applets][4][LayoutInformation]
Order=2