summaryrefslogtreecommitdiff
path: root/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/vcsbase/vcsbasesubmiteditor.cpp')
-rw-r--r--src/plugins/vcsbase/vcsbasesubmiteditor.cpp81
1 files changed, 51 insertions, 30 deletions
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index 9e52791a05..3bb4c8ed18 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -30,10 +30,13 @@
#include "vcsbasesubmiteditor.h"
#include "commonvcssettings.h"
-#include "vcsbaseoutputwindow.h"
-#include "vcsplugin.h"
#include "nicknamedialog.h"
#include "submiteditorfile.h"
+#include "submiteditorwidget.h"
+#include "submitfieldwidget.h"
+#include "submitfilemodel.h"
+#include "vcsbaseoutputwindow.h"
+#include "vcsplugin.h"
#include <aggregation/aggregate.h>
#include <cplusplus/Control.h>
@@ -44,17 +47,17 @@
#include <cplusplus/Symbol.h>
#include <cplusplus/Symbols.h>
#include <cplusplus/TranslationUnit.h>
-#include <coreplugin/idocument.h>
#include <coreplugin/icore.h>
-#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/id.h>
+#include <coreplugin/idocument.h>
+#include <coreplugin/mainwindow.h>
#include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/editormanager/editormanager.h>
#include <utils/completingtextedit.h>
-#include <utils/submiteditorwidget.h>
#include <utils/checkablemessagebox.h>
#include <utils/synchronousprocess.h>
-#include <utils/submitfieldwidget.h>
#include <utils/fileutils.h>
+#include <utils/qtcassert.h>
#include <find/basetextfind.h>
#include <texteditor/fontsettings.h>
#include <texteditor/texteditorsettings.h>
@@ -118,7 +121,7 @@ static const char *belongingClassName(const CPlusPlus::Function *function)
/*!
\class VcsBase::VcsBaseSubmitEditor
- \brief Base class for a submit editor based on the Utils::SubmitEditorWidget.
+ \brief Base class for a submit editor based on the SubmitEditorWidget.
Presents the commit message in a text editor and an
checkable list of modified files in a list window. The user can delete
@@ -207,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();
@@ -238,6 +241,9 @@ VcsBaseSubmitEditor::VcsBaseSubmitEditor(const VcsBaseSubmitEditorParameters *pa
connect(VcsPlugin::instance(),
SIGNAL(settingsChanged(VcsBase::Internal::CommonVcsSettings)),
this, SLOT(slotUpdateEditorSettings(VcsBase::Internal::CommonVcsSettings)));
+ connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)),
+ this, SLOT(slotRefreshCommitData()));
+ connect(Core::ICore::mainWindow(), SIGNAL(windowActivated()), this, SLOT(slotRefreshCommitData()));
Aggregation::Aggregate *aggregate = new Aggregation::Aggregate;
aggregate->add(new Find::BaseTextFind(d->m_widget->descriptionEdit()));
@@ -257,6 +263,12 @@ void VcsBaseSubmitEditor::slotUpdateEditorSettings(const CommonVcsSettings &s)
setLineWrap(s.lineWrap);
}
+void VcsBaseSubmitEditor::slotRefreshCommitData()
+{
+ if (Core::EditorManager::currentEditor() == this)
+ updateFileModel();
+}
+
// Return a trimmed list of non-empty field texts
static inline QStringList fieldTexts(const QString &fileContents)
{
@@ -308,16 +320,6 @@ void VcsBaseSubmitEditor::unregisterActions(QAction *editorUndoAction, QAction
d->m_diffAction = d->m_submitAction = 0;
}
-int VcsBaseSubmitEditor::fileNameColumn() const
-{
- return d->m_widget->fileNameColumn();
-}
-
-void VcsBaseSubmitEditor::setFileNameColumn(int c)
-{
- d->m_widget->setFileNameColumn(c);
-}
-
QAbstractItemView::SelectionMode VcsBaseSubmitEditor::fileListSelectionMode() const
{
return d->m_widget->fileListSelectionMode();
@@ -426,7 +428,7 @@ Core::IEditor *VcsBaseSubmitEditor::duplicate(QWidget * /*parent*/)
Core::Id VcsBaseSubmitEditor::id() const
{
- return d->m_parameters->id;
+ return Core::Id(QByteArray(d->m_parameters->id));
}
static QToolBar *createToolBar(const QWidget *someWidget, QAction *submitAction, QAction *diffAction)
@@ -476,17 +478,21 @@ QStringList VcsBaseSubmitEditor::checkedFiles() const
return d->m_widget->checkedFiles();
}
-void VcsBaseSubmitEditor::setFileModel(QAbstractItemModel *m, const QString &repositoryDirectory)
+void VcsBaseSubmitEditor::setFileModel(SubmitFileModel *model, const QString &repositoryDirectory)
{
- d->m_widget->setFileModel(m);
+ QTC_ASSERT(model, return);
+ if (SubmitFileModel *oldModel = d->m_widget->fileModel()) {
+ model->updateSelections(oldModel);
+ delete oldModel;
+ }
+ d->m_widget->setFileModel(model);
QSet<QString> uniqueSymbols;
const CPlusPlus::Snapshot cppSnapShot = CPlusPlus::CppModelManagerInterface::instance()->snapshot();
// Iterate over the files and get interesting symbols
- for (int row = 0; row < m->rowCount(); ++row) {
- const QString fileName = m->data(m->index(row, d->m_widget->fileNameColumn())).toString();
- const QFileInfo fileInfo(repositoryDirectory, fileName);
+ for (int row = 0; row < model->rowCount(); ++row) {
+ const QFileInfo fileInfo(repositoryDirectory, model->file(row));
// Add file name
uniqueSymbols.insert(fileInfo.fileName());
@@ -529,14 +535,30 @@ void VcsBaseSubmitEditor::setFileModel(QAbstractItemModel *m, const QString &rep
}
}
-QAbstractItemModel *VcsBaseSubmitEditor::fileModel() const
+SubmitFileModel *VcsBaseSubmitEditor::fileModel() const
{
return d->m_widget->fileModel();
}
-void VcsBaseSubmitEditor::slotDiffSelectedVcsFiles(const QStringList &rawList)
+QStringList VcsBaseSubmitEditor::rowsToFiles(const QList<int> &rows) const
+{
+ 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)
{
- emit diffSelectedFiles(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)
@@ -801,11 +823,10 @@ void VcsBaseSubmitEditor::filterUntrackedFilesOfProject(const QString &repositor
const QDir repoDir(repositoryDirectory);
for (QStringList::iterator it = untrackedFiles->begin(); it != untrackedFiles->end(); ) {
const QString path = QDir::toNativeSeparators(repoDir.absoluteFilePath(*it));
- if (nativeProjectFiles.contains(path)) {
+ if (nativeProjectFiles.contains(path))
++it;
- } else {
+ else
it = untrackedFiles->erase(it);
- }
}
}