|  |  |  | @ -500,8 +500,12 @@ void MainWindow::get_builder() { | 
			
		
	
		
			
				
					|  |  |  |  |     builder->get_widget("btnCancelHelp", btnCancelHelp); | 
			
		
	
		
			
				
					|  |  |  |  |     builder->get_widget("wndShowWeb", wndShowWeb); | 
			
		
	
		
			
				
					|  |  |  |  |     builder->get_widget("chbMangSystemFile", chbMangSystemFile); | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     builder->get_widget("btnDelGroups", btnDelGroups); | 
			
		
	
		
			
				
					|  |  |  |  |     builder->get_widget("btnDelProject", btnDelProject); | 
			
		
	
		
			
				
					|  |  |  |  |     builder->get_widget("btnDelUsers", btnDelUsers); | 
			
		
	
		
			
				
					|  |  |  |  |     builder->get_widget("btnAddGroups", btnAddGroups); | 
			
		
	
		
			
				
					|  |  |  |  |     builder->get_widget("btnAddUsers", btnAddUsers); | 
			
		
	
		
			
				
					|  |  |  |  |     builder->get_widget("btnAddProject", btnAddProject); | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -520,6 +524,7 @@ void MainWindow::event() { | 
			
		
	
		
			
				
					|  |  |  |  |     btnSaveLocalGlob->signal_activate().connect([&]() {this->wrapper_save_all_cfg();}); | 
			
		
	
		
			
				
					|  |  |  |  |     btnSaveGlob->signal_activate().connect([&]() {this->wrapper_save_global_cfg();}); | 
			
		
	
		
			
				
					|  |  |  |  |     btnSaveLocal->signal_activate().connect([&]() {this->wrapper_save_system_cfg();}); | 
			
		
	
		
			
				
					|  |  |  |  |     chbMangSystemFile->signal_toggled().connect([&]() {this->mode_switch_quota();}); | 
			
		
	
		
			
				
					|  |  |  |  |     quotegroupDeviceCombo->signal_changed().connect([&]() {entry_combo_box_temp(quotegroupDeviceCombo, lblEditWndFsys);}); | 
			
		
	
		
			
				
					|  |  |  |  |     quotegroupSizeSoftLimitCheck->signal_toggled().connect([&]() { | 
			
		
	
		
			
				
					|  |  |  |  |         check_limit(quotegroupSizeSoftLimitCheck | 
			
		
	
	
		
			
				
					|  |  |  | @ -543,6 +548,67 @@ void MainWindow::event() { | 
			
		
	
		
			
				
					|  |  |  |  |     }); | 
			
		
	
		
			
				
					|  |  |  |  |     quotegroupCancelButton->signal_clicked().connect([&]() {QuotasEditWindow->hide();}); | 
			
		
	
		
			
				
					|  |  |  |  |     // QuotasEditWindow->show();
 | 
			
		
	
		
			
				
					|  |  |  |  |     btnDelGroups->signal_clicked().connect(  | 
			
		
	
		
			
				
					|  |  |  |  |         sigc::bind<Glib::RefPtr<Gtk::ListStore>*, const Gtk::TreeModel::iterator*, bool&> (sigc::mem_fun( *this,  | 
			
		
	
		
			
				
					|  |  |  |  |         &MainWindow::remove_template), &list_store_groups, &iter_groups, flag_validate_del_groups)); | 
			
		
	
		
			
				
					|  |  |  |  |     btnDelUsers->signal_clicked().connect(  | 
			
		
	
		
			
				
					|  |  |  |  |         sigc::bind<Glib::RefPtr<Gtk::ListStore>*, const Gtk::TreeModel::iterator*, bool&> (sigc::mem_fun( *this,  | 
			
		
	
		
			
				
					|  |  |  |  |         &MainWindow::remove_template), &list_store_users, &iter_users, flag_validate_del_users)); | 
			
		
	
		
			
				
					|  |  |  |  |     btnDelProject->signal_clicked().connect(  | 
			
		
	
		
			
				
					|  |  |  |  |         sigc::bind<Glib::RefPtr<Gtk::ListStore>*, const Gtk::TreeModel::iterator*, bool&> (sigc::mem_fun( *this,  | 
			
		
	
		
			
				
					|  |  |  |  |         &MainWindow::remove_template), &list_store_project, &iter_project, flag_validate_del_project)); | 
			
		
	
		
			
				
					|  |  |  |  |     btnAddProject->signal_clicked().connect(  | 
			
		
	
		
			
				
					|  |  |  |  |         sigc::bind<Gtk::TreeModel::Row&, Glib::RefPtr<Gtk::ListStore>,  struct tv_g_u_p> (sigc::mem_fun( *this,  | 
			
		
	
		
			
				
					|  |  |  |  |         &MainWindow::set_add_tv_g_u_p), row, list_store_project, obj_tv_g_u_p)); | 
			
		
	
		
			
				
					|  |  |  |  |     btnAddUsers->signal_clicked().connect(  | 
			
		
	
		
			
				
					|  |  |  |  |         sigc::bind<Gtk::TreeModel::Row&, Glib::RefPtr<Gtk::ListStore>,  struct tv_g_u_p> (sigc::mem_fun( *this,  | 
			
		
	
		
			
				
					|  |  |  |  |         &MainWindow::set_add_tv_g_u_p), row, list_store_users, obj_tv_g_u_p)); | 
			
		
	
		
			
				
					|  |  |  |  |     btnAddGroups->signal_clicked().connect(  | 
			
		
	
		
			
				
					|  |  |  |  |         sigc::bind<Gtk::TreeModel::Row&, Glib::RefPtr<Gtk::ListStore>,  struct tv_g_u_p> (sigc::mem_fun( *this,  | 
			
		
	
		
			
				
					|  |  |  |  |         &MainWindow::set_add_tv_g_u_p), row, list_store_groups, obj_tv_g_u_p)); | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MainWindow::remove_template(Glib::RefPtr<Gtk::ListStore>* list_store, const Gtk::TreeModel::iterator* iter, bool& flag_validate_del) { | 
			
		
	
		
			
				
					|  |  |  |  |     if (flag_validate_del && (*list_store)->iter_is_valid(*(iter))) { | 
			
		
	
		
			
				
					|  |  |  |  |         Gtk::TreeModel::Row row = *(*iter); | 
			
		
	
		
			
				
					|  |  |  |  |         if(row) { | 
			
		
	
		
			
				
					|  |  |  |  |             string name = row[m_columns.name] + ""; | 
			
		
	
		
			
				
					|  |  |  |  |             // TODO:
 | 
			
		
	
		
			
				
					|  |  |  |  |             string key = "GRUB_PASSWORD[" + name + "]"; | 
			
		
	
		
			
				
					|  |  |  |  |             map_gui_cfg[key] = ""; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         (*list_store)->erase((*iter)); | 
			
		
	
		
			
				
					|  |  |  |  |         flag_validate_del = false; | 
			
		
	
		
			
				
					|  |  |  |  |         info_status_app(info_box_ok_css); | 
			
		
	
		
			
				
					|  |  |  |  |         imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); | 
			
		
	
		
			
				
					|  |  |  |  |         lblWarning->set_text(""); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     flag_validate_del = false; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MainWindow::set_add_tv_g_u_p(Gtk::TreeModel::Row &row, Glib::RefPtr<Gtk::ListStore> list_store, struct tv_g_u_p obj_tv_g_u_p) { | 
			
		
	
		
			
				
					|  |  |  |  |     row = *(list_store->append()); | 
			
		
	
		
			
				
					|  |  |  |  |     row[m_columns.name] = obj_tv_g_u_p.name; | 
			
		
	
		
			
				
					|  |  |  |  |     row[m_columns.quotas] = obj_tv_g_u_p.quotas; | 
			
		
	
		
			
				
					|  |  |  |  |     row[m_columns.size] = obj_tv_g_u_p.size; | 
			
		
	
		
			
				
					|  |  |  |  |     row[m_columns.soft_limit_size] = obj_tv_g_u_p.soft_limit_size;  | 
			
		
	
		
			
				
					|  |  |  |  |     row[m_columns.hard_limit_size] = obj_tv_g_u_p.hard_limit_size;  | 
			
		
	
		
			
				
					|  |  |  |  |     row[m_columns.deferring_size] = obj_tv_g_u_p.deferring_size;  | 
			
		
	
		
			
				
					|  |  |  |  |     row[m_columns.files] = obj_tv_g_u_p.files;  | 
			
		
	
		
			
				
					|  |  |  |  |     row[m_columns.soft_limit_files] = obj_tv_g_u_p.soft_limit_files;  | 
			
		
	
		
			
				
					|  |  |  |  |     row[m_columns.hard_limit_delay] = obj_tv_g_u_p.hard_limit_delay;  | 
			
		
	
		
			
				
					|  |  |  |  |     row[m_columns.deferring_files] = obj_tv_g_u_p.deferring_files;  | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MainWindow::mode_switch_quota() { | 
			
		
	
		
			
				
					|  |  |  |  |     if (chbMangSystemFile->get_active()) { | 
			
		
	
		
			
				
					|  |  |  |  |         mode_quota = "filesystem"; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     else { | 
			
		
	
		
			
				
					|  |  |  |  |         mode_quota = "ubconfig"; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MainWindow::wrapper_settings_quotas_temp(string save_user_or_group) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -557,7 +623,6 @@ void MainWindow::wrapper_settings_quotas_temp(string save_user_or_group) { | 
			
		
	
		
			
				
					|  |  |  |  |     _struct_quota.type_quotas = type_quotas; | 
			
		
	
		
			
				
					|  |  |  |  |     _struct_quota.name = user; | 
			
		
	
		
			
				
					|  |  |  |  |     obj_quotas_ubconfig.format_cmd_quotas(_struct_quota); | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MainWindow::save_quotegroupSaveButton() { | 
			
		
	
	
		
			
				
					|  |  |  | @ -749,6 +814,31 @@ void MainWindow::wrapper_save_system_cfg() { | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MainWindow::load_template(map_str_str* map_temp, string str_load) { | 
			
		
	
		
			
				
					|  |  |  |  |     groupsQuotasTree->remove_all_columns(); | 
			
		
	
		
			
				
					|  |  |  |  |     list_store_groups = Gtk::ListStore::create(m_columns); | 
			
		
	
		
			
				
					|  |  |  |  |     groupsQuotasTree->set_model(list_store_groups); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     ProjectQuotasTree->remove_all_columns(); | 
			
		
	
		
			
				
					|  |  |  |  |     list_store_project = Gtk::ListStore::create(m_columns); | 
			
		
	
		
			
				
					|  |  |  |  |     ProjectQuotasTree->set_model(list_store_project); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     usersQuotasTree->remove_all_columns(); | 
			
		
	
		
			
				
					|  |  |  |  |     list_store_users = Gtk::ListStore::create(m_columns); | 
			
		
	
		
			
				
					|  |  |  |  |     usersQuotasTree->set_model(list_store_users); | 
			
		
	
		
			
				
					|  |  |  |  |     this->view_add_columns(*groupsQuotasTree); | 
			
		
	
		
			
				
					|  |  |  |  |     this->view_add_columns(*ProjectQuotasTree); | 
			
		
	
		
			
				
					|  |  |  |  |     this->view_add_columns(*usersQuotasTree); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     Glib::RefPtr<Gtk::TreeModel> groupsQuotasTreeModel = groupsQuotasTree->get_model(); | 
			
		
	
		
			
				
					|  |  |  |  |     groupsQuotasTreeModel->signal_row_changed().connect(sigc::bind<Gtk::TreeModel::iterator&, bool&>  | 
			
		
	
		
			
				
					|  |  |  |  |     (sigc::mem_fun(*this, &MainWindow::remove_line_template), iter_groups, flag_validate_del_groups)); | 
			
		
	
		
			
				
					|  |  |  |  |     Glib::RefPtr<Gtk::TreeModel> ProjectQuotasTreeModel = ProjectQuotasTree->get_model(); | 
			
		
	
		
			
				
					|  |  |  |  |     ProjectQuotasTreeModel->signal_row_changed().connect(sigc::bind<Gtk::TreeModel::iterator&, bool&>  | 
			
		
	
		
			
				
					|  |  |  |  |     (sigc::mem_fun(*this, &MainWindow::remove_line_template), iter_project, flag_validate_del_project)); | 
			
		
	
		
			
				
					|  |  |  |  |     Glib::RefPtr<Gtk::TreeModel> usersQuotasTreeModel = usersQuotasTree->get_model(); | 
			
		
	
		
			
				
					|  |  |  |  |     usersQuotasTreeModel->signal_row_changed().connect(sigc::bind<Gtk::TreeModel::iterator&, bool&>  | 
			
		
	
		
			
				
					|  |  |  |  |     (sigc::mem_fun(*this, &MainWindow::remove_line_template),iter_users, flag_validate_del_users)); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     this->init_dict(str_load); | 
			
		
	
		
			
				
					|  |  |  |  |     string sections; | 
			
		
	
		
			
				
					|  |  |  |  |     sections = "security"; | 
			
		
	
	
		
			
				
					|  |  |  | @ -756,6 +846,11 @@ void MainWindow::load_template(map_str_str* map_temp, string str_load) { | 
			
		
	
		
			
				
					|  |  |  |  |     *map_temp = obj_load.get_load_data(*map_temp, str_load); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MainWindow::remove_line_template(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter, Gtk::TreeModel::iterator& iter_del, bool& flag_del) { | 
			
		
	
		
			
				
					|  |  |  |  |     iter_del = iter; | 
			
		
	
		
			
				
					|  |  |  |  |     flag_del = true; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MainWindow::info_warning_error(int mess) { | 
			
		
	
		
			
				
					|  |  |  |  |     if (obj_load.get_count_error() > 0 || obj_save.get_count_error() > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |         info_status_app(info_box_error_css); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |