Separate class for handling configuration file
[vlp.git] / src / kernel / kernel.h
1 /**************************************************************
2
3   Copyright (C) 1997  Oskar Swida
4
5  This program is free software; you can redistribute it and/or
6  modify it under the terms of the GNU General Public License
7  as published by the Free Software Foundation; either version 2
8  of the License, or (at your option) any later version.
9
10  This program is distributed in the hope that it will be useful, 
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  GNU General Public License for more details.
14
15  You should have received a copy of the GNU General Public License
16  along with this program; if not, write to the Free Software
17  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
19
20
21
22  NOTE: This software is using the free software license of 
23        the QT library v.1.30 from Troll Tech AS.
24        See the file LICENSE.QT.
25
26  
27   To contact the author, write:
28      e-mail: swida@aragorn.pb.bialystok.pl
29
30 ************************************************************/
31
32 #ifndef VLP_KERNEL_H
33 #define VLP_KERNEL_H
34
35 #include <QtGui/QMainWindow>
36 #include <QtGui/QListWidget>
37 #include <QtGui/QTextEdit>
38 #include <QtCore/QSocketNotifier>
39 #include <QtCore/QDir>
40
41 #include "comm.h"
42
43 #include "ui/kernelwindow.h"
44
45 #define GPATH "loggr"
46 #define IPATH "logi"
47 #define NPATH "logn"
48 #define REMOTE_PATH "REMOTE"
49 #define MAXINTERP 20
50 #define MAXINSTANCES 256 
51
52
53 #define MESG_COL        0
54 #define WARN_COL        1
55 #define NORM_COL        2
56
57
58 /**
59  * Interpreter slot
60  */
61 class InterpEntry {
62 public:
63         /** Interpreter identifier */
64         int ID;
65         /** Defines if interpreter is remote or not */
66         bool remote;
67         /* Program name */
68         char fullname[255];
69         char shortname[255];
70         
71         /* Socket */
72         int sock;
73         QSocketNotifier *notify;
74         /* IDs of my remote INT modules */
75         int RInstances[MAXINSTANCES];
76         /* Parent interpreter info */
77         ctx_struct p_ctx;
78 };
79
80 /**
81  * Connection slot
82  */
83 class ConnectEntry {
84 public:
85         char addr[256];
86
87         ConnectEntry(char *s) {
88                 strcpy(addr, s);
89         };
90
91         ConnectEntry(const char *s) {
92                 strcpy(addr, s);
93         };
94 };
95
96
97 /**
98  * Kernel class
99  */
100 class QKernel : public QMainWindow, private Ui::KernelWindow {
101         Q_OBJECT
102 public:
103         QMenu *toolsMenu;
104         char progdir[256];
105         int NodeNumber;
106         int ConType;
107
108         QKernel(int argc, char **argv);
109
110         void WriteMessage(char* msg);
111
112 public slots:
113         void NetMessage();
114         void IntMessage(int);
115
116 protected:
117         virtual void closeEvent (QCloseEvent * e);
118
119 private:
120         QList<InterpEntry*> Interpreters;
121         QList<ConnectEntry*> ConnectList;
122         
123         /**
124          * number of working interpreters
125          * @attention Currently not in use
126          */
127         int Tasks;
128         
129         /**
130          * number of connected VLPs
131          */
132         int ActiveConnections;
133         /**
134          * Indicates state of the Kernel Program. Is it locked or not.
135          */
136         bool LOCKED;
137         bool synchro;
138         bool wait_for_info;
139         char LockPasswd[25];
140         
141         int net_sock;
142         int freeINTid;
143         QSocketNotifier *Net_Notify;
144         QDir homeDir;
145         char myargs[5][255];
146         bool info_messages;
147
148         void loadConfig(const QString &fname);
149         void loadConfig(const char *);
150
151         void RunGraphModule(char*);
152         void RunNetModule();
153         InterpEntry *findINTbySocket(int);
154         InterpEntry *findINTbyID(int);
155         InterpEntry *RunIntModule(char *ss, int r);
156         void RemoteInstance(InterpEntry*, int);
157         void CloseInstances(InterpEntry*);
158
159         /**
160          * Sets QKernel menu entries to the given status
161          * @param locked status which will be set on the menu entries.
162          */
163         void setLocked(bool locked);
164
165         QString getConfigFilePath();
166         const char * getHomeDir();
167         const char * getRemoteDir();
168
169         const char * getNetModuleSocket();
170         const char * getGraphModuleSocket();
171
172 private slots:
173         void on_actionExecute_triggered();
174         void on_actionKill_triggered();
175         void on_actionQuit_triggered();
176         
177         void on_actionMessage_triggered();
178         void on_actionConnect_triggered();
179         void on_actionDisconnect_triggered();
180         void on_actionInfo_triggered();
181
182         void on_actionEditor_triggered();
183         void on_actionHelp_triggered();
184         void on_actionOptions_triggered();
185         void on_actionInfo_messages_triggered();
186         void on_actionLock_console_triggered();
187         void on_actionUnlock_console_triggered();
188 };
189
190 #endif /* VLP_KERNEL_H */