00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00040 #ifdef _USE_WXWIDGETS_
00041
00042 #include "bbwxColourSelectorButton.h"
00043 #include "bbwxPackage.h"
00044
00045 #include <wx/clrpicker.h>
00046
00047 namespace bbwx
00048 {
00049
00050 class wxColourPickerCtrlWidget :public wxPanel
00051 {
00052
00053 public:
00054 wxColourPickerCtrlWidget( ColourSelectorButton* box,
00055 wxWindow *parent,
00056 unsigned char cr,
00057 unsigned char cg,
00058 unsigned char cb );
00059
00060 ~wxColourPickerCtrlWidget();
00061 void OnColorChange(wxColourPickerEvent& e);
00062 void UpdateBox();
00063 private:
00064 wxColourPickerCtrl *picker;
00065 ColourSelectorButton *mBox;
00066 };
00067
00068
00069
00070 wxColourPickerCtrlWidget::wxColourPickerCtrlWidget( ColourSelectorButton* box,
00071 wxWindow *parent,
00072 unsigned char cr,
00073 unsigned char cg,
00074 unsigned char cb
00075 )
00076 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
00077 mBox(box)
00078 {
00079 bbtkDebugMessage("Process",9,"=> wxColourPickerCtrlWidget::wxColourPickerCtrlWidget"<<std::endl);
00080
00081 wxPanel * panel = this;
00082 picker = new wxColourPickerCtrl(panel,-1,
00083 wxColour(cr,cg,cb),
00084 wxDefaultPosition,
00085 wxDefaultSize,
00086 wxCLRP_USE_TEXTCTRL
00087 );
00088 picker->SetPickerCtrlGrowable(false);
00089 picker->SetTextCtrlGrowable(false);
00090
00091 Connect ( picker->GetId(),
00092 wxEVT_COMMAND_COLOURPICKER_CHANGED,
00093 wxColourPickerEventHandler( wxColourPickerCtrlWidget::OnColorChange ) );
00094
00095 bbtkDebugMessage("Process",9,"<= wxColourPickerCtrlWidget::wxColourPickerCtrlWidget"<<std::endl);
00096 wxFlexGridSizer *sizer = new wxFlexGridSizer(10);
00097 sizer -> AddGrowableRow(0);
00098 sizer -> Add( picker, 1, wxEXPAND, 0 );
00099 panel -> SetSizer(sizer);
00100 }
00101
00102 wxColourPickerCtrlWidget::~wxColourPickerCtrlWidget()
00103 {
00104 }
00105
00106
00107
00108 void wxColourPickerCtrlWidget::OnColorChange(wxColourPickerEvent& e)
00109 {
00110 UpdateBox();
00111 }
00112
00113
00114
00115 void wxColourPickerCtrlWidget::UpdateBox()
00116 {
00117 char col[100];
00118 wxColour c = picker->GetColour();
00119 sprintf(col,"%f %f %f",c.Red()/255.,c.Green()/255.,c.Blue()/255.);
00120
00121
00122
00123 ColourSelectorButton* b = (ColourSelectorButton*)mBox;
00124 b->bbSetOutputOut( col );
00125 b->bbSignalOutputModification("Out");
00126 }
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136 BBTK_BLACK_BOX_IMPLEMENTATION(ColourSelectorButton,bbtk::WxBlackBox);
00137 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wx,ColourSelectorButton);
00138
00139 void ColourSelectorButton::bbUserConstructor()
00140 {
00141
00142 bbSetInputIn("1 1 1");
00143
00144 bbSetOutputOut("1 1 1");
00145
00146 bbSetOutputWidget(0);
00147 }
00148
00149
00150 void ColourSelectorButton::Process()
00151 {
00152
00153 wxColourPickerCtrlWidget* w = ( wxColourPickerCtrlWidget* )bbGetOutputWidget();
00154 if (w)
00155 {
00156 w->UpdateBox();
00157 }
00158 else
00159 {
00160
00161
00162 bbSetOutputOut(bbGetInputIn());
00163 }
00164 }
00165
00166
00172 void ColourSelectorButton::CreateWidget(wxWindow* parent)
00173 {
00174
00175 float r,g,b;
00176 sscanf( bbGetInputIn().c_str(), "%f %f %f", &r, &g ,&b);
00177 unsigned char cr,cg,cb;
00178 cr = (unsigned char)(255.*r);
00179 cg = (unsigned char)(255.*g);
00180 cb = (unsigned char)(255.*b);
00181
00182 wxColourPickerCtrlWidget* w = new wxColourPickerCtrlWidget(this,
00183 parent,
00184 cr , cg , cb );
00185
00186 bbSetOutputWidget( w );
00187 }
00188
00189
00190 }
00191
00192 #endif // _USE_WXWIDGETS_
00193