summaryrefslogtreecommitdiff
path: root/plugins/CopyEngine/Ultracopier/Filters.cpp
diff options
context:
space:
mode:
authorThomas Preud'homme <robotux@celest.fr>2017-11-24 23:24:09 +0000
committerThomas Preud'homme <robotux@celest.fr>2017-11-24 23:24:09 +0000
commitb3c8bdcc0d1e4b2ab298847a7902b6d60410a5bc (patch)
tree8fce8a51adfb245db8ab2a76831661780c0c713e /plugins/CopyEngine/Ultracopier/Filters.cpp
parente297dbd8052ef4e66f069e2dd1865ae7fa8af28e (diff)
New upstream version 1.2.3.6
Diffstat (limited to 'plugins/CopyEngine/Ultracopier/Filters.cpp')
-rw-r--r--plugins/CopyEngine/Ultracopier/Filters.cpp457
1 files changed, 457 insertions, 0 deletions
diff --git a/plugins/CopyEngine/Ultracopier/Filters.cpp b/plugins/CopyEngine/Ultracopier/Filters.cpp
new file mode 100644
index 0000000..3bb81d1
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Filters.cpp
@@ -0,0 +1,457 @@
+#include "Filters.h"
+#include "ui_Filters.h"
+
+#include <QRegularExpression>
+
+Filters::Filters(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::Filters)
+{
+ ui->setupUi(this);
+}
+
+Filters::~Filters()
+{
+ delete ui;
+}
+
+void Filters::setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size())
+ return;
+ Filters_rules new_item;
+
+ include.clear();
+ int index=0;
+ while(index<includeStrings.size())
+ {
+ new_item.search_text=includeStrings.at(index);
+ QStringList options=includeOptions.at(index).split(QStringLiteral(";"));
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(options.contains(QStringLiteral("SearchType_simpleRegex")))
+ new_item.search_type=SearchType_simpleRegex;
+ if(options.contains(QStringLiteral("SearchType_perlRegex")))
+ new_item.search_type=SearchType_perlRegex;
+ if(options.contains(QStringLiteral("ApplyOn_file")))
+ new_item.apply_on=ApplyOn_file;
+ if(options.contains(QStringLiteral("ApplyOn_folder")))
+ new_item.apply_on=ApplyOn_folder;
+ if(options.contains(QStringLiteral("need_match_all")))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ include << new_item;
+
+ index++;
+ }
+
+ exclude.clear();
+ index=0;
+ while(index<excludeStrings.size())
+ {
+ new_item.search_text=excludeStrings.at(index);
+ QStringList options=excludeOptions.at(index).split(QStringLiteral(";"));
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(options.contains(QStringLiteral("SearchType_simpleRegex")))
+ new_item.search_type=SearchType_simpleRegex;
+ if(options.contains(QStringLiteral("SearchType_perlRegex")))
+ new_item.search_type=SearchType_perlRegex;
+ if(options.contains(QStringLiteral("ApplyOn_file")))
+ new_item.apply_on=ApplyOn_file;
+ if(options.contains(QStringLiteral("ApplyOn_folder")))
+ new_item.apply_on=ApplyOn_folder;
+ if(options.contains(QStringLiteral("need_match_all")))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ exclude << new_item;
+
+ index++;
+ }
+
+ reShowAll();
+}
+
+void Filters::reShowAll()
+{
+ ui->inclusion->clear();
+ int index=0;
+ while(index<include.size())
+ {
+ QString entryShow=include.at(index).search_text+QStringLiteral(" (");
+ QStringList optionsToShow;
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << tr("Raw text");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << tr("Simplified regex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << tr("Perl's regex");
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << tr("Only on file");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << tr("Only on folder");
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ entryShow+=optionsToShow.join(QStringLiteral(","));
+ entryShow+=")";
+ ui->inclusion->addItem(new QListWidgetItem(entryShow));
+ index++;
+ }
+ ui->exclusion->clear();
+ index=0;
+ while(index<exclude.size())
+ {
+ QString entryShow=exclude.at(index).search_text+QStringLiteral(" (");
+ QStringList optionsToShow;
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << tr("Raw text");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << tr("Simplified regex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << tr("Perl's regex");
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << tr("Only on file");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << tr("Only on folder");
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ entryShow+=optionsToShow.join(QStringLiteral(","));
+ entryShow+=")";
+ ui->exclusion->addItem(new QListWidgetItem(entryShow));
+ index++;
+ }
+}
+
+QList<Filters_rules> Filters::getInclude() const
+{
+ return include;
+}
+
+QList<Filters_rules> Filters::getExclude() const
+{
+ return exclude;
+}
+
+void Filters::newLanguageLoaded()
+{
+ ui->retranslateUi(this);
+ reShowAll();
+}
+
+void Filters::updateFilters()
+{
+ QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
+ int index=0;
+ while(index<include.size())
+ {
+ includeStrings<<include.at(index).search_text;
+ QStringList optionsToShow;
+
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << QStringLiteral("SearchType_rawText");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << QStringLiteral("SearchType_simpleRegex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << QStringLiteral("SearchType_perlRegex");
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << QStringLiteral("ApplyOn_file");
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow << QStringLiteral("ApplyOn_fileAndFolder");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << QStringLiteral("ApplyOn_folder");
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ includeOptions<<optionsToShow.join(QStringLiteral(";"));
+ index++;
+ }
+ index=0;
+ while(index<exclude.size())
+ {
+ excludeStrings<<exclude.at(index).search_text;
+ QStringList optionsToShow;
+
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << QStringLiteral("SearchType_rawText");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << QStringLiteral("SearchType_simpleRegex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << QStringLiteral("SearchType_perlRegex");
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << QStringLiteral("ApplyOn_file");
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow << QStringLiteral("ApplyOn_fileAndFolder");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << QStringLiteral("ApplyOn_folder");
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ excludeOptions<<optionsToShow.join(QStringLiteral(";"));
+ index++;
+ }
+ emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ emit haveNewFilters();
+}
+
+bool Filters::convertToRegex(Filters_rules &item)
+{
+ bool isValid=!item.search_text.isEmpty();
+ if(isValid)
+ {
+ QRegularExpression regex;
+ QString tempString;
+ if(item.search_type==SearchType_rawText)
+ {
+ tempString=QRegularExpression::escape(item.search_text);
+ if(tempString.contains('/') || tempString.contains('\\'))
+ isValid=false;
+ }
+ else if(item.search_type==SearchType_simpleRegex)
+ {
+ tempString=QRegularExpression::escape(item.search_text);
+ tempString.replace(QStringLiteral("\\*"),QStringLiteral("[^\\\\/]*"));
+ }
+ else if(item.search_type==SearchType_perlRegex)
+ {
+ tempString=item.search_text;
+ if(tempString.startsWith('^') && tempString.endsWith('$'))
+ {
+ item.need_match_all=true;
+ tempString.remove(QRegularExpression("^\\^"));
+ tempString.remove(QRegularExpression("\\$$"));
+ item.search_text=tempString;
+ }
+ }
+ if(isValid)
+ {
+ if(item.need_match_all==true)
+ tempString=QStringLiteral("^")+tempString+QStringLiteral("$");
+ regex=QRegularExpression(tempString);
+ //isValid=regex.isValid();
+ item.regex=regex;
+ return true;
+ }
+ else
+ return false;
+ }
+ return false;
+}
+
+void Filters::on_remove_exclusion_clicked()
+{
+ bool removedEntry=false;
+ int index=0;
+ while(index<ui->exclusion->count())
+ {
+ if(ui->exclusion->item(index)->isSelected())
+ {
+ delete ui->exclusion->item(index);
+ exclude.removeAt(index);
+ removedEntry=true;
+ }
+ else
+ index++;
+ }
+ if(removedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_remove_inclusion_clicked()
+{
+ bool removedEntry=false;
+ int index=0;
+ while(index<ui->inclusion->count())
+ {
+ if(ui->inclusion->item(index)->isSelected())
+ {
+ delete ui->inclusion->item(index);
+ include.removeAt(index);
+ removedEntry=true;
+ }
+ else
+ index++;
+ }
+ if(removedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_add_exclusion_clicked()
+{
+ FilterRules dialog(this);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ Filters_rules new_item;
+ new_item.apply_on=dialog.get_apply_on();
+ new_item.need_match_all=dialog.get_need_match_all();
+ new_item.search_text=dialog.get_search_text();
+ new_item.search_type=dialog.get_search_type();
+ exclude << new_item;
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
+ reject();
+}
+
+void Filters::on_add_inclusion_clicked()
+{
+ FilterRules dialog(this);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ Filters_rules new_item;
+ new_item.apply_on=dialog.get_apply_on();
+ new_item.need_match_all=dialog.get_need_match_all();
+ new_item.search_text=dialog.get_search_text();
+ new_item.search_type=dialog.get_search_type();
+ if(convertToRegex(new_item))
+ include << new_item;
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_edit_exclusion_clicked()
+{
+ bool editedEntry=false;
+ int index=0;
+ while(index<ui->exclusion->count())
+ {
+ if(ui->exclusion->item(index)->isSelected())
+ {
+ FilterRules dialog(this);
+ dialog.set_apply_on(exclude.at(index).apply_on);
+ dialog.set_need_match_all(exclude.at(index).need_match_all);
+ dialog.set_search_text(exclude.at(index).search_text);
+ dialog.set_search_type(exclude.at(index).search_type);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ exclude[index].apply_on=dialog.get_apply_on();
+ exclude[index].need_match_all=dialog.get_need_match_all();
+ exclude[index].search_text=dialog.get_search_text();
+ exclude[index].search_type=dialog.get_search_type();
+ if(!convertToRegex(exclude[index]))
+ exclude.removeAt(index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_edit_inclusion_clicked()
+{
+ bool editedEntry=false;
+ int index=0;
+ while(index<ui->inclusion->count())
+ {
+ if(ui->inclusion->item(index)->isSelected())
+ {
+ FilterRules dialog(this);
+ dialog.set_apply_on(exclude.at(index).apply_on);
+ dialog.set_need_match_all(exclude.at(index).need_match_all);
+ dialog.set_search_text(exclude.at(index).search_text);
+ dialog.set_search_type(exclude.at(index).search_type);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ exclude[index].apply_on=dialog.get_apply_on();
+ exclude[index].need_match_all=dialog.get_need_match_all();
+ exclude[index].search_text=dialog.get_search_text();
+ exclude[index].search_type=dialog.get_search_type();
+ if(!convertToRegex(exclude[index]))
+ exclude.removeAt(index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}