]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/wx-console/wxbhistorytextctrl.cpp
Fix some trivial errors and implemented the restore of IRIX xattrs.
[bacula/bacula] / bacula / src / wx-console / wxbhistorytextctrl.cpp
index 25e05a6e707eb29c7a7fac3cdf976fc568a61c69..619a220876a03a617a2c4703c9d5bfa602cbed60 100644 (file)
@@ -7,45 +7,90 @@
  *    Version $Id$
  */
 /*
-   Copyright (C) 2004 Kern Sibbald and John Walker
+   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 three of the GNU Affero General Public
+   License as published by the Free Software Foundation and included
+   in the file LICENSE.
 
-   You should have received a copy of the GNU General Public 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 Affero 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 Kern Sibbald.
+   The licensor of Bacula is the Free Software Foundation Europe
+   (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+   Switzerland, email:ftf@fsfeurope.org.
+*/
+
+/*  Windows debug builds set _DEBUG which is used by wxWidgets to select their
+ *  debug memory allocator.  Unfortunately it conflicts with Bacula's SmartAlloc.
+ * So we turn _DEBUG off since we aren't interested in things it enables.
  */
+
+#undef _DEBUG
+
+#include "bacula.h"
 #include "wxbhistorytextctrl.h"
 
 BEGIN_EVENT_TABLE(wxbHistoryTextCtrl, wxTextCtrl)
+   EVT_KEY_DOWN(wxbHistoryTextCtrl::OnKeyDown)
    EVT_KEY_UP(wxbHistoryTextCtrl::OnKeyUp)
 END_EVENT_TABLE()
 
-wxbHistoryTextCtrl::wxbHistoryTextCtrl(wxWindow* parent, wxWindowID id, 
+wxbHistoryTextCtrl::wxbHistoryTextCtrl(wxStaticText* help, 
+      wxWindow* parent, wxWindowID id, 
       const wxString& value, const wxPoint& pos, 
       const wxSize& size , 
       const wxValidator& validator, 
       const wxString& name): 
          wxTextCtrl(parent, id, value, pos, size, 
             wxTE_PROCESS_ENTER, validator, name) {
+   this->help = help;
    index = 0;
-   history.Add("");
+   history.Add(wxT(""));
+}
+
+void wxbHistoryTextCtrl::AddCommand(wxString cmd, wxString description) {
+   commands[cmd] = description;
+}
+
+void wxbHistoryTextCtrl::ClearCommandList() {
+   commands.clear();
 }
 
 void wxbHistoryTextCtrl::HistoryAdd(wxString cmd) {
-   if (cmd == "") return;
+   if (cmd == wxT("")) return;
    index = history.Count();
    history[index-1] = cmd;
-   history.Add("");
+   history.Add(wxT(""));
+}
+
+void wxbHistoryTextCtrl::SetValue(const wxString& value) {
+   if (value == wxT("")) {
+      help->SetLabel(_("Type your command below:"));
+   }
+   wxTextCtrl::SetValue(value);
+}
+
+void wxbHistoryTextCtrl::OnKeyDown(wxKeyEvent& event) {
+   if (event.m_keyCode == WXK_TAB) {
+
+   }
+   else {
+      event.Skip();
+   }
 }
 
 void wxbHistoryTextCtrl::OnKeyUp(wxKeyEvent& event) {
@@ -66,7 +111,46 @@ void wxbHistoryTextCtrl::OnKeyUp(wxKeyEvent& event) {
          SetInsertionPointEnd();
       }      
    }
+   else if (GetValue() != wxT("")) {
+      wxbCommands::iterator it;
+      wxString key;
+      wxString helptext = _("Unknown command.");
+      int found = 0;      
+      for( it = commands.begin(); it != commands.end(); ++it ) {         
+         if (it->first.Find(GetValue()) == 0) {
+            found++;
+            if (found > 2) {
+               helptext += wxT(" ") + it->first;
+            }
+            else if (found > 1) {
+               helptext = _("Possible completions: ") + key + wxT(" ") + it->first;
+            }
+            else { // (found == 1)
+               helptext = it->first + wxT(": ") + it->second;
+               key = it->first;
+            }
+         }
+         else if (GetValue().Find(it->first) == 0) {
+            helptext = it->first + wxT(": ") + it->second;
+            found = 0;
+            break;
+         }
+      }
+      
+      help->SetLabel(helptext);
+            
+      if (event.m_keyCode == WXK_TAB) {
+         if (found == 1) {
+            SetValue(key);
+            SetInsertionPointEnd();
+         }
+      }
+      else {
+         event.Skip();
+      }
+   }
    else {
+      help->SetLabel(_("Type your command below:"));
       event.Skip();
    }
 }