OpenASIP  2.0
FUExternalPortDialog.cc
Go to the documentation of this file.
1 /*
2  Copyright (c) 2002-2014 Tampere University.
3 
4  This file is part of TTA-Based Codesign Environment (TCE).
5 
6  Permission is hereby granted, free of charge, to any person obtaining a
7  copy of this software and associated documentation files (the "Software"),
8  to deal in the Software without restriction, including without limitation
9  the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  and/or sell copies of the Software, and to permit persons to whom the
11  Software is furnished to do so, subject to the following conditions:
12 
13  The above copyright notice and this permission notice shall be included in
14  all copies or substantial portions of the Software.
15 
16  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  DEALINGS IN THE SOFTWARE.
23  */
24 /**
25  * @file FUExternalPortDialog.cc
26  *
27  * Implementation of FUExternalPortDialog class.
28  *
29  * @author Veli-Pekka Jääskeläinen 2006 (vjaaskel-no.spam-cs.tut.fi)
30  * @note rating: red
31  */
32 
33 #include <wx/wx.h>
34 #include <wx/checklst.h>
35 #include <wx/statline.h>
36 #include <wx/valgen.h>
37 #include "FUExternalPortDialog.hh"
38 #include "FUExternalPort.hh"
39 #include "WxConversion.hh"
40 #include "ErrorDialog.hh"
41 #include "FUImplementation.hh"
42 
43 
44 using namespace HDB;
45 using std::string;
46 
47 BEGIN_EVENT_TABLE(FUExternalPortDialog, wxDialog)
50 
51 /**
52  * The Constructor.
53  *
54  * @param parent Parent window of the dialog.
55  * @param id Window identifier for the dialog window.
56  * @param port FU external port to modify.
57  */
59  wxWindow* parent, wxWindowID id, FUExternalPort& port,
60  const FUImplementation& fu) :
61  wxDialog(parent, id, _T("Function Unit Port Port")),
62  port_(port), fu_(fu), depList_(NULL) {
63 
64  initialize();
65 }
66 
67 /**
68  * The Destructor.
69  */
71 }
72 
73 /**
74  * Creates and initializes the dialog widgets.
75  */
76 void
78 
79  createContents(this, true, true);
80 
81  depList_ = dynamic_cast<wxCheckListBox*>(
82  FindWindow(ID_PARAMETER_DEPS));
83 
84  name_ = WxConversion::toWxString(port_.name());
85  widthFormula_ = WxConversion::toWxString(port_.widthFormula());
86  description_ = WxConversion::toWxString(port_.description());
87  direction_ = port_.direction();
88 
89  FindWindow(ID_NAME)->SetValidator(wxTextValidator(wxFILTER_ASCII, &name_));
90  FindWindow(ID_WIDTH)->SetValidator(
91  wxTextValidator(wxFILTER_ASCII, &widthFormula_));
92  FindWindow(ID_DIRECTION)->SetValidator(wxGenericValidator(&direction_));
93  FindWindow(ID_DESCRIPTION)->SetValidator(
94  wxTextValidator(wxFILTER_ASCII, &description_));
95 
96  depList_->Clear();
97  for (int i = 0; i < fu_.parameterCount(); i++) {
98  string parameter = fu_.parameter(i).name;
99  depList_->Append( WxConversion::toWxString(parameter));
100 
101  for (int dep = 0; dep < port_.parameterDependencyCount(); dep++) {
102  if (port_.parameterDependency(dep) == parameter) {
103  depList_->Check(i);
104  }
105  }
106  }
107 }
108 
109 
110 /**
111  * Event handler for the dialog OK-button.
112  */
113 void
114 FUExternalPortDialog::onOK(wxCommandEvent&) {
115 
116  TransferDataFromWindow();
117 
118  name_ = name_.Trim(true).Trim(false);
119  widthFormula_ = widthFormula_.Trim(true).Trim(false);
120  description_ = description_.Trim(true).Trim(false);
121 
122  if (name_.IsEmpty()) {
123  wxString message = _T("Name field must not be empty.");
124  ErrorDialog dialog(this, message);
125  dialog.ShowModal();
126  return;
127  }
128 
129  if (widthFormula_.IsEmpty()) {
130  wxString message =
131  _T("Width formula field must not be empty.");
132  ErrorDialog dialog(this, message);
133  dialog.ShowModal();
134  return;
135  }
136 
137  port_.setName(WxConversion::toString(name_));
138  port_.setWidthFormula(WxConversion::toString(widthFormula_));
139  port_.setDescription(WxConversion::toString(description_));
140 
141  if (direction_ == 0) {
142  port_.setDirection(IN);
143  } else if (direction_ == 1) {
144  port_.setDirection(OUT);
145  } else if (direction_ == 2) {
146  port_.setDirection(BIDIR);
147  } else {
148  assert(false);
149  }
150 
151  for (int i = 0; i < fu_.parameterCount(); i++) {
152  string parameter = WxConversion::toString(depList_->GetString(i));
153  if (depList_->IsChecked(i)) {
154  port_.setParameterDependency(parameter);
155  } else {
156  port_.unsetParameterDependency(parameter);
157  }
158  }
159 
160  EndModal(wxID_OK);
161 
162 }
163 
164 /**
165  * Creates the dialog contents.
166  */
167 wxSizer*
169  wxWindow *parent, bool call_fit, bool set_sizer) {
170  wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );
171 
172  wxBoxSizer *item1 = new wxBoxSizer( wxVERTICAL );
173 
174  wxFlexGridSizer *item2 = new wxFlexGridSizer( 2, 0, 0 );
175 
176  wxStaticText *item3 = new wxStaticText( parent, ID_LABEL_NAME, wxT("Name:"), wxDefaultPosition, wxDefaultSize, 0 );
177  item2->Add( item3, 0, wxALIGN_RIGHT|wxALL, 5 );
178 
179  wxTextCtrl *item4 = new wxTextCtrl( parent, ID_NAME, wxT(""), wxDefaultPosition, wxSize(300,-1), 0 );
180  item2->Add( item4, 0, wxALIGN_CENTER|wxALL, 5 );
181 
182  wxStaticText *item5 = new wxStaticText( parent, ID_LABEL_WIDTH, wxT("Width formula:"), wxDefaultPosition, wxDefaultSize, 0 );
183  item2->Add( item5, 0, wxALIGN_RIGHT|wxALL, 5 );
184 
185  wxTextCtrl *item6 = new wxTextCtrl( parent, ID_WIDTH, wxT(""), wxDefaultPosition, wxSize(200,-1), 0 );
186  item2->Add( item6, 0, wxGROW|wxALL, 5 );
187 
188  wxStaticText *item7 = new wxStaticText( parent, ID_LABEL_DESCRIPTION, wxT("Description:"), wxDefaultPosition, wxDefaultSize, 0 );
189  item2->Add( item7, 0, wxALIGN_RIGHT|wxALL, 5 );
190 
191  wxTextCtrl *item8 = new wxTextCtrl( parent, ID_DESCRIPTION, wxT(""), wxDefaultPosition, wxSize(300,-1), 0 );
192  item2->Add( item8, 0, wxALIGN_CENTER|wxALL, 5 );
193 
194  item1->Add( item2, 0, wxGROW|wxALL, 5 );
195 
196  wxGridSizer *item9 = new wxGridSizer( 2, 0, 0 );
197 
198  wxString strs10[] =
199  {
200  wxT("In"),
201  wxT("Out"),
202  wxT("Bidirectional")
203  };
204  wxRadioBox *item10 = new wxRadioBox( parent, ID_DIRECTION, wxT("Direction:"), wxDefaultPosition, wxDefaultSize, 3, strs10, 1, wxRA_SPECIFY_COLS );
205  item9->Add( item10, 0, wxGROW|wxALL, 5 );
206 
207  wxStaticBox *item12 = new wxStaticBox( parent, -1, wxT("Parameter dependency:") );
208  wxStaticBoxSizer *item11 = new wxStaticBoxSizer( item12, wxVERTICAL );
209 
210  wxWindow *item13 = new wxCheckListBox(parent, ID_PARAMETER_DEPS, wxDefaultPosition, wxSize(200, 150));
211  wxASSERT( item13 );
212  item11->Add( item13, 0, wxGROW|wxALL, 5 );
213 
214  item9->Add( item11, 0, wxGROW|wxALL, 5 );
215 
216  item1->Add( item9, 0, wxGROW|wxALL, 5 );
217 
218  item0->Add( item1, 0, wxALIGN_CENTER|wxALL, 5 );
219 
220  wxStaticLine *item14 = new wxStaticLine( parent, ID_LINE, wxDefaultPosition, wxSize(20,-1), wxLI_HORIZONTAL );
221  item0->Add( item14, 0, wxGROW|wxALL, 5 );
222 
223  wxBoxSizer *item15 = new wxBoxSizer( wxHORIZONTAL );
224 
225  wxButton *item16 = new wxButton( parent, wxID_CANCEL, wxT("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
226  item15->Add( item16, 0, wxALIGN_CENTER|wxALL, 5 );
227 
228  wxButton *item17 = new wxButton( parent, wxID_OK, wxT("&OK"), wxDefaultPosition, wxDefaultSize, 0 );
229  item15->Add( item17, 0, wxALIGN_CENTER|wxALL, 5 );
230 
231  item0->Add( item15, 0, wxALL, 5 );
232 
233  if (set_sizer)
234  {
235  parent->SetSizer( item0 );
236  if (call_fit)
237  item0->SetSizeHints( parent );
238  }
239 
240  return item0;
241 }
HDB::FUExternalPort
Definition: FUExternalPort.hh:52
FUExternalPortDialog::createContents
wxSizer * createContents(wxWindow *parent, bool call_fit, bool set_sizer)
Creates the dialog contents.
Definition: FUExternalPortDialog.cc:168
WxConversion::toWxString
static wxString toWxString(const std::string &source)
HDB
Definition: CostDatabase.hh:49
FindWindow
Definition: FindWindow.hh:49
assert
#define assert(condition)
Definition: Application.hh:86
FUExternalPortDialog.hh
ErrorDialog
Definition: ErrorDialog.hh:42
ErrorDialog.hh
HDB::BIDIR
@ BIDIR
Bidirectional port.
Definition: HDBTypes.hh:43
FUExternalPortDialog
Definition: FUExternalPortDialog.hh:48
FUExternalPortDialog::initialize
void initialize()
Definition: FUExternalPortDialog.cc:77
FUImplementation.hh
HDB::FUImplementation
Definition: FUImplementation.hh:53
EVT_BUTTON
EVT_BUTTON(ID_EDIT_ARCH_PORT, FUImplementationDialog::onEditArchitecturePort) EVT_BUTTON(ID_ADD_EXTERNAL_PORT
FUExternalPort.hh
HDB::IN
@ IN
Input port.
Definition: HDBTypes.hh:41
WxConversion.hh
FUExternalPortDialog::~FUExternalPortDialog
virtual ~FUExternalPortDialog()
Definition: FUExternalPortDialog.cc:70
WxConversion::toString
static std::string toString(const wxString &source)
FUExternalPortDialog::onOK
void onOK(wxCommandEvent &event)
Definition: FUExternalPortDialog.cc:114
HDB::OUT
@ OUT
Output port.
Definition: HDBTypes.hh:42
END_EVENT_TABLE
END_EVENT_TABLE() using namespace IDF