Program: bbtk
Module: $RCSfile: bbtkWxBlackBox.cxx,v $
Language: C++
- Date: $Date: 2009/05/14 14:43:34 $
- Version: $Revision: 1.39 $
+ Date: $Date: 2009/05/28 14:22:11 $
+ Version: $Revision: 1.42 $
=========================================================================*/
/* ---------------------------------------------------------------------
-
+
//=========================================================================
- // WxBlackBoxDialog
+ // WxFrame
//=========================================================================
+ //==================================================================
+ class WxFrame : public wxFrame
+ {
+ public:
+ WxFrame(WxBlackBox::Pointer b,
+ wxWindow *parent,
+ wxString title,
+ wxSize size);
+ ~WxFrame();
+ void OnCloseWindow(wxCloseEvent& event);
+
+
+ WxBlackBox::WeakPointer mBox;
+ DECLARE_EVENT_TABLE();
+
+ };
+
+ BEGIN_EVENT_TABLE(WxFrame, wxFrame)
+ // EVT_CLOSE(WxFrame::OnCloseWindow)
+ END_EVENT_TABLE();
+ //==================================================================
+
+ //==================================================================
+ WxFrame::WxFrame(WxBlackBox::Pointer b,
+ wxWindow *parent,
+ wxString title,
+ wxSize size)
+ :
+ wxFrame( parent,
+ -1,
+ title,
+ wxDefaultPosition,
+ size,
+ wxRESIZE_BORDER |
+ wxSYSTEM_MENU |
+ wxCLOSE_BOX |
+ wxMAXIMIZE_BOX |
+ wxMINIMIZE_BOX |
+ wxCAPTION
+ ),
+ mBox(b)
+ {
+ bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] WxFrame()"
+ <<std::endl);
+ Wx::IncNbWindowsAlive();
+ b->bbSetWindow(this);
+ // Insert the widget into the window
+ wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+ b->bbUserCreateWidget(this);
+ wxWindow* widget = b->bbGetOutputWidget();
+ sizer->Add( widget, 1, wxALL|wxGROW, 2);
+ SetSizer(sizer);
+ Layout();
+ }
+ //==================================================================
+ //==================================================================
+ WxFrame::~WxFrame()
+ {
+ if (mBox.lock())
+ bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
+ <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
+ <<std::endl);
+ else
+ bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WxFrame()"<<std::endl);
+ //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
+ if (mBox.lock()) mBox.lock()->bbSetWindow(0);
+ Wx::DecNbWindowsAlive();
+ }
+ //==================================================================
+ //==================================================================
+ void WxFrame::OnCloseWindow(wxCloseEvent& event)
+ {
+ if (mBox.lock())
+ bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
+ <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
+ else
+ bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
+ <<std::endl);
+ if (mBox.lock()) mBox.lock()->bbSetWindow(0);
+ Wx::DecNbWindowsAlive();
+
+ bbtkDebugMessage("widget",9,
+ "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
+ // this->Destroy();
+ }
+ //==================================================================
+
+
+
+
+
+ //=========================================================================
+ // WxDialog
+ //=========================================================================
+
+ //==================================================================
+ // Dialog window which is modal
+ class BBTK_EXPORT WxDialog : public wxDialog
+ {
+ public:
+ WxDialog(WxBlackBox::Pointer box,
+ wxWindow *parent,
+ wxString title,
+ wxSize size);
+ ~WxDialog();
+ void OnCloseWindow(wxCloseEvent& event);
+
+
+ WxBlackBox::WeakPointer mBox;
+ DECLARE_EVENT_TABLE();
+
+ };
+
+ BEGIN_EVENT_TABLE(WxDialog, wxDialog)
+ EVT_CLOSE(WxDialog::OnCloseWindow)
+ END_EVENT_TABLE();
+ //==================================================================
+
//=========================================================================
- WxBlackBoxDialog::WxBlackBoxDialog(WxBlackBox::Pointer box,
- wxWindow *parent,
- wxString title,
- wxSize size)
+ WxDialog::WxDialog(WxBlackBox::Pointer b,
+ wxWindow *parent,
+ wxString title,
+ wxSize size)
:
wxDialog( parent,
-1,
wxMINIMIZE_BOX |
wxCAPTION
),
- Parent(box)
+ mBox(b)
{
- bbtkDebugMessage("wx",9,"WxBlackBoxDialog::WxBlackBoxDialog("<<
- bbGetBlackBox()->bbGetFullName()<<","<<parent<<","
- <<title<<",size)"<<std::endl);
+ bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
+ <<std::endl);
+ Wx::IncNbWindowsAlive();
+ b->bbSetWindow(this);
// Insert the widget into the window
wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
- // Create the widget
- box->bbCreateWidgetAndEventHandler(this);
- wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
- sizer->Add( widget, 1, wxALL|wxEXPAND, 2);
- //SetAutoLayout(true);
+ b->bbUserCreateWidget(this);
+ wxWindow* widget = b->bbGetOutputWidget();
+ sizer->Add( widget, 1, wxALL|wxGROW, 2);
SetSizer(sizer);
Layout();
}
//=========================================================================
-
- //=========================================================================
- void WxBlackBoxDialog::bbShow()
- {
- if (bbIsShown()) return;
- bbtkDebugMessage("wx",5,"WxBlackBoxDialog::bbShow() ["
- <<bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
- Parent::bbShow();
- Show(false);
- SetReturnCode( wxDialog::ShowModal() );
- bbClose();
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxDialog::bbHide()
- {
- bbtkDebugMessage("wx",9,"WxBlackBoxDialog::bbHide()"<<std::endl);
- Parent::bbHide();
- Hide();
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxDialog::bbClose()
- {
- bbtkDebugMessage("wx",9,"WxBlackBoxDialog::bbClose()"<<std::endl);
- wxDialog::Destroy();
- }
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxDialog::~WxBlackBoxDialog()
- {
- }
- //=========================================================================
-
-
-
-
-
- //=========================================================================
- // WxBlackBoxFrame
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxFrame::WxBlackBoxFrame(WxBlackBox::Pointer box,
- wxWindow *parent,
- wxString title,
- wxSize size)
- : wxFrame( parent,
- -1,
- title,
- wxDefaultPosition,
- size,
- wxRESIZE_BORDER |
- wxSYSTEM_MENU |
- wxCLOSE_BOX |
- wxMAXIMIZE_BOX |
- wxMINIMIZE_BOX |
- wxCAPTION
- ),
- Parent(box)
- {
- bbtkDebugMessage("wx",9,"WxBlackBoxFrame::WxBlackBoxFrame("<<
- bbGetBlackBox()->bbGetFullName()<<","<<parent<<","
- <<title<<",size)"<<std::endl);
- // Insert the widget into the window
- wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
- box->bbCreateWidgetAndEventHandler(this);
- wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
- wxFrame* frame = (wxFrame*)this;
- sizer->Add( widget, 1, wxALL|wxGROW, 2);
- // frame->SetAutoLayout(true);
- frame->SetSizer(sizer);
- //frame->Fit();
- frame->Layout();
- }
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxFrame::~WxBlackBoxFrame()
- {
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxFrame::bbShow()
- {
- if (bbIsShown()) return;
- bbtkDebugMessage("wx",5,"WxBlackBoxFrame::bbShow("
- <<bbGetBlackBox()->bbGetFullName()<<")"<<std::endl);
- Parent::bbShow();
- wxFrame::Show();
- // This Update is ** MANDATORY **
- // to synchronize wxvtkRenderWindowInteractor objects
- // (force wx objects creation **NOW**)
-
-
-#if defined(_WIN32)
- wxFrame::Refresh();
-#endif
-
- wxFrame::Update();
- wxFrame::SetFocus();
- // if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow();
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxFrame::bbHide()
- {
- bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbHide()"<<std::endl);
- Parent::bbHide();
- wxFrame::Hide();
- if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnHide();
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxFrame::bbClose()
- {
- bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbClose()"<<std::endl);
- wxFrame::Close();
- }
- //=========================================================================
-
-
-
- //=========================================================================
- // WxBlackBoxWidgetEventHandler
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxWidgetEventHandler::
- WxBlackBoxWidgetEventHandler( WxBlackBox::Pointer box,
- wxWindow *widget )
- :
- mBox(box),
- mWindow(widget)
- {
- bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::WxBlackBoxWidgetEventHandler("<<mBox.lock()->bbGetFullName()<<")"<<std::endl);
-
- mBox.lock()->bbSetWidgetEventHandler(this);
-
- Connect ( mWindow->GetId(),
- wxEVT_DESTROY,
- (wxObjectEventFunction)
- (void (wxEvtHandler::*)(wxWindowDestroyEvent& c))
- &WxBlackBoxWidgetEventHandler::OnWindowDestroy );
-
- mWindow->PushEventHandler(this);
-
- }
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler()
- {
- if (mBox.expired()) return;
- bbtkDebugMessage("wx",9,
- "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() ["
- <<mBox.lock()->bbGetFullName()<<"]"<<std::endl);
- mBox.lock()->bbSetWidgetEventHandler(0);
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxWidgetEventHandler::OnWindowDestroy(wxWindowDestroyEvent&)
- {
- if (mBox.expired()) return;
- bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() ["
- <<mBox.lock()->bbGetFullName()<<"]"<<std::endl);
- mBox.lock()->bbSetOutputWidget(0);
- // LGSIGNAL
- // mBox.lock()->bbSetModifiedStatus();
- }
- //=========================================================================
+ //==================================================================
+ WxDialog::~WxDialog()
+ {
+ bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<<std::endl);
+ //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
+ // if (mBox.lock()) mBox.lock()->bbSetWindow(0);
+ // Wx::DecNbWindowsAlive();
+ }
+ //==================================================================
+ //==================================================================
+ void WxDialog::OnCloseWindow(wxCloseEvent& event)
+ {
+ bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
+ if (mBox.lock()) mBox.lock()->bbSetWindow(0);
+ Wx::DecNbWindowsAlive();
+ this->Destroy();
+ }
+ //==================================================================
- //=========================================================================
+ //=========================================================================
// WxBlackBox
//=========================================================================
//=========================================================================
void WxBlackBox::bbUserSetDefaultValues()
{
- bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
- bbSetWidgetEventHandler(0);
+ bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
+ bbmWindow = 0;
}
//=========================================================================
//=========================================================================
void WxBlackBox::bbUserFinalizeProcessing()
{
+ bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
+ bbDestroyWindow();
+ bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
}
//==================================================================
/// Callback for creating a Dialog window (modal)
void WxBlackBox::bbCreateDialogWindow()
{
- WxBlackBoxDialog* w = 0;
- w = new WxBlackBoxDialog( GetThisPointer<WxBlackBox>(),
- Wx::GetTopWindow(),
- std2wx( bbGetInputWinTitle()
- + " - bbtk (c) CREATIS LRMN"),
- wxSize( bbGetInputWinWidth() ,
- bbGetInputWinHeight() ));
- w->Show(true);
- }
+ bbtkBlackBoxDebugMessage("widget",3,
+ "==> WxBlackBox::bbCreateDialogWindow() - parent = "
+ <<Wx::GetTopWindow()
+ <<std::endl);
+ WxDialog* w = 0;
+ w = new WxDialog( GetThisPointer<WxBlackBox>(),
+ Wx::GetTopWindow(),
+ std2wx( bbGetInputWinTitle()
+ + " - bbtk (c) CREATIS-LRMN"),
+ wxSize( bbGetInputWinWidth() ,
+ bbGetInputWinHeight() ) );
+ w->Show(false);
+ // w->ShowModal();
+ }
+ //=========================================================================
+
//==================================================================
//==================================================================
/// Callback for creating a Frame window
void WxBlackBox::bbCreateFrameWindow()
{
- WxBlackBoxFrame* w = 0;
- w = new WxBlackBoxFrame( GetThisPointer<WxBlackBox>(),
- Wx::GetTopWindow(),
- std2wx( bbGetInputWinTitle()
- + " - bbtk (c) CREATIS LRMN"),
- wxSize( bbGetInputWinWidth() ,
- bbGetInputWinHeight() ) );
+ bbtkBlackBoxDebugMessage("widget",3,
+ "==> WxBlackBox::bbCreateFrameWindow() - parent = "
+ <<Wx::GetTopWindow()
+ <<std::endl);
+ WxFrame* w = 0;
+ w = new WxFrame( GetThisPointer<WxBlackBox>(),
+ Wx::GetTopWindow(),
+ std2wx( bbGetInputWinTitle()
+ + " - bbtk (c) CREATIS-LRMN"),
+ wxSize( bbGetInputWinWidth() ,
+ bbGetInputWinHeight() ) );
w->Show();
+ }
+ //==================================================================
+
+ //==================================================================
+ void WxBlackBox::bbSetWindow(wxWindow* w)
+ {
+ bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
+ if ((bbmWindow != 0)&&(w!=0))
+ {
+ std::cout << "ERRRRRRRROOOOR"<<std::endl;
+ }
+ bbmWindow = w;
}
//==================================================================
-
-
-
- //=========================================================================
- void WxBlackBox::bbCreateWidgetAndEventHandler(wxWindow* parent)
+ //==================================================================
+ void WxBlackBox::bbShowWindow()
{
- if (bbGetOutputWidget()==0)
+ if ((bbmWindow) && (!bbIsShown()))
{
- this->bbUserCreateWidget(parent);
- }
- // If Event Handler for the widget does not exist or is obsolete:
- // create it
- if (bbGetOutputWidget()!=0)
- {
- if (bbGetWidgetEventHandler()==0)
+ bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
+ <<std::endl);
+ if (bbGetInputWinDialog())
{
- bbtkDebugMessage("wx",3,
- "-> No widget event handler : creating one"
- <<std::endl);
- new WxBlackBoxWidgetEventHandler(GetThisPointer<WxBlackBox>(),
- bbGetOutputWidget());
+ ((WxDialog*)bbmWindow)->ShowModal();
}
- else if ( ! bbGetWidgetEventHandler()->IsHandlerOf
- ( bbGetOutputWidget() ) )
+ else
{
- bbtkDebugMessage("wx",3,
- "-> Obsolete widget event handler : re-creating one"
- <<std::endl);
- delete bbGetWidgetEventHandler();
- new WxBlackBoxWidgetEventHandler(GetThisPointer<WxBlackBox>(),
- bbGetOutputWidget());
- }
- // Sets the name of the wxWindow to the input WinTitle
- bbGetOutputWidget()->SetName(bbtk::std2wx(bbGetInputWinTitle()));
+ bbGetWindow()->Show();
+ bbSetShown(true);
+ }
+ }
+ }
+ //==================================================================
+
+ //==================================================================
+ void WxBlackBox::bbDestroyWindow()
+ {
+ bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
+ if (bbGetWindow()!=NULL)
+ {
+ // wxWindow* w = bbGetWindow();
+ //bbSetWindow(0);
+ // WE SHOULD DESTROY THE WINDOW WITH THE Close METHOD
+ // HOWEVER I
+ //w->Close(true);
+ //
+ delete bbGetWindow();
+ bbSetShown(false);
}
-
-
+ bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
+
}
- //=========================================================================
-
-
- //==================================================================
- // void WxBlackBox::InitWindowManagerIfNeeded() { Wx::
- void WxBlackBox::IncNbWindowsAlive() { Wx::IncNbWindowsAlive(); }
- void WxBlackBox::DecNbWindowsAlive() { Wx::DecNbWindowsAlive(); }
- int WxBlackBox::GetNbWindowsAlive() { return Wx::GetNbWindowsAlive(); }
- bool WxBlackBox::IsSomeWindowAlive() { return Wx::IsSomeWindowAlive(); }
-
- void WxBlackBox::IncNbWindowsShown() { Wx::IncNbWindowsShown(); }
- void WxBlackBox::DecNbWindowsShown() { Wx::DecNbWindowsShown(); }
- int WxBlackBox::GetNbWindowsShown() { return Wx::GetNbWindowsShown(); }
- bool WxBlackBox::IsSomeWindowShown() { return Wx::GetNbWindowsShown(); }
- //==================================================================
-
+ //==================================================================
+
+
}//namespace bbtk