]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/wx-console/wxbrestorepanel.h
45121595cbd3b570ec1d13c9c5cd1ae22f7ab34c
[bacula/bacula] / bacula / src / wx-console / wxbrestorepanel.h
1 /*
2  *
3  *   wxbPanel for restoring files
4  *
5  *    Nicolas Boichat, April-May 2004
6  *
7  */
8 /*
9    Copyright (C) 2004 Kern Sibbald and John Walker
10
11    This program is free software; you can redistribute it and/or
12    modify it under the terms of the GNU General Public License
13    as published by the Free Software Foundation; either version 2
14    of the License, or (at your option) any later version.
15
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20
21    You should have received a copy of the GNU General Public License
22    along with this program; if not, write to the Free Software
23    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  */
25
26 #ifndef WXBRESTOREPANEL_H
27 #define WXBRESTOREPANEL_H
28
29 #include "wx/wxprec.h"
30
31 #ifndef WX_PRECOMP
32    #include "wx/wx.h"
33 #endif
34
35 #include "wxbtableparser.h"
36
37 #include <wx/thread.h>
38 #include <wx/listctrl.h>
39 #include <wx/treectrl.h>
40 #include <wx/gauge.h>
41 #include <wx/stattext.h>
42
43 #include "wxbutils.h"
44
45 #include "wxbconfigpanel.h"
46 #include "wxbtreectrl.h"
47 #include "wxblistctrl.h"
48
49 class wxbTreeListPanel;
50
51 /*
52  * wxbPanel for restoring files
53  */
54 class wxbRestorePanel : public wxbPanel
55 {
56    public:
57       wxbRestorePanel(wxWindow* parent);
58       ~wxbRestorePanel();
59
60       /* wxbPanel overloadings */
61       virtual wxString GetTitle();
62       virtual void EnablePanel(bool enable = true);
63
64    private:
65 /* Commands called by events handler */
66
67       /* The main button has been clicked */
68       void CmdStart();
69
70       /* The cancel button has been clicked */
71       void CmdCancel();
72
73       /* Apply configuration changes */
74       void CmdConfigApply();
75
76       /* Cancel restore */
77       void CmdConfigCancel();
78
79        /* List jobs for a specified client */
80       void CmdListJobs();
81
82       /* List files and directories for a specified tree item */
83       void CmdList(wxTreeItemId item);
84
85       /* Mark a treeitem (directory) or a listitem (file or directory) */
86       void CmdMark(wxTreeItemId treeitem, long listitem);
87
88 /* General functions and variables */
89       //bool ended; /* The last command send has finished */
90
91       //long filemessages; /* When restoring, number of files restored */
92       long totfilemessages; /* When restoring, number of files to be restored */
93       wxString jobid;
94
95       /* Parse a table in tableParser */
96       wxbTableParser* CreateAndWaitForParser(wxString cmd);
97
98       /* Run a command, and waits until result is fully received,
99        * if keepresults is true, returns a valid pointer to a wxbDataTokenizer
100        * containing the data. */
101       wxbDataTokenizer* WaitForEnd(wxString cmd, bool keepresults = false, bool linebyline = true);
102
103       /* Run a command, and waits until prompt result is fully received,
104        * if keepresults is true, returns a valid pointer to a wxbPromptParser
105        * containing the data. */
106       wxbPromptParser* WaitForPrompt(wxString cmd, bool keepresults = false);
107
108       /* Run a dir command, and waits until result is fully received. */
109       void UpdateTreeItem(wxTreeItemId item, bool updatelist);
110
111       /* Parse dir command results. */
112       wxString* ParseList(wxString line);
113
114       /* Sets a list item state, and update its parents and children if it is a directory */
115       void SetListItemState(long listitem, int newstate);
116
117       /* Sets a tree item state, and update its children, parents and list (if necessary) */
118       void SetTreeItemState(wxTreeItemId item, int newstate);
119       
120       /* Update a tree item parents' state */
121       void UpdateTreeItemState(wxTreeItemId item);
122
123       /* Refresh a tree item, and all its children. */
124       void RefreshTree(wxTreeItemId item);
125       
126       /* Update first config, adapting settings to the job name selected */
127       void UpdateFirstConfig();
128       
129       /* Update second config */
130       bool UpdateSecondConfig(wxbDataTokenizer* dt);
131       
132 /* Status related */
133       enum status_enum
134       {
135          disabled,    // The panel is not activatable
136          activable,   // The panel is activable, but not activated
137          entered,     // The panel is activated
138          choosing,    // The user is choosing files to restore
139          listing,     // Dir listing is in progress
140          configuring, // The user is configuring restore process
141          restoring,   // Bacula is restoring files
142          finished     // Retore done (state will change in activable)
143       };
144
145       status_enum status;
146
147       /* Cancelled status :
148        *  - 0 - !cancelled
149        *  - 1 - will be cancelled
150        *  - 2 - has been cancelled */
151       int cancelled;
152
153       /* Set current status by enabling/disabling components */
154       void SetStatus(status_enum newstatus);
155
156 /* UI related */
157       bool working; // A command is running, discard GUI events
158       bool markWhenListingDone;
159       wxTreeItemId currentTreeItem; // Currently selected tree item
160
161       /* Enable or disable config controls status */
162       void EnableConfig(bool enable);
163
164 /* Event handling */
165       void OnStart(wxCommandEvent& WXUNUSED(event));
166       void OnCancel(wxCommandEvent& WXUNUSED(event));
167       void OnTreeChanging(wxTreeEvent& event);
168       void OnTreeExpanding(wxTreeEvent& event);
169       void OnTreeChanged(wxTreeEvent& event);
170       void OnTreeMarked(wxbTreeMarkedEvent& event);
171       void OnListMarked(wxbListMarkedEvent& event);
172       void OnListActivated(wxListEvent& event);
173       void OnConfigUpdated(wxCommandEvent& event);
174       void OnConfigOk(wxCommandEvent& WXUNUSED(event));
175       void OnConfigApply(wxCommandEvent& WXUNUSED(event));
176       void OnConfigCancel(wxCommandEvent& WXUNUSED(event));
177
178 /* Components */
179       wxBoxSizer *centerSizer; /* Center sizer */
180       wxbTreeListPanel *treelistPanel; /* Panel which contains tree and list */
181       wxbConfigPanel *configPanel; /* Panel which contains initial restore options */
182       wxbConfigPanel *restorePanel; /* Panel which contains final restore options */
183
184       wxImageList* imagelist; //image list for tree and list
185
186       wxButton* start;
187       wxButton* cancel;
188       wxbTreeCtrl* tree;
189       wxbListCtrl* list;
190       wxGauge* gauge;
191
192       /*wxButton*     cfgOk;
193       wxButton*     cfgApply;
194       wxButton*     cfgCancel;*/
195       
196       long cfgUpdated; //keeps which config fields have been updated
197       
198       /*wxStaticText* cfgJobname;
199       wxStaticText* cfgBootstrap;
200       wxTextCtrl*   cfgWhere;
201       wxChoice*     cfgReplace;
202       wxChoice*     cfgFileset;
203       wxChoice*     cfgClient;
204       wxStaticText* cfgStorage;
205       wxTextCtrl*   cfgWhen;
206       wxTextCtrl*   cfgPriority;*/
207
208       friend class wxbTreeListPanel;
209
210       DECLARE_EVENT_TABLE();    
211 };
212
213 class wxbTreeListPanel: public wxPanel {
214 public:
215      wxbTreeListPanel(wxbRestorePanel* parent);
216 private:
217      void OnTreeMarked(wxbTreeMarkedEvent& event);
218      void OnListMarked(wxbListMarkedEvent& event);
219      DECLARE_EVENT_TABLE(); 
220      wxbRestorePanel* parent;
221 };
222
223 #endif // WXBRESTOREPANEL_H
224