From 401110cc0aaef718094bbb31daf18d1fc0de6d89 Mon Sep 17 00:00:00 2001 From: jean-pierre roux Date: Tue, 13 Jan 2009 09:57:11 +0000 Subject: [PATCH] Add CheckBox --- packages/wx/bbs/appli/exampleCheckBox.bbs | 23 +++ packages/wx/src/bbwxCheckBox.cxx | 208 ++++++++++++++++++++++ packages/wx/src/bbwxCheckBox.h | 105 +++++++++++ packages/wx/src/bbwxSlider.cxx | 9 +- 4 files changed, 339 insertions(+), 6 deletions(-) create mode 100644 packages/wx/bbs/appli/exampleCheckBox.bbs create mode 100644 packages/wx/src/bbwxCheckBox.cxx create mode 100644 packages/wx/src/bbwxCheckBox.h diff --git a/packages/wx/bbs/appli/exampleCheckBox.bbs b/packages/wx/bbs/appli/exampleCheckBox.bbs new file mode 100644 index 0000000..8c7e850 --- /dev/null +++ b/packages/wx/bbs/appli/exampleCheckBox.bbs @@ -0,0 +1,23 @@ +description "Simple use of wx::CheckBox widget" +author "jpr@creatis.insa-lyon.fr" +category "example" + +# Load the packages +load std +load wx + +# Create the Objects +new CheckBox chkbox +new OutputText text +new LayoutLine layout + +# Graphical pipeline +connect chkbox.Widget layout.Widget1 +connect text.Widget layout.Widget2 + +# Execution pipeline +connect chkbox.BoxChange text.BoxExecute +connect chkbox.Out text.In + +# Go! +exec layout diff --git a/packages/wx/src/bbwxCheckBox.cxx b/packages/wx/src/bbwxCheckBox.cxx new file mode 100644 index 0000000..33f6a61 --- /dev/null +++ b/packages/wx/src/bbwxCheckBox.cxx @@ -0,0 +1,208 @@ +/*========================================================================= + Program: bbtk + Module: $RCSfile: bbwxCheckBox.cxx,v $ + Language: C++ + Date: $Date: 2009/01/13 09:57:13 $ + Version: $Revision: 1.1 $ +=========================================================================*/ + +/* --------------------------------------------------------------------- + +* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale) +* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux +* +* 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. +* ------------------------------------------------------------------------ */ + +/** + * \file + * \brief Short description in one line + * + * Long + * description + * + */ + +#ifdef _USE_WXWIDGETS_ + +#include "bbwxCheckBox.h" +#include "bbwxPackage.h" +#include "bbtkUtilities.h" + +namespace bbwx +{ + //-------------------------------------------------------------------------- + // The widget created by the box + class CheckBoxWidget : public wxPanel + { + public: + /// Ctor with the two first params the parent window and the creator box + /// which must be passed to the WxBlackBoxWidget constructor. + /// The other params initialize the widget + CheckBoxWidget(CheckBox* box, wxWindow *parent, + wxString title, + bool value + ); + /// Dtor + ~CheckBoxWidget(); + /// Events callbacks + /// Called when the box is clicked + void OnCheckBoxClick(wxCommandEvent& event); + + // Accessors + bool GetValue() { return mwxCheckBox->GetValue(); } + void SetValue(bool val); + // Update the texts which display the min/max/current values of the slider + + private: + CheckBox* mBox; + wxCheckBox *mwxCheckBox; + + bool val; + }; + //------------------------------------------------------------------------ + //------------------------------------------------------------------------ + //------------------------------------------------------------------------ + + + + //------------------------------------------------------------------------- + CheckBoxWidget::CheckBoxWidget(CheckBox* box, wxWindow *parent, + wxString title, + bool value) + : + wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL), + mBox(box), + val(value) + { + wxPanel * panel = this; + int sizeX, sizeY; + + sizeX = sizeY = -1; // just to see JPR + + + + //--------------------------------------------------------------------- + // 1) Creation of the components of the widget + // Any top level sub-widget must have the panel returned by panel + // for parent + mwxCheckBox = new wxCheckBox( panel, + -1, + title, + wxDefaultPosition, + //wxSize(sizeX,sizeY), + wxDefaultSize, + wxCHK_2STATE | wxALIGN_RIGHT); + + mwxCheckBox->SetValue(value); + + // Connecting events to callbacks + Connect( mwxCheckBox->GetId(), + wxEVT_COMMAND_CHECKBOX_CLICKED, + (wxObjectEventFunction) + (void (wxPanel::*)(wxScrollEvent&)) + &CheckBoxWidget::OnCheckBoxClick); + + //--------------------------------------------------------------------- + + //--------------------------------------------------------------------- + // 2) Insertion of the components in the window + + // We use a FlexGridSizer + wxFlexGridSizer *sizer; + sizer = new wxFlexGridSizer(1); + // Insert the sizer in the main panel and refresh the layout + panel->SetSizer(sizer); + } + //------------------------------------------------------------------------- + + + //------------------------------------------------------------------------- + CheckBoxWidget::~CheckBoxWidget() + { + } + //------------------------------------------------------------------------- + + + //------------------------------------------------------------------------- + + + + //------------------------------------------------------------------------- + void CheckBoxWidget::OnCheckBoxClick(wxCommandEvent& event) + { + // When user clicks the box + // we update the output of the box + mBox->bbSetOutputOut( mwxCheckBox->GetValue() ); + mBox->bbSetInputIn( mwxCheckBox->GetValue() ); + // and signal that the output has changed + mBox->bbSignalOutputModification(std::string("Out")); + } + //------------------------------------------------------------------------- + + //------------------------------------------------------------------------- + + + //------------------------------------------------------------------------- + void CheckBoxWidget::SetValue(bool value) + { + this->val = value; + mwxCheckBox->SetValue(value); + } + //------------------------------------------------------------------------- + + + //-------------------------------------------------------------------------- + //------------------------------------------------------------------------- + // WxBlackBox implementation + //-------------------------------------------------------------------------- + //-------------------------------------------------------------------------- + + //-------------------------------------------------------------------------- + BBTK_BLACK_BOX_IMPLEMENTATION(CheckBox,bbtk::WxBlackBox); + BBTK_ADD_BLACK_BOX_TO_PACKAGE(wx,CheckBox); + + //-------------------------------------------------------------------------- + void CheckBox::bbUserConstructor() + { + bbSetInputIn(false); + bbSetOutputOut(false); + } + + //-------------------------------------------------------------------------- + void CheckBox::Process() + { + bbSetOutputOut( bbGetInputIn() ); + } + + void CheckBox::CreateWidget(wxWindow* parent) + { + + CheckBoxWidget *w = new CheckBoxWidget(this, + parent, + bbtk::std2wx( bbGetInputTitle() ), + bbGetInputIn() + ); + bbSetOutputWidget( w ); + } + + +} //namespace bbwx + +#endif // _USE_WXWIDGETS_ + + diff --git a/packages/wx/src/bbwxCheckBox.h b/packages/wx/src/bbwxCheckBox.h new file mode 100644 index 0000000..778016a --- /dev/null +++ b/packages/wx/src/bbwxCheckBox.h @@ -0,0 +1,105 @@ +/*========================================================================= + Program: bbtk + Module: $RCSfile: bbwxCheckBox.h,v $ + Language: C++ + Date: $Date: 2009/01/13 09:57:13 $ + Version: $Revision: 1.1 $ +=========================================================================*/ + +/* --------------------------------------------------------------------- + +* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale) +* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux +* +* 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. +* ------------------------------------------------------------------------ */ + +/** + * \file + * \brief Short description in one line + * + * Long description which + * can span multiple lines +*/ + +/** + * \class bbwx::CheckBox + * \brief + + * \class bbwx::CheckBoxWidget + * \brief + */ + +#ifdef _USE_WXWIDGETS_ + +// Prevents multiple inclusions : use symbols of the form +// __FILENAME_INCLUDED__ +// where FILENAME must be replaced by the actual file name +#ifndef __bbwxCheckBox_h_INCLUDED__ +#define __bbwxCheckBox_h_INCLUDED__ + +// Include wxBlackBox definition +#include "bbtkWxBlackBox.h" + +#include "bbwx_EXPORT.h" + + +// Namespace of the package "wx" is "bbwx" +// Namespace associated to packages should be of the form : +// bbPACKAGENAME +namespace bbwx +{ + + //------------------------------------------------------------------------ + // The black box + class bbwx_EXPORT CheckBox : public bbtk::WxBlackBox + { + + BBTK_BLACK_BOX_INTERFACE(CheckBox,bbtk::WxBlackBox); + BBTK_DECLARE_INPUT(In,bool); + BBTK_DECLARE_INPUT(Title,std::string); + BBTK_DECLARE_OUTPUT(Out,bool); + BBTK_PROCESS(Process); + BBTK_CREATE_WIDGET(CreateWidget); + void Process(); + void CreateWidget(wxWindow*); + + protected: + virtual void bbUserConstructor(); + }; + //================================================================= + + //================================================================= + // the black box description + BBTK_BEGIN_DESCRIBE_BLACK_BOX(CheckBox,bbtk::WxBlackBox); + BBTK_NAME("CheckBox"); + BBTK_AUTHOR("jpr@creatis.insa-lyon.fr"); + // Already inserted for any WxBlackBox BBTK_CATEGORY("widget"); + BBTK_DESCRIPTION("CheckBox widget (wxCheckBox)"); + BBTK_INPUT(CheckBox, In, "Initial value of the CheckBox (default false)",bool, ""); + BBTK_INPUT(CheckBox, Title,"Title shown above the CheckBox (default '') ", std::string,""); + BBTK_OUTPUT(CheckBox,Out, "Current value of the CheckBox", bool, ""); + BBTK_END_DESCRIBE_BLACK_BOX(CheckBox); + //================================================================= + + + +} //namespace bbwx + +#endif //__bbtkwxCheckBox_h_INCLUDED__ + +#endif //_USE_WXWIDGETS_ diff --git a/packages/wx/src/bbwxSlider.cxx b/packages/wx/src/bbwxSlider.cxx index 3e5dd55..c4050e2 100644 --- a/packages/wx/src/bbwxSlider.cxx +++ b/packages/wx/src/bbwxSlider.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbwxSlider.cxx,v $ Language: C++ - Date: $Date: 2009/01/08 10:18:39 $ - Version: $Revision: 1.17 $ + Date: $Date: 2009/01/13 09:57:13 $ + Version: $Revision: 1.18 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -61,7 +61,7 @@ namespace bbwx int vmin, int vmax, int value, - int track); + int track); /// Dtor ~SliderWidget(); /// Events callbacks @@ -161,21 +161,18 @@ namespace bbwx // Connecting events to callbacks Connect( mwxSlider->GetId(), wxEVT_SCROLL_THUMBRELEASE, - (wxObjectEventFunction) (void (wxPanel::*)(wxScrollEvent&)) &SliderWidget::OnSliderRelease ); Connect( mwxSlider->GetId(), wxEVT_SCROLL_THUMBTRACK, - (wxObjectEventFunction) (void (wxPanel::*)(wxScrollEvent&)) &SliderWidget::OnSliderTrack ); Connect( mwxSlider->GetId(), wxEVT_SCROLL_CHANGED, - (wxObjectEventFunction) (void (wxPanel::*)(wxScrollEvent&)) &SliderWidget::OnSliderTrack ); -- 2.45.1