OpenASIP  2.0
RFExternalPortDialog.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 RFExternalPortDialog.cc
26  *
27  * Declaration of RFExternalPortDialog class.
28  *
29  * @author Henry Linjamäki (henry-linjamaki-no.spam-cs.tut.fi)
30  * @note rating: red
31  */
32 
33 #include "RFExternalPortDialog.hh"
34 
35 
36 #include <wx/wx.h>
37 #include <wx/checklst.h>
38 #include <wx/statline.h>
39 #include <wx/valgen.h>
40 #include "RFExternalPortDialog.hh"
41 #include "RFExternalPort.hh"
42 #include "WxConversion.hh"
43 #include "ErrorDialog.hh"
44 #include "RFImplementation.hh"
45 
46 
47 using namespace HDB;
48 using std::string;
49 
50 BEGIN_EVENT_TABLE(RFExternalPortDialog, wxDialog)
53 
54 /**
55  * The Constructor.
56  *
57  * @param parent Parent window of the dialog.
58  * @param id Window identifier for the dialog window.
59  * @param port RF external port to modify.
60  */
62  wxWindow* parent, wxWindowID id, RFExternalPort& port,
63  const RFImplementation& rf) :
64  wxDialog(parent, id, _T("Register File Port")),
65  port_(port), rf_(rf), depList_(NULL) {
66 
67  initialize();
68 }
69 
70 /**
71  * The Destructor.
72  */
74 }
75 
76 /**
77  * Creates and initializes the dialog widgets.
78  */
79 void
81 
82  createContents(this, true, true);
83 
84  depList_ = dynamic_cast<wxCheckListBox*>(
85  FindWindow(ID_PARAMETER_DEPS));
86 
87  name_ = WxConversion::toWxString(port_.name());
88  widthFormula_ = WxConversion::toWxString(port_.widthFormula());
89  description_ = WxConversion::toWxString(port_.description());
90  direction_ = port_.direction();
91 
92  FindWindow(ID_NAME)->SetValidator(wxTextValidator(wxFILTER_ASCII, &name_));
93  FindWindow(ID_WIDTH)->SetValidator(
94  wxTextValidator(wxFILTER_ASCII, &widthFormula_));
95  FindWindow(ID_DIRECTION)->SetValidator(wxGenericValidator(&direction_));
96  FindWindow(ID_DESCRIPTION)->SetValidator(
97  wxTextValidator(wxFILTER_ASCII, &description_));
98 
99  depList_->Clear();
100  for (int i = 0; i < rf_.parameterCount(); i++) {
101  string parameter = rf_.parameter(i).name;
102  depList_->Append( WxConversion::toWxString(parameter));
103 
104  for (int dep = 0; dep < port_.parameterDependencyCount(); dep++) {
105  if (port_.parameterDependency(dep) == parameter) {
106  depList_->Check(i);
107  }
108  }
109  }
110 }
111 
112 
113 /**
114  * Event handler for the dialog OK-button.
115  */
116 void
117 RFExternalPortDialog::onOK(wxCommandEvent&) {
118 
119  TransferDataFromWindow();
120 
121  name_ = name_.Trim(true).Trim(false);
122  widthFormula_ = widthFormula_.Trim(true).Trim(false);
123  description_ = description_.Trim(true).Trim(false);
124 
125  if (name_.IsEmpty()) {
126  wxString message = _T("Name field must not be empty.");
127  ErrorDialog dialog(this, message);
128  dialog.ShowModal();
129  return;
130  }
131 
132  if (widthFormula_.IsEmpty()) {
133  wxString message =
134  _T("Width formula field must not be empty.");
135  ErrorDialog dialog(this, message);
136  dialog.ShowModal();
137  return;
138  }
139 
140  port_.setName(WxConversion::toString(name_));
141  port_.setWidthFormula(WxConversion::toString(widthFormula_));
142  port_.setDescription(WxConversion::toString(description_));
143 
144  if (direction_ == 0) {
145  port_.setDirection(IN);
146  } else if (direction_ == 1) {
147  port_.setDirection(OUT);
148  } else if (direction_ == 2) {
149  port_.setDirection(BIDIR);
150  } else {
151  assert(false);
152  }
153 
154  for (int i = 0; i < rf_.parameterCount(); i++) {
155  string parameter = WxConversion::toString(depList_->GetString(i));
156  if (depList_->IsChecked(i)) {
157  port_.setParameterDependency(parameter);
158  } else {
159  port_.unsetParameterDependency(parameter);
160  }
161  }
162 
163  EndModal(wxID_OK);
164 
165 }
166 
167 /**
168  * Creates the dialog contents.
169  */
170 wxSizer*
172  wxWindow *parent, bool call_fit, bool set_sizer) {
173  wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );
174 
175  wxBoxSizer *item1 = new wxBoxSizer( wxVERTICAL );
176 
177  wxFlexGridSizer *item2 = new wxFlexGridSizer( 2, 0, 0 );
178 
179  wxStaticText *item3 = new wxStaticText( parent, ID_LABEL_NAME, wxT("Name:"), wxDefaultPosition, wxDefaultSize, 0 );
180  item2->Add( item3, 0, wxALIGN_RIGHT|wxALL, 5 );
181 
182  wxTextCtrl *item4 = new wxTextCtrl( parent, ID_NAME, wxT(""), wxDefaultPosition, wxSize(300,-1), 0 );
183  item2->Add( item4, 0, wxALIGN_CENTER|wxALL, 5 );
184 
185  wxStaticText *item5 = new wxStaticText( parent, ID_LABEL_WIDTH, wxT("Width formula:"), wxDefaultPosition, wxDefaultSize, 0 );
186  item2->Add( item5, 0, wxALIGN_RIGHT|wxALL, 5 );
187 
188  wxTextCtrl *item6 = new wxTextCtrl( parent, ID_WIDTH, wxT(""), wxDefaultPosition, wxSize(200,-1), 0 );
189  item2->Add( item6, 0, wxGROW|wxALL, 5 );
190 
191  wxStaticText *item7 = new wxStaticText( parent, ID_LABEL_DESCRIPTION, wxT("Description:"), wxDefaultPosition, wxDefaultSize, 0 );
192  item2->Add( item7, 0, wxALIGN_RIGHT|wxALL, 5 );
193 
194  wxTextCtrl *item8 = new wxTextCtrl( parent, ID_DESCRIPTION, wxT(""), wxDefaultPosition, wxSize(300,-1), 0 );
195  item2->Add( item8, 0, wxALIGN_CENTER|wxALL, 5 );
196 
197  item1->Add( item2, 0, wxGROW|wxALL, 5 );
198 
199  wxGridSizer *item9 = new wxGridSizer( 2, 0, 0 );
200 
201  wxString strs10[] =
202  {
203  wxT("In"),
204  wxT("Out"),
205  wxT("Bidirectional")
206  };
207  wxRadioBox *item10 = new wxRadioBox( parent, ID_DIRECTION, wxT("Direction:"), wxDefaultPosition, wxDefaultSize, 3, strs10, 1, wxRA_SPECIFY_COLS );
208  item9->Add( item10, 0, wxGROW|wxALL, 5 );
209 
210  wxStaticBox *item12 = new wxStaticBox( parent, -1, wxT("Parameter dependency:") );
211  wxStaticBoxSizer *item11 = new wxStaticBoxSizer( item12, wxVERTICAL );
212 
213  wxWindow *item13 = new wxCheckListBox(parent, ID_PARAMETER_DEPS, wxDefaultPosition, wxSize(200, 150));
214  wxASSERT( item13 );
215  item11->Add( item13, 0, wxGROW|wxALL, 5 );
216 
217  item9->Add( item11, 0, wxGROW|wxALL, 5 );
218 
219  item1->Add( item9, 0, wxGROW|wxALL, 5 );
220 
221  item0->Add( item1, 0, wxALIGN_CENTER|wxALL, 5 );
222 
223  wxStaticLine *item14 = new wxStaticLine( parent, ID_LINE, wxDefaultPosition, wxSize(20,-1), wxLI_HORIZONTAL );
224  item0->Add( item14, 0, wxGROW|wxALL, 5 );
225 
226  wxBoxSizer *item15 = new wxBoxSizer( wxHORIZONTAL );
227 
228  wxButton *item16 = new wxButton( parent, wxID_CANCEL, wxT("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
229  item15->Add( item16, 0, wxALIGN_CENTER|wxALL, 5 );
230 
231  wxButton *item17 = new wxButton( parent, wxID_OK, wxT("&OK"), wxDefaultPosition, wxDefaultSize, 0 );
232  item15->Add( item17, 0, wxALIGN_CENTER|wxALL, 5 );
233 
234  item0->Add( item15, 0, wxALL, 5 );
235 
236  if (set_sizer)
237  {
238  parent->SetSizer( item0 );
239  if (call_fit)
240  item0->SetSizeHints( parent );
241  }
242 
243  return item0;
244 }
245 
WxConversion::toWxString
static wxString toWxString(const std::string &source)
HDB
Definition: CostDatabase.hh:49
RFExternalPortDialog::~RFExternalPortDialog
virtual ~RFExternalPortDialog()
Definition: RFExternalPortDialog.cc:73
FindWindow
Definition: FindWindow.hh:49
RFExternalPortDialog.hh
assert
#define assert(condition)
Definition: Application.hh:86
RFExternalPortDialog::createContents
wxSizer * createContents(wxWindow *parent, bool call_fit, bool set_sizer)
Creates the dialog contents.
Definition: RFExternalPortDialog.cc:171
HDB::RFExternalPort
Definition: RFExternalPort.hh:41
HDB::RFImplementation
Definition: RFImplementation.hh:50
ErrorDialog
Definition: ErrorDialog.hh:42
RFImplementation.hh
RFExternalPortDialog::initialize
void initialize()
Definition: RFExternalPortDialog.cc:80
ErrorDialog.hh
HDB::BIDIR
@ BIDIR
Bidirectional port.
Definition: HDBTypes.hh:43
RFExternalPortDialog
Definition: RFExternalPortDialog.hh:48
EVT_BUTTON
EVT_BUTTON(ID_EDIT_ARCH_PORT, FUImplementationDialog::onEditArchitecturePort) EVT_BUTTON(ID_ADD_EXTERNAL_PORT
HDB::IN
@ IN
Input port.
Definition: HDBTypes.hh:41
WxConversion.hh
RFExternalPortDialog::onOK
void onOK(wxCommandEvent &event)
Definition: RFExternalPortDialog.cc:117
WxConversion::toString
static std::string toString(const wxString &source)
HDB::OUT
@ OUT
Output port.
Definition: HDBTypes.hh:42
END_EVENT_TABLE
END_EVENT_TABLE() using namespace IDF
RFExternalPort.hh