*
* 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();
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) {
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();
}
}
-