diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp index 6c5989eb4e2ded97a3ec88bbe98493c731feb5a0..5144d36a79a7d1cc5ce1cd1bce5b8a80519186b3 100644 --- a/src/plugins/bazaar/bazaarplugin.cpp +++ b/src/plugins/bazaar/bazaarplugin.cpp @@ -108,7 +108,8 @@ static const VcsBase::VcsBaseSubmitEditorParameters submitEditorParameters = { Constants::COMMITMIMETYPE, Constants::COMMIT_ID, Constants::COMMIT_DISPLAY_NAME, - Constants::COMMIT_ID + Constants::COMMIT_ID, + VcsBase::VcsBaseSubmitEditorParameters::DiffFiles }; diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 27ac04307c0eaadf199137ffca7b79a46586fcd2..aa85372c1dd64b94333eb4129515a4c43f6e826a 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -258,7 +258,8 @@ static const VcsBase::VcsBaseSubmitEditorParameters submitParameters = { ClearCase::Constants::CLEARCASE_SUBMIT_MIMETYPE, ClearCase::Constants::CLEARCASECHECKINEDITOR_ID, ClearCase::Constants::CLEARCASECHECKINEDITOR_DISPLAY_NAME, - ClearCase::Constants::CLEARCASECHECKINEDITOR + ClearCase::Constants::CLEARCASECHECKINEDITOR, + VcsBase::VcsBaseSubmitEditorParameters::DiffFiles }; bool ClearCasePlugin::initialize(const QStringList & /*arguments */, QString *errorMessage) diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index 91097dcec949619bb57146a325b9a06070c045d7..4da18516c744cd69acab15a5502b295125e673cc 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -213,7 +213,8 @@ static const VcsBaseSubmitEditorParameters submitParameters = { Constants::CVS_SUBMIT_MIMETYPE, Constants::CVSCOMMITEDITOR_ID, Constants::CVSCOMMITEDITOR_DISPLAY_NAME, - Constants::CVSCOMMITEDITOR + Constants::CVSCOMMITEDITOR, + VcsBase::VcsBaseSubmitEditorParameters::DiffFiles }; bool CvsPlugin::initialize(const QStringList &arguments, QString *errorMessage) diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 2dc0a05f59304bbbdd254d504ab9354b59f1554e..e4ffae16283823decba93408fe1c41bd771766ad 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -175,7 +175,8 @@ static const VcsBase::VcsBaseSubmitEditorParameters submitParameters = { Git::Constants::SUBMIT_MIMETYPE, Git::Constants::GITSUBMITEDITOR_ID, Git::Constants::GITSUBMITEDITOR_DISPLAY_NAME, - Git::Constants::C_GITSUBMITEDITOR + Git::Constants::C_GITSUBMITEDITOR, + VcsBase::VcsBaseSubmitEditorParameters::DiffRows }; // Create a parameter action diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp index 51e9121364f914f79d9d37821d6ce272cb311a81..0803e16cd5e21557827ee73402503f010028d84a 100644 --- a/src/plugins/git/gitsubmiteditor.cpp +++ b/src/plugins/git/gitsubmiteditor.cpp @@ -85,7 +85,7 @@ GitSubmitEditor::GitSubmitEditor(const VcsBase::VcsBaseSubmitEditorParameters *p m_model(0), m_amend(false) { - connect(this, SIGNAL(diffSelectedFiles(QStringList)), this, SLOT(slotDiffSelected(QStringList))); + connect(this, SIGNAL(diffSelectedFiles(QList<int>)), this, SLOT(slotDiffSelected(QList<int>))); } GitSubmitEditorWidget *GitSubmitEditor::submitEditorWidget() @@ -131,24 +131,21 @@ void GitSubmitEditor::setAmend(bool amend) setEmptyFileListEnabled(amend); // Allow for just correcting the message } -void GitSubmitEditor::slotDiffSelected(const QStringList &files) +void GitSubmitEditor::slotDiffSelected(const QList<int> &rows) { // Sort it apart into unmerged/staged/unstaged files QStringList unmergedFiles; QStringList unstagedFiles; QStringList stagedFiles; - const int rowCount = m_model->rowCount(); - for (int r = 0; r < rowCount; r++) { - const QString fileName = m_model->file(r); - if (files.contains(fileName)) { - const FileStates state = static_cast<FileStates>(m_model->extraData(r).toInt()); - if (state & UnmergedFile) - unmergedFiles.push_back(fileName); - else if (state & StagedFile) - stagedFiles.push_back(fileName); - else if (state != UntrackedFile) - unstagedFiles.push_back(fileName); - } + foreach (int row, rows) { + const QString fileName = m_model->file(row); + const FileStates state = static_cast<FileStates>(m_model->extraData(row).toInt()); + if (state & UnmergedFile) + unmergedFiles.push_back(fileName); + else if (state & StagedFile) + stagedFiles.push_back(fileName); + else if (state != UntrackedFile) + unstagedFiles.push_back(fileName); } if (!unstagedFiles.empty() || !stagedFiles.empty()) emit diff(unstagedFiles, stagedFiles); diff --git a/src/plugins/git/gitsubmiteditor.h b/src/plugins/git/gitsubmiteditor.h index 79c43473280ed52a82b7470eeee6316ab924c842..4e6fb734c13ebc3f6ac15f8a58246d6c9437e4dd 100644 --- a/src/plugins/git/gitsubmiteditor.h +++ b/src/plugins/git/gitsubmiteditor.h @@ -64,7 +64,7 @@ protected: void updateFileModel(); private slots: - void slotDiffSelected(const QStringList &); + void slotDiffSelected(const QList<int> &rows); private: inline GitSubmitEditorWidget *submitEditorWidget(); diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index f2a23d86020721fceab319b91592e1ff0647edc7..a17451c371c369e06a6863addd9d2977a21d316c 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -108,7 +108,8 @@ static const VcsBaseSubmitEditorParameters submitEditorParameters = { Constants::COMMITMIMETYPE, Constants::COMMIT_ID, Constants::COMMIT_DISPLAY_NAME, - Constants::COMMIT_ID + Constants::COMMIT_ID, + VcsBase::VcsBaseSubmitEditorParameters::DiffFiles }; MercurialPlugin *MercurialPlugin::m_instance = 0; diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index d821a52e6b67d217d3f7eced82e7f1abeda05421..af684c9f46285c079a5ae1d675b7eaab16708217 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -211,7 +211,8 @@ static const VcsBase::VcsBaseSubmitEditorParameters submitParameters = { Perforce::Constants::SUBMIT_MIMETYPE, Perforce::Constants::PERFORCE_SUBMIT_EDITOR_ID, Perforce::Constants::PERFORCE_SUBMIT_EDITOR_DISPLAY_NAME, - Perforce::Constants::PERFORCESUBMITEDITOR_CONTEXT + Perforce::Constants::PERFORCESUBMITEDITOR_CONTEXT, + VcsBase::VcsBaseSubmitEditorParameters::DiffFiles }; bool PerforcePlugin::initialize(const QStringList & /* arguments */, QString *errorMessage) diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index c6369649730e0bd899b6b53da83ef498e5321455..ec8f7c5d6598259897f5fcf40c18713397a5c7c2 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -236,7 +236,8 @@ static const VcsBase::VcsBaseSubmitEditorParameters submitParameters = { Subversion::Constants::SUBVERSION_SUBMIT_MIMETYPE, Subversion::Constants::SUBVERSIONCOMMITEDITOR_ID, Subversion::Constants::SUBVERSIONCOMMITEDITOR_DISPLAY_NAME, - Subversion::Constants::SUBVERSIONCOMMITEDITOR + Subversion::Constants::SUBVERSIONCOMMITEDITOR, + VcsBase::VcsBaseSubmitEditorParameters::DiffFiles }; bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *errorMessage) diff --git a/src/plugins/vcsbase/submiteditorwidget.cpp b/src/plugins/vcsbase/submiteditorwidget.cpp index e5b8ac7d1b1f66559d49497701eec4899878dc49..6c63ed67f103b2580ba25bfb18afef8787858276 100644 --- a/src/plugins/vcsbase/submiteditorwidget.cpp +++ b/src/plugins/vcsbase/submiteditorwidget.cpp @@ -403,20 +403,6 @@ SubmitFileModel *SubmitEditorWidget::fileModel() const return static_cast<SubmitFileModel *>(d->m_ui.fileView->model()); } -QStringList SubmitEditorWidget::selectedFiles() const -{ - const QList<int> selection = selectedRows(d->m_ui.fileView); - if (selection.empty()) - return QStringList(); - - QStringList rc; - const SubmitFileModel *model = fileModel(); - const int count = selection.size(); - for (int i = 0; i < count; i++) - rc.push_back(model->file(selection.at(i))); - return rc; -} - QStringList SubmitEditorWidget::checkedFiles() const { QStringList rc; @@ -437,15 +423,14 @@ Utils::CompletingTextEdit *SubmitEditorWidget::descriptionEdit() const void SubmitEditorWidget::triggerDiffSelected() { - const QStringList sel = selectedFiles(); + const QList<int> sel = selectedRows(d->m_ui.fileView); if (!sel.empty()) emit diffSelected(sel); } void SubmitEditorWidget::diffActivatedDelayed() { - const QStringList files = QStringList(fileModel()->file(d->m_activatedRow)); - emit diffSelected(files); + emit diffSelected(QList<int>() << d->m_activatedRow); } void SubmitEditorWidget::diffActivated(const QModelIndex &index) diff --git a/src/plugins/vcsbase/submiteditorwidget.h b/src/plugins/vcsbase/submiteditorwidget.h index da09173df7c0dc11d8df05ce32e123e8bcded4fc..83dccf4d2bd1b396d06c5028fccb2c8a6c0bca76 100644 --- a/src/plugins/vcsbase/submiteditorwidget.h +++ b/src/plugins/vcsbase/submiteditorwidget.h @@ -95,9 +95,6 @@ public: // Files to be included in submit QStringList checkedFiles() const; - // Selected files for diff - QStringList selectedFiles() const; - Utils::CompletingTextEdit *descriptionEdit() const; void addDescriptionEditContextMenuAction(QAction *a); @@ -109,7 +106,7 @@ public: virtual bool canSubmit() const; signals: - void diffSelected(const QStringList &); + void diffSelected(const QList<int> &); void fileSelectionChanged(bool someFileSelected); void submitActionTextChanged(const QString &); void submitActionEnabledChanged(bool); diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index c78c3de010ff187b3989b11b757519f51e793651..7506a080d436d695429eb6f22e2cb02caee25b52 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -210,7 +210,7 @@ VcsBaseSubmitEditor::VcsBaseSubmitEditor(const VcsBaseSubmitEditorParameters *pa connect(d->m_file, SIGNAL(saveMe(QString*,QString,bool)), this, SLOT(save(QString*,QString,bool))); - connect(d->m_widget, SIGNAL(diffSelected(QStringList)), this, SLOT(slotDiffSelectedVcsFiles(QStringList))); + connect(d->m_widget, SIGNAL(diffSelected(QList<int>)), this, SLOT(slotDiffSelectedVcsFiles(QList<int>))); connect(d->m_widget->descriptionEdit(), SIGNAL(textChanged()), this, SLOT(slotDescriptionChanged())); const CommonVcsSettings settings = VcsPlugin::instance()->settings(); @@ -540,9 +540,25 @@ SubmitFileModel *VcsBaseSubmitEditor::fileModel() const return d->m_widget->fileModel(); } -void VcsBaseSubmitEditor::slotDiffSelectedVcsFiles(const QStringList &rawList) +QStringList VcsBaseSubmitEditor::rowsToFiles(const QList<int> &rows) const { - emit diffSelectedFiles(rawList); + if (rows.empty()) + return QStringList(); + + QStringList rc; + const SubmitFileModel *model = fileModel(); + const int count = rows.size(); + for (int i = 0; i < count; i++) + rc.push_back(model->file(rows.at(i))); + return rc; +} + +void VcsBaseSubmitEditor::slotDiffSelectedVcsFiles(const QList<int> &rawList) +{ + if (d->m_parameters->diffType == VcsBaseSubmitEditorParameters::DiffRows) + emit diffSelectedFiles(rawList); + else + emit diffSelectedFiles(rowsToFiles(rawList)); } bool VcsBaseSubmitEditor::save(QString *errorString, const QString &fileName, bool autoSave) diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h index eaeba204288b93a6bb4457820a2884175b9ffed0..0f696b5c1574f4944d4a1b4b7560da651b8e784f 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.h +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h @@ -56,6 +56,7 @@ public: const char *id; const char *displayName; const char *context; + enum DiffType { DiffRows, DiffFiles } diffType; }; class VCSBASE_EXPORT VcsBaseSubmitEditor : public Core::IEditor @@ -130,6 +131,7 @@ public: void setFileModel(SubmitFileModel *m, const QString &repositoryDirectory = QString()); SubmitFileModel *fileModel() const; virtual void updateFileModel() { } + QStringList rowsToFiles(const QList<int> &rows) const; // Utilities returning some predefined icons for actions static QIcon diffIcon(); @@ -148,9 +150,10 @@ public: signals: void diffSelectedFiles(const QStringList &files); + void diffSelectedFiles(const QList<int> &rows); private slots: - void slotDiffSelectedVcsFiles(const QStringList &rawList); + void slotDiffSelectedVcsFiles(const QList<int> &rawList); bool save(QString *errorString, const QString &fileName, bool autoSave); void slotDescriptionChanged(); void slotCheckSubmitMessage();