X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.cxx;h=a9b4f0b6215b75dae564b8362599d31626395add;hb=85be7d05390ee84a66308c17c740565456ce15d2;hp=954880d30f6bce4d6f55007d6b819ccfb73ca9aa;hpb=4925f2a1f40f97ab30cec57dd1edbd95b7a0e29c;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.cxx b/kernel/src/bbtkWxBlackBox.cxx index 954880d..a9b4f0b 100644 --- a/kernel/src/bbtkWxBlackBox.cxx +++ b/kernel/src/bbtkWxBlackBox.cxx @@ -1,24 +1,41 @@ +/* + # --------------------------------------------------------------------- + # + # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image + # pour la SantÈ) + # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton + # Previous Authors : Laurent Guigues, Jean-Pierre Roux + # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil + # + # This software is governed by the CeCILL-B license under French law and + # abiding by the rules of distribution of free software. You can use, + # modify and/ or redistribute the software under the terms of the CeCILL-B + # license as circulated by CEA, CNRS and INRIA at the following URL + # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + # or in the file LICENSE.txt. + # + # As a counterpart to the access to the source code and rights to copy, + # modify and redistribute granted by the license, users are provided only + # with a limited warranty and the software's author, the holder of the + # economic rights, and the successive licensors have only limited + # liability. + # + # The fact that you are presently reading this means that you have had + # knowledge of the CeCILL-B license and that you accept its terms. + # ------------------------------------------------------------------------ */ + + /*========================================================================= - Program: bbtk Module: $RCSfile: bbtkWxBlackBox.cxx,v $ Language: C++ - Date: $Date: 2008/02/06 11:31:39 $ - Version: $Revision: 1.5 $ - - Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de - l'Image). All rights reserved. See Doc/License.txt or - http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - + Date: $Date: 2012/11/16 08:49:01 $ + Version: $Revision: 1.45 $ =========================================================================*/ -#ifdef _USE_WXWIDGETS_ +#ifdef _USE_WXWIDGETS_ /** * \file @@ -26,147 +43,148 @@ */ #include "bbtkWxBlackBox.h" +#include "bbtkBlackBoxOutputConnector.h" + //#include "bbtkWxContainerBlackBox.h" #include //#include "bbtkData.h" //#include "bbtkFactory.h" - - - namespace bbtk { - //========================================================================= - wxWindow* WxBlackBox::bbGlobalGetTopWindow() - { - return bbmgTopWindow; - } + // WxFrame //========================================================================= - //========================================================================= - void WxBlackBox::bbGlobalSetTopWindow(wxWindow* w) + //================================================================== + class WxFrame : public wxFrame { - if ( bbmgTopWindow ) - { - bbtkGlobalError("WxBlackBox::bbGlobalSetTopWindow : top window already set !"); - } - bbmgTopWindow = w; - } - //========================================================================= - - - //========================================================================= - void WxBlackBox::bbGlobalDecNbWindowsAlive() - { - bbmgNbWindowsAlive--; - /* - if ( (bbmgNbWindowsAlive==0) && - bbmgTopWindow && (!bbmgTopWindow->IsShown())) - { - bbmgTopWindow->Close(); - } - */ - } - //========================================================================= - - //========================================================================= - void WxBlackBox::bbGlobalDecNbWindowsShown() - { - bbmgNbWindowsShown--; - if ( (bbmgNbWindowsShown==0) && - bbmgTopWindow && (!bbmgTopWindow->IsShown())) - { - bbmgTopWindow->Close(); - } - } - //========================================================================= - - //========================================================================= - // Static members - wxWindow* WxBlackBox::bbmgTopWindow =0; - int WxBlackBox::bbmgNbWindowsAlive = 0; - int WxBlackBox::bbmgNbWindowsShown = 0; - //========================================================================= - - - + public: + WxFrame(WxBlackBox::Pointer b, + wxWindow *parent, + wxString title, + wxSize size); + ~WxFrame(); + void OnCloseWindow(wxCloseEvent& event); - //========================================================================= - // WxBlackBoxWindow - //========================================================================= - - - - //========================================================================= - WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox* box) - : mBox(box), mShown(false) - { - bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::WxBlackBoxWindow("<< - mBox->bbGetFullName()<<")"<bbSetWindow(this); - WxBlackBox::bbGlobalIncNbWindowsAlive(); - bbtkDebugMessage("Wx",9," -> Number of windows alive = " - <GetName())<bbGetName()<<"] WxFrame()" + <bbSetWindow(this); + // Insert the widget into the window + wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); + std::cout<<"------------------------------------USER CREATE WIDGET pre DELETE ME bbtkWxBlackBox.cxx--"<bbUserCreateWidget(this); + std::cout<<"------------------------------------USER CREATE WIDGET post DELETE ME bbtkWxBlackBox.cxx--"<bbGetOutputWidget(); + sizer->Add( widget, 1, wxALL|wxGROW, 2); + SetSizer(sizer); + Layout(); } - //========================================================================= + //================================================================== + //================================================================== + WxFrame::~WxFrame() + { + if (mBox.lock()) + bbtkDebugMessage("widget",9,"["<bbGetName() + <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()" + <bbSetWindow(0); + Wx::DecNbWindowsAlive(); + } + //================================================================== + //================================================================== + void WxFrame::OnCloseWindow(wxCloseEvent& event) + { + if (mBox.lock()) + bbtkDebugMessage("widget",9,"["<bbGetName() + <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<bbSetWindow(0); + Wx::DecNbWindowsAlive(); + + bbtkDebugMessage("widget",9, + "$$$$$$$$$$$$$$$ Destroy !!!"<Destroy(); + } + //================================================================== + //====================================================SetWin===================== + // WxDialog //========================================================================= - WxBlackBoxWindow::~WxBlackBoxWindow() - { - bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::~WxBlackBoxWindow() ["<< - mBox->bbGetFullName()<<"]"<bbSetWindow(0); - WxBlackBox::bbGlobalDecNbWindowsAlive(); - bbtkDebugMessage("Wx",9," -> Number of windows alive = " - <bbGetFullName()<<"]"< Number of windows shown = " - <bbGetFullName()<<"]"< Number of windows shown = " - <bbGetFullName()<<","<bbGetName()<<"]" + <bbSetWindow(this); // Insert the widget into the window wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); - wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget(); - widget->Reparent(this); - 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() - { - bbtkDebugMessage("Wx",5,"WxBlackBoxDialog::bbShow() [" - <bbGetFullName()<<"]"<bbGetFullName()<<"]"<bbGetFullName()<<","<bbGetOutputWidget(); - wxFrame* frame = (wxFrame*)this; - widget->Reparent(frame); - sizer->Add( widget, 1, wxALL|wxGROW, 2); - // frame->SetAutoLayout(true); - frame->SetSizer(sizer); - //frame->Fit(); - frame->Layout(); - } - //========================================================================= - - //========================================================================= - WxBlackBoxFrame::~WxBlackBoxFrame() - { - } - //========================================================================= - - //========================================================================= - void WxBlackBoxFrame::bbShow() - { - bbtkDebugMessage("Wx",5,"WxBlackBoxFrame::bbShow(" - <bbGetFullName()<<")"<bbGetFullName()<<"]"<bbGetFullName()<<","<bbGetFullName()<<")"<ShowModal(); - // For Windows : - mWrapped->SetReturnCode( i ); - } - //========================================================================= - - //========================================================================= - void WxBlackBoxDialogWrapper::bbHide() - { - bbtkDebugMessage("Wx",9,"WxBlackBoxDialogWrapper::bbHide() ["<< - bbGetBlackBox()->bbGetFullName()<<"]"<Hide(); - } - //========================================================================= - - */ + //================================================================== + //================================================================== + WxDialog::~WxDialog() + { + bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<bbSetWindow(0); + // Wx::DecNbWindowsAlive(); + } + //================================================================== + //================================================================== + void WxDialog::OnCloseWindow(wxCloseEvent& event) + { + bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<bbSetWindow(0); + Wx::DecNbWindowsAlive(); + this->Destroy(); + } + //================================================================== - /* - //========================================================================= - // WxBlackBoxWidget - //========================================================================= - //========================================================================= - WxBlackBoxWidget::WxBlackBoxWidget( WxBlackBox* box) - : mBox(box) - { - bbtkDebugMessage("Wx",9,"WxBlackBoxWidget::WxBlackBoxWidget("<bbGetFullName()<<")"<bbSetWidget(this); - } + //========================================================================= + // WxBlackBox //========================================================================= //========================================================================= - WxBlackBoxWidget::~WxBlackBoxWidget() - { - bbtkDebugMessage("Wx",9,"WxBlackBoxWidget::~WxBlackBoxWidget("<bbGetFullName()<<")"<bbSetWidget(0); - //bbtkDebugMessage("Wx",9,"EO WxBlackBoxWidget::~WxBlackBoxWidget("<bbGetFullName()<<")"<bbGetFullName()<<")"<bbSetWidgetEventHandler(this); - - Connect ( mWindow->GetId(), - wxEVT_DESTROY, - (wxObjectEventFunction) - (void (wxEvtHandler::*)(wxWindowDestroyEvent& c)) - &WxBlackBoxWidgetEventHandler::OnWindowDestroy ); - - mWindow->PushEventHandler(this); - - } + BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox); //========================================================================= - + //========================================================================= - WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() + void WxBlackBox::bbUserSetDefaultValues() { - bbtkDebugMessage("Wx",9, - "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler(" - <bbGetFullName()<<")"<bbSetWidgetEventHandler(0); + bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<bbGetFullName()<<"]"<bbSetOutputWidget(0); - mBox->bbSetModifiedStatus(); - //mDead = true; - //delete this; } - //========================================================================= + //================================================================== - - - - - - - /* //========================================================================= - wxWindow* WxParentToChildData::GetWindowInWhichToInsert( const BlackBox* b) - const + void WxBlackBox::bbUserFinalizeProcessing() { - bbtkDebugMessageInc("Kernel",9,"WxParentToChildData::GetWindowInWhichToInsert("<bbGetFullName()<<")"<bbGetInputConnectorMap().find("WinParent"); - if (i==b->bbGetInputConnectorMap().end()) - { - bbtkError("WxParentToChildData::GetWindowInWhichToInsert : the box " - <bbGetFullName() - <<" does not have any 'Parent' input ?!?"); - } - Connection* c = i->second->GetConnection(); - if (!c) - { - bbtkDebugMessage("Kernel",9, - "-> The input 'Parent' of the box " - <bbGetFullName() - <<" is not connected."<::const_iterator j - = mConnectionToWindowMap.find(c); - - if (j==mConnectionToWindowMap.end()) - { - bbtkError("WxParentToChildData::GetWindowInWhichToInsert(" - <bbGetFullName() - <<") no window provided by parent ?!?"); - } - - bbtkDebugDecTab("Kernel",9); - return j->second; + bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"< WxBlackBox::bbCreateDialogWindow() - parent = " + <(), + Wx::GetTopWindow(), + std2wx( bbGetInputWinTitle() + + " - bbtk (c) CREATIS"), + wxSize( bbGetInputWinWidth() , + bbGetInputWinHeight() ) ); + w->Show(false); + // w->ShowModal(); + } + //========================================================================= + + //================================================================== + + //================================================================== + /// Callback for creating a Frame window + void WxBlackBox::bbCreateFrameWindow() { - bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserCopyConstructor()" + std::cout<<"--/////////////*****////////////////--JFGA Testing bbCreateFrameWindow Starting ....."< WxBlackBox::bbCreateFrameWindow() - parent = " + <(), + Wx::GetTopWindow(), + std2wx( bbGetInputWinTitle() + + " - bbtk (c) CREATIS"), + wxSize( bbGetInputWinWidth() , + bbGetInputWinHeight() ) ); + std::cout<<"--/////////////*****////////////////!!--JFGA Testing bbCreateFrameWindow Done ........"<Show(); + } + + //================================================================== + + //================================================================== + void WxBlackBox::bbSetWindow(wxWindow* w) { - bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserDestructor()"<IsDead()) - { - bbtkDebugMessage("Wx",9,"WxBlackBox::bbGetWidget() ["<< - bbGetFullName()<<"] : Widget is dead : deleting it" - < WxBlackBox::bbSetWindow("<GetName())< WxBlackBox::bbShowWindow() [" - < No widget event handler : creating one" - <IsHandlerOf - ( bbGetOutputWidget() ) ) - { - bbtkDebugMessage("Process",3, - "-> Obsolete widget event handler : re-creating one" - <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("Process",2, - "-> Output 'Widget' connected : nothing to do" - < Window already exists" + bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()" < Widget exists : creating the window" - <ShowModal(); } - // Input WinDialog set to false : creating a Frame - else + else { - bbtkDebugMessage("Process",2, - " Input WinDialog set to false : creating a Frame" - <IsShown()) - { - show->bbShow(); + std::cout<<"--!!--JFGA Testing bbShowWindow "<Show(); + bbSetShown(true); + } } - else - { - bbtkDebugMessage("Process",2,"-> Already shown : nothing to do"< WxBlackBox::bbHideWindow() [" - <bbHide(); + bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<Close(true); + // + delete bbGetWindow(); + bbSetShown(false); + } + bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<