# # # patch "src/model/InventoryItem.cpp" # from [0cc1eba1bbfb48ad5a61ca2cfb038f6485c527a2] # to [5b80373f14f1992b39d36749aa2673b608888ba5] # # patch "src/model/InventoryModel.cpp" # from [fff63c61d913db126f42c97b8a08a2511b55a05e] # to [b167f505d33c9e06da9effe28315e4b53eb2681a] # # patch "src/model/InventoryModel.h" # from [01990ea3beecefff8b773a31a92bd29c60276a69] # to [b97a6e7d1d8eb4cdc052765d5808e0905d24d397] # # patch "src/view/widgets/InventoryViewDelegate.cpp" # from [7f98ffbb697062e56bd3dc304129aa698d87b58b] # to [a5c1dc8d440464612fc7679cc5ae86e92dcae50f] # # patch "src/view/widgets/InventoryViewDelegate.h" # from [bb14c373a2f671e55237ed612fb01cdf80591111] # to [6259eb2aa1294e18becdabd12583863d9fd91d7c] # ============================================================ --- src/model/InventoryItem.cpp 0cc1eba1bbfb48ad5a61ca2cfb038f6485c527a2 +++ src/model/InventoryItem.cpp 5b80373f14f1992b39d36749aa2673b608888ba5 @@ -334,6 +334,10 @@ QVariant InventoryItem::data(int column, } return QVariant(); } + else if (role == Qt::EditRole && column == 0) + { + return QVariant(getFilename()); + } return ModelItem::data(column, role); } ============================================================ --- src/model/InventoryModel.cpp fff63c61d913db126f42c97b8a08a2511b55a05e +++ src/model/InventoryModel.cpp b167f505d33c9e06da9effe28315e4b53eb2681a @@ -227,6 +227,34 @@ QVariant InventoryModel::data(const QMod return item->data(index.column(), role); } +bool InventoryModel::setData(const QModelIndex & index, const QVariant & data, int role = Qt::EditRole) +{ + if (role != Qt::EditRole || index.column() != 0) + return false; + + ModelItem * item = static_cast(index.internalPointer()); + InventoryItem * invitem = qobject_cast(item); + if (!invitem) + return false; + + QString newFilename = data.toString(); + if (newFilename.indexOf(QRegExp("[/\\\?!:]")) != -1) + return false; + + QString oldFilename = invitem->getFilename(); + if (oldFilename == newFilename) + return true; + + QString baseDirectory = invitem->getBaseDirectory(); + if (!baseDirectory.isEmpty()) + { + baseDirectory.append("/"); + } + + renamePath(baseDirectory + oldFilename, baseDirectory + newFilename); + return true; +} + Qt::ItemFlags InventoryModel::flags(const QModelIndex & index) const { if (!index.isValid()) return 0; @@ -244,20 +272,9 @@ Qt::ItemFlags InventoryModel::flags(cons } InventoryItem * invitem = dynamic_cast(item); - if (invitem) + if (invitem && invitem->isNewNode() && index.column() == 0) { - /* - // Disabled until we have figured out how to implement renaming properly - if (item->isNewNode()) - { - flags |= Qt::ItemIsEditable | Qt::ItemIsDragEnabled; - - if (item->isDirectory()) - { - flags |= Qt::ItemIsDropEnabled; - } - } - */ + flags |= Qt::ItemIsEditable; } return flags; } @@ -411,6 +428,14 @@ void InventoryModel::revertPaths(const Q runWorkspaceCommand(args); } +void InventoryModel::renamePath(const QString & oldPath, const QString & newPath) +{ + QStringList args; + args << "rename" << oldPath << newPath; + + runWorkspaceCommand(args); +} + void InventoryModel::ignorePaths(const QStringList & paths) { QString path(workspacePath); ============================================================ --- src/model/InventoryModel.h 01990ea3beecefff8b773a31a92bd29c60276a69 +++ src/model/InventoryModel.h b97a6e7d1d8eb4cdc052765d5808e0905d24d397 @@ -40,6 +40,7 @@ public: ~InventoryModel(); QVariant data(const QModelIndex &, int) const; + bool setData(const QModelIndex &, const QVariant &, int); Qt::ItemFlags flags(const QModelIndex &) const; QVariant headerData(int, Qt::Orientation, int) const; QModelIndex index(int, int, const QModelIndex &) const; @@ -57,6 +58,7 @@ public slots: void addPaths(const QStringList &); void dropPaths(const QStringList &); void revertPaths(const QStringList &); + void renamePath(const QString &, const QString &); void ignorePaths(const QStringList &); void unignorePaths(const QStringList &); ============================================================ --- src/view/widgets/InventoryViewDelegate.cpp 7f98ffbb697062e56bd3dc304129aa698d87b58b +++ src/view/widgets/InventoryViewDelegate.cpp a5c1dc8d440464612fc7679cc5ae86e92dcae50f @@ -22,7 +22,7 @@ InventoryViewDelegate::InventoryViewDele #include InventoryViewDelegate::InventoryViewDelegate(QObject * parent) - : QItemDelegate(parent) + : QStyledItemDelegate(parent) {} QWidget * InventoryViewDelegate::createEditor( @@ -32,20 +32,14 @@ QWidget * InventoryViewDelegate::createE { Q_UNUSED(option); Q_UNUSED(index); - - QLineEdit * lineEdit = new QLineEdit(parent); - connect( - lineEdit, SIGNAL(editingFinished()), - this, SLOT(emitCommitData()) - ); - return lineEdit; + return new QLineEdit(parent); } void InventoryViewDelegate::setEditorData(QWidget * editor, const QModelIndex & index) const { QLineEdit * lineEdit = qobject_cast(editor); if (!lineEdit) return; - lineEdit->setText(index.model()->data(index).toString()); + lineEdit->setText(index.model()->data(index, Qt::EditRole).toString()); } void InventoryViewDelegate::setModelData( @@ -55,11 +49,6 @@ void InventoryViewDelegate::setModelData { QLineEdit * lineEdit = qobject_cast(editor); if (!lineEdit) return; - model->setData(index, lineEdit->text()); + model->setData(index, lineEdit->text(), Qt::EditRole); } -void InventoryViewDelegate::emitCommitData() -{ - emit commitData(qobject_cast(sender())); -} - ============================================================ --- src/view/widgets/InventoryViewDelegate.h bb14c373a2f671e55237ed612fb01cdf80591111 +++ src/view/widgets/InventoryViewDelegate.h 6259eb2aa1294e18becdabd12583863d9fd91d7c @@ -19,9 +19,9 @@ #ifndef INVENTORY_VIEW_DELEGATE_H #define INVENTORY_VIEW_DELEGATE_H -#include +#include -class InventoryViewDelegate : public QItemDelegate +class InventoryViewDelegate : public QStyledItemDelegate { Q_OBJECT public: @@ -30,9 +30,6 @@ public: QWidget * createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const; void setEditorData(QWidget *, const QModelIndex &) const; void setModelData(QWidget *, QAbstractItemModel *, const QModelIndex &) const; - -private slots: - void emitCommitData(); }; #endif