/* $Id$ */ /* * Copyright (C) 2006 Richard Braun * * 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. * * 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 */ #include #include #include #include "mtxentry.h" #include "mtxwindow.h" #include "mtxlanguage.h" #include "mtxexception.h" using namespace std; MtxEntry::MtxEntry(MtxLanguage *language, MtxWindow *window) { this->language = language; this->window = window; } MtxEntry::~MtxEntry() { } bool MtxEntry::on_key_press_event(GdkEventKey *event) { vector::iterator results_iterator; vector results; string text; switch (event->keyval) { case GDK_Up: history.previousString(); text = history.getString(); set_text(text); set_position(text.length()); return true; case GDK_Down: history.nextString(); text = history.getString(); set_text(text); set_position(text.length()); return true; case GDK_Return: case GDK_KP_Enter: try { text = get_text(); window->addText(text + "\n"); history.addString(text); results = language->parse(text); for (results_iterator = results.begin(); results_iterator != results.end(); results_iterator++) { if (!(*results_iterator).isSpecial()) window->addText((*results_iterator).getName() + " = "); window->addText((*results_iterator).toString() + "\n"); } } catch (MtxException &exception) { string message; message = "error: "; window->addText(message + exception.what() + "\n"); } window->addText(MTXWINDOW_PROMPT); set_text(""); return true; default: return Gtk::Entry::on_key_press_event(event); } }