+/*=========================================================================
+
+ Program: bbtk
+ Module: $RCSfile: bbwxCommandButton.cxx,v $
+ Language: C++
+ Date: $Date: 2008/02/15 12:47:17 $
+ Version: $Revision: 1.1 $
+
+ 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& )
+ {
+ 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
+ bbtk::Interpreter::mGlobalInterpreter->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<double> 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_
+