* @param part Part of Content that the property is in (e.g. &Content::video)
* @param model_getter Function on the Content to get the value.
* @param model_setter Function on the Content to set the value.
+ * @param view_changed Function called when the view has changed; useful for linking controls.
* @param view_to_model Function to convert a view value to a model value.
* @param model_to_view Function to convert a model value to a view value.
*/
boost::function<boost::shared_ptr<S> (Content*)> part,
boost::function<U (S*)> model_getter,
boost::function<void (S*, U)> model_setter,
+ boost::function<void ()> view_changed,
boost::function<U (V)> view_to_model,
boost::function<V (U)> model_to_view
)
, _part (part)
, _model_getter (model_getter)
, _model_setter (model_setter)
+ , _view_changed (view_changed)
, _view_to_model (view_to_model)
, _model_to_view (model_to_view)
, _ignore_model_changes (false)
update_from_model ();
for (typename List::iterator i = _content.begin(); i != _content.end(); ++i) {
- _connections.push_back ((*i)->Changed.connect (boost::bind (&ContentWidget::model_changed, this, _2)));
+#if BOOST_VERSION >= 106100
+ _connections.push_back ((*i)->Change.connect (boost::bind (&ContentWidget::model_changed, this, boost::placeholders::_1, boost::placeholders::_3)));
+#else
+ _connections.push_back ((*i)->Change.connect (boost::bind (&ContentWidget::model_changed, this, _1, _3)));
+#endif
}
}
for (size_t i = 0; i < _content.size(); ++i) {
boost::bind (_model_setter, _part (_content[i].get()).get(), _view_to_model (wx_get (_wrapped))) ();
}
+ if (_view_changed) {
+ _view_changed ();
+ }
_ignore_model_changes = false;
}
+ void show (bool s)
+ {
+ _wrapped->Show (s);
+ }
+
private:
void set_single ()
{
- if (_wrapped->IsShown ()) {
+ if (_wrapped->IsShown() || !_sizer) {
return;
}
void set_multiple ()
{
- if (_button->IsShown ()) {
+ if (_button->IsShown() || !_sizer) {
return;
}
}
}
- void model_changed (int property)
+ void model_changed (ChangeType type, int property)
{
- if (property == _property && !_ignore_model_changes) {
+ if (type == CHANGE_TYPE_DONE && property == _property && !_ignore_model_changes) {
update_from_model ();
}
}
boost::function<boost::shared_ptr<S> (Content *)> _part;
boost::function<U (S*)> _model_getter;
boost::function<void (S*, U)> _model_setter;
+ boost::function<void ()> _view_changed;
boost::function<U (V)> _view_to_model;
boost::function<V (U)> _model_to_view;
std::list<boost::signals2::connection> _connections;
int property,
boost::function<boost::shared_ptr<S> (Content *)> part,
boost::function<int (S*)> getter,
- boost::function<void (S*, int)> setter
+ boost::function<void (S*, int)> setter,
+ boost::function<void ()> view_changed = boost::function<void ()>()
)
: ContentWidget<S, wxSpinCtrl, int, int> (
parent,
property,
part,
getter, setter,
+ view_changed,
&caster<int, int>,
&caster<int, int>
)
int property,
boost::function<boost::shared_ptr<S> (Content *)> part,
boost::function<double (S*)> getter,
- boost::function<void (S*, double)> setter
+ boost::function<void (S*, double)> setter,
+ boost::function<void ()> view_changed = boost::function<void ()>()
)
: ContentWidget<S, wxSpinCtrlDouble, double, double> (
parent,
property,
part,
getter, setter,
+ view_changed,
&caster<double, double>,
&caster<double, double>
)
boost::function<U (S*)> getter,
boost::function<void (S*, U)> setter,
boost::function<U (int)> view_to_model,
- boost::function<int (U)> model_to_view
+ boost::function<int (U)> model_to_view,
+ boost::function<void ()> view_changed = boost::function<void()>()
)
: ContentWidget<S, wxChoice, U, int> (
parent,
part,
getter,
setter,
+ view_changed,
view_to_model,
model_to_view
)