]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/wx-console/wxbmainframe.h
kes wx-console crashes because of differences between Bacula and wxWidgets
[bacula/bacula] / bacula / src / wx-console / wxbmainframe.h
1 /*
2  *
3  *   Main frame header file
4  *
5  *    Nicolas Boichat, July 2004
6  *
7  *    Version $Id$
8  */
9 /*
10    Copyright (C) 2004-2006 Kern Sibbald
11
12    This program is free software; you can redistribute it and/or
13    modify it under the terms of the GNU General Public License
14    version 2 as amended with additional clauses defined in the
15    file LICENSE in the main source directory.
16
17    This program is distributed in the hope that it will be useful,
18    but WITHOUT ANY WARRANTY; without even the implied warranty of
19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
20    the file LICENSE for additional details.
21
22  */
23
24 #ifndef WXBMAINFRAME_H
25 #define WXBMAINFRAME_H
26
27 #include "wx/wxprec.h"
28
29 #ifdef __BORLANDC__
30    #pragma hdrstop
31 #endif
32
33 // for all others, include the necessary headers (this file is usually all you
34 // need because it includes almost all "standard" wxWindows headers)
35 #ifndef WX_PRECOMP
36    #include "wx/wx.h"
37 #endif
38
39 #include <wx/textctrl.h>
40 #include <wx/tokenzr.h>
41 #include <wx/notebook.h>
42
43 #include <wx/dynarray.h>
44
45 #include "console_thread.h"
46
47 #include "wxbutils.h"
48
49 #include "wxbhistorytextctrl.h"
50
51 WX_DEFINE_ARRAY(wxbDataParser*, wxbDataParsers);
52
53 // ----------------------------------------------------------------------------
54 // wxbPrintObject - Used by wxbThreadEvent to contain data sent by director
55 // ----------------------------------------------------------------------------
56
57 class wxbPrintObject: public wxObject {
58    public:
59       wxString str;
60       int status;
61       wxbPrintObject(wxString str, int status): wxObject() {
62          this->str = str;
63          this->status = status;
64       }
65
66       wxbPrintObject(const wxbPrintObject& pe) {
67          this->str = pe.str;
68          this->status = pe.status;
69       }
70 };
71
72 // ----------------------------------------------------------------------------
73 // wxbThreadEvent - Event used by wxbTHREAD_EVENT
74 // ----------------------------------------------------------------------------
75
76 class wxbThreadEvent: public wxEvent {
77    public:
78       wxbThreadEvent(int id);
79       ~wxbThreadEvent();
80       wxbThreadEvent(const wxbThreadEvent& te);
81       virtual wxEvent *Clone() const;
82       wxbPrintObject* GetEventPrintObject();
83       void SetEventPrintObject(wxbPrintObject* object);
84 };
85
86 // Define a new frame type: this is going to be our main frame
87 class wxbMainFrame : public wxFrame
88 {
89 public:
90    /* this class is a singleton */
91    static wxbMainFrame* CreateInstance(const wxString& title, const wxPoint& pos, const wxSize& size, long style = wxDEFAULT_FRAME_STYLE);
92    static wxbMainFrame* GetInstance();
93
94    /* event handlers (these functions should _not_ be virtual) */
95    void OnQuit(wxCommandEvent& event);
96    void OnAbout(wxCommandEvent& event);
97    void OnChangeConfig(wxCommandEvent& event);
98    void OnEditConfig(wxCommandEvent& event);
99    void OnConnect(wxCommandEvent& event);
100    void OnDisconnect(wxCommandEvent& event);
101    void OnEnter(wxCommandEvent& event);
102    void OnPrint(wxbThreadEvent& event);
103
104    /* Enable and disable panels */
105    void EnablePanels();
106    void DisablePanels(void* except = NULL);
107
108    void EnableConsole(bool enable = true);
109
110    /*
111     *  Prints data received from director to the console,
112     *  and forwards it to the panels
113     */
114    void Print(wxString str, int status);
115
116    /* Sends data to the director */
117    void Send(wxString str);
118
119    /*
120     *  Starts the thread interacting with the director
121     *  If config is not empty, uses this config file.
122     */
123    void StartConsoleThread(const wxString& config);
124
125    /* Register a new wxbDataParser */
126    void Register(wxbDataParser* dp);
127
128    /* Unregister a wxbDataParser */
129    void Unregister(wxbDataParser* dp);
130
131    console_thread* ct; /* thread interacting with the director */
132
133 private:
134    /* private constructor, singleton */
135    wxbMainFrame(const wxString& title, const wxPoint& pos, const wxSize& size, long style);
136    ~wxbMainFrame();
137
138    static wxbMainFrame *frame; /* this */
139
140    wxMenu *menuFile;
141
142    wxNotebook *notebook; /* main notebook */
143    wxTextCtrl *consoleCtrl; /* wxTextCtrl containing graphical console */
144    wxStaticText *helpCtrl; /* wxStaticText showing help messages */
145    wxbHistoryTextCtrl *typeCtrl; /* wxbHistoryTextCtrl for console user input */
146    wxButton *sendButton; /* wxButton used to send data */
147
148    wxbPanel **panels; /* panels array, contained in the notebook */
149    wxbDataParsers parsers; /* Data parsers, which need to receive director informations */
150
151    wxbPromptParser* promptparser; /* prompt parser catching uncatched questions */
152
153    bool lockedbyconsole; /* true if the panels have been locked by something typed in the console */
154
155    wxString configfile; /* configfile used */
156
157    wxString consoleBuffer; /* Buffer used to print in the console line by line */
158
159    // any class wishing to process wxWindows events must use this macro
160    DECLARE_EVENT_TABLE()
161 };
162
163 #endif // WXBMAINFRAME_H