summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/dialogs
diff options
context:
space:
mode:
authorcon <qtc-committer@nokia.com>2011-01-21 10:58:06 +0100
committercon <qtc-committer@nokia.com>2011-02-18 17:15:39 +0100
commiteaea867e53dab6a84e69d86b176956664608b22f (patch)
tree945af9705451a33b04a8a17083b680d2fc419218 /src/plugins/coreplugin/dialogs
parentd768008d608c034fde1a38098dc857e9ab5799ff (diff)
downloadqt-creator-eaea867e53dab6a84e69d86b176956664608b22f.tar.gz
Implement renaming of tools and categories.
Not possible to reset them yet. Saves the change in the settings instead of writing new tools xml files. This probably needs to be adapted for tools that are "local" from the beginning.
Diffstat (limited to 'src/plugins/coreplugin/dialogs')
-rw-r--r--src/plugins/coreplugin/dialogs/externaltoolconfig.cpp75
-rw-r--r--src/plugins/coreplugin/dialogs/externaltoolconfig.h3
2 files changed, 76 insertions, 2 deletions
diff --git a/src/plugins/coreplugin/dialogs/externaltoolconfig.cpp b/src/plugins/coreplugin/dialogs/externaltoolconfig.cpp
index f95b0d8e0f..cc04b50c20 100644
--- a/src/plugins/coreplugin/dialogs/externaltoolconfig.cpp
+++ b/src/plugins/coreplugin/dialogs/externaltoolconfig.cpp
@@ -34,6 +34,8 @@
#include "externaltoolconfig.h"
#include "ui_externaltoolconfig.h"
+#include <utils/qtcassert.h>
+
#include <QtCore/QTextStream>
using namespace Core::Internal;
@@ -43,13 +45,21 @@ ExternalToolConfig::ExternalToolConfig(QWidget *parent) :
ui(new Ui::ExternalToolConfig)
{
ui->setupUi(this);
+ ui->toolTree->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed);
connect(ui->toolTree, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
this, SLOT(showInfoForItem(QTreeWidgetItem*)));
+ connect(ui->toolTree, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
+ this, SLOT(updateItem(QTreeWidgetItem *)));
showInfoForItem(0);
}
ExternalToolConfig::~ExternalToolConfig()
{
+ QMapIterator<QString, QList<ExternalTool *> > it(m_tools);
+ while (it.hasNext()) {
+ it.next();
+ qDeleteAll(it.value());
+ }
delete ui;
}
@@ -69,19 +79,32 @@ QString ExternalToolConfig::searchKeywords() const
void ExternalToolConfig::setTools(const QMap<QString, QList<ExternalTool *> > &tools)
{
- // TODO make copy of tools
+ QMapIterator<QString, QList<ExternalTool *> > it(tools);
+ while (it.hasNext()) {
+ it.next();
+ QList<ExternalTool *> itemCopy;
+ foreach (ExternalTool *tool, it.value())
+ itemCopy.append(new ExternalTool(tool));
+ m_tools.insert(it.key(), itemCopy);
+ }
- QMapIterator<QString, QList<ExternalTool *> > categories(tools);
+ bool blocked = ui->toolTree->blockSignals(true); // block itemChanged
+ Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEditable;
+ QMapIterator<QString, QList<ExternalTool *> > categories(m_tools);
while (categories.hasNext()) {
categories.next();
QString name = (categories.key().isEmpty() ? tr("External Tools Menu") : categories.key());
QTreeWidgetItem *category = new QTreeWidgetItem(ui->toolTree, QStringList() << name);
+ category->setFlags(flags);
+ category->setData(0, Qt::UserRole, name); // save the name in case of category being renamed by user
foreach (ExternalTool *tool, categories.value()) {
QTreeWidgetItem *item = new QTreeWidgetItem(category, QStringList() << tool->displayName());
+ item->setFlags(flags);
item->setData(0, Qt::UserRole, qVariantFromValue(tool));
}
}
ui->toolTree->expandAll();
+ ui->toolTree->blockSignals(blocked); // unblock itemChanged
}
void ExternalToolConfig::showInfoForItem(QTreeWidgetItem *item)
@@ -110,3 +133,51 @@ void ExternalToolConfig::showInfoForItem(QTreeWidgetItem *item)
ui->description->setCursorPosition(0);
ui->arguments->setCursorPosition(0);
}
+
+void ExternalToolConfig::updateItem(QTreeWidgetItem *item)
+{
+ ExternalTool *tool = 0;
+ if (item)
+ tool = item->data(0, Qt::UserRole).value<ExternalTool *>();
+ if (tool) {
+ // tool was renamed
+ const QString &newName = item->data(0, Qt::DisplayRole).toString();
+ if (newName == tool->displayName())
+ return;
+ if (newName.isEmpty()) {
+ // prevent empty names
+ bool blocked = ui->toolTree->blockSignals(true); // block itemChanged
+ item->setData(0, Qt::DisplayRole, tool->displayName());
+ ui->toolTree->blockSignals(blocked); // unblock itemChanged
+ return;
+ }
+ tool->setDisplayName(item->data(0, Qt::DisplayRole).toString());
+ } else {
+ // category was renamed
+ const QString &oldName = item->data(0, Qt::UserRole).toString();
+ const QString &newName = item->data(0, Qt::DisplayRole).toString();
+ if (oldName == newName)
+ return;
+ if (newName.isEmpty() && m_tools.contains(newName)) {
+ // prevent empty or duplicate names
+ bool blocked = ui->toolTree->blockSignals(true); // block itemChanged
+ item->setData(0, Qt::DisplayRole, oldName);
+ ui->toolTree->blockSignals(blocked); // unblock itemChanged
+ return;
+ }
+ QTC_ASSERT(m_tools.contains(oldName), return);
+ m_tools.insert(newName, m_tools.value(oldName));
+ m_tools.remove(oldName);
+
+ bool blocked = ui->toolTree->blockSignals(true); // block itemChanged
+ item->setData(0, Qt::UserRole, newName);
+ int currentIndex = ui->toolTree->indexOfTopLevelItem(item);
+ bool wasExpanded = ui->toolTree->isExpanded(ui->toolTree->model()->index(currentIndex, 0));
+ ui->toolTree->takeTopLevelItem(currentIndex);
+ int newIndex = m_tools.keys().indexOf(newName);
+ ui->toolTree->insertTopLevelItem(newIndex, item);
+ if (wasExpanded)
+ ui->toolTree->expand(ui->toolTree->model()->index(newIndex, 0));
+ ui->toolTree->blockSignals(blocked); // unblock itemChanged
+ }
+}
diff --git a/src/plugins/coreplugin/dialogs/externaltoolconfig.h b/src/plugins/coreplugin/dialogs/externaltoolconfig.h
index a05eb4be72..fa642366bb 100644
--- a/src/plugins/coreplugin/dialogs/externaltoolconfig.h
+++ b/src/plugins/coreplugin/dialogs/externaltoolconfig.h
@@ -55,14 +55,17 @@ public:
~ExternalToolConfig();
void setTools(const QMap<QString, QList<ExternalTool *> > &tools);
+ QMap<QString, QList<ExternalTool *> > tools() const { return m_tools; }
QString searchKeywords() const;
private slots:
void showInfoForItem(QTreeWidgetItem *item);
+ void updateItem(QTreeWidgetItem *item);
private:
Ui::ExternalToolConfig *ui;
+ QMap<QString, QList<ExternalTool *> > m_tools;
};
} // Internal