]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/wx-console/wxbrestorepanel.h
kes Simplify locking in the reservations system.
[bacula/bacula] / bacula / src / wx-console / wxbrestorepanel.h
index 3e1fdcd2e549baee2f7d6444013841b3932106f5..4f6bae9d83763798f1771297c6ce7c5f24f84d72 100644 (file)
@@ -1,20 +1,38 @@
 /*
-   Copyright (C) 2004 Kern Sibbald and John Walker
+ *
+ *   wxbPanel for restoring files
+ *
+ *    Nicolas Boichat, April-May 2004
+ *
+ *    Version $Id$
+ */
+/*
+   Bacula® - The Network Backup Solution
 
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
+   Copyright (C) 2004-2006 Free Software Foundation Europe e.V.
 
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   The main author of Bacula is Kern Sibbald, with contributions from
+   many others, a complete list can be found in the file AUTHORS.
+   This program is Free Software; you can redistribute it and/or
+   modify it under the terms of version two of the GNU General Public
+   License as published by the Free Software Foundation plus additions
+   that are listed in the file LICENSE.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.
+
+   Bacula® is a registered trademark of John Walker.
+   The licensor of Bacula is the Free Software Foundation Europe
+   (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+   Switzerland, email:ftf@fsfeurope.org.
+*/
 
 #ifndef WXBRESTOREPANEL_H
 #define WXBRESTOREPANEL_H
 #include <wx/listctrl.h>
 #include <wx/treectrl.h>
 #include <wx/gauge.h>
+#include <wx/stattext.h>
+#include <wx/splitter.h>
 
-#include "wxbpanel.h"
+#include "wxbutils.h"
 
+#include "wxbconfigpanel.h"
 #include "wxbtreectrl.h"
+#include "wxblistctrl.h"
+
+WX_DECLARE_LIST(wxEvent, wxbEventList);
+
+/* Class for storing directory entries (results from dir commands). */
+class wxbDirEntry {
+public:
+   wxString perm;
+   wxString nlink;
+   wxString user;
+   wxString group;
+   wxString size;
+   wxString date;
+   int marked; /* 0 - Not Marked, 1 - Marked, 2 - Some file under is marked */
+   wxString fullname; /* full name with path */
+   wxString filename; /* only filename, no path */
+};
 
 /*
  * wxbPanel for restoring files
@@ -47,7 +85,7 @@ class wxbRestorePanel : public wxbPanel
 
       /* wxbPanel overloadings */
       virtual wxString GetTitle();
-      virtual void Print(wxString str, int status);
+      virtual void EnablePanel(bool enable = true);
 
    private:
 /* Commands called by events handler */
@@ -55,94 +93,152 @@ class wxbRestorePanel : public wxbPanel
       /* The main button has been clicked */
       void CmdStart();
 
+      /* The cancel button has been clicked */
+      void CmdCancel();
+
+      /* Apply configuration changes */
+      void CmdConfigApply();
+
+      /* Cancel restore */
+      void CmdConfigCancel();
+
        /* List jobs for a specified client */
       void CmdListJobs();
 
       /* List files and directories for a specified tree item */
       void CmdList(wxTreeItemId item);
 
-      /* Mark a treeitem (directory) or a listitem (file or directory) */
-      void CmdMark(wxTreeItemId treeitem, long listitem);
+      /* Mark a treeitem (directory) or several listitems (file or directory),
+       * state defines if it should mark (1), unmark (0), or switch state (-1) */
+      void CmdMark(wxTreeItemId treeitem, long* listitems, int listsize, int state = -1);
 
 /* General functions and variables */
-      bool ended; /* The last command send has finished */
+      //bool ended; /* The last command send has finished */
 
-      long filemessages; /* When restoring, number of files restored */
+      //long filemessages; /* When restoring, number of files restored */
       long totfilemessages; /* When restoring, number of files to be restored */
+      wxString jobid;
 
-      /* When listing a directory, sets if file list must be updated
-       * (otherwise only the tree structure is updated)
-       */
-      bool updatelist;
-
-      wxbTableParser* tableParser; /* Used to parse tables */
-
-      /* Parse a table in tableParser */
-      void CreateAndWaitForParser(wxString cmd);
-
-      /* Run a command, and waits until result is fully received. */
-      void WaitForEnd(wxString cmd);
-
-      /* Run a dir command, and waits until result is fully received. */
-      void WaitForList(wxTreeItemId item, bool updatelist);
+      /* Run a dir command, and waits until result is fully received.
+       * If recurse is true, update the children too. */
+      void UpdateTreeItem(wxTreeItemId item, bool updatelist, bool recurse);
 
       /* Parse dir command results. */
-      wxString* ParseList(wxString line);
+      int ParseList(wxString line, wxbDirEntry* entry);
 
       /* Sets a list item state, and update its parents and children if it is a directory */
       void SetListItemState(long listitem, int newstate);
 
       /* Sets a tree item state, and update its children, parents and list (if necessary) */
       void SetTreeItemState(wxTreeItemId item, int newstate);
