X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.cxx;h=d543faa5df26920e6cfc82f2ea1ff5442b333860;hb=28479cf7460f053625842de2e8df98b2e3363ede;hp=763fcb501bcdc6fe8a3e7505d1594865c82f9c96;hpb=236a8e2fee9937c050e2d16c7222e1caa993f01c;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.cxx b/kernel/src/bbtkWxBlackBox.cxx index 763fcb5..d543faa 100644 --- a/kernel/src/bbtkWxBlackBox.cxx +++ b/kernel/src/bbtkWxBlackBox.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkWxBlackBox.cxx,v $ Language: C++ - Date: $Date: 2008/11/13 14:46:43 $ - Version: $Revision: 1.28 $ + Date: $Date: 2009/05/19 10:19:23 $ + Version: $Revision: 1.40 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -39,6 +39,8 @@ */ #include "bbtkWxBlackBox.h" +#include "bbtkBlackBoxOutputConnector.h" + //#include "bbtkWxContainerBlackBox.h" #include @@ -54,64 +56,6 @@ namespace bbtk - //========================================================================= - // WxBlackBoxWindow - //========================================================================= - - - - //========================================================================= - WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox::Pointer box) - : mBox(box), mShown(false) - { - bbtkDebugMessage("wx",9,"WxBlackBoxWindow::WxBlackBoxWindow("<< - mBox.lock()->bbGetFullName()<<")"<bbSetWindow(this); - Wx::IncNbWindowsAlive(); - } - //========================================================================= - - //========================================================================= - WxBlackBoxWindow::~WxBlackBoxWindow() - { - bbtkDebugMessage("wx",9,"WxBlackBoxWindow::~WxBlackBoxWindow() " - <bbSetWindow(0); - } - } - //========================================================================= - - - //========================================================================= - void WxBlackBoxWindow::bbShow() - { - if (bbIsShown()) return; - bbtkDebugMessage("wx",9,"WxBlackBoxWindow::bbShow()"<bbGetFullName()<<","<bbCreateWidgetAndEventHandler(this); wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget(); - widget->Reparent(this); sizer->Add( widget, 1, wxALL|wxEXPAND, 2); //SetAutoLayout(true); SetSizer(sizer); @@ -157,9 +102,10 @@ namespace bbtk if (bbIsShown()) return; bbtkDebugMessage("wx",5,"WxBlackBoxDialog::bbShow() [" <bbGetFullName()<<"]"<bbGetFullName()<<","<bbCreateWidgetAndEventHandler(this); wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget(); wxFrame* frame = (wxFrame*)this; - widget->Reparent(frame); sizer->Add( widget, 1, wxALL|wxGROW, 2); // frame->SetAutoLayout(true); frame->SetSizer(sizer); @@ -232,6 +180,8 @@ namespace bbtk //========================================================================= WxBlackBoxFrame::~WxBlackBoxFrame() { + bbtkDebugMessage("wx",9,"WxBlackBoxFrame::~WxBlackBoxFrame()" + <bbGetFullName()<<")"<bbUserOnShow(); + + wxFrame::Update(); + wxFrame::SetFocus(); + // if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow(); } //========================================================================= @@ -262,17 +212,17 @@ namespace bbtk void WxBlackBoxFrame::bbHide() { bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbHide()"<bbUserOnHide(); } //========================================================================= //========================================================================= - void WxBlackBoxFrame::bbClose() + void WxBlackBoxFrame::bbDestroy() { - bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbClose()"<GetId() ); + if (mBox.expired()) return; bbtkDebugMessage("wx",9, "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() [" <bbGetFullName()<<"]"<bbSetWidgetEventHandler(0); + + mBox.lock()->bbSetWidgetEventHandler(0); } //========================================================================= //========================================================================= void WxBlackBoxWidgetEventHandler::OnWindowDestroy(wxWindowDestroyEvent&) { + bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() []"<bbGetFullName()<<"]"<bbSetOutputWidget(0); - mBox.lock()->bbSetModifiedStatus(); } //========================================================================= @@ -341,233 +299,78 @@ namespace bbtk //========================================================================= //========================================================================= //========================================================================= - BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,AtomicBlackBox); + BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox); //========================================================================= //========================================================================= - void WxBlackBox::bbUserConstructor() + void WxBlackBox::bbUserSetDefaultValues() { - bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserConstructor()"< WxBlackBox::bbUserDestructor() ["<IsDead()) + bbtkDebugMessage("wx",9,"WxBlackBox::bbUserFinalizeProcessing()"<(), + Wx::GetTopWindow(), + std2wx( bbGetInputWinTitle() + + " - bbtk (c) CREATIS LRMN"), + wxSize( bbGetInputWinWidth() , + bbGetInputWinHeight() )); + w->Show(true); } - //========================================================================= + //================================================================== - //========================================================================= - /// Main processing method of the box. - void WxBlackBox::bbExecute(bool force) + //================================================================== + /// Callback for creating a Frame window + void WxBlackBox::bbCreateFrameWindow() { - bbtkDebugMessageInc("process",2, - "=> WxBlackBox::bbExecute("<<(int)force<<") [" - <second->GetConnectionVector().size() != 0 ) - { - bbtkDebugMessage("process",3, - "-> Output 'Widget' connected : transfering execution to parent" - <second->GetConnectionVector().front() //.lock() - ->GetBlackBoxTo()->bbExecute(force); - - } - // else call 'standard' BlackBox execution method - else - { - BlackBox::bbExecute(force); - } - // - - bbtkDebugMessageDec("process",2, - "<= WxBlackBox::bbExecute() [" - <(), + Wx::GetTopWindow(), + std2wx( bbGetInputWinTitle() + + " - bbtk (c) CREATIS LRMN"), + wxSize( bbGetInputWinWidth() , + bbGetInputWinHeight() ) ); + w->Show(); } - //========================================================================= - - - //========================================================================= - /// Main processing method of the box. - IOStatus WxBlackBox::bbBackwardUpdate( Connection::Pointer caller ) - { - bbtkDebugMessage("process",3, - "=> WxBlackBox::bbBackwardUpdate(" - <<(caller?caller->GetFullName():"0")<<") [" - <GetFullName():"0")<<") [" - <second->GetConnectionVector().size() != 0 ) - - { - BlackBox::Pointer to = - i->second->GetConnectionVector()[0]->GetBlackBoxTo(); - - if (caller) - { - bbtkDebugMessage("process",3, - "-> Output 'Widget' connected to '" - <bbGetFullName()<<"' - caller->to = '" - <GetBlackBoxTo()->bbGetFullName() - <<"'" - < Output 'Widget' connected to '" - <bbGetFullName()<<"'" - <GetBlackBoxTo() != to))&& - (!bbGetUpdateTransferedToParent())&& - (!to->bbGetExecuting())) - { - bbtkDebugMessage("process",3, - " ... Transfering update order to parent" - <second->GetConnectionVector().front() //.lock() - ->GetBlackBoxTo()->bbExecute(false); - } - else - { - bbSetUpdateTransferedToParent(false); - bbtkDebugMessage("process",3, - " ... No need to transfer to parent" - <GetBlackBoxFromOutput()!="Widget")) - ) - { - } - */ - // call 'standard' BlackBox execution method - if (!bbGetUpdateTransferedToParent()) - { - AtomicBlackBox::bbBackwardUpdate(caller); - } - - bbtkDebugMessageDec("process",3, - "<= WxBlackBox::bbBackwardUpdate() [" - <bbUserCreateWidget(); - this->bbUserProcess(); - bbShowWindow(); - // this->bbUserOnShow(); - } - //========================================================================= - //================================================================== - /// Specific methods for window creation during pipeline execution - /// Shows the window associated to the box - /// (called after bbProcess during bbExecute) - void WxBlackBox::bbShowWindow() + + //========================================================================= + void WxBlackBox::bbCreateWidgetAndEventHandler(wxWindow* parent) { - bbtkDebugMessageInc("wx",1,"=> WxBlackBox::bbShowWindow() [" - <bbUserCreateWidget(parent); + } + // If Event Handler for the widget does not exist or is obsolete: + // create it if (bbGetOutputWidget()!=0) { if (bbGetWidgetEventHandler()==0) @@ -591,148 +394,25 @@ namespace bbtk // Sets the name of the wxWindow to the input WinTitle bbGetOutputWidget()->SetName(bbtk::std2wx(bbGetInputWinTitle())); } - - // If the output 'Widget' is connected then it's gonna - // be captured by its parent window : nothing to do - if ( (*bbGetOutputConnectorMap().find("Widget")).second - ->GetConnectionVector().size() != 0 ) - { - - bbtkDebugMessage("wx",2, - "-> Output 'Widget' connected : nothing to do" - < Window already exists" - < Widget exists : creating the window" - <(), - bbGetWxParent(), - std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), - wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); - } - // Input WinDialog set to false : creating a Frame - else - { - bbtkDebugMessage("process",2, - " Input WinDialog set to false : creating a Frame" - <(), - bbGetWxParent(), - std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), - wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); - } - - } - // No window nor widget : error - else - { - bbtkError("WxBlackBox::bbShowWindow() [" - <IsShown()) - { - show->bbShow(); - } - else - { - bbtkDebugMessage("wx",2,"-> Already shown : nothing to do"< WxBlackBox::bbHideWindow() [" - <bbHide(); - - bbtkDebugMessageDec("wx",2,"<= WxBlackBox::bbHideWindow() [" - < WxBlackBox::bbCloseWindow() [" - <bbClose(); - - bbtkDebugMessageDec("wx",2,"<= WxBlackBox::bbCloseWindow() [" - <second->GetConnectionVector().size() != 0 ) - { - return boost::static_pointer_cast - (i->second->GetConnectionVector().front() //.lock() - ->GetBlackBoxTo())->bbGetContainingWindow(); - } - return 0; + } - //================================================================== - - - //================================================================== - wxWindow* WxBlackBox::bbGetWxParent() { return Wx::GetTopWindow(); } - //================================================================== + //========================================================================= //================================================================== - bool WxBlackBox::bbIsShown() - { - if (bbGetContainingWindow()!=0) - return bbGetContainingWindow()->bbIsShown(); - return false; - } + // 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