diff --git a/src/Gui/DlgMacroExecute.ui b/src/Gui/DlgMacroExecute.ui index 1b6e526ad3..319e916421 100644 --- a/src/Gui/DlgMacroExecute.ui +++ b/src/Gui/DlgMacroExecute.ui @@ -246,11 +246,24 @@ + + false + Edit + + + + false + + + Rename + + + diff --git a/src/Gui/DlgMacroExecuteImp.cpp b/src/Gui/DlgMacroExecuteImp.cpp index d512e90f82..d9de28469f 100644 --- a/src/Gui/DlgMacroExecuteImp.cpp +++ b/src/Gui/DlgMacroExecuteImp.cpp @@ -53,9 +53,9 @@ namespace Gui { MacroItem(QTreeWidget * widget, bool systemwide) : QTreeWidgetItem(widget), systemWide(systemwide){} - + ~MacroItem(){} - + bool systemWide; }; } @@ -65,8 +65,8 @@ namespace Gui { /* TRANSLATOR Gui::Dialog::DlgMacroExecuteImp */ /** - * Constructs a DlgMacroExecuteImp which is a child of 'parent', with the - * name 'name' and widget flags set to 'f' + * Constructs a DlgMacroExecuteImp which is a child of 'parent', with the + * name 'name' and widget flags set to 'f' * * The dialog will by default be modeless, unless you set 'modal' to * true to construct a modal dialog. @@ -90,7 +90,7 @@ DlgMacroExecuteImp::DlgMacroExecuteImp( QWidget* parent, Qt::WindowFlags fl ) fillUpList(); } -/** +/** * Destroys the object and frees any allocated resources */ DlgMacroExecuteImp::~DlgMacroExecuteImp() @@ -136,11 +136,15 @@ void DlgMacroExecuteImp::on_userMacroListBox_currentItemChanged(QTreeWidgetItem* executeButton->setEnabled(true); deleteButton->setEnabled(true); createButton->setEnabled(true); + editButton->setEnabled(true); + renameButton->setEnabled(true); } else { executeButton->setEnabled(false); deleteButton->setEnabled(false); createButton->setEnabled(true); + editButton->setEnabled(false); + renameButton->setEnabled(false); } } @@ -152,11 +156,15 @@ void DlgMacroExecuteImp::on_systemMacroListBox_currentItemChanged(QTreeWidgetIte executeButton->setEnabled(true); deleteButton->setEnabled(false); createButton->setEnabled(false); + editButton->setEnabled(true); //look but don't touch + renameButton->setEnabled(false); } else { executeButton->setEnabled(false); deleteButton->setEnabled(false); createButton->setEnabled(false); + editButton->setEnabled(false); + renameButton->setEnabled(false); } } @@ -170,11 +178,15 @@ void DlgMacroExecuteImp::on_tabMacroWidget_currentChanged(int index) executeButton->setEnabled(true); deleteButton->setEnabled(true); createButton->setEnabled(true); + editButton->setEnabled(true); + renameButton->setEnabled(true); } else { executeButton->setEnabled(false); deleteButton->setEnabled(false); createButton->setEnabled(true); + editButton->setEnabled(false); + renameButton->setEnabled(false); } } else { //index==1 system-wide @@ -184,11 +196,15 @@ void DlgMacroExecuteImp::on_tabMacroWidget_currentChanged(int index) executeButton->setEnabled(true); deleteButton->setEnabled(false); createButton->setEnabled(false); + editButton->setEnabled(true); //but you can't save it + renameButton->setEnabled(false); } else { executeButton->setEnabled(false); deleteButton->setEnabled(false); createButton->setEnabled(false); + editButton->setEnabled(false); + renameButton->setEnabled(false); } } @@ -376,4 +392,54 @@ void DlgMacroExecuteImp::on_deleteButton_clicked() } } +/** + * renames the selected macro + */ +void DlgMacroExecuteImp::on_renameButton_clicked() +{ + QDir dir; + QTreeWidgetItem* item = 0; + + int index = tabMacroWidget->currentIndex(); + if (index == 0) { //user-specific + item = userMacroListBox->currentItem(); + dir.setPath(this->macroPath); + } + + if (!item) + return; + + QString oldName = item->text(0); + QFileInfo oldfi(dir, oldName); + QFile oldfile(oldfi.absoluteFilePath()); + if (!oldfile.open(QFile::ReadWrite)) { + QMessageBox::warning(this, tr("System reports read-only file"), + tr("Can not rename '%1'.").arg(oldfi.absoluteFilePath())); + return; + } + + // query new name + QString fn = QInputDialog::getText(this, tr("Renaming Macro File"), + tr("Enter new name:"), QLineEdit::Normal, oldName, 0); + if (!fn.isEmpty()) { + QString suffix = QFileInfo(fn).suffix().toLower(); + if (suffix != QLatin1String("fcmacro") && suffix != QLatin1String("py")) + fn += QLatin1String(".FCMacro"); + QFileInfo fi(dir, fn); + // check if new name exists + if (fi.exists()) { + QMessageBox::warning(this, tr("Existing file"), + tr("'%1'\n already exists.").arg(fi.absoluteFilePath())); + } else { + QFile file(fi.absoluteFilePath()); + if (!oldfile.rename(fi.absoluteFilePath())) { + QMessageBox::warning(this, tr("Rename Failed"), + tr("Failed to rename to '%1'.\nPerhaps a file permission error?").arg(fi.absoluteFilePath())); + return; + } + } + fillUpList(); + } +} + #include "moc_DlgMacroExecuteImp.cpp" diff --git a/src/Gui/DlgMacroExecuteImp.h b/src/Gui/DlgMacroExecuteImp.h index 4ec5b1e51f..3090fc1721 100644 --- a/src/Gui/DlgMacroExecuteImp.h +++ b/src/Gui/DlgMacroExecuteImp.h @@ -50,6 +50,7 @@ public Q_SLOTS: void on_createButton_clicked(); void on_deleteButton_clicked(); void on_editButton_clicked(); + void on_renameButton_clicked(); protected Q_SLOTS: void on_userMacroListBox_currentItemChanged(QTreeWidgetItem*);