-      
+
       /* Update a tree item parents' state */
       void UpdateTreeItemState(wxTreeItemId item);
 
-      /* Refresh a tree item, and all its children. */
-      void RefreshTree(wxTreeItemId item);
+      /* Refresh the whole tree. */
+      void RefreshTree();
+
+      /* Refresh file list */
+      void RefreshList();
+
+      /* Update first config, adapting settings to the job name selected */
+      void UpdateFirstConfig();
+
+      /* Update second config */
+      bool UpdateSecondConfig(wxbDataTokenizer* dt);
 
 /* Status related */
       enum status_enum
       {
-         disabled,  // The panel is not activated
-         entered,   // The panel is activated
-         choosing,  // The user is choosing files to restore
-         listing,   // Dir listing is in progress
-         restoring, // Bacula is restoring files
-         finished   // Retore done
+         disabled,    // The panel is not activatable
+         activable,   // The panel is activable, but not activated
+         entered,     // The panel is activated
+         choosing,    // The user is choosing files to restore
+         listing,     // Dir listing is in progress
+         configuring, // The user is configuring restore process
+         restoring,   // Bacula is restoring files
+         finished     // Retore done (state will change in activable)
       };
 
       status_enum status;
 
+      /* Cancelled status :
+       *  - 0 - !cancelled
+       *  - 1 - will be cancelled
+       *  - 2 - has been cancelled */
+      int cancelled;
+
       /* Set current status by enabling/disabling components */
-      void setStatus(status_enum newstatus);
+      void SetStatus(status_enum newstatus);
 
 /* UI related */
       bool working; // A command is running, discard GUI events
+      void SetWorking(bool working);
+      bool IsWorking();
+      bool markWhenCommandDone; //If an item should be (un)marked after the current listing/marking is done
       wxTreeItemId currentTreeItem; // Currently selected tree item
 
+      /* Enable or disable config controls status */
+      void EnableConfig(bool enable);
+
 /* Event handling */
-      void OnStart(wxEvent& WXUNUSED(event));
+//      wxbEventList* pendingEvents; /* Stores event sent while working */ //EVTQUEUE
+//      bool processing; /* True if pendingEvents is being processed */ //EVTQUEUE
+
+//      virtual void AddPendingEvent(wxEvent& event);
+//      virtual bool ProcessEvent(wxEvent& event); //EVTQUEUE
+
+      void OnStart(wxCommandEvent& event);
+      void OnCancel(wxCommandEvent& event);
+
       void OnTreeChanging(wxTreeEvent& event);
       void OnTreeExpanding(wxTreeEvent& event);
       void OnTreeChanged(wxTreeEvent& event);
       void OnTreeMarked(wxbTreeMarkedEvent& event);
-      void OnListRightClicked(wxListEvent& event);
+      void OnTreeAdd(wxCommandEvent& event);
+      void OnTreeRemove(wxCommandEvent& event);
+      void OnTreeRefresh(wxCommandEvent& event);
+
+      void OnListMarked(wxbListMarkedEvent& event);
       void OnListActivated(wxListEvent& event);
-      void OnClientChoiceChanged(wxCommandEvent& event);
+      void OnListChanged(wxListEvent& event);
+      void OnListAdd(wxCommandEvent& event);
+      void OnListRemove(wxCommandEvent& event);
+      void OnListRefresh(wxCommandEvent& event);
+
+      void OnConfigUpdated(wxCommandEvent& event);
+      void OnConfigOk(wxCommandEvent& WXUNUSED(event));
+      void OnConfigApply(wxCommandEvent& WXUNUSED(event));
+      void OnConfigCancel(wxCommandEvent& WXUNUSED(event));
 
 /* Components */
+      wxBoxSizer *centerSizer; /* Center sizer */
+      wxSplitterWindow *treelistPanel; /* Panel which contains tree and list */
+      wxbConfigPanel *configPanel; /* Panel which contains initial restore options */
+      wxbConfigPanel *restorePanel; /* Panel which contains final restore options */
+
       wxImageList* imagelist; //image list for tree and list
 
       wxButton* start;
-      wxChoice* clientChoice;
-      wxChoice* jobChoice;
+      wxButton* cancel;
+
       wxbTreeCtrl* tree;
-      wxListCtrl* list;
+      wxButton* treeadd;
+      wxButton* treeremove;
+      wxButton* treerefresh;
+
+      wxbListCtrl* list;
+      wxButton* listadd;
+      wxButton* listremove;
+      wxButton* listrefresh;
+
       wxGauge* gauge;
 
+      long cfgUpdated; //keeps which config fields have been updated
+
+      friend class wxbSplitterWindow;
+
       DECLARE_EVENT_TABLE();
 };
 
 #endif // WXBRESTOREPANEL_H
-