diff --git a/source/my_type.h b/source/my_type.h index 9439f14..6355b2f 100644 --- a/source/my_type.h +++ b/source/my_type.h @@ -59,6 +59,18 @@ struct data_all_quotas { string file_grace; bool is_validate; }; +struct tv_g_u_p { + string name; + string quotas; + string size; + string soft_limit_size; + string hard_limit_size; + string deferring_size; + string files; + string soft_limit_files; + string hard_limit_delay; + string deferring_files; +}; typedef struct users_grups USER_GRUPS; typedef map map_str_str; diff --git a/source/ubl-settings-diskquota.cc b/source/ubl-settings-diskquota.cc index 83caa56..69bde54 100755 --- a/source/ubl-settings-diskquota.cc +++ b/source/ubl-settings-diskquota.cc @@ -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*, 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*, 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*, 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, 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, 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, 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* 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 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 groupsQuotasTreeModel = groupsQuotasTree->get_model(); + groupsQuotasTreeModel->signal_row_changed().connect(sigc::bind + (sigc::mem_fun(*this, &MainWindow::remove_line_template), iter_groups, flag_validate_del_groups)); + Glib::RefPtr ProjectQuotasTreeModel = ProjectQuotasTree->get_model(); + ProjectQuotasTreeModel->signal_row_changed().connect(sigc::bind + (sigc::mem_fun(*this, &MainWindow::remove_line_template), iter_project, flag_validate_del_project)); + Glib::RefPtr usersQuotasTreeModel = usersQuotasTree->get_model(); + usersQuotasTreeModel->signal_row_changed().connect(sigc::bind + (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); diff --git a/source/ubl-settings-diskquota.h b/source/ubl-settings-diskquota.h index 14d0382..dd4aacb 100644 --- a/source/ubl-settings-diskquota.h +++ b/source/ubl-settings-diskquota.h @@ -159,7 +159,7 @@ class MainWindow : public Gtk::ApplicationWindow { add(files); add(soft_limit_files), add(hard_limit_delay), add(deferring_files); } Gtk::TreeModelColumn name; - Gtk::TreeModelColumn quotas; + Gtk::TreeModelColumn quotas; Gtk::TreeModelColumn size; Gtk::TreeModelColumn soft_limit_size; Gtk::TreeModelColumn hard_limit_size; @@ -346,6 +346,12 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Button *btnCancelHelp; Gtk::Window *wndShowWeb; Gtk::CheckMenuItem *chbMangSystemFile; + Gtk::Button* btnDelGroups; + Gtk::Button* btnDelProject; + Gtk::Button* btnDelUsers; + Gtk::Button* btnAddGroups; + Gtk::Button* btnAddUsers; + Gtk::Button* btnAddProject; #ifdef WEBKIT_FOUND Gtk::Window *wndWeb; Gtk::Widget *three; @@ -370,6 +376,18 @@ class MainWindow : public Gtk::ApplicationWindow { string sys_or_ubconfig; string hw_or_sw = ""; bool flag_open_browser = false; + string mode_quota = "ubconfig"; + Glib::RefPtr list_store_groups; + Glib::RefPtr list_store_users; + Glib::RefPtr list_store_project; + Gtk::TreeModel::iterator iter_groups; + Gtk::TreeModel::iterator iter_users; + Gtk::TreeModel::iterator iter_project; + bool flag_validate_del_groups = false; + bool flag_validate_del_users = false; + bool flag_validate_del_project = false; + Gtk::TreeModel::Row row; + const struct tv_g_u_p obj_tv_g_u_p {"", "", "", "", "", "", "", "", "",""}; public: MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); @@ -380,6 +398,8 @@ class MainWindow : public Gtk::ApplicationWindow { void add_CSS(); void get_builder(); void event(); + void remove_line_template(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter, Gtk::TreeModel::iterator& iter_del, bool& flag_del); + void remove_template(Glib::RefPtr* list_store, const Gtk::TreeModel::iterator* iter, bool& flag_validate_del); void init_tree_view_general(); void entry_combo_box_temp(Gtk::ComboBoxText *combo_box, Gtk::Label *label); void synopsis_show(); @@ -388,6 +408,7 @@ class MainWindow : public Gtk::ApplicationWindow { void init_tree_view(); void template_open_browser(); void open_browser(); + void set_add_tv_g_u_p(Gtk::TreeModel::Row &row, Glib::RefPtr list_store, struct tv_g_u_p obj_tv_g_u_p); void load_template(map_str_str* map_temp, string str_load); void info_warning_error(int mess); void off_quota_system(Gtk::ComboBoxText* combo_box, string quota_type); @@ -396,6 +417,7 @@ class MainWindow : public Gtk::ApplicationWindow { void wrapper_save_all_cfg(); void init_dict(string flag_load); void set_data_cfg(); + void mode_switch_quota(); void save_quotegroupSaveButton(); void wrapper_settings_quotas_temp(string save_user_or_group); void off_quota_ubconfig(Gtk::ComboBoxText* combo_box, string quota_type); diff --git a/ubl-settings-diskquota.glade b/ubl-settings-diskquota.glade index ea7b17c..c1e0c5e 100644 --- a/ubl-settings-diskquota.glade +++ b/ubl-settings-diskquota.glade @@ -532,6 +532,8 @@ True False + 7 + 7 Direct control of the file system True