OpenASIP 2.2
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
FUPortDialog Class Reference

#include <FUPortDialog.hh>

Inheritance diagram for FUPortDialog:
Inheritance graph
Collaboration diagram for FUPortDialog:
Collaboration graph

Public Member Functions

 FUPortDialog (wxWindow *parent, TTAMachine::FUPort *port)
 
 ~FUPortDialog ()
 

Protected Member Functions

virtual bool TransferDataToWindow ()
 

Private Types

enum  {
  ID_NAME =10000 , ID_WIDTH , ID_INPUT_SOCKET , ID_OUTPUT_SOCKET ,
  ID_TRIGGERS , ID_HELP , ID_LABEL_NAME , ID_LABEL_WIDTH ,
  ID_LABEL_INPUT_SOCKET , ID_LABEL_OUTPUT_SOCKET , ID_LINE
}
 

Private Member Functions

wxSizer * createContents (wxWindow *parent, bool call_fit, bool set_sizer)
 
void updateSockets ()
 
void onOK (wxCommandEvent &event)
 
void onCancel (wxCommandEvent &event)
 
void onSocketChoice (wxCommandEvent &event)
 
void onHelp (wxCommandEvent &event)
 
void onName (wxCommandEvent &event)
 
void setTexts ()
 

Private Attributes

TTAMachine::FUPortport_
 Function unit port to modify.
 
wxString name_
 Name of the port.
 
int width_
 Width of the port.
 
bool triggers_
 Trigger attribute of the port.
 
wxChoice * inputSocketChoice_
 Input socket choice control.
 
wxChoice * outputSocketChoice_
 Output socket choice control.
 
TTAMachine::SocketoldInput_
 Original input socket of the port.
 
TTAMachine::SocketoldOutput_
 Original output socket of the port.
 

Detailed Description

Dialog for querying port parameters from the user.

Definition at line 44 of file FUPortDialog.hh.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private
Enumerator
ID_NAME 
ID_WIDTH 
ID_INPUT_SOCKET 
ID_OUTPUT_SOCKET 
ID_TRIGGERS 
ID_HELP 
ID_LABEL_NAME 
ID_LABEL_WIDTH 
ID_LABEL_INPUT_SOCKET 
ID_LABEL_OUTPUT_SOCKET 
ID_LINE 

Definition at line 81 of file FUPortDialog.hh.

Constructor & Destructor Documentation

◆ FUPortDialog()

FUPortDialog::FUPortDialog ( wxWindow *  parent,
TTAMachine::FUPort port 
)

The Constructor.

Parameters
parentParent window of the dialog.
portPort to modify.

Definition at line 76 of file FUPortDialog.cc.

78 :
79 wxDialog(parent, -1, _T(""), wxDefaultPosition),
80 port_(port),
81 name_(_T("")),
83 triggers_(false),
86
89
90 createContents(this, true, true);
91
92 inputSocketChoice_ = dynamic_cast<wxChoice*>(FindWindow(ID_INPUT_SOCKET));
93 outputSocketChoice_ = dynamic_cast<wxChoice*>(FindWindow(ID_OUTPUT_SOCKET));
94 FindWindow(ID_NAME)->SetValidator(wxTextValidator(wxFILTER_ASCII, &name_));
95 FindWindow(ID_TRIGGERS)->SetValidator(wxGenericValidator(&triggers_));
96 FindWindow(ID_WIDTH)->SetValidator(wxGenericValidator(&width_));
97
98 FindWindow(wxID_OK)->Disable();
99
100 // set texts to widgets
101 setTexts();
102
104}
wxString name_
Name of the port.
wxChoice * inputSocketChoice_
Input socket choice control.
TTAMachine::FUPort * port_
Function unit port to modify.
wxSizer * createContents(wxWindow *parent, bool call_fit, bool set_sizer)
virtual bool TransferDataToWindow()
TTAMachine::Socket * oldInput_
Original input socket of the port.
wxChoice * outputSocketChoice_
Output socket choice control.
int width_
Width of the port.
bool triggers_
Trigger attribute of the port.
TTAMachine::Socket * oldOutput_
Original output socket of the port.
static const int DEFAULT_WIDTH
Default bit width.
virtual Socket * outputSocket() const
Definition Port.cc:281
virtual Socket * inputSocket() const
Definition Port.cc:261

◆ ~FUPortDialog()

FUPortDialog::~FUPortDialog ( )

The Destructor.

Definition at line 109 of file FUPortDialog.cc.

109 {
110}

Member Function Documentation

◆ createContents()

wxSizer * FUPortDialog::createContents ( wxWindow *  parent,
bool  call_fit,
bool  set_sizer 
)
private

Creates contents of the dialog window. Initially generated with wxDesigner, the code will be cleaned up later.

Parameters
parentParent dialog of the contents.
call_fitIf true, fits sizer in dialog window.
set_sizerIf true, sets sizer as dialog's sizer.
Returns
Top level sizer of the contents.

Definition at line 377 of file FUPortDialog.cc.

378 {
379
380 wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );
381
382 wxFlexGridSizer *item1 = new wxFlexGridSizer( 2, 0, 0 );
383
384 wxStaticText *item2 = new wxStaticText( parent, ID_LABEL_NAME, wxT("Name:"), wxDefaultPosition, wxDefaultSize, 0 );
385 item1->Add( item2, 0, wxALIGN_RIGHT|wxALL, 5 );
386
387 wxTextCtrl *item3 = new wxTextCtrl( parent, ID_NAME, wxT(""), wxDefaultPosition, wxSize(200,-1), 0 );
388 item1->Add( item3, 0, wxALIGN_CENTER|wxALL, 5 );
389
390 wxStaticText *item4 = new wxStaticText( parent, ID_LABEL_WIDTH, wxT("Width:"), wxDefaultPosition, wxDefaultSize, 0 );
391 item1->Add( item4, 0, wxALIGN_RIGHT|wxALL, 5 );
392
393 wxSpinCtrl *item5 = new wxSpinCtrl( parent, ID_WIDTH, wxT("1"), wxDefaultPosition, wxSize(-1,-1), 0, 1, 10000, 1 );
394 item1->Add( item5, 0, wxALIGN_CENTER|wxALL, 5 );
395
396 wxStaticText *item6 = new wxStaticText( parent, ID_LABEL_INPUT_SOCKET, wxT("Input Socket:"), wxDefaultPosition, wxDefaultSize, 0 );
397 item1->Add( item6, 0, wxALIGN_RIGHT|wxALL, 5 );
398
399 wxString strs7[] =
400 {
401 wxT("NONE")
402 };
403 wxChoice *item7 = new wxChoice( parent, ID_INPUT_SOCKET, wxDefaultPosition, wxSize(200,-1), 1, strs7, 0 );
404 item1->Add( item7, 0, wxALIGN_CENTER|wxALL, 5 );
405
406 wxStaticText *item8 = new wxStaticText( parent, ID_LABEL_OUTPUT_SOCKET, wxT("Output Socket:"), wxDefaultPosition, wxDefaultSize, 0 );
407 item1->Add( item8, 0, wxALIGN_RIGHT|wxALL, 5 );
408
409 wxString strs9[] =
410 {
411 wxT("NONE")
412 };
413 wxChoice *item9 = new wxChoice( parent, ID_OUTPUT_SOCKET, wxDefaultPosition, wxSize(200,-1), 1, strs9, 0 );
414 item1->Add( item9, 0, wxALIGN_CENTER|wxALL, 5 );
415
416 item0->Add( item1, 0, wxALIGN_CENTER|wxALL, 5 );
417
418 wxBoxSizer *item10 = new wxBoxSizer( wxHORIZONTAL );
419
420 wxCheckBox *item11 = new wxCheckBox( parent, ID_TRIGGERS, wxT("Triggers"), wxDefaultPosition, wxDefaultSize, 0 );
421 item10->Add( item11, 0, wxALIGN_CENTER|wxALL, 5 );
422
423 item0->Add( item10, 0, wxALL, 5 );
424
425 wxStaticLine *item12 = new wxStaticLine( parent, ID_LINE, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
426 item0->Add( item12, 0, wxGROW|wxALL, 5 );
427
428 wxBoxSizer *item13 = new wxBoxSizer( wxHORIZONTAL );
429
430 wxButton *item14 = new wxButton( parent, ID_HELP, wxT("&Help"), wxDefaultPosition, wxDefaultSize, 0 );
431 item13->Add( item14, 0, wxALIGN_CENTER|wxALL, 5 );
432
433 wxButton *item15 = new wxButton( parent, wxID_OK, wxT("&OK"), wxDefaultPosition, wxDefaultSize, 0 );
434 item13->Add( item15, 0, wxALIGN_CENTER|wxALL, 5 );
435
436 wxButton *item16 = new wxButton( parent, wxID_CANCEL, wxT("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
437 item13->Add( item16, 0, wxALIGN_CENTER|wxALL, 5 );
438
439 item0->Add( item13, 0, wxALIGN_CENTER|wxALL, 5 );
440
441 if (set_sizer)
442 {
443 parent->SetSizer( item0 );
444 if (call_fit)
445 item0->SetSizeHints( parent );
446 }
447
448 return item0;
449}

References ID_HELP, ID_INPUT_SOCKET, ID_LABEL_INPUT_SOCKET, ID_LABEL_NAME, ID_LABEL_OUTPUT_SOCKET, ID_LABEL_WIDTH, ID_LINE, ID_NAME, ID_OUTPUT_SOCKET, ID_TRIGGERS, and ID_WIDTH.

◆ onCancel()

void FUPortDialog::onCancel ( wxCommandEvent &  event)
private

Resets the original input and output sockets for the port and closes the dialog.

Definition at line 249 of file FUPortDialog.cc.

249 {
251 if (oldInput_ != NULL) {
253 }
254 if (oldOutput_ != NULL) {
256 }
257 EndModal(wxID_CANCEL);
258}
virtual void attachSocket(Socket &socket)
Definition Port.cc:191
virtual void detachAllSockets()
Definition Port.cc:536

References TTAMachine::Port::attachSocket(), TTAMachine::Port::detachAllSockets(), oldInput_, oldOutput_, and port_.

Here is the call graph for this function:

◆ onHelp()

void FUPortDialog::onHelp ( wxCommandEvent &  event)
private

◆ onName()

void FUPortDialog::onName ( wxCommandEvent &  event)
private

Disables OK-button if the name field is empty.

Definition at line 354 of file FUPortDialog.cc.

354 {
355 if (!TransferDataFromWindow()) {
356 assert(false);
357 }
358 wxString trimmedName = name_.Trim(false).Trim(true);
359 if (trimmedName == _T("")) {
360 FindWindow(wxID_OK)->Disable();
361 } else {
362 FindWindow(wxID_OK)->Enable();
363 }
364}
#define assert(condition)

References assert, and name_.

◆ onOK()

void FUPortDialog::onOK ( wxCommandEvent &  event)
private

Validates input in the controls, and updates the port object.

Definition at line 265 of file FUPortDialog.cc.

265 {
266
267 if (!Validate()) {
268 return;
269 }
270
271 if (!TransferDataFromWindow()) {
272 return;
273 }
274
275 // check whether FU already has a port of tht name.
276
277 string trimmedName =
278 WxConversion::toString(name_.Trim(false).Trim(true));
279
280 // Check the name validity.
281 if (!MachineTester::isValidComponentName(trimmedName)) {
283 format message =
285 InformationDialog warning(
286 this, WxConversion::toWxString(message.str()));
287 warning.ShowModal();
288 return;
289 }
290
291 if (port_->name() != trimmedName) {
293 for (int i = 0; i < fu->portCount(); i++) {
294 string name = fu->port(i)->name();
295 if (name == WxConversion::toString(name_)) {
296 ProDeTextGenerator* prodeTexts =
298 format message =
300 format a_port =
302 format machine =
304 format port =
306 message % trimmedName % a_port.str() % machine.str() %
307 port.str();
308 WarningDialog warning(
309 this, WxConversion::toWxString(message.str()));
310 warning.ShowModal();
311 return;
312 }
313 }
314 }
315
316 // update attributes
317 port_->setName(trimmedName);
320
321 EndModal(wxID_OK);
322}
TTAMachine::Machine * machine
the architecture definition of the estimated processor
static bool isValidComponentName(const std::string &name)
static ProDeTextGenerator * instance()
@ MSG_ERROR_SAME_NAME
Error: Same name exists.
@ MSG_ERROR_ILLEGAL_NAME
Error: Illegal component name.
@ COMP_FUNCTION_UNIT
Name for FU (w/o article).
@ COMP_PORT
Name for port (w/o article).
@ COMP_A_PORT
Name for port (w/ article).
FunctionUnit * parentUnit() const
Definition BaseFUPort.cc:96
void setWidth(int width)
void setTriggering(bool triggers)
Definition FUPort.cc:212
virtual BaseFUPort * port(const std::string &name) const
virtual std::string name() const
Definition Port.cc:141
virtual void setName(const std::string &name)
Definition Port.cc:155
virtual int portCount() const
Definition Unit.cc:135
virtual boost::format text(int textId)
static wxString toWxString(const std::string &source)
static std::string toString(const wxString &source)

References ProDeTextGenerator::COMP_A_PORT, ProDeTextGenerator::COMP_FUNCTION_UNIT, ProDeTextGenerator::COMP_PORT, ProDeTextGenerator::instance(), MachineTester::isValidComponentName(), machine, ProDeTextGenerator::MSG_ERROR_ILLEGAL_NAME, ProDeTextGenerator::MSG_ERROR_SAME_NAME, TTAMachine::Port::name(), name_, TTAMachine::BaseFUPort::parentUnit(), TTAMachine::FunctionUnit::port(), port_, TTAMachine::Unit::portCount(), TTAMachine::Port::setName(), TTAMachine::FUPort::setTriggering(), TTAMachine::BaseFUPort::setWidth(), Texts::TextGenerator::text(), WxConversion::toString(), WxConversion::toWxString(), triggers_, and width_.

Here is the call graph for this function:

◆ onSocketChoice()

void FUPortDialog::onSocketChoice ( wxCommandEvent &  event)
private

Updates the port object when user changes input/output socket selection.

Definition at line 328 of file FUPortDialog.cc.

328 {
330 Machine::SocketNavigator navigator =
332
333 // set input socket
334 string inputSocketName =
335 WxConversion::toString(inputSocketChoice_->GetStringSelection());
336 if (inputSocketName != WxConversion::toString(ProDeConstants::NONE)) {
337 port_->attachSocket(*(navigator.item(inputSocketName)));
338 }
339
340 // set output socket
341 string outputSocketName =
342 WxConversion::toString(outputSocketChoice_->GetStringSelection());
343 if (outputSocketName != WxConversion::toString(ProDeConstants::NONE)) {
344 port_->attachSocket(*(navigator.item(outputSocketName)));
345 }
347}
void updateSockets()
static const wxString NONE
Constant for "None".
virtual Machine * machine() const
ComponentType * item(int index) const
virtual SocketNavigator socketNavigator() const
Definition Machine.cc:368

References TTAMachine::Port::attachSocket(), TTAMachine::Port::detachAllSockets(), inputSocketChoice_, TTAMachine::Machine::Navigator< ComponentType >::item(), TTAMachine::Component::machine(), ProDeConstants::NONE, outputSocketChoice_, TTAMachine::BaseFUPort::parentUnit(), port_, TTAMachine::Machine::socketNavigator(), WxConversion::toString(), and updateSockets().

Here is the call graph for this function:

◆ setTexts()

void FUPortDialog::setTexts ( )
private

Sets texts for widgets.

Definition at line 117 of file FUPortDialog.cc.

117 {
120
121 // Dialog title
122 format fmt = prodeTexts->text(
124 SetTitle(WxConversion::toWxString(fmt.str()));
125
126 // buttons
127 WidgetTools::setLabel(generator, FindWindow(wxID_OK),
129
130 WidgetTools::setLabel(generator, FindWindow(wxID_CANCEL),
132
135
136 // widget labels
139
142
145
148
151}
@ TXT_BUTTON_HELP
Label for help button.
@ TXT_BUTTON_CANCEL
Label for cancel button.
@ TXT_BUTTON_OK
Label for OK button.
static GUITextGenerator * instance()
@ TXT_LABEL_NAME
Label for component name widget.
@ TXT_LABEL_TRIGGERS
Label for 'triggers' checkbox.
@ TXT_FU_PORT_DIALOG_TITLE
Function unit port dialog title.
@ TXT_LABEL_INPUT_SOCKET
Label for input socket selector.
@ TXT_LABEL_WIDTH
Label for bit width widget.
@ TXT_LABEL_OUTPUT_SOCKET
Label for output socket selector.
static void setLabel(Texts::TextGenerator *generator, wxWindow *widget, int textID)

References ID_HELP, ID_LABEL_INPUT_SOCKET, ID_LABEL_NAME, ID_LABEL_OUTPUT_SOCKET, ID_LABEL_WIDTH, ID_TRIGGERS, GUITextGenerator::instance(), ProDeTextGenerator::instance(), WidgetTools::setLabel(), Texts::TextGenerator::text(), WxConversion::toWxString(), GUITextGenerator::TXT_BUTTON_CANCEL, GUITextGenerator::TXT_BUTTON_HELP, GUITextGenerator::TXT_BUTTON_OK, ProDeTextGenerator::TXT_FU_PORT_DIALOG_TITLE, ProDeTextGenerator::TXT_LABEL_INPUT_SOCKET, ProDeTextGenerator::TXT_LABEL_NAME, ProDeTextGenerator::TXT_LABEL_OUTPUT_SOCKET, ProDeTextGenerator::TXT_LABEL_TRIGGERS, and ProDeTextGenerator::TXT_LABEL_WIDTH.

Here is the call graph for this function:

◆ TransferDataToWindow()

bool FUPortDialog::TransferDataToWindow ( )
protectedvirtual

Transfers data from the port object to the dialog widgets.

Returns
False, if an error occured in the transfer.

Definition at line 160 of file FUPortDialog.cc.

160 {
162 width_ = port_->width();
165
166 // wxWidgets GTK1 version seems to bug with spincontrol and
167 // checkbox validators. The widget value has to be set manually.
168 dynamic_cast<wxSpinCtrl*>(FindWindow(ID_WIDTH))->SetValue(width_);
169 dynamic_cast<wxCheckBox*>(FindWindow(ID_TRIGGERS))->SetValue(triggers_);
170
171 return wxWindow::TransferDataToWindow();
172}
virtual int width() const
virtual bool isTriggering() const
Definition FUPort.cc:182

References ID_TRIGGERS, ID_WIDTH, TTAMachine::FUPort::isTriggering(), TTAMachine::Port::name(), name_, port_, WxConversion::toWxString(), triggers_, updateSockets(), TTAMachine::BaseFUPort::width(), and width_.

Here is the call graph for this function:

◆ updateSockets()

void FUPortDialog::updateSockets ( )
private

Updates input and output socket choicers.

Definition at line 179 of file FUPortDialog.cc.

179 {
180
181 inputSocketChoice_->Clear();
183 outputSocketChoice_->Clear();
185
186 MachineTester tester(*(port_->parentUnit()->machine()));
187
188 // Add ports to the choicers
189 Machine::SocketNavigator navigator =
191
192 for (int i = 0; i < navigator.count(); i++) {
193 Socket* socket = navigator.item(i);
194 wxString socketName = WxConversion::toWxString(socket->name());
195
196 // Add available input sockets.
197 Socket* input = port_->inputSocket();
198 if (input != NULL) {
199 port_->detachSocket(*input);
200 }
201 bool legal = tester.canConnect(*socket, *port_);
202 if (legal && socket->direction() == Socket::INPUT) {
203 inputSocketChoice_->Append(socketName);
204 }
205 if (input != NULL) {
206 port_->attachSocket(*input);
207 }
208
209 // Add available output sockets.
210 Socket* output = port_->outputSocket();
211 if (output != NULL) {
212 port_->detachSocket(*output);
213 }
214 legal = tester.canConnect(*socket, *port_);
215 if (legal && socket->direction() == Socket::OUTPUT) {
216 outputSocketChoice_->Append(socketName);
217 }
218 if (output != NULL) {
219 port_->attachSocket(*output);
220 }
221 // ignore sockets with unknown direction
222 }
223
224 // set input socket choice
225 if (port_->inputSocket() == NULL) {
226 inputSocketChoice_->SetStringSelection(ProDeConstants::NONE);
227 } else {
228 wxString socketName =
230 inputSocketChoice_->SetStringSelection(socketName);
231 }
232
233 // set output socket choice
234 if (port_->outputSocket() == NULL) {
235 outputSocketChoice_->SetStringSelection(ProDeConstants::NONE);
236 } else {
237 wxString socketName =
239 outputSocketChoice_->SetStringSelection(socketName);
240 }
241}
virtual TCEString name() const
virtual void detachSocket(Socket &socket)
Definition Port.cc:237
@ OUTPUT
Data goes from port to bus.
Definition Socket.hh:60
@ INPUT
Data goes from bus to port.
Definition Socket.hh:59
Direction direction() const

References TTAMachine::Port::attachSocket(), MachineTester::canConnect(), TTAMachine::Machine::Navigator< ComponentType >::count(), TTAMachine::Port::detachSocket(), TTAMachine::Socket::direction(), TTAMachine::Socket::INPUT, TTAMachine::Port::inputSocket(), inputSocketChoice_, TTAMachine::Machine::Navigator< ComponentType >::item(), TTAMachine::Component::machine(), TTAMachine::Component::name(), ProDeConstants::NONE, TTAMachine::Socket::OUTPUT, TTAMachine::Port::outputSocket(), outputSocketChoice_, TTAMachine::BaseFUPort::parentUnit(), port_, TTAMachine::Machine::socketNavigator(), and WxConversion::toWxString().

Referenced by onSocketChoice(), and TransferDataToWindow().

Here is the call graph for this function:

Member Data Documentation

◆ inputSocketChoice_

wxChoice* FUPortDialog::inputSocketChoice_
private

Input socket choice control.

Definition at line 72 of file FUPortDialog.hh.

Referenced by onSocketChoice(), and updateSockets().

◆ name_

wxString FUPortDialog::name_
private

Name of the port.

Definition at line 66 of file FUPortDialog.hh.

Referenced by onName(), onOK(), and TransferDataToWindow().

◆ oldInput_

TTAMachine::Socket* FUPortDialog::oldInput_
private

Original input socket of the port.

Definition at line 77 of file FUPortDialog.hh.

Referenced by onCancel().

◆ oldOutput_

TTAMachine::Socket* FUPortDialog::oldOutput_
private

Original output socket of the port.

Definition at line 79 of file FUPortDialog.hh.

Referenced by onCancel().

◆ outputSocketChoice_

wxChoice* FUPortDialog::outputSocketChoice_
private

Output socket choice control.

Definition at line 74 of file FUPortDialog.hh.

Referenced by onSocketChoice(), and updateSockets().

◆ port_

TTAMachine::FUPort* FUPortDialog::port_
private

Function unit port to modify.

Definition at line 64 of file FUPortDialog.hh.

Referenced by onCancel(), onOK(), onSocketChoice(), TransferDataToWindow(), and updateSockets().

◆ triggers_

bool FUPortDialog::triggers_
private

Trigger attribute of the port.

Definition at line 70 of file FUPortDialog.hh.

Referenced by onOK(), and TransferDataToWindow().

◆ width_

int FUPortDialog::width_
private

Width of the port.

Definition at line 68 of file FUPortDialog.hh.

Referenced by onOK(), and TransferDataToWindow().


The documentation for this class was generated from the following files: