bool FeFilterEditMenu::on_option_select( FeConfigContext &ctx, FeBaseConfigMenu *& submenu ) { if ( !m_display ) return true; FeMenuOpt &o = ctx.curr_opt(); FeFilter *f = m_display->get_filter( m_index ); if (( o.opaque >= 100 ) || ( o.opaque == 1 ) || ( o.opaque == 2 )) { int r_index=0; if (( o.opaque == 1 ) || ( o.opaque == 2 )) { bool is_exception = ( o.opaque == 2 ); std::vector<FeRule> &rules = f->get_rules(); rules.push_back( FeRule() ); rules.back().set_is_exception( is_exception ); r_index = rules.size() - 1; ctx.save_req=true; } else r_index = o.opaque - 100; m_rule_menu.set_rule_index( f, r_index ); submenu=&m_rule_menu; } else if ( o.opaque == 3 ) { // "Delete this Filter" if ( ctx.confirm_dialog( "Delete filter '$1'?", f->get_name() ) == false ) return false; m_display->delete_filter( m_index ); m_display=NULL; m_index=-1; ctx.save_req=true; } return true; }
void FeFilterEditMenu::get_options( FeConfigContext &ctx ) { ctx.set_style( FeConfigContext::EditList, "Filter Edit" ); if ( m_display ) { FeFilter *f = m_display->get_filter( m_index ); if ( m_index < 0 ) { std::string gf; ctx.fe_settings.get_resource( "Global Filter", gf ); ctx.add_optl( Opt::INFO, "Filter Name", gf, "_help_filter_name" ); } else { ctx.add_optl( Opt::EDIT, "Filter Name", f->get_name(), "_help_filter_name" ); } int i=0; std::vector<FeRule> &rules = f->get_rules(); for ( std::vector<FeRule>::const_iterator itr=rules.begin(); itr != rules.end(); ++itr ) { std::string rule_str; FeRomInfo::Index t = (*itr).get_target(); if ( t != FeRomInfo::LAST_INDEX ) { ctx.fe_settings.get_resource( FeRomInfo::indexStrings[t], rule_str ); FeRule::FilterComp c = (*itr).get_comp(); if ( c != FeRule::LAST_COMPARISON ) { std::string comp_str; ctx.fe_settings.get_resource( FeRule::filterCompDisplayStrings[c], comp_str ); rule_str += " "; rule_str += comp_str; rule_str += " "; rule_str += (*itr).get_what(); } } if ( (*itr).is_exception() ) ctx.add_optl( Opt::SUBMENU, "Exception", rule_str, "_help_filter_exception" ); else ctx.add_optl( Opt::SUBMENU, "Rule", rule_str, "_help_filter_rule" ); ctx.back_opt().opaque = 100 + i; i++; } ctx.add_optl(Opt::SUBMENU,"Add Rule","","_help_filter_add_rule"); ctx.back_opt().opaque = 1; ctx.add_optl(Opt::SUBMENU,"Add Exception","","_help_filter_add_exception"); ctx.back_opt().opaque = 2; if ( m_index >= 0 ) // don't add the following options for the global filter { std::string no_sort_str, sort_val; ctx.fe_settings.get_resource( "No Sort", no_sort_str ); if ( f->get_sort_by() != FeRomInfo::LAST_INDEX ) sort_val = FeRomInfo::indexStrings[f->get_sort_by()]; else sort_val = no_sort_str; std::vector< std::string > targets; i=0; while ( FeRomInfo::indexStrings[i] != 0 ) { targets.push_back( std::string() ); ctx.fe_settings.get_resource( FeRomInfo::indexStrings[i], targets.back() ); i++; } targets.push_back( no_sort_str ); ctx.add_optl( Opt::LIST, "Sort By", sort_val, "_help_filter_sort_by" ); ctx.back_opt().append_vlist( targets ); ctx.add_optl( Opt::EDIT, "List Limit", as_str( f->get_list_limit() ), "_help_filter_list_limit" ); ctx.add_optl(Opt::EXIT,"Delete this Filter","","_help_filter_delete"); ctx.back_opt().opaque = 3; } } FeBaseConfigMenu::get_options( ctx ); }