]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/wx-console/wxbhistorytextctrl.cpp
- Fix ANSI labels to put EOF1 and EOF2 after each file mark.
[bacula/bacula] / bacula / src / wx-console / wxbhistorytextctrl.cpp
index eb5120ef4c06e296e6e74a7b8beade2aa5437db3..10122cfc646f95f22adc827ead9e47e55f960bea 100644 (file)
@@ -4,6 +4,7 @@
  *
  *    Nicolas Boichat, July 2004
  *
+ *    Version $Id$
  */
 /*
    Copyright (C) 2004 Kern Sibbald and John Walker
 #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("");
 }
 
+void wxbHistoryTextCtrl::AddCommand(wxString cmd, wxString description) {
+   commands[cmd] = description;
+}
+
+void wxbHistoryTextCtrl::ClearCommandList() {
+   commands.clear();
+}
+
 void wxbHistoryTextCtrl::HistoryAdd(wxString cmd) {
    if (cmd == "") return;
    index = history.Count();
@@ -47,10 +59,26 @@ void wxbHistoryTextCtrl::HistoryAdd(wxString cmd) {
    history.Add("");
 }
 
+void wxbHistoryTextCtrl::SetValue(const wxString& value) {
+   if (value == "") {
+      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) {
    if (event.m_keyCode == WXK_UP) {
       if (index > 0) {
-         if (index == (history.Count()-1)) {
+         if (index == ((int)history.Count()-1)) {
             history[index] = GetValue();
          }
          index--;
@@ -59,15 +87,52 @@ void wxbHistoryTextCtrl::OnKeyUp(wxKeyEvent& event) {
       }
    }
    else if (event.m_keyCode == WXK_DOWN) {
-      if (index < (history.Count()-1)) {
+      if (index < ((int)history.Count()-1)) {
          index++;
          SetValue(history[index]);
          SetInsertionPointEnd();
       }      
    }
+   else if (GetValue() != "") {
+      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 += " " + it->first;
+            }
+            else if (found > 1) {
+               helptext = "Possible completions: " + key + " " + it->first;
+            }
+            else { // (found == 1)
+               helptext = it->first + ": " + it->second;
+               key = it->first;
+            }
+         }
+         else if (GetValue().Find(it->first) == 0) {
+            helptext = it->first + ": " + 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();
    }
 }
-
-