]> Creatis software - bbtk.git/blob - packages/wx/src/bbwxCommandButton.cxx
BUG slash
[bbtk.git] / packages / wx / src / bbwxCommandButton.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbwxCommandButton.cxx,v $
5   Language:  C++
6   Date:      $Date: 2008/03/10 06:24:13 $
7   Version:   $Revision: 1.3 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de 
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even 
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18 /**
19  *  \file 
20  *  \brief 
21  */
22
23
24 #ifdef _USE_WXWIDGETS_
25
26
27 #include "bbwxCommandButton.h"
28 #include "bbwxPackage.h"
29 #include "bbtkInterpreter.h"
30
31
32
33 namespace bbwx
34 {
35   BBTK_ADD_BLACK_BOX_TO_PACKAGE(wx,CommandButton);
36   
37   CommandButtonWidget::CommandButtonWidget(CommandButton* box,
38                                            wxWindow *parent, 
39                                            wxString title )
40     : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
41       mBox(box)
42   { 
43
44     wxPanel *panel      = this;
45
46     mwxCommandButton = new wxButton( panel, -1, title);
47     Connect( mwxCommandButton->GetId(),   wxEVT_COMMAND_BUTTON_CLICKED , 
48              (wxObjectEventFunction) 
49              (void (wxPanel::*)(wxEvent&))
50              &CommandButtonWidget::OnCommandButton ); 
51     
52     wxFlexGridSizer *sizer      = new wxFlexGridSizer(1);
53     sizer -> Add( mwxCommandButton,1,wxGROW ); 
54     sizer       -> AddGrowableCol(0);
55     
56     panel       -> SetSizer(sizer);
57     panel       -> SetAutoLayout(true);
58     panel       -> Layout();
59     
60   }
61   
62   CommandButtonWidget::~CommandButtonWidget()
63   {
64   }
65   
66   
67   void CommandButtonWidget::OnCommandButton( wxEvent& )
68   {
69     // Look for the interpreter
70       bbtk::Interpreter* I = 0;
71       if (mBox->bbGetParent() != 0) 
72         {
73           bbtk::Factory* f = 
74             ((bbtk::ComplexBlackBoxDescriptor*)mBox->bbGetParent()
75              ->bbGetDescriptor())->GetFactory();
76           if ((f != 0)&&
77               (f->GetExecuter()))
78             {
79               I = f->GetExecuter()->GetInterpreter();
80             }
81         }
82       if (I==0) 
83         {
84           //      bbtkError("ExecBbiCommand::DoProcess() : could not find interpreter");
85           I = new bbtk::Interpreter();
86         }
87       
88       std::string commandstr(mBox->bbGetInputIn());
89     
90     //  bbtk::Interpreter::mGlobalInterpreter->InterpretLine( commandstr );
91     int i;
92     bool ok=true;
93     int pos1=0,pos2;
94     pos2 = commandstr.find(";",pos1);
95     std::string ccommand;
96     while (ok==true)
97       {
98         if (pos2==-1) 
99           {
100             ok=false;
101             ccommand=commandstr.substr(pos1,commandstr.length()-pos1 );
102           } 
103         else 
104           {
105             ccommand=commandstr.substr(pos1,pos2-pos1);
106           }
107         for ( i=0 ; i < ccommand.length() ; i++)
108           {
109             if (ccommand[i]==39)
110               {
111                 ccommand[i]=34;
112               }
113           }             
114         bool insideComment = false; // for multiline comment
115         I->InterpretLine( ccommand, insideComment );
116         pos1=pos2+1;
117         pos2 = commandstr.find(";",pos2+1);
118         
119       }
120    
121     mBox->UpdateLabel();
122     mBox->UpdateColour();
123     mBox->bbSignalOutputModification();
124   }
125
126   
127   //--------------------------------------------------------------------------
128   
129   void CommandButtonWidget::SetLabel(wxString title)
130   {
131     mwxCommandButton->SetLabel(title);
132   }
133   //--------------------------------------------------------------------------
134   
135   void CommandButtonWidget::SetColour(wxColour color)
136   {
137     mwxCommandButton->SetBackgroundColour(color);
138   }
139
140
141
142   //--------------------------------------------------------------------------
143   //-------------------------------------------------------------------------
144   //--------------------------------------------------------------------------
145   //-------------------------------------------------------------------------- 
146
147
148   BBTK_USER_BLACK_BOX_IMPLEMENTATION(CommandButton,bbtk::WxBlackBox);
149
150   void CommandButton::bbUserConstructor() 
151   { 
152     bbSetInputIn("");
153     bbSetInputLabel("");
154     std::vector<double> lstColour;
155     lstColour.push_back(-1);
156     lstColour.push_back(-1);
157     lstColour.push_back(-1);
158     bbSetInputColour(lstColour);
159   }
160   
161   
162   void CommandButton::Process() 
163   { 
164     UpdateColour();
165     UpdateLabel();
166   }
167   
168   void CommandButton::UpdateColour()
169   {
170     CommandButtonWidget* wxwidget = (CommandButtonWidget*)bbGetOutputWidget();
171     if  ( (bbGetInputColour()[0]==-1) && 
172           (bbGetInputColour()[1]==-1) &&
173           (bbGetInputColour()[2]==-1) )
174       {
175         wxwidget->SetColour( wxwidget->GetParent()->GetBackgroundColour() );
176       } 
177     else 
178       {
179       int r=(int) (255*bbGetInputColour()[0]);
180       int g=(int) (255*bbGetInputColour()[1]);
181       int b=(int) (255*bbGetInputColour()[2]);
182       wxwidget->SetColour( wxColour(r,g,b) );
183     }
184
185   } 
186   void CommandButton::UpdateLabel()
187   {
188     CommandButtonWidget* wxwidget = (CommandButtonWidget*)bbGetOutputWidget();
189     wxwidget->SetLabel( bbtk::std2wx( bbGetInputLabel() ) );
190   }   
191  
192   /** 
193    * \brief  Create wxWidget .  
194    * 
195    * 
196    */  
197   void CommandButton::CreateWidget() 
198   { 
199     bbSetOutputWidget
200       ( new CommandButtonWidget ( this, bbGetWxParent(), 
201                                   bbtk::std2wx(bbGetInputLabel()) ) );
202     UpdateColour();
203   } 
204  
205  
206 }  //namespace bbwx 
207  
208 #endif  // _USE_WXWIDGETS_ 
209