diff --git a/src/buddies/src/bd/strmrun.cc b/src/buddies/src/bd/strmrun.cc index 796966259..f76976389 100644 --- a/src/buddies/src/bd/strmrun.cc +++ b/src/buddies/src/bd/strmrun.cc @@ -87,5 +87,6 @@ BD_PUBLIC int strmrun (int argc, char *argv[]) lym::Macro macro; macro.load_from (script); + macro.set_file_path (script); return macro.run (); } diff --git a/src/lay/lay/layMacroEditorDialog.cc b/src/lay/lay/layMacroEditorDialog.cc index 308bf4d8e..1b33d9429 100644 --- a/src/lay/lay/layMacroEditorDialog.cc +++ b/src/lay/lay/layMacroEditorDialog.cc @@ -668,18 +668,21 @@ BEGIN_PROTECTED } } - if (collection && (force_add || (collection->begin () == collection->end () && collection->begin_children () == collection->end_children ()))) { + bool open_template_dialog = false; + if (! force_add && collection && (collection->begin () == collection->end () && collection->begin_children () == collection->end_children ())) { + TipDialog td (this, + tl::to_string (QObject::tr ("To get started with the macro development feature, read the documentation provided: About Macro Development.")), + "macro-editor-basic-tips"); + open_template_dialog = td.exec_dialog () && td.will_be_shown (); + } + + if (collection && (force_add || open_template_dialog)) { lym::Macro *m = new_macro (); if (force_add && m) { set_run_macro (m); } } - TipDialog td (this, - tl::to_string (QObject::tr ("To get started with the macro development feature, read the documentation provided: About Macro Development.")), - "macro-editor-basic-tips"); - td.exec_dialog (); - } else { if (! cat.empty ()) { diff --git a/src/laybasic/laybasic/layTipDialog.cc b/src/laybasic/laybasic/layTipDialog.cc index b4510d4da..416f64468 100644 --- a/src/laybasic/laybasic/layTipDialog.cc +++ b/src/laybasic/laybasic/layTipDialog.cc @@ -128,12 +128,9 @@ TipDialog::no_pressed () accept (); } -bool -TipDialog::do_exec_dialog (button_type *button) +static std::pair +tip_dialog_status (const std::string &key) { - bool must_show = true; - mp_res = button; - std::string th; if (lay::Dispatcher::instance ()) { lay::Dispatcher::instance ()->config_get (cfg_tip_window_hidden, th); @@ -148,20 +145,39 @@ TipDialog::do_exec_dialog (button_type *button) } int r = -1; ex.test ("=") && ex.try_read (r); - if (k == m_key) { - if (r >= 0) { - *mp_res = button_type (r); - } - must_show = false; - break; + if (k == key) { + return std::make_pair (false, r); } ex.test (","); } - if (must_show) { + return std::make_pair (true, -1); +} + +bool +TipDialog::will_be_shown () +{ + return tip_dialog_status (m_key).first; +} + +bool +TipDialog::do_exec_dialog (button_type *button) +{ + mp_res = button; + + std::string th; + if (lay::Dispatcher::instance ()) { + lay::Dispatcher::instance ()->config_get (cfg_tip_window_hidden, th); + } + + std::pair td_status = tip_dialog_status (m_key); + if (td_status.first) { exec (); return true; } else { + if (td_status.second >= 0) { + *mp_res = button_type (td_status.second); + } return false; } } diff --git a/src/laybasic/laybasic/layTipDialog.h b/src/laybasic/laybasic/layTipDialog.h index 90627304f..4a0a74618 100644 --- a/src/laybasic/laybasic/layTipDialog.h +++ b/src/laybasic/laybasic/layTipDialog.h @@ -65,6 +65,11 @@ public: */ ~TipDialog (); + /** + * @brief Returns true, if the tip dialog will be shown + */ + bool will_be_shown (); + /** * @brief Show the dialog * diff --git a/src/lym/lym/lymMacro.cc b/src/lym/lym/lymMacro.cc index 1cfefd7b1..0c00c2847 100644 --- a/src/lym/lym/lymMacro.cc +++ b/src/lym/lym/lymMacro.cc @@ -251,6 +251,7 @@ void Macro::load_from (const std::string &fn) } m_modified = true; + m_is_file = true; on_changed (); } @@ -293,9 +294,6 @@ void Macro::load_from_string (const std::string &text, const std::string &url) void Macro::load () { load_from (path ()); - m_modified = false; - m_is_file = true; - on_changed (); } bool @@ -449,13 +447,13 @@ void Macro::reset_modified () bool Macro::rename (const std::string &n) { - if (m_is_file) { + if (m_is_file && parent ()) { std::string suffix = suffix_for_format (m_interpreter, m_dsl_interpreter, m_format); if (tl::verbosity () >= 20) { tl::log << "Renaming macro " << path () << " to " << n; } QFile f (tl::to_qstring (path ())); - if (! f.rename (QFileInfo (QDir (tl::to_qstring (mp_parent->path ())), tl::to_qstring (n + suffix)).filePath ())) { + if (! f.rename (QFileInfo (QDir (tl::to_qstring (parent ()->path ())), tl::to_qstring (n + suffix)).filePath ())) { return false; } } @@ -1294,14 +1292,15 @@ MacroCollection::add_folder (const std::string &description, const std::string & begin_changes (); MacroCollection *mc = m_folders.insert (std::make_pair (path, new MacroCollection ())).first->second; - mc->set_parent (this); mc->set_name (path); mc->set_description (description); mc->set_category (cat); mc->set_readonly (readonly); mc->scan (path); + mc->set_parent (this); on_changed (); + on_macro_changed (0); return mc; } @@ -1376,7 +1375,6 @@ void MacroCollection::scan (const std::string &path) } if (! found) { Macro *m = m_macros.insert (std::make_pair (n, new Macro ()))->second; - m->set_parent (this); m->set_interpreter (interpreter); m->set_autorun_default (autorun); m->set_autorun (autorun); @@ -1387,6 +1385,7 @@ void MacroCollection::scan (const std::string &path) m->set_readonly (m_readonly); m->reset_modified (); m->set_is_file (); + m->set_parent (this); } } @@ -1425,6 +1424,7 @@ void MacroCollection::scan (const std::string &path) try { std::string n = tl::to_string (QFileInfo (*f).completeBaseName ()); + std::string mp = tl::to_string (dir.absoluteFilePath (*f)); Macro::Format format = Macro::NoFormat; Macro::Interpreter interpreter = Macro::None; @@ -1451,10 +1451,11 @@ void MacroCollection::scan (const std::string &path) m->set_autorun (autorun); m->set_interpreter (interpreter); m->set_dsl_interpreter (dsl_name); - m->set_parent (this); m->set_name (n); - m->load (); + m->load_from (mp); + m->reset_modified (); m->set_readonly (m_readonly); + m->set_parent (this); } } @@ -1478,12 +1479,12 @@ void MacroCollection::scan (const std::string &path) MacroCollection *&mc = m_folders.insert (std::make_pair (n, (MacroCollection *) 0)).first->second; if (! mc) { mc = new MacroCollection (); - mc->set_parent (this); mc->set_name (n); mc->set_virtual_mode (NotVirtual); bool ro = (m_readonly || ! QFileInfo (dir.filePath (*f)).isWritable ()); mc->set_readonly (ro); mc->scan (tl::to_string (dir.filePath (*f))); + mc->set_parent (this); } } catch (tl::Exception &ex) {