34 #include <wx/listctrl.h>
35 #include <wx/statline.h>
36 #include <wx/spinctrl.h>
76 ID_DELETE_EXTERNAL_PORT,
83 #ifdef ALLOW_OPCODE_EDITING
102 ID_EXTERNAL_PORT_LIST,
105 ID_EXTERNAL_PORT_LIST,
108 ID_EXTERNAL_PORT_LIST,
117 #ifdef ALLOW_OPCODE_EDITING
142 wxDialog(parent,
id, _T("Function
Unit Implementation")),
144 opcodeWarningShowed_(
false) {
146 createContents(
this,
true,
true);
149 archPortList_ =
dynamic_cast<wxListCtrl*
>(
FindWindow(ID_ARCH_PORT_LIST));
151 dynamic_cast<wxListCtrl*
>(
FindWindow(ID_EXTERNAL_PORT_LIST));
152 parameterList_ =
dynamic_cast<wxListCtrl*
>(
FindWindow(ID_PARAMETER_LIST));
153 sourceList_ =
dynamic_cast<wxListCtrl*
>(
FindWindow(ID_SOURCE_LIST));
154 opcodeList_ =
dynamic_cast<wxListCtrl*
>(
FindWindow(ID_OPCODE_LIST));
157 archPortList_->InsertColumn(0, _T(
"name"), wxLIST_FORMAT_LEFT, 130);
159 archPortList_->InsertColumn(
160 1, _T(
"architecture port"), wxLIST_FORMAT_LEFT, 130);
162 externalPortList_->InsertColumn(0, _T(
"name"), wxLIST_FORMAT_LEFT, 260);
164 parameterList_->InsertColumn(
165 0, _T(
"parameter"), wxLIST_FORMAT_LEFT, 180);
167 parameterList_->InsertColumn(
168 1, _T(
"value"), wxLIST_FORMAT_LEFT, 80);
170 opcodeList_->InsertColumn(
171 0, _T(
"operation"), wxLIST_FORMAT_LEFT, 180);
173 opcodeList_->InsertColumn(
174 1, _T(
"opcode"), wxLIST_FORMAT_LEFT, 80);
176 sourceList_->InsertColumn(
177 0, _T(
"source file"), wxLIST_FORMAT_LEFT, 260);
183 if (implementation_.clkPort().empty()) {
188 if (implementation_.rstPort().empty()) {
193 if (implementation_.glockPort().empty()) {
203 wxTextValidator(wxFILTER_ASCII, &name_));
205 wxTextValidator(wxFILTER_ASCII, &opcodePort_));
207 wxTextValidator(wxFILTER_ASCII, &clkPort_));
209 wxTextValidator(wxFILTER_ASCII, &rstPort_));
211 wxTextValidator(wxFILTER_ASCII, &gLockPort_));
213 wxTextValidator(wxFILTER_ASCII, &gLockReqPort_));
219 FindWindow(ID_DELETE_EXTERNAL_PORT)->Disable();
222 #ifdef ALLOW_OPCODE_EDITING
250 archPortList_->DeleteAllItems();
251 for (
int i = 0; i < implementation_.architecturePortCount(); i++) {
254 implementation_.architecturePort(i).name());
256 std::string archPortName =
257 implementation_.architecturePort(i).architecturePort();
259 const FUPort* port = architecture_.operationPort(archPortName);
264 for (
int j = 0; j < architecture_.operationCount(); j++) {
265 const HWOperation* operation = architecture_.operation(j);
266 if (operation->
isBound(*port)) {
269 std::string operationName = operation->
name();
271 archPortName +
" " + operationName +
"[" + io +
"]";
274 archPortList_->InsertItem(i, portName);
279 externalPortList_->DeleteAllItems();
280 for (
int i = 0; i < implementation_.externalPortCount(); i++) {
282 implementation_.externalPort(i).name());
283 externalPortList_->InsertItem(i, portName);
287 parameterList_->DeleteAllItems();
288 for (
int i = 0; i < implementation_.parameterCount(); i++) {
290 implementation_.parameter(i);
292 param.Append(_T(
": "));
294 parameterList_->InsertItem(i, param);
295 parameterList_->SetItem(
300 sourceList_->DeleteAllItems();
301 for (
int i = 0; i < implementation_.implementationFileCount(); i++) {
303 implementation_.file(i).pathToFile());
304 sourceList_->InsertItem(i, fileName);
306 if (implementation_.implementationFileCount() != 0) {
307 sourceList_->SetColumnWidth(0, wxLIST_AUTOSIZE);
311 opcodeList_->DeleteAllItems();
313 std::set<std::string> opcodeSet;
314 for (
int i = 0; i < architecture_.operationCount(); i++) {
315 std::string operation = architecture_.operation(i)->name();
316 opcodeSet.insert(operation);
321 for (std::set<std::string>::iterator i = opcodeSet.begin();
322 i != opcodeSet.end(); i++) {
323 std::string operation = *i;
324 wxString opcode = _T(
"");
325 if (implementation_.hasOpcode(operation)) {
326 int opcodeIndex = implementation_.opcode(operation);
327 if (opcodeIndex != index && !opcodeWarningShowed_) {
328 #ifdef ALLOW_OPCODE_EDITING
330 wxMessageDialog errorDialog(
332 _T(
"Illegal opcodes. Design might not work in future. "
333 "Opcode IDs must be generated according to the "
334 "alphabetical order of operation names. Please fix "
335 "FU's vhdl code and HDB entry"),
336 _T(
"Illegal opcodes"), wxOK);
339 wxMessageDialog errorDialog(
341 _T(
"Illegal opcodes. Design won't work. Opcode IDs must "
342 "be generated according to the alphabetical order of "
344 _T(
"Illegal opcodes"), wxOK);
346 opcodeWarningShowed_ =
true;
347 errorDialog.ShowModal();
352 #ifndef ALLOW_OPCODE_EDITING
361 implementation_.setOpcode(operation, index);
365 opcodeList_->InsertItem(index, operationName);
366 opcodeList_->SetItem(index, 1, opcode);
371 onArchPortSelection(
dummy);
372 onExternalPortSelection(
dummy);
373 onParameterSelection(
dummy);
408 if (selectedArchPort() == NULL) {
446 "",
IN,
"",
"", implementation_);
450 if (dialog.ShowModal() != wxID_OK) {
451 implementation_.deleteExternalPort(port);
512 implementation_.deleteExternalPort(port);
523 if (selectedExternalPort() == NULL) {
524 FindWindow(ID_DELETE_EXTERNAL_PORT)->Disable();
527 FindWindow(ID_DELETE_EXTERNAL_PORT)->Enable();
545 if (dialog.ShowModal() != wxID_OK) {
550 implementation_.addParameter(
553 wxString message = _T(
"FU implementation already contains ");
554 message.Append(_T(
"a parameter\nwith name '"));
556 message.Append(_T(
"'."));
576 std::string oldName = parameter.
name;
580 if (dialog.ShowModal() == wxID_OK) {
581 implementation_.removeParameter(oldName);
582 implementation_.addParameter(
586 for (
int i = 0; i < implementation_.externalPortCount(); i++) {
607 std::string oldName = parameter.
name;
611 if (dialog.ShowModal() == wxID_OK) {
612 implementation_.removeParameter(oldName);
613 implementation_.addParameter(
617 for (
int i = 0; i < implementation_.externalPortCount(); i++) {
638 implementation_.removeParameter(parameter.
name);
641 for (
int i = 0; i < implementation_.externalPortCount(); i++) {
656 if (selectedParameter().name ==
"") {
678 item = archPortList_->GetNextItem(
679 item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
697 item = externalPortList_->GetNextItem(
698 item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
704 return &implementation_.externalPort(item);
716 item = parameterList_->GetNextItem(
717 item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
724 return implementation_.parameter(item);
727 #ifdef ALLOW_OPCODE_EDITING
736 if (operation ==
"") {
741 if (implementation_.hasOpcode(operation)) {
760 if (operation ==
"") {
764 implementation_.unsetOpcode(operation);
779 if (operation ==
"") {
783 int opcode =
dynamic_cast<wxSpinCtrl*
>(
FindWindow(ID_OPCODE))->GetValue();
785 for (
int i = 0; i < architecture_.operationCount(); i++) {
786 std::string operation = architecture_.operation(i)->name();
787 if (implementation_.hasOpcode(operation) &&
788 implementation_.opcode(operation) == opcode) {
790 wxString message = _T(
"Opcode ");
792 message.Append(_T(
" is already used by operation "));
794 message.Append(_T(
"."));
801 implementation_.setOpcode(operation, opcode);
820 if (dialog.ShowModal() == wxID_OK) {
821 implementation_.addImplementationFile(file);
842 for (
int i = 0; i < implementation_.implementationFileCount(); i++) {
845 implementation_.removeImplementationFile(file);
864 if (implementation_.implementationFileCount() > 1) {
865 std::string fileName =
867 std::vector<std::string> pathToFileList;
868 int originalImplementationFileCount =
869 implementation_.implementationFileCount();
871 for (
int i = 0; i < originalImplementationFileCount; i++) {
874 implementation_.removeImplementationFile(file);
877 for (
unsigned int i = 1; i < pathToFileList.size(); i++) {
878 if (pathToFileList.at(i) == fileName) {
879 pathToFileList.erase(pathToFileList.begin() + i);
880 pathToFileList.insert(
881 pathToFileList.begin() + i - 1, fileName);
886 for (
unsigned int i = 0; i < pathToFileList.size(); i++) {
890 implementation_.addImplementationFile(file);
893 pathToFileList.clear();
896 for (
int i = 0; i < implementation_.implementationFileCount(); i++) {
897 if (implementation_.file(i).pathToFile() == fileName) {
898 sourceList_->SetItemState(i, wxLIST_STATE_SELECTED,
899 wxLIST_STATE_SELECTED);
912 if (implementation_.implementationFileCount() > 1) {
913 std::string fileName =
915 std::vector<std::string> pathToFileList;
917 int originalImplementationFileCount =
918 implementation_.implementationFileCount();
920 for (
int i = 0; i < originalImplementationFileCount; i++) {
923 implementation_.removeImplementationFile(file);
926 for (
unsigned int i = 0; i < (pathToFileList.size() - 1); i++) {
927 if (pathToFileList.at(i) == fileName) {
928 pathToFileList.erase(pathToFileList.begin() + i);
929 pathToFileList.insert(
930 pathToFileList.begin() + i + 1, fileName);
935 for (
unsigned int i = 0; i < pathToFileList.size(); i++) {
939 implementation_.addImplementationFile(file);
942 pathToFileList.clear();
945 for (
int i = 0; i < implementation_.implementationFileCount(); i++) {
946 if (implementation_.file(i).pathToFile() == fileName) {
947 sourceList_->SetItemState(i, wxLIST_STATE_SELECTED,
948 wxLIST_STATE_SELECTED);
982 TransferDataFromWindow();
984 name_ = name_.Trim(
true).Trim(
false);
985 clkPort_ = clkPort_.Trim(
true).Trim(
false);
986 rstPort_ = rstPort_.Trim(
true).Trim(
false);
987 gLockPort_ = gLockPort_.Trim(
true).Trim(
false);
988 gLockReqPort_ = gLockReqPort_.Trim(
true).Trim(
false);
989 opcodePort_ = opcodePort_.Trim(
true).Trim(
false);
991 if (name_.IsEmpty()) {
992 wxString message = _T(
"Name field must not be empty.");
998 for (
int i = 0; i < implementation_.architecturePortCount(); i++) {
999 if (implementation_.architecturePort(i).name() ==
"") {
1001 _T(
"No name specified for the architecture port '");
1003 implementation_.architecturePort(i).architecturePort();
1005 message.Append(_T(
"'."));
1010 for (
int k = i+1; k < implementation_.architecturePortCount(); k++) {
1011 if (implementation_.architecturePort(i).name() ==
1012 implementation_.architecturePort(k).name()) {
1016 implementation_.architecturePort(i).architecturePort();
1018 message.Append(_T(
"' and '"));
1020 implementation_.architecturePort(k).architecturePort();
1022 message.Append(_T(
"' have the same name."));
1029 #ifdef ALLOW_OPCODE_EDITING
1030 if (architecture_.operationCount() > 1) {
1031 for (
int i = 0; i < architecture_.operationCount(); i++) {
1032 if (!implementation_.hasOpcode(
1033 architecture_.operation(i)->name())) {
1036 _T(
"No opcode specified for the operation '");
1037 std::string operation = architecture_.operation(i)->name();
1039 message.Append(_T(
"'."));
1065 wxWindow *parent,
bool call_fit,
bool set_sizer) {
1066 wxBoxSizer *item0 =
new wxBoxSizer( wxVERTICAL );
1068 wxFlexGridSizer *item1 =
new wxFlexGridSizer( 2, 0, 0 );
1070 wxFlexGridSizer *item2 =
new wxFlexGridSizer( 2, 0, 0 );
1072 wxStaticText *item3 =
new wxStaticText( parent, ID_LABEL_NAME, wxT(
"Name:"), wxDefaultPosition, wxDefaultSize, 0 );
1073 item2->Add( item3, 0, wxALIGN_RIGHT|wxALL, 5 );
1075 wxTextCtrl *item4 =
new wxTextCtrl( parent, ID_NAME, wxT(
""), wxDefaultPosition, wxSize(160,-1), 0 );
1076 item2->Add( item4, 0, wxGROW|wxALL, 5 );
1078 wxStaticText *item5 =
new wxStaticText( parent, ID_LABEL_OPCODE_PORT_NAME, wxT(
"Opcode port:"), wxDefaultPosition, wxDefaultSize, 0 );
1079 item2->Add( item5, 0, wxALIGN_RIGHT|wxALL, 5 );
1081 wxTextCtrl *item6 =
new wxTextCtrl( parent, ID_OPCODE_PORT, wxT(
""), wxDefaultPosition, wxSize(160,-1), 0 );
1082 item2->Add( item6, 0, wxGROW|wxALL, 5 );
1084 wxStaticText *item7 =
new wxStaticText( parent, ID_LABEL_CLK_PORT, wxT(
"Clock port:"), wxDefaultPosition, wxDefaultSize, 0 );
1085 item2->Add( item7, 0, wxALIGN_RIGHT|wxALL, 5 );
1087 wxTextCtrl *item8 =
new wxTextCtrl( parent, ID_CLK_PORT, wxT(
""), wxDefaultPosition, wxSize(80,-1), 0 );
1088 item2->Add( item8, 0, wxGROW|wxALL, 5 );
1090 wxStaticText *item9 =
new wxStaticText( parent, ID_LABEL_GLOCK_PORT, wxT(
"Global lock port:"), wxDefaultPosition, wxDefaultSize, 0 );
1091 item2->Add( item9, 0, wxALIGN_RIGHT|wxALL, 5 );
1093 wxTextCtrl *item10 =
new wxTextCtrl( parent, ID_GLOCK_PORT, wxT(
""), wxDefaultPosition, wxSize(150,-1), 0 );
1094 item2->Add( item10, 0, wxGROW|wxALL, 5 );
1096 wxStaticText *item11 =
new wxStaticText( parent, ID_LABEL_RST_PORT, wxT(
"Reset port:"), wxDefaultPosition, wxDefaultSize, 0 );
1097 item2->Add( item11, 0, wxALIGN_RIGHT|wxALL, 5 );
1099 wxTextCtrl *item12 =
new wxTextCtrl( parent, ID_RST_PORT, wxT(
""), wxDefaultPosition, wxSize(80,-1), 0 );
1100 item2->Add( item12, 0, wxGROW|wxALL, 5 );
1102 wxStaticText *item13 =
new wxStaticText( parent, ID_LABEL_GLOCK_REQ_PORT, wxT(
"Global lock req. port:"), wxDefaultPosition, wxDefaultSize, 0 );
1103 item2->Add( item13, 0, wxALIGN_RIGHT|wxALL, 5 );
1105 wxTextCtrl *item14 =
new wxTextCtrl( parent, ID_GLOCK_REQ_PORT, wxT(
""), wxDefaultPosition, wxSize(80,-1), 0 );
1106 item2->Add( item14, 0, wxGROW|wxALL, 5 );
1108 item1->Add( item2, 0, wxALL, 5 );
1110 wxStaticBox *item16 =
new wxStaticBox( parent, -1, wxT(
"Source files:") );
1112 wxStaticBoxSizer *item15 =
new wxStaticBoxSizer( item16, wxVERTICAL );
1114 wxFlexGridSizer *item17_1 =
new wxFlexGridSizer( 2, 0, 0 );
1116 wxListCtrl *item17 =
new wxListCtrl( parent, ID_SOURCE_LIST, wxDefaultPosition, wxSize(300,150), wxLC_REPORT|wxSUNKEN_BORDER );
1117 item17_1->Add( item17, 0, wxGROW|wxALL, 5 );
1119 wxBoxSizer *item17_3 =
new wxBoxSizer( wxVERTICAL );
1121 wxButton *item60 =
new wxButton( parent, ID_MOVE_SOURCE_UP, wxT(
"▴"), wxDefaultPosition, wxSize(20, 20), 0 );
1122 item17_3->Add( item60, 0, wxALIGN_CENTER|wxALL, 5 );
1124 wxButton *item61 =
new wxButton( parent, ID_MOVE_SOURCE_DOWN, wxT(
"▾"), wxDefaultPosition, wxSize(20, 20), 0 );
1125 item17_3->Add( item61, 0, wxALIGN_CENTER|wxALL, 5 );
1127 item17_1->Add( item17_3, 0, wxALIGN_RIGHT|wxALIGN_CENTER, 5 );
1129 item15->Add( item17_1, 0, wxGROW|wxALL, 5 );
1131 wxBoxSizer *item18 =
new wxBoxSizer( wxHORIZONTAL );
1133 wxButton *item19 =
new wxButton( parent, ID_ADD_SOURCE, wxT(
"Add..."), wxDefaultPosition, wxDefaultSize, 0 );
1134 item18->Add( item19, 0, wxALL, 5 );
1136 wxButton *item20 =
new wxButton( parent, ID_DELETE_SOURCE, wxT(
"Delete"), wxDefaultPosition, wxDefaultSize, 0 );
1137 item18->Add( item20, 0, wxALIGN_CENTER|wxALL, 5 );
1139 item15->Add( item18, 0, 0, 5 );
1141 item1->Add( item15, 0, wxGROW|wxALL, 5 );
1143 wxStaticBox *item22 =
new wxStaticBox( parent, -1, wxT(
"Architecture ports:") );
1144 wxStaticBoxSizer *item21 =
new wxStaticBoxSizer( item22, wxVERTICAL );
1146 wxListCtrl *item23 =
new wxListCtrl( parent, ID_ARCH_PORT_LIST, wxDefaultPosition, wxSize(200,120), wxLC_REPORT|wxSUNKEN_BORDER );
1147 item21->Add( item23, 0, wxGROW|wxALL, 5 );
1149 wxBoxSizer *item24 =
new wxBoxSizer( wxHORIZONTAL );
1151 wxButton *item25 =
new wxButton( parent, ID_EDIT_ARCH_PORT, wxT(
"Edit..."), wxDefaultPosition, wxDefaultSize, 0 );
1152 item24->Add( item25, 0, wxALIGN_CENTER|wxALL, 5 );
1154 item21->Add( item24, 0, 0, 5 );
1156 item1->Add( item21, 0, wxGROW|wxALL, 5 );
1158 wxStaticBox *item27 =
new wxStaticBox( parent, -1, wxT(
"Opcodes:") );
1159 wxStaticBoxSizer *item26 =
new wxStaticBoxSizer( item27, wxVERTICAL );
1161 wxListCtrl *item28 =
new wxListCtrl( parent, ID_OPCODE_LIST, wxDefaultPosition, wxSize(260,120), wxLC_REPORT|wxSUNKEN_BORDER );
1162 item26->Add( item28, 0, wxGROW|wxALL, 5 );
1164 wxBoxSizer *item29 =
new wxBoxSizer( wxHORIZONTAL );
1165 #ifdef ALLOW_OPCODE_EDITING
1166 wxSpinCtrl *item30 =
new wxSpinCtrl( parent, ID_OPCODE, wxT(
"0"), wxDefaultPosition, wxSize(-1,-1), 0, 0, 100, 0 );
1167 item29->Add( item30, 0, wxALIGN_CENTER|wxALL, 5 );
1169 wxButton *item31 =
new wxButton( parent, ID_SET_OPCODE, wxT(
"Set"), wxDefaultPosition, wxDefaultSize, 0 );
1170 item29->Add( item31, 0, wxALIGN_CENTER|wxALL, 5 );
1172 wxButton *item32 =
new wxButton( parent, ID_CLEAR_OPCODE, wxT(
"Clear"), wxDefaultPosition, wxDefaultSize, 0 );
1173 item29->Add( item32, 0, wxALIGN_CENTER|wxALL, 5 );
1175 item26->Add( item29, 0, 0, 5 );
1177 item1->Add( item26, 0, wxGROW|wxALL, 5 );
1179 wxStaticBox *item34 =
new wxStaticBox( parent, -1, wxT(
"External ports:") );
1180 wxStaticBoxSizer *item33 =
new wxStaticBoxSizer( item34, wxVERTICAL );
1182 wxListCtrl *item35 =
new wxListCtrl( parent, ID_EXTERNAL_PORT_LIST, wxDefaultPosition, wxSize(200,120), wxLC_REPORT|wxSUNKEN_BORDER );
1183 item33->Add( item35, 0, wxGROW|wxALL, 5 );
1185 wxBoxSizer *item36 =
new wxBoxSizer( wxHORIZONTAL );
1187 wxButton *item37 =
new wxButton( parent, ID_ADD_EXTERNAL_PORT, wxT(
"Add..."), wxDefaultPosition, wxDefaultSize, 0 );
1188 item36->Add( item37, 0, wxALL, 5 );
1190 wxButton *item38 =
new wxButton( parent, ID_EDIT_EXTERNAL_PORT, wxT(
"Edit..."), wxDefaultPosition, wxDefaultSize, 0 );
1191 item36->Add( item38, 0, wxALIGN_CENTER|wxALL, 5 );
1193 wxButton *item39 =
new wxButton( parent, ID_DELETE_EXTERNAL_PORT, wxT(
"Delete"), wxDefaultPosition, wxDefaultSize, 0 );
1194 item36->Add( item39, 0, wxALIGN_CENTER|wxALL, 5 );
1196 item33->Add( item36, 0, wxALIGN_CENTER, 5 );
1198 item1->Add( item33, 0, wxGROW|wxALL, 5 );
1200 wxStaticBox *item41 =
new wxStaticBox( parent, -1, wxT(
"Parameters:") );
1201 wxStaticBoxSizer *item40 =
new wxStaticBoxSizer( item41, wxVERTICAL );
1203 wxListCtrl *item42 =
new wxListCtrl( parent, ID_PARAMETER_LIST, wxDefaultPosition, wxSize(260,120), wxLC_REPORT|wxSUNKEN_BORDER );
1204 item40->Add( item42, 0, wxGROW|wxALL, 5 );
1206 wxBoxSizer *item43 =
new wxBoxSizer( wxHORIZONTAL );
1208 wxButton *item44 =
new wxButton( parent, ID_ADD_PARAMETER, wxT(
"Add..."), wxDefaultPosition, wxDefaultSize, 0 );
1209 item43->Add( item44, 0, wxALIGN_CENTER|wxALL, 5 );
1211 wxButton *item45 =
new wxButton( parent, ID_EDIT_PARAMETER, wxT(
"Edit..."), wxDefaultPosition, wxDefaultSize, 0 );
1212 item43->Add( item45, 0, wxALIGN_CENTER|wxALL, 5 );
1214 wxButton *item46 =
new wxButton( parent, ID_DELETE_PARAMETER, wxT(
"Delete"), wxDefaultPosition, wxDefaultSize, 0 );
1215 item43->Add( item46, 0, wxALIGN_CENTER|wxALL, 5 );
1217 item40->Add( item43, 0, 0, 5 );
1219 item1->Add( item40, 0, wxGROW|wxALL, 5 );
1221 item0->Add( item1, 0, wxALIGN_CENTER|wxALL, 5 );
1223 wxStaticLine *item47 =
new wxStaticLine( parent, ID_LINE, wxDefaultPosition, wxSize(20,-1), wxLI_HORIZONTAL );
1224 item0->Add( item47, 0, wxGROW|wxALL, 5 );
1226 wxBoxSizer *item48 =
new wxBoxSizer( wxHORIZONTAL );
1228 wxButton *item49 =
new wxButton( parent, wxID_CANCEL, wxT(
"&Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
1229 item48->Add( item49, 0, wxALIGN_CENTER|wxALL, 5 );
1231 wxButton *item50 =
new wxButton( parent, wxID_OK, wxT(
"&OK"), wxDefaultPosition, wxDefaultSize, 0 );
1232 item48->Add( item50, 0, wxALIGN_CENTER|wxALL, 5 );
1234 item0->Add( item48, 0, wxALL, 5 );
1238 parent->SetSizer( item0 );
1240 item0->SetSizeHints( parent );