mirror of https://github.com/KLayout/klayout.git
0.25.5 to 0.25.6 delta ported to pymod
- Bugfix for klayoutmatthias/issue-191 - Consistent configuration for layout views
This commit is contained in:
parent
89b5cae669
commit
edae71b0a8
|
|
@ -169,7 +169,7 @@ PluginDeclaration::config_finalize ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PluginDeclaration::initialized (lay::PluginRoot *)
|
PluginDeclaration::initialized (lay::PluginRoot *root)
|
||||||
{
|
{
|
||||||
// Check if we already have templates (initial setup)
|
// Check if we already have templates (initial setup)
|
||||||
bool any_templates = false;
|
bool any_templates = false;
|
||||||
|
|
@ -198,8 +198,8 @@ PluginDeclaration::initialized (lay::PluginRoot *)
|
||||||
|
|
||||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Box")), "W=$(abs(X))", "H=$(abs(Y))", "", ant::Object::STY_line, ant::Object::OL_box, true, lay::AC_Global, std::string ()));
|
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Box")), "W=$(abs(X))", "H=$(abs(Y))", "", ant::Object::STY_line, ant::Object::OL_box, true, lay::AC_Global, std::string ()));
|
||||||
|
|
||||||
lay::PluginRoot::instance ()->config_set (cfg_ruler_templates, ant::TemplatesConverter ().to_string (m_templates));
|
root->config_set (cfg_ruler_templates, ant::TemplatesConverter ().to_string (m_templates));
|
||||||
lay::PluginRoot::instance ()->config_end ();
|
root->config_end ();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1114,7 +1114,7 @@ ApplicationBase::run ()
|
||||||
// Give the plugins a change to do some last-minute initialisation and checks
|
// Give the plugins a change to do some last-minute initialisation and checks
|
||||||
for (tl::Registrar<lay::PluginDeclaration>::iterator cls = tl::Registrar<lay::PluginDeclaration>::begin (); cls != tl::Registrar<lay::PluginDeclaration>::end (); ++cls) {
|
for (tl::Registrar<lay::PluginDeclaration>::iterator cls = tl::Registrar<lay::PluginDeclaration>::begin (); cls != tl::Registrar<lay::PluginDeclaration>::end (); ++cls) {
|
||||||
lay::PluginDeclaration *pd = const_cast<lay::PluginDeclaration *> (&*cls);
|
lay::PluginDeclaration *pd = const_cast<lay::PluginDeclaration *> (&*cls);
|
||||||
pd->initialized (mw);
|
pd->initialized (plugin_root ());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! m_no_gui && m_gtf_replay.empty () && m_gtf_record.empty ()) {
|
if (! m_no_gui && m_gtf_replay.empty () && m_gtf_record.empty ()) {
|
||||||
|
|
@ -1280,6 +1280,7 @@ ApplicationBase::special_app_flag (const std::string &name)
|
||||||
GuiApplication::GuiApplication (int &argc, char **argv)
|
GuiApplication::GuiApplication (int &argc, char **argv)
|
||||||
: QApplication (argc, argv), ApplicationBase (false),
|
: QApplication (argc, argv), ApplicationBase (false),
|
||||||
mp_mw (0),
|
mp_mw (0),
|
||||||
|
mp_plugin_root (0),
|
||||||
mp_recorder (0)
|
mp_recorder (0)
|
||||||
{
|
{
|
||||||
// install a special style proxy to overcome the issue of black-on-black tree expanders
|
// install a special style proxy to overcome the issue of black-on-black tree expanders
|
||||||
|
|
@ -1300,6 +1301,9 @@ GuiApplication::~GuiApplication ()
|
||||||
}
|
}
|
||||||
|
|
||||||
shutdown ();
|
shutdown ();
|
||||||
|
|
||||||
|
delete mp_plugin_root;
|
||||||
|
mp_plugin_root = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
@ -1455,15 +1459,18 @@ GuiApplication::start_recording ()
|
||||||
lay::PluginRoot *
|
lay::PluginRoot *
|
||||||
GuiApplication::plugin_root () const
|
GuiApplication::plugin_root () const
|
||||||
{
|
{
|
||||||
return mp_mw;
|
return mp_plugin_root;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
GuiApplication::setup ()
|
GuiApplication::setup ()
|
||||||
{
|
{
|
||||||
tl_assert (mp_mw == 0);
|
tl_assert (mp_mw == 0 && mp_plugin_root == 0);
|
||||||
|
|
||||||
|
mp_plugin_root = new lay::PluginRootToMainWindow ();
|
||||||
|
mp_mw = new lay::MainWindow (this, mp_plugin_root, "main_window");
|
||||||
|
mp_plugin_root->attach_to (mp_mw);
|
||||||
|
|
||||||
mp_mw = new lay::MainWindow (this, "main_window");
|
|
||||||
QObject::connect (mp_mw, SIGNAL (closed ()), this, SLOT (quit ()));
|
QObject::connect (mp_mw, SIGNAL (closed ()), this, SLOT (quit ()));
|
||||||
|
|
||||||
// create a password dialog for use with the HTTP streams
|
// create a password dialog for use with the HTTP streams
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ namespace lay
|
||||||
{
|
{
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class PluginRootToMainWindow;
|
||||||
class PluginRoot;
|
class PluginRoot;
|
||||||
class ProgressReporter;
|
class ProgressReporter;
|
||||||
class ProgressBar;
|
class ProgressBar;
|
||||||
|
|
@ -443,6 +444,7 @@ protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MainWindow *mp_mw;
|
MainWindow *mp_mw;
|
||||||
|
PluginRootToMainWindow *mp_plugin_root;
|
||||||
gtf::Recorder *mp_recorder;
|
gtf::Recorder *mp_recorder;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -164,9 +164,9 @@ MacroController::initialized (lay::PluginRoot *root)
|
||||||
connect (&m_temp_macros, SIGNAL (menu_needs_update ()), this, SLOT (macro_collection_changed ()));
|
connect (&m_temp_macros, SIGNAL (menu_needs_update ()), this, SLOT (macro_collection_changed ()));
|
||||||
connect (&m_temp_macros, SIGNAL (macro_collection_changed (lym::MacroCollection *)), this, SLOT (macro_collection_changed ()));
|
connect (&m_temp_macros, SIGNAL (macro_collection_changed (lym::MacroCollection *)), this, SLOT (macro_collection_changed ()));
|
||||||
|
|
||||||
mp_mw = dynamic_cast <lay::MainWindow *> (root);
|
mp_mw = lay::MainWindow::instance ();
|
||||||
if (mp_mw) {
|
if (mp_mw) {
|
||||||
mp_macro_editor = new lay::MacroEditorDialog (mp_mw, &lym::MacroCollection::root ());
|
mp_macro_editor = new lay::MacroEditorDialog (root, &lym::MacroCollection::root ());
|
||||||
mp_macro_editor->setModal (false);
|
mp_macro_editor->setModal (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -227,10 +227,10 @@ public:
|
||||||
|
|
||||||
static lay::MacroEditorDialog *s_macro_editor_instance = 0;
|
static lay::MacroEditorDialog *s_macro_editor_instance = 0;
|
||||||
|
|
||||||
MacroEditorDialog::MacroEditorDialog (lay::MainWindow *mw, lym::MacroCollection *root)
|
MacroEditorDialog::MacroEditorDialog (lay::PluginRoot *pr, lym::MacroCollection *root)
|
||||||
: QDialog (0 /*show as individual top widget*/, Qt::Window),
|
: QDialog (0 /*show as individual top widget*/, Qt::Window),
|
||||||
lay::Plugin (mw, true),
|
lay::Plugin (pr, true),
|
||||||
mp_plugin_root (mw),
|
mp_plugin_root (pr),
|
||||||
mp_root (root),
|
mp_root (root),
|
||||||
m_first_show (true), m_in_processing (false), m_debugging_on (true),
|
m_first_show (true), m_in_processing (false), m_debugging_on (true),
|
||||||
mp_run_macro (0),
|
mp_run_macro (0),
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Constructor
|
* @brief Constructor
|
||||||
*/
|
*/
|
||||||
MacroEditorDialog (lay::MainWindow *parent, lym::MacroCollection *root);
|
MacroEditorDialog (lay::PluginRoot *pr, lym::MacroCollection *root);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Destructor
|
* @brief Destructor
|
||||||
|
|
|
||||||
|
|
@ -443,8 +443,9 @@ MainWindow::instance ()
|
||||||
|
|
||||||
// -----------------------------------
|
// -----------------------------------
|
||||||
|
|
||||||
MainWindow::MainWindow (QApplication *app, const char *name)
|
MainWindow::MainWindow (QApplication *app, lay::Plugin *plugin_parent, const char *name)
|
||||||
: QMainWindow (0),
|
: QMainWindow (0),
|
||||||
|
lay::Plugin (plugin_parent),
|
||||||
m_text_progress (this, 10 /*verbosity threshold*/),
|
m_text_progress (this, 10 /*verbosity threshold*/),
|
||||||
m_mode (std::numeric_limits<unsigned int>::max ()),
|
m_mode (std::numeric_limits<unsigned int>::max ()),
|
||||||
mp_setup_form (0),
|
mp_setup_form (0),
|
||||||
|
|
@ -473,7 +474,7 @@ MainWindow::MainWindow (QApplication *app, const char *name)
|
||||||
}
|
}
|
||||||
mw_instance = this;
|
mw_instance = this;
|
||||||
|
|
||||||
mp_setup_form = new SettingsForm (0, this, "setup_form"),
|
mp_setup_form = new SettingsForm (0, plugin_root (), "setup_form"),
|
||||||
|
|
||||||
db::LibraryManager::instance ().changed_event.add (this, &MainWindow::libraries_changed);
|
db::LibraryManager::instance ().changed_event.add (this, &MainWindow::libraries_changed);
|
||||||
|
|
||||||
|
|
@ -1082,13 +1083,13 @@ void
|
||||||
MainWindow::dock_widget_visibility_changed (bool /*visible*/)
|
MainWindow::dock_widget_visibility_changed (bool /*visible*/)
|
||||||
{
|
{
|
||||||
if (sender () == mp_lp_dock_widget) {
|
if (sender () == mp_lp_dock_widget) {
|
||||||
config_set (cfg_show_layer_panel, tl::to_string (!mp_lp_dock_widget->isHidden ()));
|
plugin_root ()->config_set (cfg_show_layer_panel, tl::to_string (!mp_lp_dock_widget->isHidden ()));
|
||||||
} else if (sender () == mp_hp_dock_widget) {
|
} else if (sender () == mp_hp_dock_widget) {
|
||||||
config_set (cfg_show_hierarchy_panel, tl::to_string (!mp_hp_dock_widget->isHidden ()));
|
plugin_root ()->config_set (cfg_show_hierarchy_panel, tl::to_string (!mp_hp_dock_widget->isHidden ()));
|
||||||
} else if (sender () == mp_navigator_dock_widget) {
|
} else if (sender () == mp_navigator_dock_widget) {
|
||||||
config_set (cfg_show_navigator, tl::to_string (!mp_navigator_dock_widget->isHidden ()));
|
plugin_root ()->config_set (cfg_show_navigator, tl::to_string (!mp_navigator_dock_widget->isHidden ()));
|
||||||
} else if (sender () == mp_layer_toolbox_dock_widget) {
|
} else if (sender () == mp_layer_toolbox_dock_widget) {
|
||||||
config_set (cfg_show_layer_toolbox, tl::to_string (!mp_layer_toolbox_dock_widget->isHidden ()));
|
plugin_root ()->config_set (cfg_show_layer_toolbox, tl::to_string (!mp_layer_toolbox_dock_widget->isHidden ()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1283,7 +1284,7 @@ MainWindow::about_to_exec ()
|
||||||
lay::TipDialog::button_type button = lay::TipDialog::null_button;
|
lay::TipDialog::button_type button = lay::TipDialog::null_button;
|
||||||
if (td.exec_dialog (button)) {
|
if (td.exec_dialog (button)) {
|
||||||
if (button == lay::TipDialog::yes_button) {
|
if (button == lay::TipDialog::yes_button) {
|
||||||
config_set (cfg_full_hier_new_cell, true);
|
plugin_root ()->config_set (cfg_full_hier_new_cell, true);
|
||||||
}
|
}
|
||||||
// Don't bother the user with more dialogs.
|
// Don't bother the user with more dialogs.
|
||||||
return;
|
return;
|
||||||
|
|
@ -1734,17 +1735,6 @@ MainWindow::configure (const std::string &name, const std::string &value)
|
||||||
apply_hidden (hidden);
|
apply_hidden (hidden);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
} else if (name == cfg_background_color) {
|
|
||||||
|
|
||||||
if (mp_navigator) {
|
|
||||||
QColor color;
|
|
||||||
ColorConverter ().from_string (value, color);
|
|
||||||
mp_navigator->background_color (color);
|
|
||||||
}
|
|
||||||
|
|
||||||
// do not take - let others receive the background color events as well
|
|
||||||
return false;
|
|
||||||
|
|
||||||
} else if (name == cfg_initial_technology) {
|
} else if (name == cfg_initial_technology) {
|
||||||
|
|
||||||
m_initial_technology = value;
|
m_initial_technology = value;
|
||||||
|
|
@ -1818,10 +1808,10 @@ MainWindow::libraries_changed ()
|
||||||
void
|
void
|
||||||
MainWindow::read_dock_widget_state ()
|
MainWindow::read_dock_widget_state ()
|
||||||
{
|
{
|
||||||
config_set (cfg_show_layer_panel, tl::to_string (!mp_lp_dock_widget->isHidden ()));
|
plugin_root ()->config_set (cfg_show_layer_panel, tl::to_string (!mp_lp_dock_widget->isHidden ()));
|
||||||
config_set (cfg_show_hierarchy_panel, tl::to_string (!mp_hp_dock_widget->isHidden ()));
|
plugin_root ()->config_set (cfg_show_hierarchy_panel, tl::to_string (!mp_hp_dock_widget->isHidden ()));
|
||||||
config_set (cfg_show_navigator, tl::to_string (!mp_navigator_dock_widget->isHidden ()));
|
plugin_root ()->config_set (cfg_show_navigator, tl::to_string (!mp_navigator_dock_widget->isHidden ()));
|
||||||
config_set (cfg_show_layer_toolbox, tl::to_string (!mp_layer_toolbox_dock_widget->isHidden ()));
|
plugin_root ()->config_set (cfg_show_layer_toolbox, tl::to_string (!mp_layer_toolbox_dock_widget->isHidden ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1934,7 +1924,7 @@ MainWindow::can_close ()
|
||||||
|
|
||||||
for (tl::Registrar<lay::PluginDeclaration>::iterator cls = tl::Registrar<lay::PluginDeclaration>::begin (); cls != tl::Registrar<lay::PluginDeclaration>::end (); ++cls) {
|
for (tl::Registrar<lay::PluginDeclaration>::iterator cls = tl::Registrar<lay::PluginDeclaration>::begin (); cls != tl::Registrar<lay::PluginDeclaration>::end (); ++cls) {
|
||||||
lay::PluginDeclaration *pd = const_cast<lay::PluginDeclaration *> (&*cls);
|
lay::PluginDeclaration *pd = const_cast<lay::PluginDeclaration *> (&*cls);
|
||||||
if (! pd->can_exit (this)) {
|
if (! pd->can_exit (plugin_root ())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1979,8 +1969,8 @@ MainWindow::save_state_to_config ()
|
||||||
{
|
{
|
||||||
// save the dock widget state with all views closed (that state can be
|
// save the dock widget state with all views closed (that state can be
|
||||||
// used for staring klayout without any layout)
|
// used for staring klayout without any layout)
|
||||||
config_set (cfg_window_geometry, (const char *) saveGeometry ().toBase64 ().data ());
|
plugin_root ()->config_set (cfg_window_geometry, (const char *) saveGeometry ().toBase64 ().data ());
|
||||||
config_set (cfg_window_state, (const char *) saveState ().toBase64 ().data ());
|
plugin_root ()->config_set (cfg_window_state, (const char *) saveState ().toBase64 ().data ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -2304,9 +2294,7 @@ MainWindow::intrinsic_mode_triggered ()
|
||||||
|
|
||||||
int mode = action->data ().toInt ();
|
int mode = action->data ().toInt ();
|
||||||
|
|
||||||
if (lay::PluginRoot::instance ()) {
|
plugin_root ()->select_mode (mode);
|
||||||
lay::PluginRoot::instance ()->select_mode (mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
action->setChecked (true);
|
action->setChecked (true);
|
||||||
|
|
||||||
|
|
@ -3405,13 +3393,13 @@ MainWindow::cm_pull_in ()
|
||||||
void
|
void
|
||||||
MainWindow::cm_reader_options ()
|
MainWindow::cm_reader_options ()
|
||||||
{
|
{
|
||||||
mp_layout_load_options->edit_global_options (this, db::Technologies::instance ());
|
mp_layout_load_options->edit_global_options (plugin_root (), db::Technologies::instance ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MainWindow::cm_writer_options ()
|
MainWindow::cm_writer_options ()
|
||||||
{
|
{
|
||||||
mp_layout_save_options->edit_global_options (this, db::Technologies::instance ());
|
mp_layout_save_options->edit_global_options (plugin_root (), db::Technologies::instance ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -3680,7 +3668,7 @@ MainWindow::clone_current_view ()
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a new view
|
// create a new view
|
||||||
view = new lay::LayoutView (current_view (), &m_manager, lay::ApplicationBase::instance ()->is_editable (), this, mp_view_stack);
|
view = new lay::LayoutView (current_view (), &m_manager, lay::ApplicationBase::instance ()->is_editable (), plugin_root (), mp_view_stack);
|
||||||
connect (view, SIGNAL (title_changed ()), this, SLOT (view_title_changed ()));
|
connect (view, SIGNAL (title_changed ()), this, SLOT (view_title_changed ()));
|
||||||
connect (view, SIGNAL (dirty_changed ()), this, SLOT (view_title_changed ()));
|
connect (view, SIGNAL (dirty_changed ()), this, SLOT (view_title_changed ()));
|
||||||
connect (view, SIGNAL (edits_enabled_changed ()), this, SLOT (edits_enabled_changed ()));
|
connect (view, SIGNAL (edits_enabled_changed ()), this, SLOT (edits_enabled_changed ()));
|
||||||
|
|
@ -4116,7 +4104,7 @@ MainWindow::add_mru (const std::string &fn_rel, const std::string &tech)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
config_set (cfg_mru, config_str);
|
plugin_root ()->config_set (cfg_mru, config_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -4169,7 +4157,7 @@ MainWindow::open_recent ()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mp_layout_load_options->show_always () && !mp_layout_load_options->edit_global_options (this, db::Technologies::instance ())) {
|
if (mp_layout_load_options->show_always () && !mp_layout_load_options->edit_global_options (plugin_root (), db::Technologies::instance ())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4218,7 +4206,7 @@ MainWindow::open (int mode)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mp_layout_load_options->show_always () && !mp_layout_load_options->edit_global_options (this, db::Technologies::instance ())) {
|
if (mp_layout_load_options->show_always () && !mp_layout_load_options->edit_global_options (plugin_root (), db::Technologies::instance ())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4289,7 +4277,7 @@ int
|
||||||
MainWindow::do_create_view ()
|
MainWindow::do_create_view ()
|
||||||
{
|
{
|
||||||
// create a new view
|
// create a new view
|
||||||
lay::LayoutView *view = new lay::LayoutView (&m_manager, lay::ApplicationBase::instance ()->is_editable (), this, mp_view_stack);
|
lay::LayoutView *view = new lay::LayoutView (&m_manager, lay::ApplicationBase::instance ()->is_editable (), plugin_root (), mp_view_stack);
|
||||||
|
|
||||||
connect (view, SIGNAL (title_changed ()), this, SLOT (view_title_changed ()));
|
connect (view, SIGNAL (title_changed ()), this, SLOT (view_title_changed ()));
|
||||||
connect (view, SIGNAL (dirty_changed ()), this, SLOT (view_title_changed ()));
|
connect (view, SIGNAL (dirty_changed ()), this, SLOT (view_title_changed ()));
|
||||||
|
|
@ -4866,8 +4854,7 @@ MainWindow::show_assistant_topic (const std::string &s, bool modal)
|
||||||
void
|
void
|
||||||
MainWindow::cm_show_all_tips ()
|
MainWindow::cm_show_all_tips ()
|
||||||
{
|
{
|
||||||
config_set (cfg_tip_window_hidden, "");
|
plugin_root ()->config_set (cfg_tip_window_hidden, "");
|
||||||
config_finalize ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -4899,7 +4886,7 @@ MainWindow::action_for_slot (const char *slot)
|
||||||
lay::Action *
|
lay::Action *
|
||||||
MainWindow::create_config_action (const std::string &title, const std::string &cname, const std::string &cvalue)
|
MainWindow::create_config_action (const std::string &title, const std::string &cname, const std::string &cvalue)
|
||||||
{
|
{
|
||||||
lay::ConfigureAction *ca = new lay::ConfigureAction(this, title, cname, cvalue);
|
lay::ConfigureAction *ca = new lay::ConfigureAction(plugin_root (), title, cname, cvalue);
|
||||||
m_ca_collection.push_back (ca);
|
m_ca_collection.push_back (ca);
|
||||||
return ca;
|
return ca;
|
||||||
}
|
}
|
||||||
|
|
@ -4907,7 +4894,7 @@ MainWindow::create_config_action (const std::string &title, const std::string &c
|
||||||
lay::Action *
|
lay::Action *
|
||||||
MainWindow::create_config_action (const std::string &cname, const std::string &cvalue)
|
MainWindow::create_config_action (const std::string &cname, const std::string &cvalue)
|
||||||
{
|
{
|
||||||
lay::ConfigureAction *ca = new lay::ConfigureAction(this, std::string (), cname, cvalue);
|
lay::ConfigureAction *ca = new lay::ConfigureAction(plugin_root (), std::string (), cname, cvalue);
|
||||||
m_ca_collection.push_back (ca);
|
m_ca_collection.push_back (ca);
|
||||||
return ca;
|
return ca;
|
||||||
}
|
}
|
||||||
|
|
@ -5605,11 +5592,8 @@ MainWindow::plugin_registered (lay::PluginDeclaration *cls)
|
||||||
|
|
||||||
// recreate all plugins
|
// recreate all plugins
|
||||||
for (std::vector <lay::LayoutView *>::iterator vp = mp_views.begin (); vp != mp_views.end (); ++vp) {
|
for (std::vector <lay::LayoutView *>::iterator vp = mp_views.begin (); vp != mp_views.end (); ++vp) {
|
||||||
(*vp)->create_plugins (this);
|
(*vp)->create_plugins (plugin_root ());
|
||||||
}
|
}
|
||||||
|
|
||||||
// re-establish the configuration
|
|
||||||
config_setup ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -5619,13 +5603,55 @@ MainWindow::plugin_removed (lay::PluginDeclaration *cls)
|
||||||
|
|
||||||
// recreate all plugins except the one that got removed
|
// recreate all plugins except the one that got removed
|
||||||
for (std::vector <lay::LayoutView *>::iterator vp = mp_views.begin (); vp != mp_views.end (); ++vp) {
|
for (std::vector <lay::LayoutView *>::iterator vp = mp_views.begin (); vp != mp_views.end (); ++vp) {
|
||||||
(*vp)->create_plugins (this, cls);
|
(*vp)->create_plugins (plugin_root (), cls);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
// Implementation of the PluginRootToMainWindow bride
|
||||||
|
|
||||||
|
PluginRootToMainWindow::PluginRootToMainWindow ()
|
||||||
|
: mp_main_window (0)
|
||||||
|
{
|
||||||
|
// .. nothing yet ..
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PluginRootToMainWindow::attach_to (lay::MainWindow *main_window)
|
||||||
|
{
|
||||||
|
mp_main_window = main_window;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PluginRootToMainWindow::plugin_registered (lay::PluginDeclaration *cls)
|
||||||
|
{
|
||||||
|
if (mp_main_window.get ()) {
|
||||||
|
mp_main_window->plugin_registered (cls);
|
||||||
}
|
}
|
||||||
|
|
||||||
// re-establish the configuration
|
// re-establish the configuration
|
||||||
config_setup ();
|
config_setup ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PluginRootToMainWindow::plugin_removed (lay::PluginDeclaration *cls)
|
||||||
|
{
|
||||||
|
if (mp_main_window.get ()) {
|
||||||
|
mp_main_window->plugin_removed (cls);
|
||||||
|
}
|
||||||
|
|
||||||
|
// re-establish the configuration
|
||||||
|
config_setup ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PluginRootToMainWindow::select_mode (int mode)
|
||||||
|
{
|
||||||
|
if (mp_main_window.get ()) {
|
||||||
|
mp_main_window->select_mode (mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// Implementation of the "help about" dialog
|
// Implementation of the "help about" dialog
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -120,8 +120,8 @@ private:
|
||||||
|
|
||||||
class LAY_PUBLIC MainWindow
|
class LAY_PUBLIC MainWindow
|
||||||
: public QMainWindow,
|
: public QMainWindow,
|
||||||
public lay::AbstractMenuProvider,
|
public lay::Plugin,
|
||||||
public lay::PluginRoot
|
public lay::AbstractMenuProvider
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
|
@ -134,7 +134,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Constructor
|
* @brief Constructor
|
||||||
*/
|
*/
|
||||||
MainWindow (QApplication *app = 0, const char *name = "main_window");
|
MainWindow (QApplication *app = 0, lay::Plugin *parent_plugin = 0, const char *name = "main_window");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Destructor
|
* @brief Destructor
|
||||||
|
|
@ -551,7 +551,7 @@ public:
|
||||||
void show_macro_editor (const std::string &cat = std::string (), bool add = false);
|
void show_macro_editor (const std::string &cat = std::string (), bool add = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Reimplementation of the plugin interface: handle a generic menu request
|
* @brief Handles a generic menu request
|
||||||
*/
|
*/
|
||||||
void menu_activated (const std::string &symbol);
|
void menu_activated (const std::string &symbol);
|
||||||
|
|
||||||
|
|
@ -870,6 +870,8 @@ protected:
|
||||||
void do_update_file_menu ();
|
void do_update_file_menu ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
friend class PluginRootToMainWindow;
|
||||||
|
|
||||||
TextProgressDelegate m_text_progress;
|
TextProgressDelegate m_text_progress;
|
||||||
|
|
||||||
// Main menu
|
// Main menu
|
||||||
|
|
@ -973,14 +975,33 @@ private:
|
||||||
void update_dock_widget_state ();
|
void update_dock_widget_state ();
|
||||||
void read_dock_widget_state ();
|
void read_dock_widget_state ();
|
||||||
|
|
||||||
virtual void plugin_registered (lay::PluginDeclaration *cls);
|
void plugin_registered (lay::PluginDeclaration *cls);
|
||||||
virtual void plugin_removed (lay::PluginDeclaration *cls);
|
void plugin_removed (lay::PluginDeclaration *cls);
|
||||||
|
|
||||||
void libraries_changed ();
|
void libraries_changed ();
|
||||||
void apply_key_bindings ();
|
void apply_key_bindings ();
|
||||||
void apply_hidden (const std::vector<std::pair <std::string, bool> > &hidden);
|
void apply_hidden (const std::vector<std::pair <std::string, bool> > &hidden);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class LAY_PUBLIC PluginRootToMainWindow
|
||||||
|
: public lay::PluginRoot
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PluginRootToMainWindow ();
|
||||||
|
|
||||||
|
void attach_to (lay::MainWindow *main_window);
|
||||||
|
|
||||||
|
virtual void plugin_registered (lay::PluginDeclaration *cls);
|
||||||
|
virtual void plugin_removed (lay::PluginDeclaration *cls);
|
||||||
|
virtual void select_mode (int mode);
|
||||||
|
|
||||||
|
private:
|
||||||
|
PluginRootToMainWindow (const PluginRootToMainWindow &);
|
||||||
|
PluginRootToMainWindow &operator= (const PluginRootToMainWindow &);
|
||||||
|
|
||||||
|
tl::weak_ptr<MainWindow> mp_main_window;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace tl {
|
namespace tl {
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,25 @@ public:
|
||||||
drag_cancel ();
|
drag_cancel ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void background_color_changed ()
|
||||||
|
{
|
||||||
|
QColor c = mp_view->background_color ();
|
||||||
|
|
||||||
|
// replace by "real" background color if required
|
||||||
|
if (! c.isValid ()) {
|
||||||
|
c = mp_view->palette ().color (QPalette::Normal, QPalette::Base);
|
||||||
|
}
|
||||||
|
|
||||||
|
QColor contrast;
|
||||||
|
if (c.green () > 128) {
|
||||||
|
contrast = QColor (0, 0, 0);
|
||||||
|
} else {
|
||||||
|
contrast = QColor (255, 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
set_colors (c, contrast);
|
||||||
|
}
|
||||||
|
|
||||||
bool mouse_release_event (const db::DPoint & /*p*/, unsigned int /*buttons*/, bool /*prio*/)
|
bool mouse_release_event (const db::DPoint & /*p*/, unsigned int /*buttons*/, bool /*prio*/)
|
||||||
{
|
{
|
||||||
if (mp_box) {
|
if (mp_box) {
|
||||||
|
|
@ -349,10 +368,10 @@ public:
|
||||||
tl::Object::detach_from_all_events ();
|
tl::Object::detach_from_all_events ();
|
||||||
|
|
||||||
mp_source_view = source_view;
|
mp_source_view = source_view;
|
||||||
|
|
||||||
if (mp_source_view) {
|
|
||||||
mp_source_view->viewport_changed_event.add (this, &NavigatorService::update_marker);
|
mp_source_view->viewport_changed_event.add (this, &NavigatorService::update_marker);
|
||||||
}
|
|
||||||
|
mp_view->background_color_changed_event.add (this, &NavigatorService::background_color_changed);
|
||||||
|
background_color_changed ();
|
||||||
|
|
||||||
update_marker ();
|
update_marker ();
|
||||||
|
|
||||||
|
|
@ -447,11 +466,8 @@ Navigator::Navigator (MainWindow *main_window)
|
||||||
mp_menu_bar->setFrameShape (QFrame::NoFrame);
|
mp_menu_bar->setFrameShape (QFrame::NoFrame);
|
||||||
mp_menu_bar->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Preferred);
|
mp_menu_bar->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||||
|
|
||||||
mp_view = new LayoutView (0, false, mp_main_window, this, "navigator", LayoutView::LV_Naked + LayoutView::LV_NoZoom + LayoutView::LV_NoServices + LayoutView::LV_NoGrid);
|
mp_view = 0;
|
||||||
mp_view->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Expanding);
|
mp_service = 0;
|
||||||
mp_view->setMinimumWidth (100);
|
|
||||||
mp_view->setMinimumHeight (100);
|
|
||||||
mp_view->hide ();
|
|
||||||
|
|
||||||
mp_placeholder_label = new QLabel (this);
|
mp_placeholder_label = new QLabel (this);
|
||||||
mp_placeholder_label->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Expanding);
|
mp_placeholder_label->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||||
|
|
@ -461,9 +477,8 @@ Navigator::Navigator (MainWindow *main_window)
|
||||||
|
|
||||||
QVBoxLayout *layout = new QVBoxLayout (this);
|
QVBoxLayout *layout = new QVBoxLayout (this);
|
||||||
layout->addWidget (mp_menu_bar);
|
layout->addWidget (mp_menu_bar);
|
||||||
layout->addWidget (mp_view);
|
|
||||||
layout->addWidget (mp_placeholder_label);
|
layout->addWidget (mp_placeholder_label);
|
||||||
layout->setStretchFactor (mp_view, 1);
|
layout->setStretchFactor (mp_placeholder_label, 1);
|
||||||
layout->setMargin (0);
|
layout->setMargin (0);
|
||||||
layout->setSpacing (0);
|
layout->setSpacing (0);
|
||||||
setLayout (layout);
|
setLayout (layout);
|
||||||
|
|
@ -473,9 +488,6 @@ Navigator::Navigator (MainWindow *main_window)
|
||||||
|
|
||||||
do_update_menu ();
|
do_update_menu ();
|
||||||
connect (mp_main_window->menu (), SIGNAL (changed ()), this, SLOT (menu_changed ()));
|
connect (mp_main_window->menu (), SIGNAL (changed ()), this, SLOT (menu_changed ()));
|
||||||
|
|
||||||
mp_service = new NavigatorService (mp_view);
|
|
||||||
mp_view->view_object_widget ()->activate (mp_service);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Navigator::~Navigator ()
|
Navigator::~Navigator ()
|
||||||
|
|
@ -586,8 +598,8 @@ Navigator::showEvent (QShowEvent *)
|
||||||
void
|
void
|
||||||
Navigator::closeEvent (QCloseEvent *)
|
Navigator::closeEvent (QCloseEvent *)
|
||||||
{
|
{
|
||||||
mp_main_window->config_set (cfg_show_navigator, "false");
|
lay::PluginRoot::instance ()->config_set (cfg_show_navigator, "false");
|
||||||
mp_main_window->config_finalize ();
|
lay::PluginRoot::instance ()->config_end ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -637,6 +649,14 @@ Navigator::view_closed (int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Navigator::resizeEvent (QResizeEvent *)
|
||||||
|
{
|
||||||
|
if (mp_view) {
|
||||||
|
mp_view->setGeometry (mp_placeholder_label->geometry ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Navigator::attach_view (LayoutView *view)
|
Navigator::attach_view (LayoutView *view)
|
||||||
{
|
{
|
||||||
|
|
@ -649,8 +669,24 @@ Navigator::attach_view (LayoutView *view)
|
||||||
|
|
||||||
mp_source_view = view;
|
mp_source_view = view;
|
||||||
|
|
||||||
|
delete mp_service;
|
||||||
|
mp_service = 0;
|
||||||
|
|
||||||
|
LayoutView *old_view = mp_view;
|
||||||
|
mp_view = 0;
|
||||||
|
|
||||||
if (mp_source_view) {
|
if (mp_source_view) {
|
||||||
|
|
||||||
|
mp_view = new LayoutView (0, false, mp_source_view, this, "navigator", LayoutView::LV_Naked + LayoutView::LV_NoZoom + LayoutView::LV_NoServices + LayoutView::LV_NoGrid);
|
||||||
|
mp_view->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||||
|
mp_view->setMinimumWidth (100);
|
||||||
|
mp_view->setMinimumHeight (100);
|
||||||
|
mp_view->setGeometry (mp_placeholder_label->geometry ());
|
||||||
|
mp_view->show ();
|
||||||
|
|
||||||
|
mp_service = new NavigatorService (mp_view);
|
||||||
|
mp_view->view_object_widget ()->activate (mp_service);
|
||||||
|
|
||||||
mp_source_view->cellviews_changed_event.add (this, &Navigator::content_changed);
|
mp_source_view->cellviews_changed_event.add (this, &Navigator::content_changed);
|
||||||
mp_source_view->cellview_changed_event.add (this, &Navigator::content_changed_with_int);
|
mp_source_view->cellview_changed_event.add (this, &Navigator::content_changed_with_int);
|
||||||
mp_source_view->geom_changed_event.add (this, &Navigator::content_changed);
|
mp_source_view->geom_changed_event.add (this, &Navigator::content_changed);
|
||||||
|
|
@ -662,14 +698,6 @@ Navigator::attach_view (LayoutView *view)
|
||||||
image_plugin->images_changed_event.add (this, &Navigator::content_changed);
|
image_plugin->images_changed_event.add (this, &Navigator::content_changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_view->show ();
|
|
||||||
mp_placeholder_label->hide ();
|
|
||||||
|
|
||||||
} else {
|
|
||||||
mp_view->hide ();
|
|
||||||
mp_placeholder_label->show ();
|
|
||||||
}
|
|
||||||
|
|
||||||
// update the list of frozen flags per view
|
// update the list of frozen flags per view
|
||||||
std::set <lay::LayoutView *> all_views;
|
std::set <lay::LayoutView *> all_views;
|
||||||
|
|
||||||
|
|
@ -697,25 +725,9 @@ Navigator::attach_view (LayoutView *view)
|
||||||
update ();
|
update ();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void
|
delete old_view;
|
||||||
Navigator::background_color (QColor c)
|
|
||||||
{
|
|
||||||
// replace by "real" background color if required
|
|
||||||
if (! c.isValid ()) {
|
|
||||||
c = palette ().color (QPalette::Normal, QPalette::Base);
|
|
||||||
}
|
|
||||||
|
|
||||||
QColor contrast;
|
|
||||||
if (c.green () > 128) {
|
|
||||||
contrast = QColor (0, 0, 0);
|
|
||||||
} else {
|
|
||||||
contrast = QColor (255, 255, 255);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mp_service) {
|
|
||||||
mp_service->set_colors (c, contrast);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -738,16 +750,13 @@ Navigator::update_layers ()
|
||||||
void
|
void
|
||||||
Navigator::update ()
|
Navigator::update ()
|
||||||
{
|
{
|
||||||
if (! mp_source_view || m_frozen_list.find (mp_source_view) == m_frozen_list.end ()) {
|
if (! mp_view || ! mp_source_view) {
|
||||||
|
return;
|
||||||
if (! mp_source_view) {
|
|
||||||
mp_view->clear_cellviews ();
|
|
||||||
mp_view->clear_layers ();
|
|
||||||
} else {
|
|
||||||
mp_view->select_cellviews (mp_source_view->cellview_list ());
|
|
||||||
mp_view->set_properties (mp_source_view->get_properties ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_frozen_list.find (mp_source_view) == m_frozen_list.end ()) {
|
||||||
|
mp_view->select_cellviews (mp_source_view->cellview_list ());
|
||||||
|
mp_view->set_properties (mp_source_view->get_properties ());
|
||||||
} else {
|
} else {
|
||||||
mp_view->select_cellviews (mp_source_view->cellview_list ());
|
mp_view->select_cellviews (mp_source_view->cellview_list ());
|
||||||
mp_view->set_properties (m_frozen_list [mp_source_view].layer_properties);
|
mp_view->set_properties (m_frozen_list [mp_source_view].layer_properties);
|
||||||
|
|
@ -759,7 +768,7 @@ Navigator::update ()
|
||||||
img_target->clear_images ();
|
img_target->clear_images ();
|
||||||
|
|
||||||
if (m_show_images) {
|
if (m_show_images) {
|
||||||
img::Service *img_source = (mp_source_view ? mp_source_view->get_plugin<img::Service> () : 0);
|
img::Service *img_source = (mp_source_view->get_plugin<img::Service> ());
|
||||||
if (img_source) {
|
if (img_source) {
|
||||||
for (img::ImageIterator i = img_source->begin_images (); ! i.at_end (); ++i) {
|
for (img::ImageIterator i = img_source->begin_images (); ! i.at_end (); ++i) {
|
||||||
img_target->insert_image (*i);
|
img_target->insert_image (*i);
|
||||||
|
|
|
||||||
|
|
@ -83,13 +83,13 @@ public:
|
||||||
void freeze_clicked ();
|
void freeze_clicked ();
|
||||||
void all_hier_levels (bool f);
|
void all_hier_levels (bool f);
|
||||||
void show_images (bool f);
|
void show_images (bool f);
|
||||||
void background_color (QColor c);
|
|
||||||
|
|
||||||
static void init_menu (AbstractMenu &menu);
|
static void init_menu (AbstractMenu &menu);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void closeEvent (QCloseEvent *event);
|
virtual void closeEvent (QCloseEvent *event);
|
||||||
virtual void showEvent (QShowEvent *event);
|
virtual void showEvent (QShowEvent *event);
|
||||||
|
virtual void resizeEvent (QResizeEvent *event);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void menu_changed ();
|
void menu_changed ();
|
||||||
|
|
@ -121,6 +121,7 @@ private:
|
||||||
void layers_changed (int);
|
void layers_changed (int);
|
||||||
void viewport_changed ();
|
void viewport_changed ();
|
||||||
void hier_levels_changed ();
|
void hier_levels_changed ();
|
||||||
|
void update_background_color ();
|
||||||
|
|
||||||
void content_changed_with_int (int)
|
void content_changed_with_int (int)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -36,14 +36,21 @@ namespace lay
|
||||||
static const std::string cfg_salt_manager_window_state ("salt-manager-window-state");
|
static const std::string cfg_salt_manager_window_state ("salt-manager-window-state");
|
||||||
|
|
||||||
SaltController::SaltController ()
|
SaltController::SaltController ()
|
||||||
: mp_salt_dialog (0), mp_mw (0), m_file_watcher (0),
|
: mp_salt_dialog (0), mp_mw (0), mp_plugin_root (0), m_file_watcher (0),
|
||||||
dm_sync_file_watcher (this, &SaltController::sync_file_watcher),
|
dm_sync_file_watcher (this, &SaltController::sync_file_watcher),
|
||||||
dm_sync_files (this, &SaltController::sync_files)
|
dm_sync_files (this, &SaltController::sync_files)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SaltController::initialized (lay::PluginRoot *root)
|
SaltController::initialize (lay::PluginRoot *root)
|
||||||
|
{
|
||||||
|
mp_mw = lay::MainWindow::instance ();
|
||||||
|
mp_plugin_root = root;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SaltController::initialized (lay::PluginRoot * /*root*/)
|
||||||
{
|
{
|
||||||
if (! m_file_watcher) {
|
if (! m_file_watcher) {
|
||||||
m_file_watcher = new tl::FileSystemWatcher (this);
|
m_file_watcher = new tl::FileSystemWatcher (this);
|
||||||
|
|
@ -51,8 +58,6 @@ SaltController::initialized (lay::PluginRoot *root)
|
||||||
connect (m_file_watcher, SIGNAL (fileRemoved (const QString &)), this, SLOT (file_watcher_triggered ()));
|
connect (m_file_watcher, SIGNAL (fileRemoved (const QString &)), this, SLOT (file_watcher_triggered ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_mw = dynamic_cast <lay::MainWindow *> (root);
|
|
||||||
|
|
||||||
connect (&m_salt, SIGNAL (collections_changed ()), this, SIGNAL (salt_changed ()));
|
connect (&m_salt, SIGNAL (collections_changed ()), this, SIGNAL (salt_changed ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -128,12 +133,10 @@ SaltController::show_editor ()
|
||||||
|
|
||||||
if (mp_salt_dialog) {
|
if (mp_salt_dialog) {
|
||||||
|
|
||||||
if (mp_mw) {
|
std::string s = mp_plugin_root->config_get (cfg_salt_manager_window_state);
|
||||||
std::string s = mp_mw->config_get (cfg_salt_manager_window_state);
|
|
||||||
if (! s.empty ()) {
|
if (! s.empty ()) {
|
||||||
lay::restore_dialog_state (mp_salt_dialog, s);
|
lay::restore_dialog_state (mp_salt_dialog, s);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// while running the dialog, don't watch file events - that would interfere with
|
// while running the dialog, don't watch file events - that would interfere with
|
||||||
// the changes applied by the dialog itself.
|
// the changes applied by the dialog itself.
|
||||||
|
|
@ -141,9 +144,7 @@ SaltController::show_editor ()
|
||||||
mp_salt_dialog->exec ();
|
mp_salt_dialog->exec ();
|
||||||
m_file_watcher->enable (true);
|
m_file_watcher->enable (true);
|
||||||
|
|
||||||
if (mp_mw) {
|
mp_plugin_root->config_set (cfg_salt_manager_window_state, lay::save_dialog_state (mp_salt_dialog));
|
||||||
mp_mw->config_set (cfg_salt_manager_window_state, lay::save_dialog_state (mp_salt_dialog));
|
|
||||||
}
|
|
||||||
|
|
||||||
sync_file_watcher ();
|
sync_file_watcher ();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,11 @@ public:
|
||||||
*/
|
*/
|
||||||
SaltController ();
|
SaltController ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Reimplementation of the PluginDeclaration interface
|
||||||
|
*/
|
||||||
|
virtual void initialize (lay::PluginRoot *root);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Reimplementation of the PluginDeclaration interface
|
* @brief Reimplementation of the PluginDeclaration interface
|
||||||
*/
|
*/
|
||||||
|
|
@ -186,6 +191,7 @@ signals:
|
||||||
private:
|
private:
|
||||||
lay::SaltManagerDialog *mp_salt_dialog;
|
lay::SaltManagerDialog *mp_salt_dialog;
|
||||||
lay::MainWindow *mp_mw;
|
lay::MainWindow *mp_mw;
|
||||||
|
lay::PluginRoot * mp_plugin_root;
|
||||||
std::string m_salt_mine_url;
|
std::string m_salt_mine_url;
|
||||||
lay::Salt m_salt;
|
lay::Salt m_salt;
|
||||||
tl::FileSystemWatcher *m_file_watcher;
|
tl::FileSystemWatcher *m_file_watcher;
|
||||||
|
|
|
||||||
|
|
@ -40,9 +40,9 @@ namespace lay
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
|
|
||||||
SettingsForm::SettingsForm (QWidget *parent, lay::MainWindow *mw, const char *name)
|
SettingsForm::SettingsForm (QWidget *parent, lay::PluginRoot *plugin_root, const char *name)
|
||||||
: QDialog (parent), Ui::SettingsForm (),
|
: QDialog (parent), Ui::SettingsForm (),
|
||||||
mp_main_window (mw), m_finalize_recursion (false)
|
mp_plugin_root (plugin_root), m_finalize_recursion (false)
|
||||||
{
|
{
|
||||||
setObjectName (QString::fromUtf8 (name));
|
setObjectName (QString::fromUtf8 (name));
|
||||||
|
|
||||||
|
|
@ -237,7 +237,7 @@ SettingsForm::setup ()
|
||||||
|
|
||||||
// setup the custom config pages
|
// setup the custom config pages
|
||||||
for (std::vector <lay::ConfigPage *>::iterator cp = m_config_pages.begin (); cp != m_config_pages.end (); ++cp) {
|
for (std::vector <lay::ConfigPage *>::iterator cp = m_config_pages.begin (); cp != m_config_pages.end (); ++cp) {
|
||||||
(*cp)->setup (mp_main_window);
|
(*cp)->setup (mp_plugin_root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -246,14 +246,14 @@ SettingsForm::commit ()
|
||||||
{
|
{
|
||||||
// commit the custom config pages
|
// commit the custom config pages
|
||||||
for (std::vector <lay::ConfigPage *>::iterator cp = m_config_pages.begin (); cp != m_config_pages.end (); ++cp) {
|
for (std::vector <lay::ConfigPage *>::iterator cp = m_config_pages.begin (); cp != m_config_pages.end (); ++cp) {
|
||||||
(*cp)->commit (mp_main_window);
|
(*cp)->commit (mp_plugin_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_finalize_recursion = true;
|
m_finalize_recursion = true;
|
||||||
try {
|
try {
|
||||||
// config_end will make the main window call setup on the settings form.
|
// config_end will make the main window call setup on the settings form.
|
||||||
// the recursion sentinel takes care of that.
|
// the recursion sentinel takes care of that.
|
||||||
mp_main_window->config_end ();
|
mp_plugin_root->config_end ();
|
||||||
m_finalize_recursion = false;
|
m_finalize_recursion = false;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
m_finalize_recursion = false;
|
m_finalize_recursion = false;
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@
|
||||||
namespace lay
|
namespace lay
|
||||||
{
|
{
|
||||||
|
|
||||||
class MainWindow;
|
class PluginRoot;
|
||||||
class ConfigPage;
|
class ConfigPage;
|
||||||
|
|
||||||
class SettingsForm
|
class SettingsForm
|
||||||
|
|
@ -46,7 +46,7 @@ class SettingsForm
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SettingsForm (QWidget *parent, lay::MainWindow *lv, const char *name);
|
SettingsForm (QWidget *parent, lay::PluginRoot *plugin_root, const char *name);
|
||||||
|
|
||||||
void setup ();
|
void setup ();
|
||||||
void commit ();
|
void commit ();
|
||||||
|
|
@ -58,7 +58,7 @@ public slots:
|
||||||
void item_changed (QTreeWidgetItem *, QTreeWidgetItem *);
|
void item_changed (QTreeWidgetItem *, QTreeWidgetItem *);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
lay::MainWindow *mp_main_window;
|
lay::PluginRoot *mp_plugin_root;
|
||||||
std::vector <lay::ConfigPage *> m_config_pages;
|
std::vector <lay::ConfigPage *> m_config_pages;
|
||||||
bool m_finalize_recursion;
|
bool m_finalize_recursion;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ std::string tech_string_from_name (const std::string &tn)
|
||||||
}
|
}
|
||||||
|
|
||||||
TechnologyController::TechnologyController ()
|
TechnologyController::TechnologyController ()
|
||||||
: PluginDeclaration (), mp_editor (0), mp_mw (0), mp_active_technology (0)
|
: PluginDeclaration (), mp_editor (0), mp_mw (0), mp_plugin_root (0), mp_active_technology (0)
|
||||||
{
|
{
|
||||||
m_configure_enabled = true;
|
m_configure_enabled = true;
|
||||||
m_current_technology_updated = false;
|
m_current_technology_updated = false;
|
||||||
|
|
@ -72,7 +72,8 @@ TechnologyController::instance ()
|
||||||
void
|
void
|
||||||
TechnologyController::initialize (lay::PluginRoot *root)
|
TechnologyController::initialize (lay::PluginRoot *root)
|
||||||
{
|
{
|
||||||
mp_mw = dynamic_cast <lay::MainWindow *> (root);
|
mp_plugin_root = root;
|
||||||
|
mp_mw = lay::MainWindow::instance ();
|
||||||
if (mp_mw) {
|
if (mp_mw) {
|
||||||
mp_editor = new lay::TechSetupDialog (mp_mw);
|
mp_editor = new lay::TechSetupDialog (mp_mw);
|
||||||
mp_editor->setModal (false);
|
mp_editor->setModal (false);
|
||||||
|
|
@ -192,7 +193,7 @@ TechnologyController::update_active_technology ()
|
||||||
#if 0
|
#if 0
|
||||||
// Hint with this implementation, the current technology follows the current layout.
|
// Hint with this implementation, the current technology follows the current layout.
|
||||||
// Although that's a nice way to display the current technology, it's pretty confusing
|
// Although that's a nice way to display the current technology, it's pretty confusing
|
||||||
lay::PluginRoot *pr = mp_mw;
|
lay::PluginRoot *pr = mp_plugin_root;
|
||||||
if (pr) {
|
if (pr) {
|
||||||
pr->config_set (cfg_initial_technology, active_tech);
|
pr->config_set (cfg_initial_technology, active_tech);
|
||||||
}
|
}
|
||||||
|
|
@ -203,7 +204,7 @@ void
|
||||||
TechnologyController::technologies_changed ()
|
TechnologyController::technologies_changed ()
|
||||||
{
|
{
|
||||||
// update the configuration to reflect the persisted technologies
|
// update the configuration to reflect the persisted technologies
|
||||||
lay::PluginRoot *pr = mp_mw;
|
lay::PluginRoot *pr = mp_plugin_root;
|
||||||
if (pr) {
|
if (pr) {
|
||||||
m_configure_enabled = false;
|
m_configure_enabled = false;
|
||||||
try {
|
try {
|
||||||
|
|
@ -474,9 +475,7 @@ TechnologyController::show_editor ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mp_mw) {
|
mp_plugin_root->config_set (cfg_tech_editor_window_state, lay::save_dialog_state (mp_editor));
|
||||||
mp_mw->config_set (cfg_tech_editor_window_state, lay::save_dialog_state (mp_editor));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string &
|
const std::string &
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,7 @@ private:
|
||||||
bool m_technologies_configured;
|
bool m_technologies_configured;
|
||||||
lay::TechSetupDialog *mp_editor;
|
lay::TechSetupDialog *mp_editor;
|
||||||
lay::MainWindow *mp_mw;
|
lay::MainWindow *mp_mw;
|
||||||
|
lay::PluginRoot *mp_plugin_root;
|
||||||
std::vector<std::string> m_paths;
|
std::vector<std::string> m_paths;
|
||||||
std::vector<db::Technology> m_temp_tech;
|
std::vector<db::Technology> m_temp_tech;
|
||||||
db::Technology *mp_active_technology;
|
db::Technology *mp_active_technology;
|
||||||
|
|
|
||||||
|
|
@ -849,18 +849,28 @@ Class<gsi::ButtonStateNamespace> decl_ButtonState ("lay", "ButtonState",
|
||||||
);
|
);
|
||||||
|
|
||||||
static std::vector<std::string>
|
static std::vector<std::string>
|
||||||
get_config_names (lay::PluginRoot *view)
|
get_config_names (lay::PluginRoot *root)
|
||||||
{
|
{
|
||||||
std::vector<std::string> names;
|
std::vector<std::string> names;
|
||||||
view->get_config_names (names);
|
root->get_config_names (names);
|
||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
lay::PluginRoot *config_root_instance ()
|
static lay::PluginRoot *config_root_instance ()
|
||||||
{
|
{
|
||||||
return lay::PluginRoot::instance ();
|
return lay::PluginRoot::instance ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static tl::Variant get_config (lay::PluginRoot *root, const std::string &name)
|
||||||
|
{
|
||||||
|
std::string value;
|
||||||
|
if (root->config_get (name, value)) {
|
||||||
|
return tl::Variant (value);
|
||||||
|
} else {
|
||||||
|
return tl::Variant ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Exposes the PluginRoot interface
|
* @brief Exposes the PluginRoot interface
|
||||||
*
|
*
|
||||||
|
|
@ -868,7 +878,7 @@ lay::PluginRoot *config_root_instance ()
|
||||||
* identify the plugin root node for configuration. The Plugin nature of this interface
|
* identify the plugin root node for configuration. The Plugin nature of this interface
|
||||||
* is somewhat artificial and may be removed later.
|
* is somewhat artificial and may be removed later.
|
||||||
*
|
*
|
||||||
* TODO: this is a duplicate of the respective methods in LayoutView and MainWindow.
|
* TODO: this is a duplicate of the respective methods in LayoutView and Application.
|
||||||
* This is intentional since we don't want to spend the only derivation path on this.
|
* This is intentional since we don't want to spend the only derivation path on this.
|
||||||
* Once there is a mixin concept, provide a path through that concept.
|
* Once there is a mixin concept, provide a path through that concept.
|
||||||
*/
|
*/
|
||||||
|
|
@ -898,13 +908,13 @@ Class<lay::PluginRoot> decl_PluginRoot ("lay", "PluginRoot",
|
||||||
"exist. If it does and an error occured, the error message is printed\n"
|
"exist. If it does and an error occured, the error message is printed\n"
|
||||||
"on stderr. In both cases, false is returned.\n"
|
"on stderr. In both cases, false is returned.\n"
|
||||||
) +
|
) +
|
||||||
method ("get_config", (bool (lay::PluginRoot::*) (const std::string &, std::string &) const) &lay::PluginRoot::config_get,
|
method_ext ("get_config", &get_config,
|
||||||
"@brief Get the value of a local configuration parameter\n"
|
"@brief Gets the value of a local configuration parameter\n"
|
||||||
"\n"
|
"\n"
|
||||||
"@args name\n"
|
"@args name\n"
|
||||||
"@param name The name of the configuration parameter whose value shall be obtained (a string)\n"
|
"@param name The name of the configuration parameter whose value shall be obtained (a string)\n"
|
||||||
"\n"
|
"\n"
|
||||||
"@return The value of the parameter\n"
|
"@return The value of the parameter or nil if there is no such parameter\n"
|
||||||
) +
|
) +
|
||||||
method ("set_config", (void (lay::PluginRoot::*) (const std::string &, const std::string &)) &lay::PluginRoot::config_set,
|
method ("set_config", (void (lay::PluginRoot::*) (const std::string &, const std::string &)) &lay::PluginRoot::config_set,
|
||||||
"@brief Set a local configuration parameter with the given name to the given value\n"
|
"@brief Set a local configuration parameter with the given name to the given value\n"
|
||||||
|
|
@ -936,11 +946,16 @@ Class<lay::PluginRoot> decl_PluginRoot ("lay", "PluginRoot",
|
||||||
),
|
),
|
||||||
"@brief Root of the configuration space in the plugin context\n"
|
"@brief Root of the configuration space in the plugin context\n"
|
||||||
"\n"
|
"\n"
|
||||||
"This class provides access to the root configuration space. This object provides access to the configuration space in the context "
|
"This class provides access to the root configuration space in the context "
|
||||||
"of plugin programming.\n"
|
"of plugin programming. You can use this class to obtain configuration parameters "
|
||||||
"Plugins are organized in a configuration tree. Configuration settings are propagated down to the individual plugins. "
|
"from the configuration tree during plugin initialization. However, the "
|
||||||
"If there is a main window, the configuration root is identical with this object, so configuration settings "
|
"preferred way of plugin configuration is through \\Plugin#configure.\n"
|
||||||
"applied in the configuration root are available to all views.\n"
|
"\n"
|
||||||
|
"Currently, the application object provides an identical entry point for configuration modification. "
|
||||||
|
"For example, \"Application::instance.set_config\" is identical to \"PluginRoot::instance.set_config\". "
|
||||||
|
"Hence there is little motivation for the PluginRoot class currently and "
|
||||||
|
"this interface may be modified or removed in the future."
|
||||||
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"This class has been introduced in version 0.25.\n"
|
"This class has been introduced in version 0.25.\n"
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -247,9 +247,9 @@ const int timer_interval = 500;
|
||||||
|
|
||||||
static LayoutView *ms_current = 0;
|
static LayoutView *ms_current = 0;
|
||||||
|
|
||||||
LayoutView::LayoutView (db::Manager *manager, bool editable, lay::PluginRoot *root, QWidget *parent, const char *name, unsigned int options)
|
LayoutView::LayoutView (db::Manager *manager, bool editable, lay::Plugin *plugin_parent, QWidget *parent, const char *name, unsigned int options)
|
||||||
: QFrame (parent),
|
: QFrame (parent),
|
||||||
lay::Plugin (root),
|
lay::Plugin (plugin_parent),
|
||||||
m_editable (editable),
|
m_editable (editable),
|
||||||
m_options (options),
|
m_options (options),
|
||||||
m_annotation_shapes (manager),
|
m_annotation_shapes (manager),
|
||||||
|
|
@ -259,7 +259,7 @@ LayoutView::LayoutView (db::Manager *manager, bool editable, lay::PluginRoot *ro
|
||||||
tl::DeferredMethodScheduler::instance ();
|
tl::DeferredMethodScheduler::instance ();
|
||||||
|
|
||||||
setObjectName (QString::fromUtf8 (name));
|
setObjectName (QString::fromUtf8 (name));
|
||||||
init (manager, root, parent);
|
init (manager, plugin_root_maybe_null (), parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
LayoutView::LayoutView (lay::LayoutView *source, db::Manager *manager, bool editable, lay::PluginRoot *root, QWidget *parent, const char *name, unsigned int options)
|
LayoutView::LayoutView (lay::LayoutView *source, db::Manager *manager, bool editable, lay::PluginRoot *root, QWidget *parent, const char *name, unsigned int options)
|
||||||
|
|
@ -537,7 +537,9 @@ LayoutView::init (db::Manager *mgr, lay::PluginRoot *root, QWidget * /*parent*/)
|
||||||
connect (mp_timer, SIGNAL (timeout ()), this, SLOT (timer ()));
|
connect (mp_timer, SIGNAL (timeout ()), this, SLOT (timer ()));
|
||||||
mp_timer->start (timer_interval);
|
mp_timer->start (timer_interval);
|
||||||
|
|
||||||
|
if (root) {
|
||||||
create_plugins (root);
|
create_plugins (root);
|
||||||
|
}
|
||||||
|
|
||||||
m_new_layer_props.layer = 1;
|
m_new_layer_props.layer = 1;
|
||||||
m_new_layer_props.datatype = 0;
|
m_new_layer_props.datatype = 0;
|
||||||
|
|
@ -4468,6 +4470,8 @@ LayoutView::background_color (QColor c)
|
||||||
mp_canvas->set_colors (c, contrast, mp_canvas->active_color ());
|
mp_canvas->set_colors (c, contrast, mp_canvas->active_color ());
|
||||||
|
|
||||||
update_content ();
|
update_content ();
|
||||||
|
|
||||||
|
background_color_changed_event ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -182,7 +182,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Constructor
|
* @brief Constructor
|
||||||
*/
|
*/
|
||||||
LayoutView (db::Manager *mgr, bool editable, lay::PluginRoot *root, QWidget *parent = 0, const char *name = "view", unsigned int options = (unsigned int) LV_Normal);
|
LayoutView (db::Manager *mgr, bool editable, lay::Plugin *plugin_parent, QWidget *parent = 0, const char *name = "view", unsigned int options = (unsigned int) LV_Normal);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Constructor (clone from another view)
|
* @brief Constructor (clone from another view)
|
||||||
|
|
@ -651,6 +651,11 @@ public:
|
||||||
*/
|
*/
|
||||||
tl::Event viewport_changed_event;
|
tl::Event viewport_changed_event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This event is triggered if the background color changed
|
||||||
|
*/
|
||||||
|
tl::Event background_color_changed_event;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief An event signalling that the layer list has changed.
|
* @brief An event signalling that the layer list has changed.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -305,7 +305,7 @@ Plugin::config_set (const std::string &name, const std::string &value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
do_config_set (name, value);
|
do_config_set (name, value, false);
|
||||||
|
|
||||||
// schedule a configuration finalization call (once for all config_set calls)
|
// schedule a configuration finalization call (once for all config_set calls)
|
||||||
dm_finalize_config ();
|
dm_finalize_config ();
|
||||||
|
|
@ -363,6 +363,25 @@ Plugin::get_config_names (std::vector<std::string> &names) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PluginRoot *
|
||||||
|
Plugin::plugin_root ()
|
||||||
|
{
|
||||||
|
PluginRoot *pr = plugin_root_maybe_null ();
|
||||||
|
tl_assert (pr != 0);
|
||||||
|
return pr;
|
||||||
|
}
|
||||||
|
|
||||||
|
PluginRoot *
|
||||||
|
Plugin::plugin_root_maybe_null ()
|
||||||
|
{
|
||||||
|
Plugin *p = this;
|
||||||
|
while (p->mp_parent) {
|
||||||
|
p = p->mp_parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dynamic_cast<PluginRoot *> (p);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Plugin::do_config_setup (Plugin *target)
|
Plugin::do_config_setup (Plugin *target)
|
||||||
{
|
{
|
||||||
|
|
@ -371,7 +390,7 @@ Plugin::do_config_setup (Plugin *target)
|
||||||
}
|
}
|
||||||
// local configurations override the parent's configuration, i.e. are applied after the parents settings
|
// local configurations override the parent's configuration, i.e. are applied after the parents settings
|
||||||
for (std::map<std::string, std::string>::const_iterator p = m_repository.begin (); p != m_repository.end (); ++p) {
|
for (std::map<std::string, std::string>::const_iterator p = m_repository.begin (); p != m_repository.end (); ++p) {
|
||||||
target->do_config_set (p->first, p->second);
|
target->do_config_set (p->first, p->second, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -385,8 +404,14 @@ Plugin::do_config_end ()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Plugin::do_config_set (const std::string &name, const std::string &value)
|
Plugin::do_config_set (const std::string &name, const std::string &value, bool for_child)
|
||||||
{
|
{
|
||||||
|
if (for_child) {
|
||||||
|
// this is the case when we impose a configuration from the parent: in this case we
|
||||||
|
// have to remove it from the repository of local parameters.
|
||||||
|
m_repository.erase (name);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (configure (name, value)) {
|
if (configure (name, value)) {
|
||||||
// taken by us - don't propagate to the children
|
// taken by us - don't propagate to the children
|
||||||
|
|
@ -398,7 +423,7 @@ Plugin::do_config_set (const std::string &name, const std::string &value)
|
||||||
|
|
||||||
// propagate to all children (not only the first that takes it!)
|
// propagate to all children (not only the first that takes it!)
|
||||||
for (tl::weak_collection<Plugin>::iterator c = m_children.begin (); c != m_children.end (); ++c) {
|
for (tl::weak_collection<Plugin>::iterator c = m_children.begin (); c != m_children.end (); ++c) {
|
||||||
c->do_config_set (name, value);
|
c->do_config_set (name, value, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -532,7 +532,8 @@ public:
|
||||||
*
|
*
|
||||||
* In order to make configuration changes effective, this method
|
* In order to make configuration changes effective, this method
|
||||||
* must be called. It calls config_finalize recursively on the
|
* must be called. It calls config_finalize recursively on the
|
||||||
* children.
|
* children. In GUI-enabled applications this step is optional
|
||||||
|
* and is performed automatically through a timer.
|
||||||
*/
|
*/
|
||||||
void config_end ();
|
void config_end ();
|
||||||
|
|
||||||
|
|
@ -632,6 +633,19 @@ public:
|
||||||
*/
|
*/
|
||||||
void get_config_names (std::vector<std::string> &names) const;
|
void get_config_names (std::vector<std::string> &names) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the plugin root (the parent plugin not having another parent)
|
||||||
|
* The returned pointer is guaranteed to be non-zero.
|
||||||
|
*/
|
||||||
|
PluginRoot *plugin_root ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the plugin root (the parent plugin not having another parent)
|
||||||
|
* This version may return null, if the plugin is instantiated without a
|
||||||
|
* root.
|
||||||
|
*/
|
||||||
|
PluginRoot *plugin_root_maybe_null ();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Menu command handler
|
* @brief Menu command handler
|
||||||
*
|
*
|
||||||
|
|
@ -761,7 +775,7 @@ private:
|
||||||
/**
|
/**
|
||||||
* @brief Do the actual set or pass to the children if not taken
|
* @brief Do the actual set or pass to the children if not taken
|
||||||
*/
|
*/
|
||||||
bool do_config_set (const std::string &name, const std::string &value);
|
bool do_config_set (const std::string &name, const std::string &value, bool for_child);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Recursively call config_finalize
|
* @brief Recursively call config_finalize
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue