bool ScriptManager::slotRunScript( const QString &name, bool silent ) { DEBUG_BLOCK ScriptItem *item = m_scripts.value( name ); const KUrl url = item->url; //load the wrapper classes item->engine = new QScriptEngine( this ); connect(item->engine, SIGNAL(signalHandlerException(QScriptValue)), SLOT(handleException(QScriptValue))); startScriptEngine( name ); QFile scriptFile( url.path() ); scriptFile.open( QIODevice::ReadOnly ); item->running = true; item->evaluating = true; if( item->info.category() == "Lyrics" ) { m_lyricsScript = name; debug() << "lyrics script started:" << name; emit lyricsScriptStarted(); } item->log << QString( "%1 Script started" ).arg( QTime::currentTime().toString() ); item->engine->setProcessEventsInterval( 100 ); item->engine->evaluate( scriptFile.readAll() ); scriptFile.close(); if ( item->evaluating ) { item->evaluating = false; if ( item->engine->hasUncaughtException() ) { QString errorString = QString( "Script Error: %1 (line: %2)" ) .arg( item->engine->uncaughtException().toString() ) .arg( item->engine->uncaughtExceptionLineNumber() ); item->log << errorString; error() << errorString; item->engine->clearExceptions(); slotStopScript( name ); if( !silent ) { debug() << "The Log For the script that is the borked: " << item->log; } return false; } if( item->info.category() == QLatin1String("Scriptable Service") ) ServiceScriptCustomize( name ); } else slotStopScript( name ); return true; }
bool ScriptManager::stopScript( const QString& name ) { if( name.isEmpty() ) return false; if( !m_scripts.contains( name ) ) return false; slotStopScript( name ); return true; }
bool ScriptManager::stopScript( const QString& name ) { if( !m_scripts.contains( name ) ) return false; m_gui->listView->setCurrentItem( m_scripts[name].li ); slotStopScript(); return true; }
bool EvaScriptManager::qt_invoke( int _id, QUObject* _o ) { switch ( _id - staticMetaObject()->slotOffset() ) { case 0: slotCurrentChanged((QListViewItem*)static_QUType_ptr.get(_o+1)); break; case 1: static_QUType_bool.set(_o,slotInstallScript()); break; case 2: static_QUType_bool.set(_o,slotInstallScript((const QString&)static_QUType_QString.get(_o+1))); break; case 3: slotUninstallScript(); break; case 4: static_QUType_bool.set(_o,slotRunScript()); break; case 5: static_QUType_bool.set(_o,slotRunScript((bool)static_QUType_bool.get(_o+1))); break; case 6: slotStopScript(); break; case 7: slotConfigureScript(); break; case 8: slotAboutScript(); break; case 9: slotShowContextMenu((QListViewItem*)static_QUType_ptr.get(_o+1),(const QPoint&)*((const QPoint*)static_QUType_ptr.get(_o+2))); break; case 10: slotReceivedStdout((KProcess*)static_QUType_ptr.get(_o+1),(char*)static_QUType_charstar.get(_o+2),(int)static_QUType_int.get(_o+3)); break; case 11: slotReceivedStderr((KProcess*)static_QUType_ptr.get(_o+1),(char*)static_QUType_charstar.get(_o+2),(int)static_QUType_int.get(_o+3)); break; case 12: scriptFinished((KProcess*)static_QUType_ptr.get(_o+1)); break; default: return KDialogBase::qt_invoke( _id, _o ); } return TRUE; }
ScriptManager::ScriptManager( QWidget *parent, const char *name ) : KDialogBase( parent, name, false, QString::null, Close, Close, true ) , EngineObserver( EngineController::instance() ) , m_gui( new ScriptManagerBase( this ) ) { DEBUG_BLOCK s_instance = this; kapp->setTopWidget( this ); setCaption( kapp->makeStdCaption( i18n( "Script Manager" ) ) ); // Gives the window a small title bar, and skips a taskbar entry KWin::setType( winId(), NET::Utility ); KWin::setState( winId(), NET::SkipTaskbar ); setMainWidget( m_gui ); m_gui->listView->setRootIsDecorated( true ); m_gui->listView->setFullWidth( true ); m_gui->listView->setShowSortIndicator( true ); /// Category items m_generalCategory = new KListViewItem( m_gui->listView, i18n( "General" ) ); m_lyricsCategory = new KListViewItem( m_gui->listView, i18n( "Lyrics" ) ); m_scoreCategory = new KListViewItem( m_gui->listView, i18n( "Score" ) ); m_transcodeCategory = new KListViewItem( m_gui->listView, i18n( "Transcoding" ) ); m_generalCategory ->setSelectable( false ); m_lyricsCategory ->setSelectable( false ); m_scoreCategory ->setSelectable( false ); m_transcodeCategory->setSelectable( false ); m_generalCategory ->setPixmap( 0, SmallIcon( amaroK::icon( "files" ) ) ); m_lyricsCategory ->setPixmap( 0, SmallIcon( amaroK::icon( "files" ) ) ); m_scoreCategory ->setPixmap( 0, SmallIcon( amaroK::icon( "files" ) ) ); m_transcodeCategory->setPixmap( 0, SmallIcon( amaroK::icon( "files" ) ) ); connect( m_gui->listView, SIGNAL( currentChanged( QListViewItem* ) ), SLOT( slotCurrentChanged( QListViewItem* ) ) ); connect( m_gui->listView, SIGNAL( doubleClicked ( QListViewItem*, const QPoint&, int ) ), SLOT( slotRunScript() ) ); connect( m_gui->listView, SIGNAL( rightButtonPressed ( QListViewItem*, const QPoint&, int ) ), SLOT( slotShowContextMenu( QListViewItem*, const QPoint& ) ) ); connect( m_gui->installButton, SIGNAL( clicked() ), SLOT( slotInstallScript() ) ); connect( m_gui->retrieveButton, SIGNAL( clicked() ), SLOT( slotRetrieveScript() ) ); connect( m_gui->uninstallButton, SIGNAL( clicked() ), SLOT( slotUninstallScript() ) ); connect( m_gui->runButton, SIGNAL( clicked() ), SLOT( slotRunScript() ) ); connect( m_gui->stopButton, SIGNAL( clicked() ), SLOT( slotStopScript() ) ); connect( m_gui->configureButton, SIGNAL( clicked() ), SLOT( slotConfigureScript() ) ); connect( m_gui->aboutButton, SIGNAL( clicked() ), SLOT( slotAboutScript() ) ); m_gui->installButton ->setIconSet( SmallIconSet( amaroK::icon( "files" ) ) ); m_gui->retrieveButton ->setIconSet( SmallIconSet( amaroK::icon( "download" ) ) ); m_gui->uninstallButton->setIconSet( SmallIconSet( amaroK::icon( "remove" ) ) ); m_gui->runButton ->setIconSet( SmallIconSet( amaroK::icon( "play" ) ) ); m_gui->stopButton ->setIconSet( SmallIconSet( amaroK::icon( "stop" ) ) ); m_gui->configureButton->setIconSet( SmallIconSet( amaroK::icon( "configure" ) ) ); m_gui->aboutButton ->setIconSet( SmallIconSet( amaroK::icon( "info" ) ) ); QSize sz = sizeHint(); setMinimumSize( kMax( 350, sz.width() ), kMax( 250, sz.height() ) ); resize( sizeHint() ); connect( this, SIGNAL(lyricsScriptChanged()), ContextBrowser::instance(), SLOT( lyricsScriptChanged() ) ); // Delay this call via eventloop, because it's a bit slow and would block QTimer::singleShot( 0, this, SLOT( findScripts() ) ); }