bool UserFiltersModel::Add (const RuleOptionDialog& dia)
	{
		const auto& itemRx = dia.GetType () == FilterOption::MTRegexp ?
				RegExp (dia.GetString (), dia.GetCase ()) :
				RegExp ();
		FilterOption fo;
		fo.Case_ = dia.GetCase ();
		fo.MatchType_ = dia.GetType ();
		fo.Domains_ = dia.GetDomains ();
		fo.NotDomains_ = dia.GetNotDomains ();
		const FilterItem item
		{
			dia.GetString ().toUtf8 (),
			itemRx,
			fo.MatchType_ == FilterOption::MTPlain ?
					QByteArrayMatcher (dia.GetString ().toUtf8 ()) :
					QByteArrayMatcher (),
			fo
		};

		auto& container = dia.IsException () ? Filter_.Exceptions_ : Filter_.Filters_;
		const int size = dia.IsException () ? Filter_.Exceptions_.size () : rowCount ();
		beginInsertRows (QModelIndex (), size, size);
		container << item;
		endInsertRows ();

		WriteSettings ();

		return !dia.IsException ();
	}
	bool UserFiltersModel::Add (const RuleOptionDialog& dia)
	{
		QString rule = dia.GetString ();
		int size = 0;
		if (dia.IsException ())
		{
			size = Filter_.ExceptionStrings_.size ();
			Filter_.ExceptionStrings_ << rule;
		}
		else
		{
			size = rowCount ();
			Filter_.FilterStrings_ << rule;
		}

		beginInsertRows (QModelIndex (), size, size);

		if (dia.GetType () == FilterOption::MTRegexp)
			Filter_.RegExps_ [rule] = QRegExp (rule,
					dia.GetCase (), QRegExp::RegExp);
		Filter_.Options_ [rule].MatchType_ = dia.GetType ();
		Filter_.Options_ [rule].Case_ = dia.GetCase ();
		Filter_.Options_ [rule].Domains_ = dia.GetDomains ();
		Filter_.Options_ [rule].NotDomains_ = dia.GetNotDomains ();
		endInsertRows ();

		WriteSettings ();
		
		return !dia.IsException ();
	}
	bool UserFiltersModel::Add (const RuleOptionDialog& dia)
	{
		const auto& itemRx = dia.GetType () == FilterOption::MTRegexp ?
				Util::RegExp (dia.GetString (), dia.GetCase ()) :
				Util::RegExp ();
		FilterOption fo;
		fo.Case_ = dia.GetCase ();
		fo.MatchType_ = dia.GetType ();
		fo.Domains_ = dia.GetDomains ();
		fo.NotDomains_ = dia.GetNotDomains ();
		const auto item = std::make_shared<FilterItem> (FilterItem {
					itemRx,
					dia.GetString ().toUtf8 (),
					fo
				});

		auto& container = dia.IsException () ? Filter_.Exceptions_ : Filter_.Filters_;
		const int size = dia.IsException () ? Filter_.Exceptions_.size () : rowCount ();
		beginInsertRows (QModelIndex (), size, size);
		container << item;
		endInsertRows ();

		return !dia.IsException ();
	}