/home/enzo/treballs/fib/pfc/nanocomp/src/truthTableView.cpp

Go to the documentation of this file.
00001 /*
00002  *                                                                         *
00003  *   This program is free software; you can redistribute it and/or modify  *
00004  *   it under the terms of the GNU General Public License as published by  *
00005  *   the Free Software Foundation; either version 2 of the License, or     *
00006  *   (at your option) any later version.                                   *
00007  *                                                                         *
00008  *   This program is distributed in the hope that it will be useful,       *
00009  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00010  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00011  *   GNU General Public License for more details.                          *
00012  *                                                                         *
00013  *   You should have received a copy of the GNU General Public License     *
00014  *   along with this program; if not, write to the                         *
00015  *   Free Software Foundation, Inc.,                                       *
00016  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00017                                                                           */
00018 // $Revision: 1.10 $
00019 
00020 #include "truthTableView.hpp"
00021 #include "truthTableCanvas.hpp"
00022 
00023 #include <wx/statline.h>
00024 #include "resources/cross.xpm"
00025 #include "resources/fileopen.xpm"
00026 #include "resources/filesave.xpm"
00027 #include "resources/filesaveas.xpm"
00028 #include "resources/new.xpm"
00029 
00030 enum
00031 {
00032     ID_TEXT_NAME = 0,
00033     ID_TEXT_DESCRIPTION,
00034     ID_BUTTON_NEW,
00035     ID_BUTTON_OPEN,
00036     ID_BUTTON_SAVE,
00037     ID_BUTTON_SAVEAS,
00038     ID_BUTTON_REMOVE,
00039     ID_LIST_TABLES,
00040     ID_CANVAS
00041 };
00042 
00043 
00044 BEGIN_EVENT_TABLE(TruthTableView, wxPanel)
00045     EVT_TRUTH_TABLE_CANVAS  (ID_CANVAS,  TruthTableView::OnClick)
00046     EVT_BUTTON  (ID_BUTTON_NEW, TruthTableView::OnNew)
00047     EVT_LISTBOX (ID_LIST_TABLES, TruthTableView::OnSelection)
00048     EVT_BUTTON  (ID_BUTTON_REMOVE, TruthTableView::OnRemove)
00049     EVT_BUTTON  (ID_BUTTON_OPEN, TruthTableView::OnOpen)
00050     EVT_BUTTON  (ID_BUTTON_SAVE, TruthTableView::OnSave)
00051     EVT_BUTTON  (ID_BUTTON_SAVEAS, TruthTableView::OnSaveAs)
00052 END_EVENT_TABLE()
00053 
00054 
00056 
00061 TruthTableView::TruthTableView(wxWindow* parent, wxWindowID id, TruthTableManager *controller)
00062     :wxPanel(parent, id)
00063 {
00064     this->controller = controller;
00065     initControls();
00066     initSizers();
00067     controller->setView(this);
00068 
00069     labelInfo->Show(false);
00070 }
00071 
00072 
00074 TruthTableView::~TruthTableView()
00075 {
00076 }
00077 
00078 
00080 void TruthTableView::initControls()
00081 {
00082     //Labels
00083     labelInfo = new wxStaticText(this, wxID_ANY, _("Click on an output value to change it"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
00084     
00085     //Buttons
00086     wxBitmap newBitmap(wxBITMAP(new));
00087     wxBitmap saveBitmap(wxBITMAP(filesave));
00088     wxBitmap saveAsBitmap(wxBITMAP(filesaveas));
00089     wxBitmap removeBitmap(wxBITMAP(cross));
00090     wxBitmap openBitmap(wxBITMAP(fileopen));
00091     buttonNew = new wxBitmapButton(this, ID_BUTTON_NEW, newBitmap);
00092     buttonNew->SetToolTip(_("Add a new truth table"));
00093     buttonOpen = new wxBitmapButton(this, ID_BUTTON_OPEN, openBitmap);
00094     buttonOpen->SetToolTip(_("Open a truth table file"));
00095     buttonSave = new wxBitmapButton(this, ID_BUTTON_SAVE, saveBitmap);
00096     buttonSave->SetToolTip(_("Save selected truth table to a file"));
00097     buttonSaveAs = new wxBitmapButton(this, ID_BUTTON_SAVEAS, saveAsBitmap);
00098     buttonSaveAs->SetToolTip(_("Save selected truth table to a new file"));
00099     buttonRemove = new wxBitmapButton(this, ID_BUTTON_REMOVE, removeBitmap);
00100     buttonRemove->SetToolTip(_("Delete selected truth table"));
00101     buttonSave->Enable(false);
00102     buttonSaveAs->Enable(false);
00103     buttonRemove->Enable(false);
00104     
00105     //Other controls
00106     listTables = new wxListBox(this, ID_LIST_TABLES);
00107     canvas = new TruthTableCanvas(this, ID_CANVAS, TruthTable());
00108 }
00109 
00110 
00112 void TruthTableView::initSizers()
00113 {
00114     //Main Sizer
00115     wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
00116     //mainSizer->Add(labelTitle, 0, wxEXPAND | wxALL, 2);
00117     
00118         //Line separator
00119         //wxBoxSizer *separatorSizer = new wxBoxSizer(wxHORIZONTAL);
00120         //separatorSizer->AddStretchSpacer();
00121         //separatorSizer->Add(new wxStaticLine(this), 2, wxEXPAND | wxALL);
00122         //separatorSizer->AddStretchSpacer();
00123     
00124     //mainSizer->Add(separatorSizer, 0, wxEXPAND | wxALL);
00125     
00126         //List and table sizer
00127         wxBoxSizer *listTableSizer = new wxBoxSizer(wxHORIZONTAL);
00128             
00129             //List sizer
00130             wxStaticBoxSizer *listSizer = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Truth Table list"));
00131             listSizer->Add(listTables, 1, wxEXPAND | wxALL, 2);
00132             
00133                 //Buttons sizer
00134                 wxBoxSizer *buttonSizer = new wxBoxSizer(wxVERTICAL);
00135                 buttonSizer->Add(buttonNew, 0, wxEXPAND | wxALL);
00136                 buttonSizer->Add(buttonOpen, 0, wxEXPAND | wxALL);
00137                 buttonSizer->Add(buttonRemove, 0, wxEXPAND | wxALL);
00138                 buttonSizer->Add(buttonSave, 0, wxEXPAND | wxALL);
00139                 buttonSizer->Add(buttonSaveAs, 0, wxEXPAND | wxALL);
00140                 
00141             listSizer->Add(buttonSizer, 0, wxEXPAND | wxALL, 2);
00142             
00143         listTableSizer->Add(listSizer, 1, wxEXPAND | wxALL, 2);
00144         
00145             //Table sizer
00146             wxStaticBoxSizer *tableSizer = new wxStaticBoxSizer(wxVERTICAL, this, _("Truth Table"));
00147             tableSizer->Add(canvas, 1, wxSHAPED | wxALL | wxALIGN_CENTER, 2);
00148             tableSizer->Add(labelInfo, 0, wxSHAPED | wxALL | wxALIGN_CENTER, 2);
00149             
00150         //listLayoutSizer->AddStretchSpacer();
00151         listTableSizer->Add(tableSizer, 3, wxEXPAND | wxALL, 2);
00152         
00153     mainSizer->Add(listTableSizer, 3, wxEXPAND | wxALL, 2);
00154         
00155     SetSizer(mainSizer);
00156 }
00157 
00158 
00160 
00163 void TruthTableView::OnClick(TruthTableCanvasEvent &event)
00164 {
00165     controller->tableChanged(event.getInput(), event.getOutput());
00166 }
00167 
00168 
00170 
00173 void TruthTableView::OnNew(wxCommandEvent &event)
00174 {
00175     wxString name;
00176     int inputs;
00177     int outputs;
00178     
00179     wxTextEntryDialog nameDialog(this,
00180         _("Insert the name of the table"),
00181         _("New Truth Table"));
00182                         
00183     if (nameDialog.ShowModal() == wxID_OK)
00184     {
00185         name = nameDialog.GetValue();
00186         if (name.IsEmpty())
00187         {
00188             wxMessageDialog dialog(this,
00189             _("You must type a non empty name"),
00190             _("Error"), 
00191             wxOK | wxICON_ERROR);
00192             dialog.ShowModal();
00193             return;
00194         }
00195     }
00196     else
00197     {
00198         return;
00199     }
00200                         
00201     wxNumberEntryDialog inputDialog(this,
00202     wxEmptyString,
00203         _("Insert the number of inputs"),
00204         _("New Truth Table"),
00205         1, 1, 100);
00206     if (inputDialog.ShowModal() == wxID_OK)
00207     {
00208         inputs = (int)(inputDialog.GetValue());
00209     }
00210     else
00211     {
00212         return;
00213     }
00214     
00215     wxNumberEntryDialog outputDialog(this,
00216     wxEmptyString,
00217         _("Insert the number of outputs"),
00218         _("New Truth Table"),
00219         1, 1, 100);
00220     
00221     if (outputDialog.ShowModal() == wxID_OK)
00222     {
00223         outputs = (int)(outputDialog.GetValue());
00224             
00225 
00226         controller->newTable(name, inputs, outputs);
00227     }
00228     
00229 }
00230 
00231 
00233 
00236 void TruthTableView::OnSelection(wxCommandEvent &event)
00237 {
00238     //New TT selected, we must let the controller know
00239     //to update us with new info
00240     if (event.IsSelection())
00241     {
00242         wxString selection = event.GetString();
00243         controller->tableSelected(selection);
00244         buttonRemove->Enable(true);
00245         buttonSave->Enable(true);
00246         buttonSaveAs->Enable(true);
00247     }
00248 }
00249 
00250 
00252 
00255 void TruthTableView::OnRemove(wxCommandEvent &event)
00256 {
00257     controller->removeTable();
00258 }
00259 
00260 
00262 
00265 void TruthTableView::updateTable(TruthTable table)
00266 {
00267     canvas->setNewTable(table);
00268     Layout();
00269 }
00270 
00271 
00273 
00276 void TruthTableView::updateList(wxArrayString strings)
00277 {
00278     listTables->Set(strings);
00279     buttonRemove->Enable(strings.size() > 0);
00280     buttonSave->Enable(strings.size() > 0);
00281     buttonSaveAs->Enable(strings.size() > 0);
00282     labelInfo->Show(strings.size() > 0);
00283 }
00284 
00285 
00287 
00290 void TruthTableView::selectTable(wxString table)
00291 {
00292     int item = listTables->FindString(table);
00293     if (item != wxNOT_FOUND)
00294     {
00295         listTables->SetSelection(item);
00296         buttonRemove->Enable(true);
00297         buttonSave->Enable(true);
00298         buttonSaveAs->Enable(true);
00299         labelInfo->Show(true);
00300     }
00301 }
00302 
00303 
00305 
00308 void TruthTableView::errorMsg(wxString message)
00309 {
00310     wxMessageDialog dialog(this,
00311             message,
00312             _("Error"), 
00313             wxOK | wxICON_ERROR); 
00314     dialog.ShowModal();
00315 }
00316 
00317 
00319 
00322 void TruthTableView::OnSave(wxCommandEvent& event)
00323 {
00324     controller->saveFile();
00325 }
00326 
00327 
00329 
00332 void TruthTableView::OnSaveAs(wxCommandEvent& event)
00333 {
00334     controller->saveFileAs();
00335 }
00336 
00337 
00339 
00342 void TruthTableView::OnOpen(wxCommandEvent& event)
00343 {
00344     controller->openFile();
00345 }
00346 
00347 
00349 
00353 bool TruthTableView::msgYesNo(wxString message)
00354 {
00355     wxMessageDialog dialog(this,
00356             message,
00357             _("Question"), 
00358             wxYES | wxNO); 
00359     return (dialog.ShowModal() == wxID_YES);
00360 }

Generated on Fri Sep 1 23:55:14 2006 for NanoComp by  doxygen 1.4.6