fix inheritance/class design to get both SessionOptionEditor and RCOptionEditor to work correctly

This commit is contained in:
Paul Davis 2015-11-27 17:33:31 -05:00
parent 30b065f6ef
commit e268a9d2aa
7 changed files with 47 additions and 15 deletions

View File

@ -121,7 +121,7 @@ class ArdourPrompter;
class PublicEditor;
class SaveAsDialog;
class SessionDialog;
class SessionOptionEditor;
class SessionOptionEditorWindow;
class ShuttleControl;
class Splash;
class TimeInfoBox;

View File

@ -474,15 +474,11 @@ OptionEditor::OptionEditor (PBD::Configuration* c, std::string const & t)
{
using namespace Notebook_Helpers;
set_border_width (4);
pack_start (_notebook, true, true);
_notebook.set_show_tabs (true);
_notebook.set_show_border (true);
_notebook.set_name ("OptionsNotebook");
show_all ();
/* Watch out for changes to parameters */
_config->ParameterChanged.connect (config_connection, invalidator (*this), boost::bind (&OptionEditor::parameter_changed, this, _1), gui_context());
@ -591,3 +587,22 @@ DirectoryOption::selection_changed ()
{
_set (poor_mans_glob(_file_chooser.get_filename ()));
}
/*--------------------------*/
OptionEditorContainer::OptionEditorContainer (PBD::Configuration* c, string const& str)
: OptionEditor (c, str)
{
set_border_width (4);
pack_start (notebook(), true, true);
show_all ();
}
OptionEditorWindow::OptionEditorWindow (PBD::Configuration* c, string const& str)
: OptionEditor (c, str)
{
container.set_border_width (4);
container.pack_start (notebook(), true, true);
container.show_all ();
add (container);
}

View File

@ -25,7 +25,10 @@
#include <gtkmm/comboboxtext.h>
#include <gtkmm/spinbutton.h>
#include <gtkmm/table.h>
#include <gtkmm/window.h>
#include "gtkmm2ext/slider_controller.h"
#include "ardour_window.h"
#include "audio_clock.h"
#include "ardour/types.h"
@ -680,7 +683,7 @@ public:
};
/** The OptionEditor dialog base class */
class OptionEditor : public Gtk::VBox, public ARDOUR::SessionHandlePtr
class OptionEditor : public ARDOUR::SessionHandlePtr, virtual public sigc::trackable
{
public:
OptionEditor (PBD::Configuration *, std::string const &);
@ -692,19 +695,33 @@ public:
void set_current_page (std::string const &);
protected:
virtual void parameter_changed (std::string const &);
PBD::Configuration* _config;
Gtk::Notebook& notebook() { return _notebook; }
private:
PBD::ScopedConnection config_connection;
Gtk::Notebook _notebook;
std::map<std::string, OptionEditorPage*> _pages;
};
/** The OptionEditor dialog-as-container base class */
class OptionEditorContainer : public OptionEditor, public Gtk::VBox
{
public:
OptionEditorContainer (PBD::Configuration *, std::string const &);
~OptionEditorContainer() {}
};
/** The OptionEditor dialog-as-container base class */
class OptionEditorWindow : public OptionEditor, public Gtk::Window
{
public:
OptionEditorWindow (PBD::Configuration *, std::string const &);
~OptionEditorWindow() {}
private:
Gtk::VBox container;
};
#endif /* __gtk_ardour_option_editor_h__ */

View File

@ -1720,7 +1720,7 @@ private:
RCOptionEditor::RCOptionEditor ()
: OptionEditor (Config, string_compose (_("%1 Preferences"), PROGRAM_NAME))
: OptionEditorContainer (Config, string_compose (_("%1 Preferences"), PROGRAM_NAME))
, Tabbable (*this, _("Preferences")) /* pack self-as-vbox into tabbable */
, _rc_config (Config)
, _mixer_strip_visibility ("mixer-element-visibility")

View File

@ -34,7 +34,7 @@
*/
/** Editor for options which are obtained from and written back to one of the .rc files. */
class RCOptionEditor : public OptionEditor, public Gtkmm2ext::Tabbable
class RCOptionEditor : public OptionEditorContainer, public Gtkmm2ext::Tabbable
{
public:
RCOptionEditor ();

View File

@ -29,7 +29,7 @@ using namespace ARDOUR;
using namespace Timecode;
SessionOptionEditor::SessionOptionEditor (Session* s)
: OptionEditor (&(s->config), _("Session Properties"))
: OptionEditorWindow (&(s->config), _("Session Properties"))
, _session_config (&(s->config))
{
set_session (s);

View File

@ -27,7 +27,7 @@ namespace ARDOUR {
class SessionConfiguration;
}
class SessionOptionEditor : public OptionEditor
class SessionOptionEditor : public OptionEditorWindow
{
public:
SessionOptionEditor (ARDOUR::Session* s);