Different take on fixing uncategorized external tools.

Avoid relying on isNull vs isEmpty by explicitly passing a bool
found output parameter.

Task-number: QTCREATORBUG-6961
Task-number: QTCREATORBUG-6960
Task-number: QTCREATORBUG-7026
Change-Id: I1e215867fd91d2cf37ad420967b18e56cb644442
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
This commit is contained in:
Eike Ziller
2012-03-08 09:25:37 +01:00
parent 658dc6f410
commit 9f1d495cd2
2 changed files with 34 additions and 22 deletions

View File

@@ -76,7 +76,9 @@ Qt::DropActions ExternalToolModel::supportedDropActions() const
int ExternalToolModel::columnCount(const QModelIndex &parent) const
{
if (!parent.isValid() || toolForIndex(parent) || !categoryForIndex(parent).isNull())
bool categoryFound;
categoryForIndex(parent, &categoryFound);
if (!parent.isValid() || toolForIndex(parent) || categoryFound)
return 1;
return 0;
}
@@ -85,8 +87,9 @@ QVariant ExternalToolModel::data(const QModelIndex &index, int role) const
{
if (ExternalTool *tool = toolForIndex(index))
return data(tool, role);
QString category = categoryForIndex(index);
if (!category.isNull())
bool found;
QString category = categoryForIndex(index, &found);
if (found)
return data(category, role);
return QVariant();
}
@@ -124,8 +127,9 @@ QMimeData *ExternalToolModel::mimeData(const QModelIndexList &indexes) const
QModelIndex modelIndex = indexes.first();
ExternalTool *tool = toolForIndex(modelIndex);
QTC_ASSERT(tool, return 0);
QString category = categoryForIndex(modelIndex.parent());
QTC_ASSERT(!category.isNull(), return 0);
bool found;
QString category = categoryForIndex(modelIndex.parent(), &found);
QTC_ASSERT(found, return 0);
QMimeData *md = new QMimeData();
QByteArray ba;
QDataStream stream(&ba, QIODevice::WriteOnly);
@@ -143,8 +147,9 @@ bool ExternalToolModel::dropMimeData(const QMimeData *data,
Q_UNUSED(column)
if (action != Qt::MoveAction || !data)
return false;
QString toCategory = categoryForIndex(parent);
QTC_ASSERT(!toCategory.isNull(), return false);
bool found;
QString toCategory = categoryForIndex(parent, &found);
QTC_ASSERT(found, return false);
QByteArray ba = data->data(QLatin1String("application/qtcreator-externaltool-config"));
if (ba.isEmpty())
return false;
@@ -153,7 +158,6 @@ bool ExternalToolModel::dropMimeData(const QMimeData *data,
int pos = -1;
stream >> category;
stream >> pos;
QTC_ASSERT(!category.isNull(), return false);
QList<ExternalTool *> &items = m_tools[category];
QTC_ASSERT(pos >= 0 && pos < items.count(), return false);
beginRemoveRows(index(m_tools.keys().indexOf(category), 0), pos, pos);
@@ -175,8 +179,9 @@ QStringList ExternalToolModel::mimeTypes() const
QModelIndex ExternalToolModel::index(int row, int column, const QModelIndex &parent) const
{
if (column == 0 && parent.isValid()) {
QString category = categoryForIndex(parent);
if (!category.isNull()) {
bool found;
QString category = categoryForIndex(parent, &found);
if (found) {
QList<ExternalTool *> items = m_tools.value(category);
if (row < items.count()) {
return createIndex(row, 0, items.at(row));
@@ -210,8 +215,9 @@ int ExternalToolModel::rowCount(const QModelIndex &parent) const
if (toolForIndex(parent)) {
return 0;
}
QString category = categoryForIndex(parent);
if (!category.isNull()) {
bool found;
QString category = categoryForIndex(parent, &found);
if (found) {
return m_tools.value(category).count();
}
@@ -222,8 +228,9 @@ Qt::ItemFlags ExternalToolModel::flags(const QModelIndex &index) const
{
if (toolForIndex(index))
return TOOL_ITEM_FLAGS;
QString category = categoryForIndex(index);
if (!category.isNull()) {
bool found;
QString category = categoryForIndex(index, &found);
if (found) {
if (category.isEmpty())
return TOOLSMENU_ITEM_FLAGS;
return CATEGORY_ITEM_FLAGS;
@@ -244,8 +251,9 @@ bool ExternalToolModel::setData(const QModelIndex &modelIndex, const QVariant &v
emit dataChanged(modelIndex, modelIndex);
return true;
} else {
QString category = categoryForIndex(modelIndex);
if (!category.isNull()) {
bool found;
QString category = categoryForIndex(modelIndex, &found);
if (found) {
if (string.isEmpty() || m_tools.contains(string))
return false;
// rename category
@@ -287,13 +295,16 @@ ExternalTool *ExternalToolModel::toolForIndex(const QModelIndex &index) const
return static_cast<ExternalTool *>(index.internalPointer());
}
QString ExternalToolModel::categoryForIndex(const QModelIndex &index) const
QString ExternalToolModel::categoryForIndex(const QModelIndex &index, bool *found) const
{
if (index.isValid() && !index.parent().isValid() && index.column() == 0 && index.row() >= 0) {
const QList<QString> &keys = m_tools.keys();
if (index.row() < keys.count())
if (index.row() < keys.count()) {
if (found) *found = true;
return keys.at(index.row());
}
}
if (found) *found = false;
return QString();
}
@@ -331,9 +342,10 @@ QModelIndex ExternalToolModel::addCategory()
QModelIndex ExternalToolModel::addTool(const QModelIndex &atIndex)
{
QString category = categoryForIndex(atIndex);
if (category.isNull())
category = categoryForIndex(atIndex.parent());
bool found;
QString category = categoryForIndex(atIndex, &found);
if (!found)
category = categoryForIndex(atIndex.parent(), &found);
ExternalTool *tool = new ExternalTool;
tool->setDisplayCategory(category);

View File

@@ -73,7 +73,7 @@ public:
QMap<QString, QList<ExternalTool *> > tools() const;
ExternalTool *toolForIndex(const QModelIndex &modelIndex) const;
QString categoryForIndex(const QModelIndex &modelIndex) const;
QString categoryForIndex(const QModelIndex &modelIndex, bool *found) const;
void revertTool(const QModelIndex &modelIndex);
QModelIndex addCategory();
QModelIndex addTool(const QModelIndex &atIndex);