File indexing completed on 2024-12-01 06:51:47

0001 /***************************************************************************
0002                           crunninglist.h  -  list of running scripts
0003                              -------------------
0004     begin                : Ne dec 22 2002
0005     copyright            : (C) 2002-2009 by Tomas Mecir
0006     email                : kmuddy@kmuddy.com
0007  ***************************************************************************/
0008 
0009 /***************************************************************************
0010  *                                                                         *
0011  *   This program is free software; you can redistribute it and/or modify  *
0012  *   it under the terms of the GNU General Public License as published by  *
0013  *   the Free Software Foundation; either version 2 of the License, or     *
0014  *   (at your option) any later version.                                   *
0015  *                                                                         *
0016  ***************************************************************************/
0017 
0018 #ifndef CRUNNINGLIST_H
0019 #define CRUNNINGLIST_H
0020 
0021 class cRunningScript;
0022 
0023 using namespace std;
0024 
0025 #include "cactionbase.h"
0026 
0027 #include <qobject.h>
0028 #include <list>
0029 #include <map>
0030 #include <qcolor.h>
0031 
0032 class QSocketNotifier;
0033 class QAbstractItemModel;
0034 class cRunningModel;
0035 
0036 /**
0037 Manages all running scripts.
0038 
0039   *@author Tomas Mecir
0040   */
0041 
0042 class cRunningList: public QObject, public cActionBase {
0043 Q_OBJECT
0044 public: 
0045   cRunningList (int sess);
0046   virtual ~cRunningList ();
0047 
0048   QAbstractItemModel *getModel ();
0049 
0050   /** add a new script to my list */
0051   void addScript (cRunningScript *script);
0052 
0053   /** flow control state, i.e. how many lines are waiting in the
0054   flow control's queue */
0055   int fcState () { return textQueue.size (); };
0056   
0057   void killAll ();
0058 
0059   /** get script name */
0060   const QString name (int id);
0061   /** try to terminate the script */
0062   void terminate (int id);
0063   /** kill the script NOW! */
0064   void kill (int id);
0065 
0066   /** attempt to give a write-lock to a script */
0067   bool requestLock (cRunningScript *script, const QString &varname);
0068   /** release a lock */
0069   void releaseLock (cRunningScript *script, const QString &varname);
0070   /** look if the variable can be modified by a script (returns true
0071   if the variable is not locked or if this script has the lock) */
0072   bool canModify (cRunningScript *script, const QString &varname);
0073 private:
0074   QColor * getColor(QString s);
0075   QColor m_currentFgColor;
0076   QColor m_currentBkColor;
0077 
0078 signals:
0079   void stateChanged ();
0080 protected:
0081   virtual void eventStringHandler (QString event, int, QString &par1, const QString &);
0082   /** remove one script from my list */
0083   void removeScript (cRunningScript *script);
0084   void sendThisNow (const QString &text, int type, bool noFC = false);
0085   /** send input to flow-controlled scripts */
0086   void sendToFlowControlled(const QString &text, int type);
0087   /** send user command to all scripts */
0088   void sendCommand (const QString &text);
0089   /** send server output to all scripts */
0090   void sendServerOutput (const QString &text);
0091   /** send server prompt to all scripts */
0092   void sendPrompt (const QString &prompt);
0093 
0094   /** list of all running scripts */
0095   map<int, cRunningScript *> scripts;
0096   /** last used script ID */
0097   int lastid;
0098   
0099   cRunningScript *getRunningScript (int id);
0100   /** text sending synchronization */
0101   int waitCounter;
0102   /** text sending operation in progress */
0103   bool waitLock;
0104   /** text strings waiting to be sent to scripts */
0105   list<QString> textQueue;
0106   /** types of those strings */
0107   list<int> typeQueue;
0108   map<QString, cRunningScript *> locks;
0109 
0110   cRunningModel *model;
0111   friend class cRunningModel;
0112 protected slots:
0113   /** send a text from a script to the server */
0114   void sendText (const QString &text);
0115   /** display a text from the script */
0116   void displayText (const QString &text);
0117   
0118   /** one script has finished succesfully */
0119   void scriptFinished (cRunningScript *script, int returnValue);
0120   /** one script has been killed */
0121   void scriptKilled (cRunningScript *script);
0122   /** one script couldn't be started */
0123   void scriptFailed (cRunningScript *script);
0124   /** cRunningScript has accepted the text (but not sent to script yet) */
0125   void scriptTextAccepted ();
0126   /** cRunningScript has received the sent text */
0127   void scriptTextSent ();
0128 };
0129 
0130 #endif