20 #include "tdescriptactionmanager.h" 21 #include <tdeparts/part.h> 22 #include <tdeparts/componentfactory.h> 23 #include <tdeapplication.h> 24 #include <kdesktopfile.h> 25 #include <kstandarddirs.h> 27 #include <tdelocale.h> 28 #include <tdemessagebox.h> 30 #include <scriptinterface.h> 31 #include <tdeaction.h> 32 #include <tqfileinfo.h> 35 KScriptAction::KScriptAction(
const TQString &scriptDesktopFile, TQObject *interface, TDEActionCollection *ac )
36 : TQObject(interface), KScriptClientInterface( )
43 if(KDesktopFile::isDesktopFile(scriptDesktopFile))
45 KDesktopFile desktop(scriptDesktopFile,
true);
46 TQFileInfo scriptPath(scriptDesktopFile);
48 m_scriptFile = scriptPath.dirPath(
true) +
"/" + desktop.readEntry(
"X-TDE-ScriptName",
"");
49 m_scriptName = desktop.readName();
50 m_scriptType = desktop.readType();
51 TQString scriptTypeQuery =
"([X-TDE-Script-Runner] == '" + m_scriptType +
"')";
52 TDETrader::OfferList offers = TDETrader::self()->query(
"KScriptRunner/KScriptRunner", scriptTypeQuery );
53 if ( !offers.isEmpty() )
55 m_action =
new TDEAction(m_scriptName, TDEShortcut(),
this, TQT_SLOT(activate()), ac,
"script");
57 m_timeout =
new TQTimer(
this);
58 TQString icon = desktop.readIcon();
59 m_action->setStatusText(desktop.readComment());
61 m_action->setIcon(icon);
62 m_action->setShortcutConfigurable(
true);
63 connect( m_timeout, TQT_SIGNAL(timeout()), TQT_SLOT(cleanup()) );
68 KScriptAction::~KScriptAction()
70 if( m_interface )
delete m_interface;
71 if( m_action )
delete m_action;
81 void KScriptAction::activate( )
83 if( m_interface == 0L)
85 TQString scriptTypeQuery =
"([X-TDE-Script-Runner] == '" + m_scriptType +
"')";
86 m_interface= KParts::ComponentFactory::createInstanceFromQuery<KScriptInterface>(
"KScriptRunner/KScriptRunner", scriptTypeQuery, this );
87 if ( m_interface != 0L)
89 m_interface->ScriptClientInterface=
this;
90 if( m_scriptMethod.isEmpty() )
91 m_interface->setScript(m_scriptFile);
93 m_interface->setScript(m_scriptFile, m_scriptMethod);
94 connect(
this, TQT_SIGNAL(done(KScriptClientInterface::Result,
const TQVariant &)),
this, TQT_SLOT(scriptFinished()));
98 KMessageBox::sorry(0, i18n(
"Unable to get KScript Runner for type \"%1\".").arg(m_scriptType), i18n(
"KScript Error"));
99 kdDebug() <<
"Query string: " << scriptTypeQuery << endl;
103 m_interface->run(parent(), TQVariant());
104 m_timeout->start(60000,FALSE);
108 void KScriptAction::cleanup()
110 if( m_interface && m_refs == 0)
117 void KScriptAction::scriptFinished()
124 m_actions.setAutoDelete(
true);
127 KScriptActionManager::~ KScriptActionManager( )
135 TQPtrList<TDEAction> actions;
138 scripts += TDEGlobal::dirs()->findAllResources(
"data",
139 TQString(kapp->name())+
"/scripts/*.desktop",
false,
true );
141 for( TQStringList::ConstIterator it = dirs.begin(); it != dirs.end(); ++it)
143 scripts += TDEGlobal::dirs()->findAllResources(
"data",
144 (*it)+
"/*.desktop",
false,
true );
147 for (TQStringList::Iterator it = scripts.begin(); it != scripts.end(); ++it )
149 kdDebug() <<
"Loading " << *it << endl;
153 actions.append(script->
action());
154 m_actions.append(script);
155 connect(script, TQT_SIGNAL(error(
const TQString&)),
this,
157 connect(script, TQT_SIGNAL(warning(
const TQString&)),
this,
159 connect(script, TQT_SIGNAL(output(
const TQString&)),
this,
161 connect(script, TQT_SIGNAL(progress(
int )),
this,
163 connect(script, TQT_SIGNAL(done( KScriptClientInterface::Result,
const TQVariant &)),
this,
164 TQT_SIGNAL(
scriptDone( KScriptClientInterface::Result,
const TQVariant &)));
177 #include "tdescriptactionmanager.moc" void scriptOutput(const TQString &msg)
Returns a standard out message from a script.
void scriptDone(KScriptClientInterface::Result result, const TQVariant &returned)
Notifies that the script has finished.
KScriptActionManager(TQObject *parent, TDEActionCollection *ac)
Create a script manager that is attached to an action collection.
TQPtrList< TDEAction > scripts(TQObject *interface, const TQStringList &dirs=TQStringList()) const
Return all currently loaded scripts in a direcotry and attaches them to a TQObject interface...
bool isValid() const
Returns the validity of the current script.
void scriptError(const TQString &msg)
Returns an error message from a script.
void scriptProgress(int percent)
Returns the percentage complete of an operation in the script.
void scriptWarning(const TQString &msg)
Returns a warning message from a script.
TDEAction * action()
TDEAction for the current script.
Connects a TDEAction to a script runner.