diff options
author | Thomas Preud'homme <robotux@celest.fr> | 2017-11-24 23:24:09 +0000 |
---|---|---|
committer | Thomas Preud'homme <robotux@celest.fr> | 2017-11-24 23:24:09 +0000 |
commit | b3c8bdcc0d1e4b2ab298847a7902b6d60410a5bc (patch) | |
tree | 8fce8a51adfb245db8ab2a76831661780c0c713e /plugins/CopyEngine/Ultracopier/Filters.cpp | |
parent | e297dbd8052ef4e66f069e2dd1865ae7fa8af28e (diff) |
New upstream version 1.2.3.6
Diffstat (limited to 'plugins/CopyEngine/Ultracopier/Filters.cpp')
-rw-r--r-- | plugins/CopyEngine/Ultracopier/Filters.cpp | 457 |
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(); + } +} |