Say I have two main classes, Application
and ApplicationGUI
. Application
does lots of things and can happily run without any knowledge that ApplicationGUI
exists. ApplicationGUI
is linked to Application
in many ways, it has maybe 50 or 100 different knobs that can change Application
's behavior.
ApplicationGUI
is a hierarchical structure such that it has many instances of ControlGroup
, each containing an arbitrary number of Button
s and Knob
s, or even another ControlGroup
.
Current design: Upon instantiation of the ApplicationGUI
(Application
was already running with some set of default parameters), I pass pointers of Application
's parameters to various components of the GUI. For example:
my_gui.sound_controlgroup.knob.link_to_param(&(my_application.volume));
If I need to do something more complex, say call a member function of Application
, my_application.update_something()
, how is this done?
The easy answer is to pass a pointer to my_application to my_gui.sound_controlgroup.knob
, but if I only ever need to call one of my_application's functions, it seems like I am giving my knob an option to change all kinds of things that it should even know about (my_application.update_something_unrelated()
, for instance). What is the cleanest thing to do in this case?
Additionally, this either requires making all subcomponents of ApplicationGUI
public or having a function at each stage of the hierarchy to forward that pointer to the bottom level. This leads to quite a lot of functions. Is this a necessary consequence of a UI with a lot of knobs?