diff --git a/src/lay/lay/MacroEditorDialog.ui b/src/lay/lay/MacroEditorDialog.ui
index e3b343cb7..a166b21c9 100644
--- a/src/lay/lay/MacroEditorDialog.ui
+++ b/src/lay/lay/MacroEditorDialog.ui
@@ -1572,6 +1572,14 @@ p, li { white-space: pre-wrap; }
Ctrl+F
+
+
+ Save As
+
+
+ Save As
+
+
diff --git a/src/lay/lay/layMacroEditorDialog.cc b/src/lay/lay/layMacroEditorDialog.cc
index ec51d54a5..715b2bc09 100644
--- a/src/lay/lay/layMacroEditorDialog.cc
+++ b/src/lay/lay/layMacroEditorDialog.cc
@@ -314,6 +314,7 @@ MacroEditorDialog::MacroEditorDialog (lay::PluginRoot *pr, lym::MacroCollection
macro_tree->addAction (s3);
macro_tree->addAction (actionSaveAll);
macro_tree->addAction (actionSave);
+ macro_tree->addAction (actionSaveAs);
macro_tree->header ()->hide ();
@@ -422,6 +423,7 @@ MacroEditorDialog::MacroEditorDialog (lay::PluginRoot *pr, lym::MacroCollection
connect (actionSaveAll, SIGNAL (triggered ()), this, SLOT (save_all_button_clicked ()));
connect (saveButton, SIGNAL (clicked ()), this, SLOT (save_button_clicked ()));
connect (actionSave, SIGNAL (triggered ()), this, SLOT (save_button_clicked ()));
+ connect (actionSaveAs, SIGNAL (triggered ()), this, SLOT (save_as_button_clicked ()));
connect (dbgOn, SIGNAL (clicked (bool)), this, SLOT (set_debugging_on (bool)));
connect (runButton, SIGNAL (clicked ()), this, SLOT (run_button_clicked ()));
connect (runThisButton, SIGNAL (clicked ()), this, SLOT (run_this_button_clicked ()));
@@ -1996,7 +1998,40 @@ BEGIN_PROTECTED
END_PROTECTED
}
-void
+void
+MacroEditorDialog::save_as_button_clicked ()
+{
+ if (m_in_exec) {
+ return;
+ }
+
+BEGIN_PROTECTED
+
+ lym::Macro *m = current_macro_tree ()->current_macro ();
+ if (! m) {
+ return;
+ }
+
+ lay::FileDialog file_dialog (lay::MainWindow::instance (), tl::to_string (QObject::tr ("Save Macro As")), tl::to_string (QObject::tr ("All files (*)")), "");
+
+ std::string fn = m->path ();
+ if (file_dialog.get_save (fn)) {
+
+ m->save_to (fn);
+
+ reload_macros ();
+
+ lym::Macro *lym = mp_root->find_macro (fn);
+ if (lym) {
+ open_macro (lym);
+ }
+
+ }
+
+END_PROTECTED
+}
+
+void
MacroEditorDialog::setup_button_clicked ()
{
if (m_in_exec) {
@@ -2089,11 +2124,7 @@ MacroEditorDialog::new_macro()
// we don't want to keep the template's description
m->set_description (std::string ());
- MacroEditorPage *page = create_page (m);
- int index = tabWidget->addTab (page, tl::to_qstring (m->name ()));
- tabWidget->setTabToolTip (index, tl::to_qstring (m->summary ()));
- tabWidget->setCurrentWidget (page);
- m_tab_widgets.insert (std::make_pair (m, page));
+ open_macro (m);
// NOTE: we save to make the file watcher go silent and to keep the file system in sync
m->save ();
@@ -2710,6 +2741,16 @@ BEGIN_PROTECTED
END_PROTECTED
}
+void
+MacroEditorDialog::open_macro (lym::Macro *m)
+{
+ MacroEditorPage *page = create_page (m);
+ m_tab_widgets.insert (std::make_pair (m, page));
+ int index = tabWidget->addTab (page, tl::to_qstring (m->name ()));
+ tabWidget->setTabToolTip (index, tl::to_qstring (m->summary ()));
+ tabWidget->setCurrentWidget (page);
+}
+
void
MacroEditorDialog::item_double_clicked(lym::Macro *m)
{
@@ -2717,13 +2758,7 @@ BEGIN_PROTECTED
std::map ::iterator page = m_tab_widgets.find (m);
if (page == m_tab_widgets.end ()) {
-
- MacroEditorPage *page = create_page (m);
- m_tab_widgets.insert (std::make_pair (m, page));
- int index = tabWidget->addTab (page, tl::to_qstring (m->name ()));
- tabWidget->setTabToolTip (index, tl::to_qstring (m->summary ()));
- tabWidget->setCurrentWidget (page);
-
+ open_macro (m);
} else {
tabWidget->setCurrentIndex (tabWidget->indexOf (page->second));
}
diff --git a/src/lay/lay/layMacroEditorDialog.h b/src/lay/lay/layMacroEditorDialog.h
index 01c588ee6..ef4181ef2 100644
--- a/src/lay/lay/layMacroEditorDialog.h
+++ b/src/lay/lay/layMacroEditorDialog.h
@@ -186,6 +186,7 @@ private slots:
void new_folder_button_clicked ();
void save_all_button_clicked ();
void save_button_clicked ();
+ void save_as_button_clicked ();
void run_button_clicked ();
void run_this_button_clicked ();
void single_step_button_clicked ();
@@ -255,6 +256,7 @@ private:
lym::Macro *create_macro_here(const char *name = 0);
void move_subfolder (lym::MacroCollection *source, lym::MacroCollection *target);
lay::MacroEditorPage *create_page (lym::Macro *macro);
+ void open_macro (lym::Macro *macro);
void ensure_writeable_collection_selected ();
void update_console_text ();
void start_exec (gsi::Interpreter *interpreter);
diff --git a/src/lym/lym/lymMacro.h b/src/lym/lym/lymMacro.h
index 0d1e8778c..0a6b23121 100644
--- a/src/lym/lym/lymMacro.h
+++ b/src/lym/lym/lymMacro.h
@@ -176,10 +176,15 @@ public:
std::string path () const;
/**
- * @brief Saves the macro to the specificed path
+ * @brief Saves the macro to it's path
*/
void save ();
+ /**
+ * @brief Saves the macro to the specificed path
+ */
+ void save_to (const std::string &path);
+
/**
* @brief Delete the original file (the file behind the macro)
*
@@ -601,7 +606,6 @@ private:
void on_menu_needs_update ();
void on_changed ();
- void save_to (const std::string &path);
static bool format_from_suffix_string (const std::string &suffix, Macro::Interpreter &interpreter, std::string &dsl_name, bool &autorun_pref, Macro::Format &format);
static std::pair format_from_filename (const std::string &fn, Macro::Interpreter &interpreter, std::string &dsl_name, bool &autorun_pref, Macro::Format &format);