Added checkbox to prompt stage to directories on Tools -> Options -> Window;

Added checkbox to prompt to stage large files on Tools -> Options -> Window.
This commit is contained in:
Maickonn Richard 2020-04-28 06:37:55 -03:00
parent 51590c19e5
commit 462ba64c67
7 changed files with 46 additions and 14 deletions

View File

@ -13,6 +13,8 @@ return {
merge = true,
revert = true,
cherrypick = true,
stash = false
stash = false,
directories = true,
largeFiles = true
}
}

View File

@ -66,6 +66,14 @@ QString promptKey(Settings::PromptKind kind)
case Settings::PromptCherryPick:
key = "cherrypick";
break;
case Settings::PromptDirectories:
key = "directories";
break;
case Settings::PromptLargeFiles:
key = "largeFiles";
break;
}
return QString("window/prompt/%1").arg(key);
@ -209,6 +217,12 @@ QString Settings::promptDescription(PromptKind kind) const
case PromptCherryPick:
return tr("Prompt to edit commit message before cherry-picking");
case PromptDirectories:
return tr("Prompt to stage directories");
case PromptLargeFiles:
return tr("Prompt to stage large files");
}
}

View File

@ -24,7 +24,9 @@ public:
PromptStash,
PromptMerge,
PromptRevert,
PromptCherryPick
PromptCherryPick,
PromptDirectories,
PromptLargeFiles
};
QString group() const;

View File

@ -494,6 +494,20 @@ public:
Settings::instance()->setPrompt(Settings::PromptStash, checked);
});
QString largeFilesText = settings->promptDescription(Settings::PromptLargeFiles);
QCheckBox *largeFiles = new QCheckBox(largeFilesText, this);
largeFiles->setChecked(settings->prompt(Settings::PromptLargeFiles));
connect(largeFiles, &QCheckBox::toggled, [](bool checked) {
Settings::instance()->setPrompt(Settings::PromptLargeFiles, checked);
});
QString directoriesText = settings->promptDescription(Settings::PromptDirectories);
QCheckBox *directories = new QCheckBox(directoriesText, this);
directories->setChecked(settings->prompt(Settings::PromptDirectories));
connect(directories, &QCheckBox::toggled, [](bool checked) {
Settings::instance()->setPrompt(Settings::PromptDirectories, checked);
});
QFormLayout *layout = new QFormLayout(this);
layout->addRow(tr("Theme:"), comboBox);
@ -505,6 +519,8 @@ public:
layout->addRow(QString(), revert);
layout->addRow(QString(), cherryPick);
layout->addRow(QString(), stash);
layout->addRow(QString(), directories);
layout->addRow(QString(), largeFiles);
}
};

View File

@ -153,8 +153,6 @@ Index::StagedState Index::isStaged(const QString &path) const
void Index::setStaged(const QStringList &files, bool staged, bool yieldFocus)
{
bool promptDir = true;
bool promptSize = true;
bool dirAdded = false;
QStringList changedFiles;
Repository repo(git_index_owner(d->index));
@ -234,7 +232,7 @@ void Index::setStaged(const QStringList &files, bool staged, bool yieldFocus)
bool allow = true;
countDirectoryEntries(file, count);
emit notifier->directoryAboutToBeStaged(
file, count, allow, promptDir);
file, count, allow);
bool added = (allow && addDirectory(file));
QDir::setCurrent(current);
@ -249,7 +247,7 @@ void Index::setStaged(const QStringList &files, bool staged, bool yieldFocus)
bool allow = true;
if (size > 10000000) // 10MB
emit notifier->largeFileAboutToBeStaged(
file, size, allow, promptSize);
file, size, allow);
if (!allow)
continue;

View File

@ -311,9 +311,9 @@ signals:
void directoryStaged();
void directoryAboutToBeStaged(
const QString &dir, int count, bool &allow, bool &prompt);
const QString &dir, int count, bool &allow);
void largeFileAboutToBeStaged(
const QString &path, int size, bool &allow, bool &prompt);
const QString &path, int size, bool &allow);
void indexChanged(const QStringList &paths, bool yieldFocus = true);
void indexStageError(const QString &path);

View File

@ -304,8 +304,8 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
connect(notifier, &git::RepositoryNotifier::directoryStaged,
this, &RepoView::refresh, Qt::QueuedConnection);
connect(notifier, &git::RepositoryNotifier::directoryAboutToBeStaged,
[this](const QString &dir, int count, bool &allow, bool &prompt) {
if (!prompt)
[this](const QString &dir, int count, bool &allow) {
if (!Settings::instance()->prompt(Settings::PromptDirectories))
return;
QString title = tr("Stage Directory?");
@ -325,13 +325,13 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
dialog.exec();
allow = (dialog.clickedButton() == button);
if (cb->isChecked())
prompt = false;
Settings::instance()->setPrompt(Settings::PromptDirectories, false);
});
// large file size warning
connect(notifier, &git::RepositoryNotifier::largeFileAboutToBeStaged,
[this](const QString &file, int size, bool &allow, bool &prompt) {
if (!prompt)
[this](const QString &file, int size, bool &allow) {
if (!Settings::instance()->prompt(Settings::PromptLargeFiles))
return;
QString title = tr("Stage Large File?");
@ -356,7 +356,7 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
dialog.exec();
allow = (dialog.clickedButton() == stage);
if (cb->isChecked())
prompt = false;
Settings::instance()->setPrompt(Settings::PromptLargeFiles, false);
if (dialog.clickedButton() == track)
configureSettings(ConfigDialog::Lfs);