Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Molkentin <danimo@owncloud.com>2014-07-11 02:31:24 +0400
committerDaniel Molkentin <danimo@owncloud.com>2014-07-11 13:07:31 +0400
commitdf3c3bca025a7cdb5f20e55fc2ecc37618e7cc8d (patch)
tree22fa58b5a09ec9f93ad376dce2edd6272483fc1a /src/gui/ignorelisteditor.cpp
parentd1b991e1984ef0c4ed803c5c5ead1ce3bfe00266 (diff)
Split into three separate projects: library, gui and cmd
Diffstat (limited to 'src/gui/ignorelisteditor.cpp')
-rw-r--r--src/gui/ignorelisteditor.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/src/gui/ignorelisteditor.cpp b/src/gui/ignorelisteditor.cpp
new file mode 100644
index 000000000..53a23110d
--- /dev/null
+++ b/src/gui/ignorelisteditor.cpp
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) by Daniel Molkentin <danimo@owncloud.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#include "mirallconfigfile.h"
+
+#include "ignorelisteditor.h"
+#include "ui_ignorelisteditor.h"
+
+#include <QFile>
+#include <QDir>
+#include <QListWidget>
+#include <QListWidgetItem>
+#include <QMessageBox>
+#include <QInputDialog>
+
+namespace Mirall {
+
+IgnoreListEditor::IgnoreListEditor(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::IgnoreListEditor)
+{
+ setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ ui->setupUi(this);
+
+ ui->descriptionLabel->setText(tr("Files or directories matching a pattern will not be synchronized.\n\n"
+ "Checked items will also be deleted if they prevent a directory from "
+ "being removed. This is useful for meta data."));
+
+ MirallConfigFile cfgFile;
+ readIgnoreFile(cfgFile.excludeFile(MirallConfigFile::SystemScope), true);
+ readIgnoreFile(cfgFile.excludeFile(MirallConfigFile::UserScope), false);
+
+ connect(this, SIGNAL(accepted()), SLOT(slotUpdateLocalIgnoreList()));
+ ui->removePushButton->setEnabled(false);
+ connect(ui->listWidget, SIGNAL(itemSelectionChanged()), SLOT(slotItemSelectionChanged()));
+ connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem*)), SLOT(slotItemChanged(QListWidgetItem*)));
+ connect(ui->removePushButton, SIGNAL(clicked()), SLOT(slotRemoveCurrentItem()));
+ connect(ui->addPushButton, SIGNAL(clicked()), SLOT(slotAddPattern()));
+ connect(ui->listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), SLOT(slotEditPattern(QListWidgetItem*)));
+}
+
+static void setupItemFlags(QListWidgetItem* item)
+{
+ item->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable|Qt::ItemIsUserCheckable);
+ item->setCheckState(Qt::Unchecked);
+}
+
+IgnoreListEditor::~IgnoreListEditor()
+{
+ delete ui;
+}
+
+void IgnoreListEditor::slotItemSelectionChanged()
+{
+ QListWidgetItem *item = ui->listWidget->currentItem();
+ if (!item) {
+ ui->removePushButton->setEnabled(false);
+ return;
+ }
+
+ bool enable = item->flags() & Qt::ItemIsEnabled;
+ ui->removePushButton->setEnabled(enable);
+}
+
+void IgnoreListEditor::slotRemoveCurrentItem()
+{
+ delete ui->listWidget->currentItem();
+}
+
+void IgnoreListEditor::slotUpdateLocalIgnoreList()
+{
+ MirallConfigFile cfgFile;
+ QString ignoreFile = cfgFile.excludeFile(MirallConfigFile::UserScope);
+ QFile ignores(ignoreFile);
+ if (ignores.open(QIODevice::WriteOnly)) {
+ for(int i = 0; i < ui->listWidget->count(); ++i) {
+ QListWidgetItem *item = ui->listWidget->item(i);
+ if (item->flags() & Qt::ItemIsEnabled) {
+ QByteArray prepend;
+ if (item->checkState() == Qt::Checked) {
+ prepend = "]";
+ }
+ ignores.write(prepend+item->text().toUtf8()+'\n');
+ }
+ }
+ } else {
+ QMessageBox::warning(this, tr("Could not open file"),
+ tr("Cannot write changes to '%1'.").arg(ignoreFile));
+ }
+}
+
+void IgnoreListEditor::slotAddPattern()
+{
+ bool okClicked;
+ QString pattern = QInputDialog::getText(this, tr("Add Ignore Pattern"),
+ tr("Add a new ignore pattern:"),
+ QLineEdit::Normal, QString(), &okClicked);
+
+ if (!okClicked || pattern.isEmpty())
+ return;
+
+ QListWidgetItem *item = new QListWidgetItem;
+ setupItemFlags(item);
+ if (pattern.startsWith("]")) {
+ pattern = pattern.mid(1);
+ item->setCheckState(Qt::Checked);
+ }
+ item->setText(pattern);
+ ui->listWidget->addItem(item);
+ ui->listWidget->scrollToItem(item);
+}
+
+void IgnoreListEditor::slotEditPattern(QListWidgetItem *item)
+{
+ if (!(item->flags() & Qt::ItemIsEnabled))
+ return;
+
+ QString pattern = QInputDialog::getText(this, tr("Edit Ignore Pattern"),
+ tr("Edit ignore pattern:"),
+ QLineEdit::Normal, item->text());
+ if (!pattern.isEmpty()) {
+ item->setText(pattern);
+ }
+}
+
+void IgnoreListEditor::readIgnoreFile(const QString &file, bool readOnly)
+{
+
+ MirallConfigFile cfgFile;
+ const QString disabledTip(tr("This entry is provided by the system at '%1' "
+ "and cannot be modified in this view.")
+ .arg(QDir::toNativeSeparators(cfgFile.excludeFile(MirallConfigFile::SystemScope))));
+
+ QFile ignores(file);
+ if (ignores.open(QIODevice::ReadOnly)) {
+ while (!ignores.atEnd()) {
+ QString line = QString::fromUtf8(ignores.readLine());
+ line.chop(1);
+ if (!line.isEmpty() && !line.startsWith("#")) {
+ QListWidgetItem *item = new QListWidgetItem;
+ setupItemFlags(item);
+ if (line.startsWith("]")) {
+ line = line.mid(1);
+ item->setCheckState(Qt::Checked);
+ }
+ item->setText(line);
+ if (readOnly) {
+ item->setFlags(item->flags() ^ Qt::ItemIsEnabled);
+ item->setToolTip(disabledTip);
+ }
+ ui->listWidget->addItem(item);
+ }
+ }
+ }
+}
+
+} // namespace Mirall