mirror of
https://github.com/Murmele/Gittyup.git
synced 2024-09-17 13:37:18 +03:00
Remove tracking code
Additional fixed some annoying warnings
This commit is contained in:
parent
4a68d33cc6
commit
d2758467fd
@ -1,3 +0,0 @@
|
||||
return {
|
||||
enabled = true
|
||||
}
|
100
src/app/Application.cpp
Normal file → Executable file
100
src/app/Application.cpp
Normal file → Executable file
@ -84,30 +84,6 @@ static LONG WINAPI exceptionFilter(PEXCEPTION_POINTERS info)
|
||||
}
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
|
||||
const QString kUserAgentFmt = "%1/%2 (%3)";
|
||||
|
||||
QString userAgentSystem()
|
||||
{
|
||||
#if defined(Q_OS_WIN)
|
||||
QOperatingSystemVersion current = QOperatingSystemVersion::current();
|
||||
if (current < QOperatingSystemVersion::Windows8) {
|
||||
return "Windows NT 6.1";
|
||||
} else if (current < QOperatingSystemVersion::Windows10) {
|
||||
return "Windows NT 6.2";
|
||||
} else {
|
||||
return "Windows NT 10.0";
|
||||
}
|
||||
#elif defined(Q_OS_MAC)
|
||||
return "Macintosh";
|
||||
#else
|
||||
return "Linux";
|
||||
#endif
|
||||
}
|
||||
|
||||
} // anon. namespace
|
||||
|
||||
Application::Application(int &argc, char **argv, bool haltOnParseError)
|
||||
: QApplication(argc, argv)
|
||||
{
|
||||
@ -224,33 +200,12 @@ Application::Application(int &argc, char **argv, bool haltOnParseError)
|
||||
// Initialize git library.
|
||||
git::Repository::init();
|
||||
|
||||
connect(this, &Application::aboutToQuit, [this] {
|
||||
connect(this, &Application::aboutToQuit, [] {
|
||||
// Clean up git library.
|
||||
// Make sure windows are really deleted.
|
||||
sendPostedEvents(nullptr, QEvent::DeferredDelete);
|
||||
git::Repository::shutdown();
|
||||
});
|
||||
|
||||
// Read tracking settings.
|
||||
settings.beginGroup("tracking");
|
||||
QByteArray tid(GITTYUP_TRACKING_ID);
|
||||
if (!tid.isEmpty() && settings.value("enabled", true).toBool()) {
|
||||
// Get or create persistent client ID.
|
||||
mClientId = settings.value("id").toString();
|
||||
if (mClientId.isEmpty()) {
|
||||
mClientId = QUuid::createUuid().toString();
|
||||
settings.setValue("id", mClientId);
|
||||
}
|
||||
|
||||
// Fire and forget, except to free the reply.
|
||||
mTrackingMgr = new QNetworkAccessManager(this);
|
||||
connect(mTrackingMgr, &QNetworkAccessManager::finished,
|
||||
[](QNetworkReply *reply) {
|
||||
reply->deleteLater();
|
||||
});
|
||||
}
|
||||
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
void Application::autoUpdate()
|
||||
@ -318,33 +273,6 @@ Theme *Application::theme()
|
||||
return static_cast<Application *>(instance())->mTheme.data();
|
||||
}
|
||||
|
||||
void Application::track(const QString &screen)
|
||||
{
|
||||
QUrlQuery query;
|
||||
query.addQueryItem("t", "screenview");
|
||||
query.addQueryItem("cd", screen);
|
||||
|
||||
static_cast<Application *>(instance())->track(query);
|
||||
}
|
||||
|
||||
void Application::track(
|
||||
const QString &category,
|
||||
const QString &action,
|
||||
const QString &label,
|
||||
int value)
|
||||
{
|
||||
QUrlQuery query;
|
||||
query.addQueryItem("t", "event");
|
||||
query.addQueryItem("ec", category);
|
||||
query.addQueryItem("ea", action);
|
||||
if (!label.isEmpty())
|
||||
query.addQueryItem("el", label);
|
||||
if (value >= 0)
|
||||
query.addQueryItem("ev", QString::number(value));
|
||||
|
||||
static_cast<Application *>(instance())->track(query);
|
||||
}
|
||||
|
||||
bool Application::event(QEvent *event)
|
||||
{
|
||||
if (event->type() == QEvent::FileOpen)
|
||||
@ -353,32 +281,6 @@ bool Application::event(QEvent *event)
|
||||
return QApplication::event(event);
|
||||
}
|
||||
|
||||
void Application::track(const QUrlQuery &query)
|
||||
{
|
||||
if (!mTrackingMgr)
|
||||
return;
|
||||
|
||||
QString sys = userAgentSystem();
|
||||
QString language = QLocale().uiLanguages().first();
|
||||
QString userAgent = kUserAgentFmt.arg(GITTYUP_NAME, GITTYUP_VERSION, sys);
|
||||
|
||||
QUrlQuery tmp = query;
|
||||
tmp.addQueryItem("v", "1");
|
||||
tmp.addQueryItem("ds", "app");
|
||||
tmp.addQueryItem("ul", language);
|
||||
tmp.addQueryItem("ua", userAgent);
|
||||
tmp.addQueryItem("an", GITTYUP_NAME);
|
||||
tmp.addQueryItem("av", GITTYUP_VERSION);
|
||||
tmp.addQueryItem("tid", GITTYUP_TRACKING_ID);
|
||||
tmp.addQueryItem("cid", mClientId);
|
||||
|
||||
// QString header = "application/x-www-form-urlencoded";
|
||||
// QNetworkRequest request(QUrl("http://google-analytics.com/collect"));
|
||||
// request.setHeader(QNetworkRequest::ContentTypeHeader, header);
|
||||
|
||||
// mTrackingMgr->post(request, tmp.query().toUtf8());
|
||||
}
|
||||
|
||||
void Application::handleSslErrors(
|
||||
QNetworkReply *reply,
|
||||
const QList<QSslError> &errors)
|
||||
|
11
src/app/Application.h
Normal file → Executable file
11
src/app/Application.h
Normal file → Executable file
@ -30,27 +30,16 @@ public:
|
||||
|
||||
static Theme *theme();
|
||||
|
||||
static void track(const QString &screen);
|
||||
static void track(
|
||||
const QString &category,
|
||||
const QString &action,
|
||||
const QString &label = QString(),
|
||||
int value = -1);
|
||||
|
||||
protected:
|
||||
bool event(QEvent *event) override;
|
||||
|
||||
private:
|
||||
void registerService();
|
||||
void track(const QUrlQuery &query);
|
||||
void handleSslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
|
||||
|
||||
QString mPathspec = QString();
|
||||
QScopedPointer<Theme> mTheme;
|
||||
QStringList mPositionalArguments;
|
||||
|
||||
QString mClientId;
|
||||
QNetworkAccessManager *mTrackingMgr = nullptr;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
1
src/app/CMakeLists.txt
Normal file → Executable file
1
src/app/CMakeLists.txt
Normal file → Executable file
@ -57,7 +57,6 @@ target_compile_definitions(app
|
||||
GITTYUP_NAME="${GITTYUP_NAME}"
|
||||
GITTYUP_VERSION="${GITTYUP_VERSION}"
|
||||
PRIVATE
|
||||
GITTYUP_TRACKING_ID="${GITTYUP_TRACKING_ID}"
|
||||
QT_TRANSLATIONS_DIR="${QT_TRANSLATIONS_DIR}"
|
||||
)
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include <QDesktopServices>
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QLocale>
|
||||
#include <QMessageBox>
|
||||
#include <QPointer>
|
||||
#include <QTabBar>
|
||||
@ -29,7 +30,7 @@
|
||||
|
||||
namespace {
|
||||
|
||||
const QString kEmail = "TODO";
|
||||
const QString kEmail = QStringLiteral("TODO");
|
||||
|
||||
const QString kUrl =
|
||||
"https://stackoverflow.com/questions/tagged/gittyup?sort=frequent";
|
||||
@ -86,7 +87,7 @@ AboutDialog::AboutDialog(QWidget *parent)
|
||||
|
||||
QString revision = GITTYUP_BUILD_REVISION;
|
||||
QDateTime dateTime = QDateTime::fromString(GITTYUP_BUILD_DATE, Qt::ISODate);
|
||||
QString date = dateTime.date().toString(Qt::DefaultLocaleLongDate);
|
||||
QString date = dateTime.date().toString(QLocale().dateFormat(QLocale::LongFormat));
|
||||
QString text = kTextFmt.arg(name, version, date, revision, kUrl, kEmail);
|
||||
QLabel *label = new QLabel(text, this);
|
||||
label->setWordWrap(true);
|
||||
@ -102,21 +103,8 @@ AboutDialog::AboutDialog(QWidget *parent)
|
||||
browser->setOpenLinks(false);
|
||||
browser->document()->setDocumentMargin(12);
|
||||
browser->document()->setDefaultStyleSheet(kStyleSheet);
|
||||
connect(browser, &QTextBrowser::anchorClicked, [this](const QUrl &url) {
|
||||
if (url.isLocalFile() &&
|
||||
QFileInfo(url.toLocalFile()).fileName() == "opt-out") {
|
||||
Settings::instance()->setValue("tracking/enabled", false);
|
||||
QString text =
|
||||
tr("Usage reporting has been disabled. Restart "
|
||||
"the application for changes to take effect.");
|
||||
QMessageBox::information(this, tr("Usage Reporting Disabled"), text);
|
||||
return;
|
||||
}
|
||||
|
||||
QDesktopServices::openUrl(url);
|
||||
});
|
||||
|
||||
connect(mTabs, &QTabBar::currentChanged, [this, browser](int index) {
|
||||
connect(mTabs, &QTabBar::currentChanged, this, [this, browser](int index) {
|
||||
QString url = Settings::docDir().filePath(mTabs->tabData(index).toString());
|
||||
browser->setSource(QUrl::fromLocalFile(url));
|
||||
});
|
||||
|
103
src/dialogs/ConfigDialog.cpp
Normal file → Executable file
103
src/dialogs/ConfigDialog.cpp
Normal file → Executable file
@ -108,35 +108,42 @@ public:
|
||||
init();
|
||||
|
||||
// Connect signals after initializing fields.
|
||||
connect(mName, &QLineEdit::textChanged, [this](const QString &text) {
|
||||
mRepo.config().setValue("user.name", text);
|
||||
connect(mName, &QLineEdit::textChanged, this, [this](const QString &text) {
|
||||
git::Config config = mRepo.config();
|
||||
config.setValue("user.name", text);
|
||||
});
|
||||
|
||||
connect(mEmail, &QLineEdit::textChanged, [this](const QString &text) {
|
||||
mRepo.config().setValue("user.email", text);
|
||||
connect(mEmail, &QLineEdit::textChanged, this, [this](const QString &text) {
|
||||
git::Config config = mRepo.config();
|
||||
config.setValue("user.email", text);
|
||||
});
|
||||
|
||||
connect(mFetch, &QCheckBox::toggled, [this, view](bool checked) {
|
||||
mRepo.appConfig().setValue("autofetch.enable", checked);
|
||||
connect(mFetch, &QCheckBox::toggled, view, [this, view](bool checked) {
|
||||
git::Config config = mRepo.config();
|
||||
config.setValue("autofetch.enable", checked);
|
||||
view->startFetchTimer();
|
||||
});
|
||||
|
||||
using Signal = void (QSpinBox::*)(int);
|
||||
auto signal = static_cast<Signal>(&QSpinBox::valueChanged);
|
||||
connect(mFetchMinutes, signal, [this](int value) {
|
||||
mRepo.appConfig().setValue("autofetch.minutes", value);
|
||||
connect(mFetchMinutes, signal, this, [this](int value) {
|
||||
git::Config config = mRepo.config();
|
||||
config.setValue("autofetch.minutes", value);
|
||||
});
|
||||
|
||||
connect(mPushCommit, &QCheckBox::toggled, [this](bool checked) {
|
||||
mRepo.appConfig().setValue("autopush.enable", checked);
|
||||
connect(mPushCommit, &QCheckBox::toggled, this, [this](bool checked) {
|
||||
git::Config config = mRepo.config();
|
||||
config.setValue("autopush.enable", checked);
|
||||
});
|
||||
|
||||
connect(mPullUpdate, &QCheckBox::toggled, [this](bool checked) {
|
||||
mRepo.appConfig().setValue("autoupdate.enable", checked);
|
||||
connect(mPullUpdate, &QCheckBox::toggled, this, [this](bool checked) {
|
||||
git::Config config = mRepo.config();
|
||||
config.setValue("autoupdate.enable", checked);
|
||||
});
|
||||
|
||||
connect(mAutoPrune, &QCheckBox::toggled, [this](bool checked) {
|
||||
mRepo.appConfig().setValue("autoprune.enable", checked);
|
||||
connect(mAutoPrune, &QCheckBox::toggled, this, [this](bool checked) {
|
||||
git::Config config = mRepo.config();
|
||||
config.setValue("autoprune.enable", checked);
|
||||
});
|
||||
}
|
||||
|
||||
@ -221,7 +228,7 @@ public:
|
||||
}
|
||||
});
|
||||
|
||||
connect(table->selectionModel(), &QItemSelectionModel::selectionChanged,
|
||||
connect(table->selectionModel(), &QItemSelectionModel::selectionChanged, this,
|
||||
[table, footer] {
|
||||
QModelIndexList indexes = table->selectionModel()->selectedRows();
|
||||
footer->setMinusEnabled(!indexes.isEmpty());
|
||||
@ -270,9 +277,9 @@ public:
|
||||
Footer *footer = new Footer(mTable);
|
||||
footer->setPlusEnabled(repo.head().isValid());
|
||||
|
||||
connect(footer, &Footer::plusClicked, [this, repo] {
|
||||
connect(footer, &Footer::plusClicked, this, [this, repo] {
|
||||
NewBranchDialog *dialog = new NewBranchDialog(repo, git::Commit(), this);
|
||||
connect(dialog, &QDialog::accepted, this, [this, repo, dialog] {
|
||||
connect(dialog, &QDialog::accepted, this, [repo, dialog] {
|
||||
QString name = dialog->name();
|
||||
git::Commit commit = dialog->target();
|
||||
git::Branch branch = git::Repository(repo).createBranch(name, commit);
|
||||
@ -285,7 +292,7 @@ public:
|
||||
dialog->open();
|
||||
});
|
||||
|
||||
connect(footer, &Footer::minusClicked, [this] {
|
||||
connect(footer, &Footer::minusClicked, this, [this] {
|
||||
// Get all selected branches before removing any.
|
||||
QList<git::Branch> branches;
|
||||
QModelIndexList indexes = mTable->selectionModel()->selectedRows();
|
||||
@ -366,7 +373,7 @@ public:
|
||||
table->horizontalHeader()->setSectionResizeMode(
|
||||
SubmoduleTableModel::Url, QHeaderView::Stretch);
|
||||
|
||||
connect(table, &QTableView::doubleClicked, [view](const QModelIndex &index) {
|
||||
connect(table, &QTableView::doubleClicked, this, [view](const QModelIndex &index) {
|
||||
QVariant var = index.data(SubmoduleTableModel::SubmoduleRole);
|
||||
view->openSubmodule(var.value<git::Submodule>());
|
||||
});
|
||||
@ -399,7 +406,7 @@ public:
|
||||
// enable
|
||||
QCheckBox *enable = new QCheckBox(tr("Enable indexing"), this);
|
||||
enable->setChecked(config.value<bool>("index.enable", true));
|
||||
connect(enable, &QCheckBox::toggled, [view](bool checked) {
|
||||
connect(enable, &QCheckBox::toggled, this, [view](bool checked) {
|
||||
git::Config config = view->repo().appConfig();
|
||||
config.setValue("index.enable", checked);
|
||||
|
||||
@ -417,7 +424,7 @@ public:
|
||||
terms->setMaximum(99999999);
|
||||
terms->setSingleStep(100000);
|
||||
terms->setValue(config.value<int>("index.termlimit", 1000000));
|
||||
connect(terms, signal, [view](int value) {
|
||||
connect(terms, signal, this, [view](int value) {
|
||||
view->repo().appConfig().setValue("index.termlimit", value);
|
||||
});
|
||||
|
||||
@ -430,7 +437,7 @@ public:
|
||||
QSpinBox *context = new QSpinBox(this);
|
||||
QLabel *contextLabel = new QLabel(tr("lines"), this);
|
||||
context->setValue(config.value<int>("index.contextlines", 3));
|
||||
connect(context, signal, [view](int value) {
|
||||
connect(context, signal, this, [view](int value) {
|
||||
view->repo().appConfig().setValue("index.contextlines", value);
|
||||
});
|
||||
|
||||
@ -462,7 +469,7 @@ public:
|
||||
// remove
|
||||
QPushButton *remove = new QPushButton(tr("Remove Index"), this);
|
||||
remove->setEnabled(view->index()->isValid());
|
||||
connect(remove, &QPushButton::clicked, [view, remove] {
|
||||
connect(remove, &QPushButton::clicked, this, [view, remove] {
|
||||
Index *index = view->index();
|
||||
view->cancelIndexing();
|
||||
index->remove();
|
||||
@ -488,7 +495,7 @@ public:
|
||||
{
|
||||
if (!view->repo().lfsIsInitialized()) {
|
||||
QPushButton *button = new QPushButton(tr("Initialize LFS"), this);
|
||||
connect(button, &QPushButton::clicked, [this, view] {
|
||||
connect(button, &QPushButton::clicked, this, [this, view] {
|
||||
view->lfsInitialize();
|
||||
window()->close();
|
||||
});
|
||||
@ -500,7 +507,6 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
Settings *settings = Settings::instance();
|
||||
git::Repository repo = view->repo();
|
||||
|
||||
QListView *list = new QListView(this);
|
||||
@ -512,7 +518,7 @@ public:
|
||||
list->setModel(model);
|
||||
|
||||
QFutureWatcher<QStringList> *watcher = new QFutureWatcher<QStringList>(this);
|
||||
connect(watcher, &QFutureWatcher<QStringList>::finished, [model, watcher] {
|
||||
connect(watcher, &QFutureWatcher<QStringList>::finished, this, [model, watcher] {
|
||||
model->setStringList(watcher->result());
|
||||
watcher->deleteLater();
|
||||
});
|
||||
@ -520,7 +526,7 @@ public:
|
||||
watcher->setFuture(QtConcurrent::run(repo, &git::Repository::lfsTracked));
|
||||
|
||||
Footer *footer = new Footer(list);
|
||||
connect(footer, &Footer::plusClicked, [this, repo, model] {
|
||||
connect(footer, &Footer::plusClicked, this, [this, repo, model] {
|
||||
QDialog *dialog = new QDialog(this);
|
||||
dialog->setAttribute(Qt::WA_DeleteOnClose);
|
||||
|
||||
@ -554,7 +560,7 @@ public:
|
||||
layout->addLayout(form);
|
||||
layout->addWidget(buttons);
|
||||
|
||||
connect(pattern, &QLineEdit::textChanged, [track](const QString &text) {
|
||||
connect(pattern, &QLineEdit::textChanged, this, [track](const QString &text) {
|
||||
track->setEnabled(!text.isEmpty());
|
||||
});
|
||||
|
||||
@ -567,7 +573,7 @@ public:
|
||||
dialog->open();
|
||||
});
|
||||
|
||||
connect(footer, &Footer::minusClicked, [this, list, repo, model] {
|
||||
connect(footer, &Footer::minusClicked, this, [list, repo, model] {
|
||||
git::Repository tmp(repo);
|
||||
QModelIndexList indexes = list->selectionModel()->selectedRows();
|
||||
foreach (const QModelIndex &index, indexes) {
|
||||
@ -605,16 +611,18 @@ public:
|
||||
QLineEdit *urlLineEdit = new QLineEdit(
|
||||
map.value("Endpoint").section(" ", 0, 0));
|
||||
connect(urlLineEdit, &QLineEdit::textChanged,
|
||||
[this, repo](const QString &text) {
|
||||
repo.config().setValue("lfs.url", text);
|
||||
[repo](const QString &text) {
|
||||
git::Config config = repo.config();
|
||||
config.setValue("lfs.url", text);
|
||||
});
|
||||
|
||||
// pruneoffsetdays
|
||||
QSpinBox *pruneOffsetDays = new QSpinBox(this);
|
||||
pruneOffsetDays->setValue(map.value("PruneOffsetDays").toInt());
|
||||
auto signal = QOverload<int>::of(&QSpinBox::valueChanged);
|
||||
connect(pruneOffsetDays, signal, [this, repo](int value) {
|
||||
repo.config().setValue("lfs.pruneoffsetdays", value);
|
||||
connect(pruneOffsetDays, signal, [repo](int value) {
|
||||
git::Config config = repo.config();
|
||||
config.setValue("lfs.pruneoffsetdays", value);
|
||||
});
|
||||
QHBoxLayout *pruneOffsetLayout = new QHBoxLayout;
|
||||
pruneOffsetLayout->addWidget(pruneOffsetDays);
|
||||
@ -627,18 +635,20 @@ public:
|
||||
bool fetchRecentEnabled = map.value("FetchRecentAlways").contains("true");
|
||||
fetchRecentAlways->setChecked(fetchRecentEnabled);
|
||||
connect(fetchRecentAlways, &QCheckBox::toggled,
|
||||
[settings, repo](bool checked) {
|
||||
repo.config().setValue("lfs.fetchrecentalways", checked);
|
||||
[repo](bool checked) {
|
||||
git::Config config = repo.config();
|
||||
config.setValue("lfs.fetchrecentalways", checked);
|
||||
});
|
||||
|
||||
// fetchrecentrefsdays
|
||||
QSpinBox *fetchRecentRefsDays = new QSpinBox(this);
|
||||
fetchRecentRefsDays->setValue(map.value("FetchRecentRefsDays").toInt());
|
||||
fetchRecentRefsDays->setEnabled(fetchRecentEnabled);
|
||||
connect(fetchRecentRefsDays, signal, [this, repo](int value) {
|
||||
repo.config().setValue("lfs.fetchrecentrefsdays", value);
|
||||
connect(fetchRecentRefsDays, signal, [repo](int value) {
|
||||
git::Config config = repo.config();
|
||||
config.setValue("lfs.fetchrecentrefsdays", value);
|
||||
});
|
||||
connect(fetchRecentAlways, &QCheckBox::toggled,
|
||||
connect(fetchRecentAlways, &QCheckBox::toggled, this,
|
||||
[fetchRecentRefsDays](bool checked) {
|
||||
fetchRecentRefsDays->setEnabled(checked);
|
||||
});
|
||||
@ -651,10 +661,11 @@ public:
|
||||
QSpinBox *fetchRecentCommitsDays = new QSpinBox(this);
|
||||
fetchRecentCommitsDays->setValue(map.value("FetchRecentCommitsDays").toInt());
|
||||
fetchRecentCommitsDays->setEnabled(fetchRecentEnabled);
|
||||
connect(fetchRecentCommitsDays, signal, [this, repo](int value) {
|
||||
repo.config().setValue("lfs.fetchrecentcommitsdays", value);
|
||||
connect(fetchRecentCommitsDays, signal, [repo](int value) {
|
||||
git::Config config = repo.config();
|
||||
config.setValue("lfs.fetchrecentcommitsdays", value);
|
||||
});
|
||||
connect(fetchRecentAlways, &QCheckBox::toggled,
|
||||
connect(fetchRecentAlways, &QCheckBox::toggled, this,
|
||||
[fetchRecentCommitsDays](bool checked) {
|
||||
fetchRecentCommitsDays->setEnabled(checked);
|
||||
});
|
||||
@ -666,7 +677,7 @@ public:
|
||||
|
||||
// lfs environment
|
||||
QPushButton *environment = new QPushButton(tr("View Environment"));
|
||||
connect(environment, &QAbstractButton::clicked, [this, view] {
|
||||
connect(environment, &QAbstractButton::clicked, this, [view] {
|
||||
git::Repository repo = view->repo();
|
||||
|
||||
QDialog *dialog = new QDialog();
|
||||
@ -687,7 +698,7 @@ public:
|
||||
});
|
||||
|
||||
QPushButton *deinit = new QPushButton(tr("Deinitialize LFS"));
|
||||
connect(deinit, &QAbstractButton::clicked, [this, view] {
|
||||
connect(deinit, &QAbstractButton::clicked, this, [this, view] {
|
||||
QString title = tr("Deinitialize LFS?");
|
||||
QString text =
|
||||
tr("Are you sure you want uninstall LFS from this repository?");
|
||||
@ -727,8 +738,6 @@ public:
|
||||
ConfigDialog::ConfigDialog(RepoView *view, Index index)
|
||||
: QDialog(view)
|
||||
{
|
||||
Application::track("ConfigDialog");
|
||||
|
||||
setMinimumWidth(500);
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
setContextMenuPolicy(Qt::NoContextMenu);
|
||||
@ -756,7 +765,7 @@ ConfigDialog::ConfigDialog(RepoView *view, Index index)
|
||||
|
||||
// Track actions in a group.
|
||||
mActions = new QActionGroup(this);
|
||||
connect(mActions, &QActionGroup::triggered, [this](QAction *action) {
|
||||
connect(mActions, &QActionGroup::triggered, this, [this](QAction *action) {
|
||||
mStack->setCurrentIndex(mActions->actions().indexOf(action));
|
||||
setWindowTitle(action->text());
|
||||
});
|
||||
@ -831,7 +840,7 @@ ConfigDialog::ConfigDialog(RepoView *view, Index index)
|
||||
// Add edit button.
|
||||
QPushButton *edit =
|
||||
buttons->addButton(tr("Edit Config File..."), QDialogButtonBox::ResetRole);
|
||||
connect(edit, &QPushButton::clicked, this, [this, view, generalPanel] {
|
||||
connect(edit, &QPushButton::clicked, this, [view, generalPanel] {
|
||||
QString file = view->repo().dir().filePath("config");
|
||||
if (EditorWindow *window = view->openEditor(file))
|
||||
connect(window->widget(), &BlameEditor::saved,
|
||||
|
39
src/dialogs/SettingsDialog.cpp
Normal file → Executable file
39
src/dialogs/SettingsDialog.cpp
Normal file → Executable file
@ -120,13 +120,10 @@ public:
|
||||
mStoreCredentials = new QCheckBox(
|
||||
tr("Store credentials in secure storage"), this);
|
||||
|
||||
mUsageReporting = new QCheckBox(
|
||||
tr("Allow collection of usage data"), this);
|
||||
QLabel *privacy = new QLabel(tr("<a href='view'>View privacy policy</a>"));
|
||||
connect(privacy, &QLabel::linkActivated, [] {
|
||||
AboutDialog::openSharedInstance(AboutDialog::Privacy);
|
||||
});
|
||||
mUsageReporting->setEnabled(false);
|
||||
|
||||
QFormLayout *form = new QFormLayout;
|
||||
form->addRow(tr("User name:"), mName);
|
||||
@ -137,7 +134,6 @@ public:
|
||||
form->addRow(QString(), mAutoPrune);
|
||||
form->addRow(tr("Language:"), mNoTranslation);
|
||||
form->addRow(tr("Credentials:"), mStoreCredentials);
|
||||
form->addRow(tr("Usage reporting:"), mUsageReporting);
|
||||
form->addRow(QString(), privacy);
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout(this);
|
||||
@ -148,14 +144,16 @@ public:
|
||||
|
||||
// Connect signals after initializing fields.
|
||||
connect(mName, &QLineEdit::textChanged, [](const QString &text) {
|
||||
git::Config::global().setValue("user.name", text);
|
||||
git::Config config = git::Config::global();
|
||||
config.setValue("user.name", text);
|
||||
});
|
||||
|
||||
connect(mEmail, &QLineEdit::textChanged, [](const QString &text) {
|
||||
git::Config::global().setValue("user.email", text);
|
||||
git::Config config = git::Config::global();
|
||||
config.setValue("user.email", text);
|
||||
});
|
||||
|
||||
connect(mFetch, &QCheckBox::toggled, [](bool checked) {
|
||||
connect(mFetch, &QCheckBox::toggled, this, [](bool checked) {
|
||||
Settings::instance()->setValue("global/autofetch/enable", checked);
|
||||
foreach (MainWindow *window, MainWindow::windows()) {
|
||||
for (int i = 0; i < window->count(); ++i)
|
||||
@ -188,10 +186,6 @@ public:
|
||||
Settings::instance()->setValue("credential/store", checked);
|
||||
delete CredentialHelper::instance();
|
||||
});
|
||||
|
||||
connect(mUsageReporting, &QCheckBox::toggled, [](bool checked) {
|
||||
Settings::instance()->setValue("tracking/enabled", checked);
|
||||
});
|
||||
}
|
||||
|
||||
void init()
|
||||
@ -214,7 +208,6 @@ public:
|
||||
|
||||
mNoTranslation->setChecked(settings->value("translation/disable").toBool());
|
||||
mStoreCredentials->setChecked(settings->value("credential/store").toBool());
|
||||
mUsageReporting->setChecked(settings->value("tracking/enabled").toBool());
|
||||
}
|
||||
|
||||
private:
|
||||
@ -228,7 +221,6 @@ private:
|
||||
QCheckBox *mAutoPrune;
|
||||
QCheckBox *mNoTranslation;
|
||||
QCheckBox *mStoreCredentials;
|
||||
QCheckBox *mUsageReporting;
|
||||
};
|
||||
|
||||
class ToolsPanel : public QWidget
|
||||
@ -242,7 +234,7 @@ public:
|
||||
// external editor
|
||||
QLineEdit *editTool = new QLineEdit(this);
|
||||
editTool->setText(mConfig.value<QString>("gui.editor"));
|
||||
connect(editTool, &QLineEdit::textChanged, [this](const QString &text) {
|
||||
connect(editTool, &QLineEdit::textChanged, this, [this](const QString &text) {
|
||||
if (text.isEmpty()) {
|
||||
mConfig.remove("gui.editor");
|
||||
} else {
|
||||
@ -258,7 +250,7 @@ public:
|
||||
QCheckBox *backup =
|
||||
new QCheckBox(tr("Keep backup of merge files (.orig)"), this);
|
||||
backup->setChecked(mConfig.value<bool>("mergetool.keepBackup"));
|
||||
connect(backup, &QCheckBox::toggled, [this](bool checked) {
|
||||
connect(backup, &QCheckBox::toggled, this, [this](bool checked) {
|
||||
mConfig.setValue("mergetool.keepBackup", checked);
|
||||
});
|
||||
|
||||
@ -291,16 +283,16 @@ private:
|
||||
|
||||
// React to combo box selections.
|
||||
auto signal = QOverload<int>::of(&QComboBox::currentIndexChanged);
|
||||
connect(comboBox, signal, [this, key, comboBox](int index) {
|
||||
connect(comboBox, signal, this, [this, key, comboBox](int index) {
|
||||
mConfig.setValue(key, comboBox->currentText());
|
||||
});
|
||||
|
||||
QPushButton *configure = new QPushButton(tr("Configure"), this);
|
||||
connect(configure, &QPushButton::clicked, [this, comboBox, type] {
|
||||
connect(configure, &QPushButton::clicked, this, [this, comboBox, type] {
|
||||
ExternalToolsDialog *dialog = new ExternalToolsDialog(type, this);
|
||||
|
||||
// Update combo box when external tools dialog closes.
|
||||
connect(dialog, &QDialog::finished, [dialog, comboBox, type] {
|
||||
connect(dialog, &QDialog::finished, this, [comboBox, type] {
|
||||
QString name = comboBox->currentText();
|
||||
populateExternalTools(comboBox, type);
|
||||
comboBox->setCurrentIndex(comboBox->findText(name));
|
||||
@ -380,8 +372,7 @@ public:
|
||||
model->item(comboBox->count() - 1)->setEnabled(false);
|
||||
|
||||
auto signal = QOverload<int>::of(&QComboBox::currentIndexChanged);
|
||||
connect(comboBox, signal, [this, parent, comboBox] {
|
||||
|
||||
connect(comboBox, signal, this, [this, parent, comboBox] {
|
||||
//Add new theme
|
||||
if (comboBox->currentIndex() == comboBox->count() - 2) {
|
||||
QDialog dialog;
|
||||
@ -396,7 +387,7 @@ public:
|
||||
create->setEnabled(false);
|
||||
|
||||
QLineEdit *nameField = new QLineEdit(&dialog);
|
||||
connect(nameField, &QLineEdit::textChanged, [this, create, nameField] {
|
||||
connect(nameField, &QLineEdit::textChanged, this, [create, nameField] {
|
||||
create->setEnabled(!nameField->text().isEmpty());
|
||||
});
|
||||
|
||||
@ -444,7 +435,7 @@ public:
|
||||
|
||||
if (mb.clickedButton() == restart) {
|
||||
QWidget *dialog = window();
|
||||
QTimer::singleShot(0, [dialog] {
|
||||
QTimer::singleShot(0, this, [dialog] {
|
||||
// Close the dialog.
|
||||
dialog->close();
|
||||
|
||||
@ -800,7 +791,7 @@ SettingsDialog::SettingsDialog(Index index, QWidget *parent)
|
||||
|
||||
// Track actions in a group.
|
||||
QActionGroup *actions = new QActionGroup(this);
|
||||
connect(actions, &QActionGroup::triggered,
|
||||
connect(actions, &QActionGroup::triggered, this,
|
||||
[this, stack, description, edit](QAction *action) {
|
||||
int index = action->data().toInt();
|
||||
bool config = (index < Window);
|
||||
@ -902,8 +893,6 @@ SettingsDialog::SettingsDialog(Index index, QWidget *parent)
|
||||
|
||||
void SettingsDialog::openSharedInstance(Index index)
|
||||
{
|
||||
Application::track("SettingsDialog");
|
||||
|
||||
static QPointer<SettingsDialog> dialog;
|
||||
if (dialog) {
|
||||
dialog->show();
|
||||
|
@ -413,7 +413,7 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
mRepoList = new QListView(this);
|
||||
mRepoList->setIconSize(QSize(32, 32));
|
||||
mRepoList->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
connect(mRepoList, &QListView::clicked, [this](const QModelIndex &index) {
|
||||
connect(mRepoList, &QListView::clicked, this, [this](const QModelIndex &index) {
|
||||
if (!index.data(Qt::UserRole).isValid()) {
|
||||
switch (index.row()) {
|
||||
case RepoModel::Clone: mClone->trigger(); break;
|
||||
@ -427,12 +427,12 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
|
||||
RepoModel *repoModel = new RepoModel(mRepoList);
|
||||
mRepoList->setModel(repoModel);
|
||||
connect(repoModel, &RepoModel::modelReset, [this] {
|
||||
connect(repoModel, &RepoModel::modelReset, this, [this] {
|
||||
mRepoList->setCurrentIndex(mRepoList->model()->index(0, 0));
|
||||
});
|
||||
|
||||
mRepoFooter = new Footer(mRepoList);
|
||||
connect(mRepoFooter, &Footer::minusClicked, [this] {
|
||||
connect(mRepoFooter, &Footer::minusClicked, this, [this] {
|
||||
// Sort selection in reverse order.
|
||||
QModelIndexList indexes = mRepoList->selectionModel()->selectedIndexes();
|
||||
std::sort(indexes.begin(), indexes.end(),
|
||||
@ -449,9 +449,9 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
mRepoFooter->setPlusMenu(repoPlusMenu);
|
||||
|
||||
mClone = repoPlusMenu->addAction(tr("Clone Repository"));
|
||||
connect(mClone, &QAction::triggered, [this] {
|
||||
connect(mClone, &QAction::triggered, this, [this] {
|
||||
CloneDialog *dialog = new CloneDialog(CloneDialog::Clone, this);
|
||||
connect(dialog, &CloneDialog::accepted, [this, dialog] {
|
||||
connect(dialog, &CloneDialog::accepted, this, [this, dialog] {
|
||||
if (MainWindow *window = openWindow(dialog->path()))
|
||||
window->currentView()->addLogEntry(
|
||||
dialog->message(), dialog->messageTitle());
|
||||
@ -460,7 +460,7 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
});
|
||||
|
||||
mOpen = repoPlusMenu->addAction(tr("Open Existing Repository"));
|
||||
connect(mOpen, &QAction::triggered, [this] {
|
||||
connect(mOpen, &QAction::triggered, this, [this] {
|
||||
// FIXME: Filter out non-git dirs.
|
||||
QFileDialog *dialog =
|
||||
new QFileDialog(this, tr("Open Repository"), QDir::homePath());
|
||||
@ -473,9 +473,9 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
});
|
||||
|
||||
mInit = repoPlusMenu->addAction(tr("Initialize New Repository"));
|
||||
connect(mInit, &QAction::triggered, [this] {
|
||||
connect(mInit, &QAction::triggered, this, [this] {
|
||||
CloneDialog *dialog = new CloneDialog(CloneDialog::Init, this);
|
||||
connect(dialog, &CloneDialog::accepted, [this, dialog] {
|
||||
connect(dialog, &CloneDialog::accepted, this, [this, dialog] {
|
||||
if (MainWindow *window = openWindow(dialog->path()))
|
||||
window->currentView()->addLogEntry(dialog->message(), dialog->messageTitle());
|
||||
});
|
||||
@ -486,7 +486,7 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
mRepoFooter->setContextMenu(repoContextMenu);
|
||||
|
||||
QAction *clear = repoContextMenu->addAction(tr("Clear All"));
|
||||
connect(clear, &QAction::triggered, [this] {
|
||||
connect(clear, &QAction::triggered, [] {
|
||||
RecentRepositories::instance()->clear();
|
||||
});
|
||||
|
||||
@ -496,7 +496,7 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
showFullPath->setCheckable(true);
|
||||
showFullPath->setChecked(recentChecked);
|
||||
repoModel->setShowFullPath(recentChecked);
|
||||
connect(showFullPath, &QAction::triggered, [repoModel](bool checked) {
|
||||
connect(showFullPath, &QAction::triggered, this, [repoModel](bool checked) {
|
||||
QSettings().setValue("start/recent/fullpath", checked);
|
||||
repoModel->setShowFullPath(checked);
|
||||
});
|
||||
@ -520,13 +520,13 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
mHostTree->setExpandsOnDoubleClick(false);
|
||||
mHostTree->setIconSize(QSize(32, 32));
|
||||
mHostTree->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
connect(mHostTree, &QTreeView::clicked, [this](const QModelIndex &index) {
|
||||
connect(mHostTree, &QTreeView::clicked, this, [this](const QModelIndex &index) {
|
||||
int rows = mHostTree->model()->rowCount(index);
|
||||
if (!rows && !index.data(RepositoryRole).isValid())
|
||||
edit(index);
|
||||
});
|
||||
|
||||
connect(mHostTree, &QTreeView::doubleClicked,
|
||||
connect(mHostTree, &QTreeView::doubleClicked, this,
|
||||
[this](const QModelIndex &index) {
|
||||
QModelIndex parent = index.parent();
|
||||
if (parent.isValid()) {
|
||||
@ -542,7 +542,7 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
|
||||
HostModel *hostModel = new HostModel(style(), mHostTree);
|
||||
mHostTree->setModel(hostModel);
|
||||
connect(hostModel, &QAbstractItemModel::modelReset, [this] {
|
||||
connect(hostModel, &QAbstractItemModel::modelReset, this, [this] {
|
||||
QModelIndex index = mHostTree->model()->index(0, 0);
|
||||
mHostTree->setRootIsDecorated(index.data(AccountRole).isValid());
|
||||
mHostTree->expandAll();
|
||||
@ -551,14 +551,14 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
mHostTree->setItemDelegate(new ProgressDelegate(this));
|
||||
|
||||
mHostFooter = new Footer(mHostTree);
|
||||
connect(mHostFooter, &Footer::plusClicked, [this] { edit(); });
|
||||
connect(mHostFooter, &Footer::plusClicked, this, [this] { edit(); });
|
||||
connect(mHostFooter, &Footer::minusClicked, this, &StartDialog::remove);
|
||||
|
||||
QMenu *hostContextMenu = new QMenu(this);
|
||||
mHostFooter->setContextMenu(hostContextMenu);
|
||||
|
||||
QAction *refresh = hostContextMenu->addAction(tr("Refresh"));
|
||||
connect(refresh, &QAction::triggered, [] {
|
||||
connect(refresh, &QAction::triggered, this, [] {
|
||||
Accounts *accounts = Accounts::instance();
|
||||
for (int i = 0; i < accounts->count(); ++i)
|
||||
accounts->account(i)->connect();
|
||||
@ -569,14 +569,14 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
showFullName->setCheckable(true);
|
||||
showFullName->setChecked(remoteChecked);
|
||||
hostModel->setShowFullName(remoteChecked);
|
||||
connect(showFullName, &QAction::triggered, [hostModel](bool checked) {
|
||||
connect(showFullName, &QAction::triggered, this, [hostModel](bool checked) {
|
||||
QSettings().setValue("start/remote/fullname", checked);
|
||||
hostModel->setShowFullName(checked);
|
||||
});
|
||||
|
||||
// Clear the other list when this selection changes.
|
||||
QItemSelectionModel *repoSelModel = mRepoList->selectionModel();
|
||||
connect(repoSelModel, &QItemSelectionModel::selectionChanged, [this] {
|
||||
connect(repoSelModel, &QItemSelectionModel::selectionChanged, this, [this] {
|
||||
if (!mRepoList->selectionModel()->selectedIndexes().isEmpty())
|
||||
mHostTree->clearSelection();
|
||||
updateButtons();
|
||||
@ -584,7 +584,7 @@ StartDialog::StartDialog(QWidget *parent)
|
||||
|
||||
// Clear the other list when this selection changes.
|
||||
QItemSelectionModel *hostSelModel = mHostTree->selectionModel();
|
||||
connect(hostSelModel, &QItemSelectionModel::selectionChanged, [this] {
|
||||
connect(hostSelModel, &QItemSelectionModel::selectionChanged, this, [this] {
|
||||
if (!mHostTree->selectionModel()->selectedIndexes().isEmpty())
|
||||
mRepoList->clearSelection();
|
||||
updateButtons();
|
||||
@ -671,8 +671,6 @@ void StartDialog::accept()
|
||||
|
||||
StartDialog *StartDialog::openSharedInstance()
|
||||
{
|
||||
Application::track("StartDialog");
|
||||
|
||||
static QPointer<StartDialog> dialog;
|
||||
if (dialog) {
|
||||
dialog->show();
|
||||
@ -776,7 +774,7 @@ void StartDialog::edit(const QModelIndex &index)
|
||||
return;
|
||||
|
||||
CloneDialog *dialog = new CloneDialog(CloneDialog::Clone, this, repo);
|
||||
connect(dialog, &CloneDialog::accepted, [this, index, dialog] {
|
||||
connect(dialog, &CloneDialog::accepted, this, [this, index, dialog] {
|
||||
// Set local path.
|
||||
Account *account = Accounts::instance()->account(index.parent().row());
|
||||
account->setRepositoryPath(index.row(), dialog->path());
|
||||
|
@ -48,7 +48,7 @@ public:
|
||||
mCalendar->setWindowFlags(Qt::Popup);
|
||||
mCalendar->setVisible(false);
|
||||
|
||||
connect(mCalendar, &QCalendarWidget::clicked, [this](const QDate &date) {
|
||||
connect(mCalendar, &QCalendarWidget::clicked, this, [this](const QDate &date) {
|
||||
setCurrentText(date.toString(Index::dateFormat()));
|
||||
hidePopup();
|
||||
});
|
||||
@ -195,7 +195,6 @@ void AdvancedSearchWidget::accept()
|
||||
}
|
||||
|
||||
emit accepted(fields.join(' '));
|
||||
Application::track("search", "search", "advanced", fields.size());
|
||||
|
||||
hide();
|
||||
}
|
||||
|
@ -154,8 +154,6 @@ private:
|
||||
RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
: QSplitter(Qt::Vertical, parent), mRepo(repo)
|
||||
{
|
||||
Application::track("RepoView");
|
||||
|
||||
setHandleWidth(0);
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
|
||||
@ -177,12 +175,12 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
// Initialize index.
|
||||
mIndex = new Index(repo, this);
|
||||
SearchField *searchField = toolBar->searchField();
|
||||
connect(&mIndexer, &QProcess::started, [searchField] {
|
||||
connect(&mIndexer, &QProcess::started, this, [searchField] {
|
||||
searchField->setPlaceholderText(tr("Indexing..."));
|
||||
});
|
||||
using Signal = void (QProcess::*)(int,QProcess::ExitStatus);
|
||||
auto signal = static_cast<Signal>(&QProcess::finished);
|
||||
connect(&mIndexer, signal,
|
||||
connect(&mIndexer, signal, this,
|
||||
[this, searchField](int code, QProcess::ExitStatus status) {
|
||||
Q_UNUSED(code)
|
||||
|
||||
@ -202,7 +200,7 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
|
||||
// Forward indexer stderr. Read from stdout.
|
||||
mIndexer.setProcessChannelMode(QProcess::ForwardedErrorChannel);
|
||||
connect(&mIndexer, &QProcess::readyReadStandardOutput, [this] {
|
||||
connect(&mIndexer, &QProcess::readyReadStandardOutput, this, [this] {
|
||||
mIndexer.readAllStandardOutput();
|
||||
mIndex->reset();
|
||||
});
|
||||
@ -245,7 +243,7 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
menuBar, &MenuBar::updateBranch);
|
||||
|
||||
// Select HEAD branch when it changes.
|
||||
connect(notifier, &git::RepositoryNotifier::referenceUpdated,
|
||||
connect(notifier, &git::RepositoryNotifier::referenceUpdated, this,
|
||||
[this](const git::Reference &ref) {
|
||||
if (ref.isValid() && ref.isHead()) {
|
||||
mRefs->select(ref);
|
||||
@ -273,7 +271,7 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
this, &RepoView::statusChanged);
|
||||
|
||||
// Respond to pathspec change.
|
||||
connect(mPathspec, &PathspecWidget::pathspecChanged,
|
||||
connect(mPathspec, &PathspecWidget::pathspecChanged, this,
|
||||
[this](const QString &pathspec) {
|
||||
git::Config config = mRepo.appConfig();
|
||||
mCommits->setPathspec(pathspec, config.value<bool>("index.enable", true));
|
||||
@ -282,14 +280,14 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
// Respond to search query change.
|
||||
connect(searchField, &SearchField::textChanged,
|
||||
mCommits, &CommitList::setFilter);
|
||||
connect(mIndex, &Index::indexReset, [this, searchField] {
|
||||
connect(mIndex, &Index::indexReset, this, [this, searchField] {
|
||||
mCommits->setFilter(searchField->text());
|
||||
});
|
||||
|
||||
mDetails = new DetailView(repo, this);
|
||||
|
||||
// Respond to diff/tree mode change.
|
||||
connect(mDetails, &DetailView::viewModeChanged,
|
||||
connect(mDetails, &DetailView::viewModeChanged, this,
|
||||
[this](ViewMode mode, bool spontaneous) {
|
||||
Q_UNUSED(mode)
|
||||
|
||||
@ -308,7 +306,7 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
// FIXME: This is a workaround.
|
||||
connect(notifier, &git::RepositoryNotifier::directoryStaged,
|
||||
this, &RepoView::refresh, Qt::QueuedConnection);
|
||||
connect(notifier, &git::RepositoryNotifier::directoryAboutToBeStaged,
|
||||
connect(notifier, &git::RepositoryNotifier::directoryAboutToBeStaged, this,
|
||||
[this](const QString &dir, int count, bool &allow) {
|
||||
if (!Settings::instance()->prompt(Settings::PromptDirectories))
|
||||
return;
|
||||
@ -334,7 +332,7 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
});
|
||||
|
||||
// large file size warning
|
||||
connect(notifier, &git::RepositoryNotifier::largeFileAboutToBeStaged,
|
||||
connect(notifier, &git::RepositoryNotifier::largeFileAboutToBeStaged, this,
|
||||
[this](const QString &file, int size, bool &allow) {
|
||||
if (!Settings::instance()->prompt(Settings::PromptLargeFiles))
|
||||
return;
|
||||
@ -381,7 +379,7 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
mDetailSplitter->addWidget(mDetails);
|
||||
mDetailSplitter->setStretchFactor(0, 1);
|
||||
mDetailSplitter->setStretchFactor(1, 3);
|
||||
connect(mDetailSplitter, &QSplitter::splitterMoved, [this] {
|
||||
connect(mDetailSplitter, &QSplitter::splitterMoved, this, [this] {
|
||||
QSettings().setValue(kSplitterKey, mDetailSplitter->saveState());
|
||||
});
|
||||
|
||||
@ -397,7 +395,7 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
this, &RepoView::cancelRemoteTransfer);
|
||||
|
||||
mLogTimer.setSingleShot(true);
|
||||
connect(&mLogTimer, &QTimer::timeout, [this] {
|
||||
connect(&mLogTimer, &QTimer::timeout, this, [this] {
|
||||
setLogVisible(false);
|
||||
});
|
||||
|
||||
@ -442,7 +440,7 @@ RepoView::RepoView(const git::Repository &repo, MainWindow *parent)
|
||||
mDetailSplitter->restoreState(QSettings().value(kSplitterKey).toByteArray());
|
||||
|
||||
// Connect automatic fetch timer.
|
||||
connect(&mFetchTimer, &QTimer::timeout, [this] {
|
||||
connect(&mFetchTimer, &QTimer::timeout, this, [this] {
|
||||
fetch(git::Remote(), false, false);
|
||||
});
|
||||
}
|
||||
@ -785,13 +783,13 @@ Repository *RepoView::remoteRepo()
|
||||
mRemoteRepoCached = true;
|
||||
|
||||
if (mRemoteRepo) {
|
||||
auto err = connect(mRemoteRepo->account(), &Account::pullRequestError,
|
||||
auto err = connect(mRemoteRepo->account(), &Account::pullRequestError, this,
|
||||
[this](const QString &name, const QString &message) {
|
||||
LogEntry *parent = addLogEntry(tr("Pull Request"), tr("Create"));
|
||||
error(parent, tr("create pull request"), name, message);
|
||||
});
|
||||
|
||||
connect(mRemoteRepo, &Repository::destroyed, [this, err] {
|
||||
connect(mRemoteRepo, &Repository::destroyed, this, [this, err] {
|
||||
disconnect(err);
|
||||
mRemoteRepo = nullptr;
|
||||
mRemoteRepoCached = false;
|
||||
@ -949,7 +947,7 @@ void RepoView::setLogVisible(bool visible)
|
||||
timeline->setCurveShape(QTimeLine::LinearCurve);
|
||||
timeline->setUpdateInterval(20);
|
||||
|
||||
connect(timeline, &QTimeLine::valueChanged, [this, pos](qreal value) {
|
||||
connect(timeline, &QTimeLine::valueChanged, this, [this, pos](qreal value) {
|
||||
setSizes({1, static_cast<int>(pos * value)});
|
||||
});
|
||||
|
||||
@ -1700,7 +1698,7 @@ void RepoView::promptToForcePush(
|
||||
|
||||
QPushButton *accept =
|
||||
dialog->addButton(tr("Force Push"), QMessageBox::AcceptRole);
|
||||
connect(accept, &QPushButton::clicked, [this, remote, src] {
|
||||
connect(accept, &QPushButton::clicked, this, [this, remote, src] {
|
||||
push(remote, src, QString(), false, true);
|
||||
});
|
||||
|
||||
@ -1888,7 +1886,7 @@ bool RepoView::commit(
|
||||
|
||||
QPushButton *accept =
|
||||
dialog->addButton(tr("Commit"), QMessageBox::AcceptRole);
|
||||
connect(accept, &QPushButton::clicked, [this, message, upstream, parent] {
|
||||
connect(accept, &QPushButton::clicked, this, [this, message, upstream, parent] {
|
||||
this->commit(message, upstream, parent, true);
|
||||
});
|
||||
|
||||
@ -1970,7 +1968,7 @@ void RepoView::promptToCheckout()
|
||||
{
|
||||
git::Reference ref = reference();
|
||||
CheckoutDialog *dialog = new CheckoutDialog(mRepo, ref, this);
|
||||
connect(dialog, &QDialog::accepted, [this, dialog] {
|
||||
connect(dialog, &QDialog::accepted, this, [this, dialog] {
|
||||
checkout(dialog->reference(), dialog->detach());
|
||||
});
|
||||
|
||||
@ -2011,7 +2009,7 @@ void RepoView::checkout(
|
||||
|
||||
QPushButton *checkoutButton =
|
||||
dialog->addButton(tr("Checkout Detached HEAD"), QMessageBox::DestructiveRole);
|
||||
connect(checkoutButton, &QPushButton::clicked, [this, ref, detach] {
|
||||
connect(checkoutButton, &QPushButton::clicked, this, [this, ref, detach] {
|
||||
checkout(ref.target(), ref, detach);
|
||||
});
|
||||
|
||||
@ -2025,7 +2023,7 @@ void RepoView::checkout(
|
||||
|
||||
QPushButton *resetButton =
|
||||
dialog->addButton(tr("Reset Local Branch"), QMessageBox::AcceptRole);
|
||||
connect(resetButton, &QPushButton::clicked, [this, ref, local] {
|
||||
connect(resetButton, &QPushButton::clicked, this, [this, ref, local] {
|
||||
createBranch(local, ref.target(), ref, true, true);
|
||||
});
|
||||
} else {
|
||||
@ -2040,7 +2038,7 @@ void RepoView::checkout(
|
||||
|
||||
QPushButton *createButton =
|
||||
dialog->addButton(tr("Create Local Branch"), QMessageBox::AcceptRole);
|
||||
connect(createButton, &QPushButton::clicked, [this, ref, local] {
|
||||
connect(createButton, &QPushButton::clicked, this, [this, ref, local] {
|
||||
createBranch(local, ref.target(), ref, true);
|
||||
});
|
||||
}
|
||||
@ -2095,7 +2093,7 @@ void RepoView::checkout(
|
||||
void RepoView::promptToCreateBranch(const git::Commit &commit)
|
||||
{
|
||||
NewBranchDialog *dialog = new NewBranchDialog(mRepo, commit, this);
|
||||
connect(dialog, &QDialog::accepted, [this, dialog] {
|
||||
connect(dialog, &QDialog::accepted, this, [this, dialog] {
|
||||
createBranch(
|
||||
dialog->name(), dialog->target(),
|
||||
dialog->upstream(), dialog->checkout());
|
||||
@ -2303,7 +2301,7 @@ void RepoView::promptToReset(
|
||||
|
||||
QString buttonText = commitToAmend ? tr("Amend") : tr("Reset");
|
||||
QPushButton *accept = dialog->addButton(buttonText, QMessageBox::AcceptRole);
|
||||
connect(accept, &QPushButton::clicked, [this, commit, type, commitToAmend] {
|
||||
connect(accept, &QPushButton::clicked, this, [this, commit, type, commitToAmend] {
|
||||
reset(commit, type, commitToAmend);
|
||||
|
||||
// Pre-populate the commit message editor.
|
||||
@ -2630,7 +2628,7 @@ void RepoView::ignore(const QString &name)
|
||||
if (!file.open(QFile::Append | QFile::Text))
|
||||
return;
|
||||
|
||||
QTextStream(&file) << name << endl;
|
||||
QTextStream(&file) << name << "\n";
|
||||
file.close();
|
||||
|
||||
refresh();
|
||||
@ -2667,14 +2665,14 @@ EditorWindow *RepoView::openEditor(
|
||||
}
|
||||
|
||||
connect(widget, &BlameEditor::linkActivated, this, &RepoView::visitLink);
|
||||
connect(widget, &BlameEditor::saved, [this] {
|
||||
connect(widget, &BlameEditor::saved, this, [this] {
|
||||
// Notify window that the head branch is changed.
|
||||
emit mRepo.notifier()->referenceUpdated(mRepo.head());
|
||||
});
|
||||
|
||||
// Track this window.
|
||||
mTrackedWindows.append(window);
|
||||
connect(window, &QObject::destroyed, [this, window] {
|
||||
connect(window, &QObject::destroyed, this, [this, window] {
|
||||
mTrackedWindows.removeAll(window);
|
||||
});
|
||||
|
||||
@ -2869,65 +2867,66 @@ bool RepoView::checkForConflicts(LogEntry *parent, const QString &action)
|
||||
|
||||
bool RepoView::match(QObject* search, QObject* parent)
|
||||
{
|
||||
QObjectList children = parent->children();
|
||||
for (auto child : children) {
|
||||
if (child == search)
|
||||
return true;
|
||||
QObjectList children = parent->children();
|
||||
for (auto child : children) {
|
||||
if (child == search)
|
||||
return true;
|
||||
|
||||
if (match(search, child))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
if (match(search, child))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
RepoView::DetailSplitterWidgets RepoView::detailSplitterMaximize(bool maximized, DetailSplitterWidgets maximizeWidget)
|
||||
{
|
||||
QWidget* widget = mDetailSplitter->focusWidget();
|
||||
QWidget* widget = mDetailSplitter->focusWidget();
|
||||
|
||||
DetailSplitterWidgets newMaximized = DetailSplitterWidgets::NotDefined;
|
||||
DetailSplitterWidgets newMaximized = DetailSplitterWidgets::NotDefined;
|
||||
|
||||
if (maximizeWidget != DetailSplitterWidgets::NotDefined)
|
||||
newMaximized = maximizeWidget;
|
||||
if (maximizeWidget != DetailSplitterWidgets::NotDefined)
|
||||
newMaximized = maximizeWidget;
|
||||
|
||||
mMaximized = maximized;
|
||||
mMaximized = maximized;
|
||||
|
||||
if (mMaximized) {
|
||||
bool found = false;
|
||||
for (int i=0; i < mDetailSplitter->count(); i++) {
|
||||
QWidget* w = mDetailSplitter->widget(i);
|
||||
if (maximizeWidget == DetailSplitterWidgets::SideBar) {
|
||||
if (w == mSideBar) {
|
||||
mSideBar->setVisible(true);
|
||||
found = true;
|
||||
continue;
|
||||
}
|
||||
} else if(maximizeWidget == DetailSplitterWidgets::DetailView) {
|
||||
if (w == mDetails) {
|
||||
mDetails->setVisible(true);
|
||||
found = true;
|
||||
continue;
|
||||
}
|
||||
} else if (!widget)
|
||||
return DetailSplitterWidgets::NotDefined;
|
||||
else if (w == widget || match(widget, w)) {
|
||||
w->setVisible(true);
|
||||
found = true;
|
||||
if (w == mSideBar)
|
||||
newMaximized = DetailSplitterWidgets::SideBar;
|
||||
else if (w == mDetails)
|
||||
newMaximized = DetailSplitterWidgets::DetailView;
|
||||
continue;
|
||||
}
|
||||
w->setVisible(false);
|
||||
if (mMaximized) {
|
||||
bool found = false;
|
||||
for (int i=0; i < mDetailSplitter->count(); i++) {
|
||||
QWidget* w = mDetailSplitter->widget(i);
|
||||
if (maximizeWidget == DetailSplitterWidgets::SideBar) {
|
||||
if (w == mSideBar) {
|
||||
mSideBar->setVisible(true);
|
||||
found = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
assert(found);
|
||||
} else {
|
||||
for (int i=0; i < mDetailSplitter->count(); i++)
|
||||
mDetailSplitter->widget(i)->setVisible(true);
|
||||
} else if(maximizeWidget == DetailSplitterWidgets::DetailView) {
|
||||
if (w == mDetails) {
|
||||
mDetails->setVisible(true);
|
||||
found = true;
|
||||
continue;
|
||||
}
|
||||
} else if (!widget)
|
||||
return DetailSplitterWidgets::NotDefined;
|
||||
else if (w == widget || match(widget, w)) {
|
||||
w->setVisible(true);
|
||||
found = true;
|
||||
if (w == mSideBar)
|
||||
newMaximized = DetailSplitterWidgets::SideBar;
|
||||
else if (w == mDetails)
|
||||
newMaximized = DetailSplitterWidgets::DetailView;
|
||||
continue;
|
||||
}
|
||||
w->setVisible(false);
|
||||
}
|
||||
|
||||
return newMaximized;
|
||||
assert(found);
|
||||
Q_UNUSED(found)
|
||||
} else {
|
||||
for (int i=0; i < mDetailSplitter->count(); i++)
|
||||
mDetailSplitter->widget(i)->setVisible(true);
|
||||
}
|
||||
|
||||
return newMaximized;
|
||||
}
|
||||
|
||||
#include "RepoView.moc"
|
||||
|
Loading…
Reference in New Issue
Block a user