# # # patch "res/forms/dialogs/unaccounted_renames.ui" # from [035b00da70ee362272c7fe50039ec41364a231ff] # to [40c0a724eb560f120feab4dd944ddc858c93292a] # # patch "src/model/InventoryModel.cpp" # from [eff4e055808cb691fe5be4b3b30f3aae7c27adba] # to [0223e14d714f8b5130b3db9c034b1cb61b428aac] # # patch "src/view/dialogs/UnaccountedRenames.cpp" # from [f5c3cd56910a325ab9e0a2bb74140823985d15cd] # to [3ccbb05cdd622261afd7e80dcfb0d29452a88aa9] # # patch "src/view/dialogs/UnaccountedRenames.h" # from [b355bb8e75bf7471bbc450853c68ffd883415825] # to [35d7d6bf27df175ff17c1534ee81ae76a0311284] # # patch "src/view/dialogs/WorkspaceDialogManager.cpp" # from [cf48e378c1871ff4f7357cd3311d547c4f55ed11] # to [9f10add1de839ff515bc18addc0f1d0c411e6476] # # patch "src/view/dialogs/WorkspaceDialogManager.h" # from [0b4324f9c0a09e5a8cba428bf4a59859b7066f74] # to [281d6f2d68e274a9eeeaddd738626bdd59bf170f] # # patch "src/view/mainwindows/WorkspaceWindow.cpp" # from [fc83741e54b723b37ef5127f3f15ebfeba45fc07] # to [2a1b36678ab053784f449ed7c4540fb8a2268e9e] # ============================================================ --- res/forms/dialogs/unaccounted_renames.ui 035b00da70ee362272c7fe50039ec41364a231ff +++ res/forms/dialogs/unaccounted_renames.ui 40c0a724eb560f120feab4dd944ddc858c93292a @@ -1,7 +1,8 @@ - + + UnaccountedRenamesDialog - - + + 0 0 @@ -9,54 +10,33 @@ 316 - + Unaccounted renames - - :/icons/guitone.png + + + :/icons/guitone.png:/icons/guitone.png - - - 9 - - - 6 - + - - - 0 - - - 6 - + - + + + + 1 + + + - - - 0 - - - 6 - + - - - false - - - Perform checked renames - - - - - + Qt::Horizontal - + 40 20 @@ -65,11 +45,18 @@ - - + + + Perform checked renames + + + + + + Close - + true @@ -81,7 +68,7 @@ - + @@ -90,11 +77,11 @@ UnaccountedRenamesDialog accept() - + 399 272 - + 252 154 ============================================================ --- src/model/InventoryModel.cpp eff4e055808cb691fe5be4b3b30f3aae7c27adba +++ src/model/InventoryModel.cpp 0223e14d714f8b5130b3db9c034b1cb61b428aac @@ -439,6 +439,12 @@ void InventoryModel::renamePath(const QS QStringList args; args << "rename" << oldPath << newPath; + QFileInfo fileInfo(workspacePath + "/" + oldPath); + if (!fileInfo.exists()) + { + args << "--bookkeep-only"; + } + runWorkspaceCommand(args); } ============================================================ --- src/view/dialogs/UnaccountedRenames.cpp f5c3cd56910a325ab9e0a2bb74140823985d15cd +++ src/view/dialogs/UnaccountedRenames.cpp 3ccbb05cdd622261afd7e80dcfb0d29452a88aa9 @@ -42,6 +42,11 @@ UnaccountedRenames::UnaccountedRenames(Q this, SLOT(itemClicked(QTreeWidgetItem *, int)) ); + connect( + performRenames, SIGNAL(clicked()), + this, SLOT(doPerformRenames()) + ); + renameTree->setHeaderLabels(QStringList() << tr("Missing paths and possible rename targets") << tr("File ID (if applicable)") @@ -67,17 +72,19 @@ void UnaccountedRenames::findUnaccounted void UnaccountedRenames::findUnaccountedRenames() { - renameTree->clear(); - const QMap & renames = inventory->findUnaccountedRenames(); if (renames.size() == 0) { + QString msg = tr("No unaccounted renames found for this workspace."); + if (isVisible()) + msg = tr("No more unaccounted renames found for this workspace."); + QMessageBox::information( this, tr("Nothing found"), - tr("No unaccounted renames found for this workspace."), + msg, QMessageBox::Ok ); @@ -90,6 +97,10 @@ void UnaccountedRenames::findUnaccounted return; } + renameTree->clear(); + performRenames->setEnabled(true); + renameTree->setEnabled(true); + QFont boldFont; boldFont.setBold(true); IconProvider * iconProvider = IconProvider::singleton(); @@ -102,8 +113,7 @@ void UnaccountedRenames::findUnaccounted FileEntryList list = i.value(); QTreeWidgetItem * source = new QTreeWidgetItem(renameTree); source->setFlags(Qt::ItemIsEnabled); - source->setText(0, QString("%1 (%2)").arg(sen.path).arg(list.size())); - source->setData(0, Qt::UserRole, QVariant(sen.path)); + source->setText(0, sen.path); source->setFont(0, boldFont); source->setIcon(0, sen.is_dir ? iconProvider->getPlainFolderIcon() : @@ -150,3 +160,52 @@ void UnaccountedRenames::itemClicked(QTr item->setCheckState(0, state); } +void UnaccountedRenames::doPerformRenames() +{ + QMap renames; + + QTreeWidgetItem * rootItem = renameTree->invisibleRootItem(); + for (int i=0; i < rootItem->childCount(); i++) + { + QTreeWidgetItem * target = 0; + QTreeWidgetItem * source = rootItem->child(i); + + for (int j=0; j < source->childCount(); j++) + { + if (source->child(j)->checkState(0) == Qt::Checked) + { + target = source->child(j); + break; + } + } + + if (target == 0) + continue; + + renames.insert(source->text(0), target->text(0)); + } + + if (renames.size() == 0) + { + QMessageBox::information( + this, + tr("Nothing selected"), + tr("Please select a rename target for one or more missing items."), + QMessageBox::Ok + ); + return; + } + + performRenames->setEnabled(false); + renameTree->setEnabled(false); + + QMapIterator it(renames); + while (it.hasNext()) + { + it.next(); + emit renamePath(it.key(), it.value()); + } + + checkForUnaccountedRenames(); +} + ============================================================ --- src/view/dialogs/UnaccountedRenames.h b355bb8e75bf7471bbc450853c68ffd883415825 +++ src/view/dialogs/UnaccountedRenames.h 35d7d6bf27df175ff17c1534ee81ae76a0311284 @@ -33,9 +33,13 @@ public: void checkForUnaccountedRenames(); +signals: + void renamePath(const QString &, const QString &); + private slots: void itemClicked(QTreeWidgetItem *, int); void findUnaccountedRenames(); + void doPerformRenames(); private: WorkspacePath workspacePath; ============================================================ --- src/view/dialogs/WorkspaceDialogManager.cpp cf48e378c1871ff4f7357cd3311d547c4f55ed11 +++ src/view/dialogs/WorkspaceDialogManager.cpp 9f10add1de839ff515bc18addc0f1d0c411e6476 @@ -121,6 +121,11 @@ void WorkspaceDialogManager::checkForUna if (!unaccountedRenames) { unaccountedRenames = new UnaccountedRenames(parentWidget(), workspacePath); + + connect( + unaccountedRenames, SIGNAL(renamePath(const QString &, const QString &)), + this, SIGNAL(renamePath(const QString &, const QString &)) + ); } unaccountedRenames->checkForUnaccountedRenames(); ============================================================ --- src/view/dialogs/WorkspaceDialogManager.h 0b4324f9c0a09e5a8cba428bf4a59859b7066f74 +++ src/view/dialogs/WorkspaceDialogManager.h 281d6f2d68e274a9eeeaddd738626bdd59bf170f @@ -42,6 +42,7 @@ signals: void revisionCommitted(const QString &); void beforeWorkspaceUpdate(); void workspaceUpdated(const QString &); + void renamePath(const QString &, const QString &); public slots: void showCommitRevision(); ============================================================ --- src/view/mainwindows/WorkspaceWindow.cpp fc83741e54b723b37ef5127f3f15ebfeba45fc07 +++ src/view/mainwindows/WorkspaceWindow.cpp 2a1b36678ab053784f449ed7c4540fb8a2268e9e @@ -273,6 +273,11 @@ void WorkspaceWindow::setup() ); connect( + dialogManager, SIGNAL(renamePath(const QString &, const QString &)), + invModel, SLOT(renamePath(const QString &, const QString &)) + ); + + connect( menuBar, SIGNAL(reloadWorkspace()), invModel, SLOT(refresh()) );