/*========================================================================= Program: bbtk Module: $RCSfile: bbwxCommandButton.cxx,v $ Language: C++ Date: $Date: 2008/03/19 12:26:09 $ Version: $Revision: 1.4 $ 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. =========================================================================*/ /** * \file * \brief */ #ifdef _USE_WXWIDGETS_ #include "bbwxCommandButton.h" #include "bbwxPackage.h" #include "bbtkInterpreter.h" namespace bbwx { BBTK_ADD_BLACK_BOX_TO_PACKAGE(wx,CommandButton); CommandButtonWidget::CommandButtonWidget(CommandButton* box, wxWindow *parent, wxString title ) : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL), mBox(box) { wxPanel *panel = this; mwxCommandButton = new wxButton( panel, -1, title); Connect( mwxCommandButton->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) (void (wxPanel::*)(wxEvent&)) &CommandButtonWidget::OnCommandButton ); wxFlexGridSizer *sizer = new wxFlexGridSizer(1); sizer -> Add( mwxCommandButton,1,wxGROW ); sizer -> AddGrowableCol(0); panel -> SetSizer(sizer); panel -> SetAutoLayout(true); panel -> Layout(); } CommandButtonWidget::~CommandButtonWidget() { } void CommandButtonWidget::OnCommandButton( wxEvent& ) { // Look for the interpreter bbtk::Interpreter* I = 0; if (mBox->bbGetParent() != 0) { bbtk::Factory* f = ((bbtk::ComplexBlackBoxDescriptor*)mBox->bbGetParent() ->bbGetDescriptor())->GetFactory(); if ((f != 0)&& (f->GetExecuter())) { I = f->GetExecuter()->GetInterpreter(); } } if (I==0) { // bbtkError("ExecBbiCommand::DoProcess() : could not find interpreter"); I = new bbtk::Interpreter(); } std::string commandstr(mBox->bbGetInputIn()); // bbtk::Interpreter::mGlobalInterpreter->InterpretLine( commandstr ); int i; bool ok=true; int pos1=0,pos2; pos2 = commandstr.find(";",pos1); std::string ccommand; while (ok==true) { if (pos2==-1) { ok=false; ccommand=commandstr.substr(pos1,commandstr.length()-pos1 ); } else { ccommand=commandstr.substr(pos1,pos2-pos1); } for ( i=0 ; i < ccommand.length() ; i++) { if (ccommand[i]==39) // ' { ccommand[i]=34; // " } } bool insideComment = false; // for multiline comment I->InterpretLine( ccommand, insideComment ); pos1=pos2+1; pos2 = commandstr.find(";",pos2+1); } mBox->UpdateLabel(); mBox->UpdateColour(); mBox->bbSignalOutputModification(); } //-------------------------------------------------------------------------- void CommandButtonWidget::SetLabel(wxString title) { mwxCommandButton->SetLabel(title); } //-------------------------------------------------------------------------- void CommandButtonWidget::SetColour(wxColour color) { mwxCommandButton->SetBackgroundColour(color); } //-------------------------------------------------------------------------- //------------------------------------------------------------------------- //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- BBTK_USER_BLACK_BOX_IMPLEMENTATION(CommandButton,bbtk::WxBlackBox); void CommandButton::bbUserConstructor() { bbSetInputIn(""); bbSetInputLabel(""); std::vector lstColour; lstColour.push_back(-1); lstColour.push_back(-1); lstColour.push_back(-1); bbSetInputColour(lstColour); } void CommandButton::Process() { UpdateColour(); UpdateLabel(); } void CommandButton::UpdateColour() { CommandButtonWidget* wxwidget = (CommandButtonWidget*)bbGetOutputWidget(); if ( (bbGetInputColour()[0]==-1) && (bbGetInputColour()[1]==-1) && (bbGetInputColour()[2]==-1) ) { wxwidget->SetColour( wxwidget->GetParent()->GetBackgroundColour() ); } else { int r=(int) (255*bbGetInputColour()[0]); int g=(int) (255*bbGetInputColour()[1]); int b=(int) (255*bbGetInputColour()[2]); wxwidget->SetColour( wxColour(r,g,b) ); } } void CommandButton::UpdateLabel() { CommandButtonWidget* wxwidget = (CommandButtonWidget*)bbGetOutputWidget(); wxwidget->SetLabel( bbtk::std2wx( bbGetInputLabel() ) ); } /** * \brief Create wxWidget . * * */ void CommandButton::CreateWidget() { bbSetOutputWidget ( new CommandButtonWidget ( this, bbGetWxParent(), bbtk::std2wx(bbGetInputLabel()) ) ); UpdateColour(); } } //namespace bbwx #endif // _USE_WXWIDGETS_