00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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
00083 labelInfo = new wxStaticText(this, wxID_ANY, _("Click on an output value to change it"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
00084
00085
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
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
00115 wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 wxBoxSizer *listTableSizer = new wxBoxSizer(wxHORIZONTAL);
00128
00129
00130 wxStaticBoxSizer *listSizer = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Truth Table list"));
00131 listSizer->Add(listTables, 1, wxEXPAND | wxALL, 2);
00132
00133
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
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
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
00239
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 }