add the template interface
svn path=/trunk/KDE/kdelibs/; revision=958529
This commit is contained in:
parent
9ddc33a663
commit
4171786f21
80
private/actionwidgetinterface_p.h
Normal file
80
private/actionwidgetinterface_p.h
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#ifndef ACTIONWIDGETINTERFACE_P_H
|
||||||
|
/**
|
||||||
|
* update the icon's text, icon, etc. to reflect the properties of its associated action.
|
||||||
|
*/
|
||||||
|
#include <QAction>
|
||||||
|
|
||||||
|
namespace Plasma
|
||||||
|
{
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class ActionWidgetInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
T *t;
|
||||||
|
QAction *action;
|
||||||
|
|
||||||
|
ActionWidgetInterface(T *publicClass)
|
||||||
|
: t(publicClass),
|
||||||
|
action(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~ActionWidgetInterface()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void changed()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void clearAction()
|
||||||
|
{
|
||||||
|
action = 0;
|
||||||
|
syncToAction();
|
||||||
|
changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
void syncToAction()
|
||||||
|
{
|
||||||
|
if (!action) {
|
||||||
|
t->setIcon(QIcon());
|
||||||
|
t->setText(QString());
|
||||||
|
t->setEnabled(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//we don't get told *what* changed, just that something changed
|
||||||
|
//so we update everything we care about
|
||||||
|
t->setIcon(action->icon());
|
||||||
|
t->setText(action->iconText());
|
||||||
|
t->setEnabled(action->isEnabled());
|
||||||
|
t->setVisible(action->isVisible());
|
||||||
|
|
||||||
|
if (!t->toolTip().isEmpty()) {
|
||||||
|
t->setToolTip(action->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAction(QAction *a)
|
||||||
|
{
|
||||||
|
if (action) {
|
||||||
|
QObject::disconnect(action, 0, t, 0);
|
||||||
|
QObject::disconnect(t, 0, action, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
action = a;
|
||||||
|
|
||||||
|
if (action) {
|
||||||
|
QObject::connect(action, SIGNAL(changed()), t, SLOT(syncToAction()));
|
||||||
|
QObject::connect(action, SIGNAL(destroyed(QObject*)), t, SLOT(clearAction()));
|
||||||
|
QObject::connect(t, SIGNAL(clicked()), action, SLOT(trigger()));
|
||||||
|
syncToAction();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Plasma
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue
Block a user