mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-23 10:22:49 +00:00
plasma: implement configuration interface for tasks applet
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
51928a9c9e
commit
ebcdc394b2
3 changed files with 92 additions and 9 deletions
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue