20#include "kexiactionproxy.h"
21#include "kexiactionproxy_p.h"
25#include <tdemainwindow.h>
26#include <tdeshortcut.h>
32TDEAction_setEnabled_Helper::TDEAction_setEnabled_Helper(
KexiActionProxy* proxy)
33 : TQObject(0,
"TDEAction_setEnabled_Helper")
38void TDEAction_setEnabled_Helper::slotSetEnabled(
bool enabled)
40 if (sender()->inherits(
"TDEAction")) {
41 const TDEAction *a =
static_cast<const TDEAction*
>(sender());
42 m_proxy->setAvailable(a->name(), enabled);
48KexiSharedActionConnector::KexiSharedActionConnector(
KexiActionProxy* proxy, TQObject *obj )
54KexiSharedActionConnector::~KexiSharedActionConnector()
58void KexiSharedActionConnector::plugSharedAction(
const char *action_name,
const char *slot)
63void KexiSharedActionConnector::plugSharedActionToExternalGUI(
64 const char *action_name, KXMLGUIClient *client)
66 m_proxy->plugSharedActionToExternalGUI(action_name, client);
69void KexiSharedActionConnector::plugSharedActionsToExternalGUI(
70 const TQValueList<TQCString>& action_names, KXMLGUIClient *client)
72 m_proxy->plugSharedActionsToExternalGUI(action_names, client);
80 , m_receiver(receiver)
82 , m_actionProxyParent(0)
83 , m_signal_parent( 0,
"signal_parent" )
84 , m_TDEAction_setEnabled_helper( new TDEAction_setEnabled_Helper(this) )
87 m_signals.setAutoDelete(
true);
88 m_sharedActionChildren.setAutoDelete(
false);
89 m_alternativeActions.setAutoDelete(
true);
93KexiActionProxy::~KexiActionProxy()
95 TQPtrListIterator<KexiActionProxy> it(m_sharedActionChildren);
97 for (;it.current();++it) {
98 it.current()->setActionProxyParent_internal( 0 );
101 if (m_actionProxyParent)
102 m_actionProxyParent->takeActionProxyChild(
this );
113 TQPair<TQSignal*,bool> *p = m_signals[action_name];
115 p =
new TQPair<TQSignal*,bool>(
new TQSignal(&
m_signal_parent),
true );
116 m_signals.insert(action_name, p);
118 if (receiver && slot)
119 p->first->connect( receiver, slot );
122void KexiActionProxy::unplugSharedAction(
const char *action_name)
124 TQPair<TQSignal*,bool> *p = m_signals.take(action_name);
135 kdWarning() <<
"KexiActionProxy::plugSharedAction(): NO SUCH ACTION: " << action_name << endl;
141void KexiActionProxy::unplugSharedAction(
const char *action_name, TQWidget* w)
145 kdWarning() <<
"KexiActionProxy::unplugSharedAction(): NO SUCH ACTION: " << action_name << endl;
155 kdWarning() <<
"KexiActionProxy::plugSharedAction(): NO SUCH ACTION: " << action_name << endl;
158 TQCString altName = a->name();
160 TDEAction *alt_act =
new TDEAction(alternativeText, a->iconSet(), a->shortcut(),
161 0, 0, a->parent(), altName);
162 TQObject::connect(alt_act, TQ_SIGNAL(activated()), a, TQ_SLOT(activate()));
171void KexiActionProxy::plugSharedActionToExternalGUI(
const char *action_name, KXMLGUIClient *client)
173 TDEAction *a = client->action(action_name);
179 setAvailable(a->name(), a->isEnabled());
184void KexiActionProxy::plugSharedActionsToExternalGUI(
185 const TQValueList<TQCString>& action_names, KXMLGUIClient *client)
187 for (TQValueList<TQCString>::const_iterator it = action_names.constBegin(); it!=action_names.constEnd(); ++it) {
188 plugSharedActionToExternalGUI(*it, client);
194 TQPair<TQSignal*,bool> *p = m_signals[action_name];
195 if (!p || !p->second) {
197 if (alsoCheckInChildren) {
198 TQPtrListIterator<KexiActionProxy> it( m_sharedActionChildren );
199 for( ; it.current(); ++it ) {
200 if (it.current()->activateSharedAction( action_name, alsoCheckInChildren ))
204 return m_actionProxyParent ? m_actionProxyParent->
activateSharedAction(action_name,
false) :
false;
207 p->first->activate();
213 return m_host->
mainWindow()->actionCollection()->action(action_name);
218 TQPair<TQSignal*,bool> *p = m_signals[action_name];
223 TQPtrListIterator<KexiActionProxy> it( m_sharedActionChildren );
224 for( ; it.current(); ++it ) {
225 if (it.current()->isSupported(action_name))
235 TQPair<TQSignal*,bool> *p = m_signals[action_name];
238 if (alsoCheckInChildren) {
240 return m_focusedChild->
isAvailable(action_name, alsoCheckInChildren);
241 TQPtrListIterator<KexiActionProxy> it( m_sharedActionChildren );
242 for( ; it.current(); ++it ) {
243 if (it.current()->isSupported(action_name))
244 return it.current()->isAvailable(action_name, alsoCheckInChildren);
247 return m_actionProxyParent ? m_actionProxyParent->
isAvailable(action_name,
false) :
false;
250 return p->second != 0;
253void KexiActionProxy::setAvailable(
const char* action_name,
bool set)
255 TQPair<TQSignal*,bool> *p = m_signals[action_name];
264 if (!child || child==
this)
267 m_sharedActionChildren.append( child );
272 if (m_sharedActionChildren.findRef( child ) != -1)
273 m_sharedActionChildren.take();
278 m_actionProxyParent = parent;
281#include "kexiactionproxy_p.moc"
An interface that acts as proxy for shared actions within the application.
void addActionProxyChild(KexiActionProxy *child)
TDEAction_setEnabled_Helper * m_TDEAction_setEnabled_helper
For internal use by plugSharedActionToExternalGUI()
bool isAvailable(const char *action_name, bool alsoCheckInChildren=true) const
virtual TDEAction * sharedAction(const char *action_name)
bool activateSharedAction(const char *action_name, bool alsoCheckInChildren=true)
TQObject m_signal_parent
it's just to have common parent for owned signals
void setActionProxyParent_internal(KexiActionProxy *parent)
For internal use by addActionProxyChild(). parent can be 0.
void plugSharedAction(const char *action_name, TQObject *receiver, const char *slot)
bool isSupported(const char *action_name) const
KexiActionProxy(TQObject *receiver, KexiSharedActionHost *host=0)
Acts as application-wide host that offers shared actions.
void plugActionProxy(KexiActionProxy *proxy)
void updateActionAvailable(const char *action_name, bool avail, TQObject *obj)
TDEMainWindow * mainWindow() const
KexiActionProxy * takeActionProxyFor(TQObject *o)