00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifdef _USE_WXWIDGETS_
00032
00038 #include "bbtkWxBlackBox.h"
00039 #include "bbtkBlackBoxOutputConnector.h"
00040
00041
00042 #include <wx/dialog.h>
00043
00044
00045
00046
00047 namespace bbtk
00048 {
00049
00050
00051
00052
00053
00054 class WxFrame : public wxFrame
00055 {
00056 public:
00057 WxFrame(WxBlackBox::Pointer b,
00058 wxWindow *parent,
00059 wxString title,
00060 wxSize size);
00061 ~WxFrame();
00062 void OnCloseWindow(wxCloseEvent& event);
00063
00064
00065 WxBlackBox::WeakPointer mBox;
00066 DECLARE_EVENT_TABLE();
00067
00068 };
00069
00070 BEGIN_EVENT_TABLE(WxFrame, wxFrame)
00071
00072 END_EVENT_TABLE();
00073
00074
00075
00076 WxFrame::WxFrame(WxBlackBox::Pointer b,
00077 wxWindow *parent,
00078 wxString title,
00079 wxSize size)
00080 :
00081 wxFrame( parent,
00082 -1,
00083 title,
00084 wxDefaultPosition,
00085 size,
00086 wxRESIZE_BORDER |
00087 wxSYSTEM_MENU |
00088 wxCLOSE_BOX |
00089 wxMAXIMIZE_BOX |
00090 wxMINIMIZE_BOX |
00091 wxCAPTION
00092 ),
00093 mBox(b)
00094 {
00095 bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] WxFrame()"
00096 <<std::endl);
00097 Wx::IncNbWindowsAlive();
00098 b->bbSetWindow(this);
00099
00100 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
00101 b->bbUserCreateWidget(this);
00102 wxWindow* widget = b->bbGetOutputWidget();
00103 sizer->Add( widget, 1, wxALL|wxGROW, 2);
00104 SetSizer(sizer);
00105 Layout();
00106 }
00107
00108
00109 WxFrame::~WxFrame()
00110 {
00111 if (mBox.lock())
00112 bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
00113 <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
00114 <<std::endl);
00115 else
00116 bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WxFrame()"<<std::endl);
00117
00118 if (mBox.lock()) mBox.lock()->bbSetWindow(0);
00119 Wx::DecNbWindowsAlive();
00120 }
00121
00122
00123 void WxFrame::OnCloseWindow(wxCloseEvent& event)
00124 {
00125 if (mBox.lock())
00126 bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
00127 <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
00128 else
00129 bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
00130 <<std::endl);
00131 if (mBox.lock()) mBox.lock()->bbSetWindow(0);
00132 Wx::DecNbWindowsAlive();
00133
00134 bbtkDebugMessage("widget",9,
00135 "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
00136
00137 }
00138
00139
00140
00141
00142
00143
00144
00145
00146 class BBTK_EXPORT WxDialog : public wxDialog
00147 {
00148 public:
00149 WxDialog(WxBlackBox::Pointer box,
00150 wxWindow *parent,
00151 wxString title,
00152 wxSize size);
00153 ~WxDialog();
00154 void OnCloseWindow(wxCloseEvent& event);
00155
00156
00157 WxBlackBox::WeakPointer mBox;
00158 DECLARE_EVENT_TABLE();
00159
00160 };
00161
00162 BEGIN_EVENT_TABLE(WxDialog, wxDialog)
00163 EVT_CLOSE(WxDialog::OnCloseWindow)
00164 END_EVENT_TABLE();
00165
00166
00167
00168 WxDialog::WxDialog(WxBlackBox::Pointer b,
00169 wxWindow *parent,
00170 wxString title,
00171 wxSize size)
00172 :
00173 wxDialog( parent,
00174 -1,
00175 title,
00176 wxDefaultPosition,
00177 size,
00178 wxRESIZE_BORDER |
00179 wxSYSTEM_MENU |
00180 wxCLOSE_BOX |
00181 wxMAXIMIZE_BOX |
00182 wxMINIMIZE_BOX |
00183 wxCAPTION
00184 ),
00185 mBox(b)
00186 {
00187 bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
00188 <<std::endl);
00189 Wx::IncNbWindowsAlive();
00190 b->bbSetWindow(this);
00191
00192 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
00193 b->bbUserCreateWidget(this);
00194 wxWindow* widget = b->bbGetOutputWidget();
00195 sizer->Add( widget, 1, wxALL|wxGROW, 2);
00196 SetSizer(sizer);
00197 Layout();
00198 }
00199
00200
00201 WxDialog::~WxDialog()
00202 {
00203 bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<<std::endl);
00204
00205
00206
00207 }
00208
00209
00210 void WxDialog::OnCloseWindow(wxCloseEvent& event)
00211 {
00212 bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
00213 if (mBox.lock()) mBox.lock()->bbSetWindow(0);
00214 Wx::DecNbWindowsAlive();
00215 this->Destroy();
00216 }
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228 BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
00229
00230
00231
00232 void WxBlackBox::bbUserSetDefaultValues()
00233 {
00234 bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
00235 bbmWindow = 0;
00236 }
00237
00238
00239
00240 void WxBlackBox::bbUserInitializeProcessing()
00241 {
00242 }
00243
00244
00245
00246 void WxBlackBox::bbUserFinalizeProcessing()
00247 {
00248 bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
00249 bbDestroyWindow();
00250 bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
00251 }
00252
00253
00254
00256 void WxBlackBox::bbCreateDialogWindow()
00257 {
00258 bbtkBlackBoxDebugMessage("widget",3,
00259 "==> WxBlackBox::bbCreateDialogWindow() - parent = "
00260 <<Wx::GetTopWindow()
00261 <<std::endl);
00262 WxDialog* w = 0;
00263 w = new WxDialog( GetThisPointer<WxBlackBox>(),
00264 Wx::GetTopWindow(),
00265 std2wx( bbGetInputWinTitle()
00266 + " - bbtk (c) CREATIS-LRMN"),
00267 wxSize( bbGetInputWinWidth() ,
00268 bbGetInputWinHeight() ) );
00269 w->Show(false);
00270
00271 }
00272
00273
00274
00275
00276
00278 void WxBlackBox::bbCreateFrameWindow()
00279 {
00280 bbtkBlackBoxDebugMessage("widget",3,
00281 "==> WxBlackBox::bbCreateFrameWindow() - parent = "
00282 <<Wx::GetTopWindow()
00283 <<std::endl);
00284 WxFrame* w = 0;
00285 w = new WxFrame( GetThisPointer<WxBlackBox>(),
00286 Wx::GetTopWindow(),
00287 std2wx( bbGetInputWinTitle()
00288 + " - bbtk (c) CREATIS-LRMN"),
00289 wxSize( bbGetInputWinWidth() ,
00290 bbGetInputWinHeight() ) );
00291 w->Show();
00292 }
00293
00294
00295
00296
00297 void WxBlackBox::bbSetWindow(wxWindow* w)
00298 {
00299 bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
00300 if ((bbmWindow != 0)&&(w!=0))
00301 {
00302 std::cout << "ERRRRRRRROOOOR"<<std::endl;
00303 }
00304 bbmWindow = w;
00305 }
00306
00307
00308
00309 void WxBlackBox::bbShowWindow()
00310 {
00311 if ((bbmWindow) && (!bbIsShown()))
00312 {
00313 bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
00314 <<std::endl);
00315 if (bbGetInputWinDialog())
00316 {
00317 ((WxDialog*)bbmWindow)->ShowModal();
00318 }
00319 else
00320 {
00321 bbGetWindow()->Show();
00322 bbSetShown(true);
00323 }
00324 }
00325 }
00326
00327
00328
00329 void WxBlackBox::bbDestroyWindow()
00330 {
00331 bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
00332 if (bbGetWindow()!=NULL)
00333 {
00334
00335
00336
00337
00338
00339
00340 delete bbGetWindow();
00341 bbSetShown(false);
00342 }
00343 bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
00344
00345 }
00346
00347
00348 }
00349
00350 #endif
00351