#ifndef UBL_SETTINGS_QUOTAS_H #define UBL_SETTINGS_QUOTAS_H #include "util.h" #include "load.h" #include "save.h" #include "my_process.h" #include "my_type.h" #include "my_device.h" #include "system_quotas.h" #include "ubconfig_quotas.h" #include #include "ubl-settings-diskquota-cm.h" #ifdef WEBKIT_FOUND #include #endif #define copyright _("Copyright © UBSoft LLC, 2022 - ") #define name_app _("ubl-settings-diskquota") #define website _("https://wiki.ublinux.com") #define project_Home_page _("Project Home Page") #define configuring_system_boot _("Configuring system boot parameters") #define system_boot _("System boot") #define str_about _("About ubl-settings-diskquota") #define command_line_parameters _("Command line parameters:") #define load_default _("Load default:") #define seconds _("seconds") #define download_menu _("Download menu") #define terminal_for_input _("Terminal for input") #define terminal_for_output _("Terminal for output") #define boot_selection_menu_timer _("Boot selection menu timer") #define str_help _("Help") #define str_about_1 _("About") #define str_save_local _("Save") #define str_load_local _("Load") #define save_all _("Save in global and local configuration") #define save_local _("Save in local configuration") #define save_global _("Save in global configuration") #define load_global _("Load global configuration") #define load_local _("Load local configuration") #define read_online _("Read online") #define cancel _("Cancel") #define always_redirect _("Always redirect") #define boot_screen_display_mode _("Boot screen display mode:") #define no_loading_animation _("No loading animation, full log") #define boot_menu_user_name _("Boot menu user name:") #define boot_menu_user_password _("Boot menu user password:") #define last_successful_upload _("Last successful upload") #define read_documentation_web _("Would you like to read documentation in the Web?") #define redirected_documentation _("You will be redirected to documentation site, where user help pages are ""translated and supported by community.") #define local_read_error _("Local configuration reading error") #define global_read_error _("Global configuration read error") #define local_write_error _("Local configuration write error") #define global_write_error _("Global configuration write error") #define error_save_all _("Error saved local and global configuration") #define local_load_ok _("Local configuration downloaded successfully") #define global_load_ok _("Global configuration downloaded successfully") #define local_ok_written _("Local configuration successfully written") #define global_ok_written _("Global configuration successfully written") #define successfully_save_all _("Successfully saved local and global configuration") #define nothing_save _("Nothing to save!") #define program_as_root _("The program must be run as root") #define str_weeks _("weeks") #define str_days _("days") #define str_hours _("hours") #define str_minutes _("minutes") #define str_device _("Device:") #define str_setting_user _("Setting user quotas") #define str_users _("Users") #define str_groups _("Groups") #define str_files _("files") #define str_hard_limit _("Hard limit") #define str_file_system _("File system:") #define str_name _("Name") #define str_size _("Size") #define str_quotas_mode _("Direct control of the file system") #define str_lb_head _("Configuration of disk quotas parameters for system groups and users") #define str_soft_limit _("Soft limit") #define str_currently_using _("Currently using:") #define str_currently_using_space _("Currently using: ") #define str_filters _("Filters") #define str_projects _("Projects") #define str_quotas _("Quotas") #define str_help_h _("GTK settings disk quota for UBLinux\n" \ "\n" \ "Usage: ubl-settings-diskquota [OPTIONS...]\n" \ "Options:\n" \ " -h, --help\t Show this help\n" \ " -V, --version\t Show package version\n" \ " --lock-help Lock utility help\n" \ " --lock-save Lock saving local and global configuration\n" \ " --lock-save-local Lock save global configuration\n" \ " --lock-save-global Lock load global configuration\n" \ " --lock-load-global Lock load global configuration\n") #define str_version _("ubl-settings-diskquota version: ") #define str_user _("User") #define str_group _("Group") #define str_device_project _("Device\nProject") #define str_quota _("Quota type") #define str_status _("Status") #define str_excess_size_delay _("Excess size delay period") #define str_excess_files_delay _("Excess files delay period") #define str_disk_quotas_device _("Disk quotas for this device:") #define str_user_quotas_device _("User quotas for this device: ") #define str_soft_limit_size _("Soft limit (size)") #define str_tw_soft_limit _("Soft limit\n(size)") #define str_hard_limit_size _("Hard limit (size)") #define str_deferring_hard_limit_size _("Deferring a hard limit (size)") #define str_hard_activation_size _("Hard limit activation time (size)") #define str_hard_limit_time _("Hard limit (file) activation time") #define str_group_quotas_device _("Group quotas for this device:") #define str_general_settings _("General settings") #define str_tw_severe_limitation _("Severe\nlimitation\n(size)") #define str_tw_general_deferring_size _("Deferring\n(size)") #define str_tw_general_deferring_files _("Deferring\n(files)") #define str_tw_deferring_size _("Deferring\na hard\nlimit\n(files)") #define str_tw_deferring_files _("Deferring\na hard\nlimit\n(files)") #define str_tw_soft_limit_files _("Soft limit\n(files)") #define str_tw_severe_limitation_files _("Severe\nlimitation\n(files)") #define str_soft_restriction_files _("Soft Restriction (files)") #define str_severe_limitation_files _("Severe limitation (files)") #define str_deferring_limit_files _("Deferring a hard limit (files)") #define info_box_ok_css "boxInfoMessOK" #define info_box_error_css "boxInfoMessError" #define icon_checked "com.ublinux.ubl-settings-diskquota.checked" #define icon_warning "com.ublinux.ubl-settings-diskquota.warning" #define link_doc "https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-diskquota" #define cmd_xdg "xdg-open " #define cmd_execute "su -l %s -c \" DISPLAY=$DISPLAY %s \"" #define path_app "/usr/bin/" #define path_glade "/usr/share/ubl-settings-diskquota/ui/ubl-settings-diskquota.glade" #define path_css "/usr/share/ubl-settings-diskquota/css/ubl-settings-diskquota.css" #define app_name "ubl-settings-diskquota" #define path_resources "/usr/share/ubl-settings-diskquota" #define path_img_head_background "/usr/share/ubl-settings-diskquota/images/logo-background.png" #define no_recognized _("Argument not recognized\n") using namespace std; extern string version_application; extern bool flag_save; extern bool flag_save_local; extern bool flag_save_global; extern bool flag_load_global; extern bool flag_lock_help; extern int socket_ext_id_I; extern int socket_trd_id_I; class MainWindow : public Gtk::ApplicationWindow { public: class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: ModelColumns() {add(name), add(quotas); add(size), add(soft_limit_size), add(hard_limit_size); add(deferring_size), add(files); add(soft_limit_files), add(hard_limit_delay), add(deferring_files); } Gtk::TreeModelColumn name; Gtk::TreeModelColumn quotas; Gtk::TreeModelColumn size; Gtk::TreeModelColumn soft_limit_size; Gtk::TreeModelColumn hard_limit_size; Gtk::TreeModelColumn deferring_size; Gtk::TreeModelColumn files; Gtk::TreeModelColumn soft_limit_files; Gtk::TreeModelColumn hard_limit_delay; Gtk::TreeModelColumn deferring_files; }; class ModelColumnsGeneral : public Gtk::TreeModel::ColumnRecord { public: ModelColumnsGeneral() {add(status), add(type_quotas); add(device), add(user), add(group), add(projects); add(soft_limit_size), add(hard_limit_size); add(soft_limit_files), add(hard_limit_files), add(deferring_size), add(deferring_files); } Gtk::TreeModelColumn status; Gtk::TreeModelColumn type_quotas; Gtk::TreeModelColumn device; Gtk::TreeModelColumn user; Gtk::TreeModelColumn group; Gtk::TreeModelColumn projects; Gtk::TreeModelColumn soft_limit_size; Gtk::TreeModelColumn hard_limit_size; Gtk::TreeModelColumn soft_limit_files; Gtk::TreeModelColumn hard_limit_files; Gtk::TreeModelColumn deferring_size; Gtk::TreeModelColumn deferring_files; }; ModelColumns m_columns; ModelColumnsGeneral m_columnsGeneral; Glib::RefPtr builder; template struct Result{ Type response; int error; }; Gtk::Label *headerTopic; Gtk::AboutDialog *aboutWindows; Gtk::Overlay *HeadOverlay; Gtk::HeaderBar *headerBar; Gtk::Box *boxSave; Gtk::Box *boxButton; Gtk::Box *boxFuncs; Gtk::MenuButton *btnSave; Gtk::MenuButton *btnLoad; Gtk::MenuButton *btnSettings; Gtk::ButtonBox *btnBoxAboutDialog; Gtk::Image *HeadBackgroundImage; Gtk::Image *imgInfo; Gtk::Box *boxInfoError; Gtk::Label *lblWarning; Gtk::Label *generalTabLabel; Gtk::Label *UsersTabLabel; Gtk::Label *GroupsTabLabel; Gtk::Label *generalGroupsSizeLabel; Gtk::Label *generalGroupsFilesLabel; Gtk::Label *generalUsersSizeLabel; Gtk::Label *generalUsersFilesLabel; Gtk::Label *generalGroupsSizeWeeksLabel; Gtk::Label *generalGroupsFilesWeeksLabel; Gtk::Label *generalUsersSizeWeeksLabel; Gtk::Label *generalUsersFilesWeeksLabel; Gtk::Label *generalGroupsSizeDaysLabel; Gtk::Label *generalGroupsFilesDaysLabel; Gtk::Label *generalUsersSizeDaysLabel; Gtk::Label *generalUsersFilesDaysLabel; Gtk::Label *generalGroupsSizeHoursLabel; Gtk::Label *generalGroupsFilesHoursLabel; Gtk::Label *generalUsersSizeHoursLabel; Gtk::Label *generalUsersFilesHoursLabel; Gtk::Label *generalGroupsSizeMinutesLabel; Gtk::Label *generalGroupsFilesMinutesLabel; Gtk::Label *generalUsersSizeMinutesLabel; Gtk::Label *generalUsersFilesMinutesLabel; Gtk::Label *ProjectTabLabel; Gtk::Label *usersProjectLabel; Gtk::Label *lblLoad; Gtk::Label *lblSave; Gtk::MenuItem *btnLoadGlob; Gtk::MenuItem *btnLoadLocal; Gtk::MenuItem *btnSynopsis; Gtk::MenuItem *btnAbout; Gtk::MenuItem *btnSaveLocalGlob; Gtk::MenuItem *btnSaveGlob; Gtk::MenuItem *btnSaveLocal; Gtk::Label *groupsDeviceLabel; Gtk::Label *usersDeviceLabel; Gtk::Label *headLabel; Gtk::Window *FiltersWindow; Gtk::CheckButton *filtersNameFilterCheckbox; Gtk::CheckButton *filtersQuotasFilterCheckbox; Gtk::CheckButton *filtersSizeFilterCheckbox; Gtk::CheckButton *filtersSoftSizeFilterCheckbox; Gtk::CheckButton *filtersHardSizeFilterCheckbox; Gtk::CheckButton *filtersHardSizeDelayFilterCheckbox; Gtk::CheckButton *filtersHardSizeActivationFilterCheckbox; Gtk::CheckButton *filtersFilesFilterCheckbox; Gtk::CheckButton *filtersSoftFilesFilterCheckbox; Gtk::CheckButton *filtersHardFilesFilterCheckbox; Gtk::CheckButton *filtersHardFilesDelayFilterCheckbox; Gtk::CheckButton *filtersHardFilesActivationFilterCheckbox; Gtk::TreeView *groupsQuotasTree; Gtk::TreeView *usersQuotasTree; Gtk::TreeView *ProjectQuotasTree; Gtk::TreeView *GeneralQuotasTree; Gtk::Label *quotegroupDeviceLabel; Gtk::Label *quotegroupFileSystemLabel; Gtk::Label *quotegroupDiskQuotasLabel; Gtk::Label *quotegroupGroupQuotasLabel; Gtk::Label *quotegroupSizeFrameLabel; Gtk::Label *quotegroupSizeCurrentlyLabel; Gtk::Label *quoteSizeHardLimitLabel; Gtk::Label *quotegroupFilesFrameLabel; Gtk::Label *quotegroupFilesCurrentlyLabel; Gtk::Label *quotegroupFilesSoftLimitLabel; Gtk::Label *quoteFilesHardLimitLabel; Gtk::Label *quotegroupFilesHarLimitLabel; Gtk::Label *quoteuserDeviceLabel; Gtk::Label *quoteuserDiskQuotasLabel; Gtk::Label *quoteuserFileSystemLabel; Gtk::Label *quoteuserGroupQuotasLabel; Gtk::Label *quoteuserSizeFrameLabel; Gtk::Label *quoteuserSizeCurrentlyLabel; Gtk::Label *quoteuserSizeSoftLimitLabel; Gtk::Label *quoteuserSizeHardLimitLabel1; Gtk::Label *quoteuserFilesCurrentlyLabel; Gtk::Label *quoteuserFilesSoftLimitLabel; Gtk::Label *quoteFilesHardLimitLabel1; Gtk::Label *quoteuserFilesHarLimitLabel; Gtk::Label *quoteuserFilesFrameLabel; Gtk::Label *quotegroupSizeSoftLimitLabel; Gtk::Label *quoteuserFilesSoftLimitlabel; Gtk::Window *QuotasUserEditWindow; Gtk::Window *QuotasEditWindow; Gtk::Label *headerAboutTopic; Gtk::Label *lblHeadQuotasUserEditWindow; Gtk::Label *lblHeadQuotasEditWindow; Gtk::Label *lblHeadFiltersWindow; Gtk::ComboBoxText *usersDeviceCombo; Gtk::ComboBoxText *groupsDeviceCombo; Gtk::ComboBoxText *generalDeviceCombo; Gtk::Label *lblFstypeGroups; Gtk::SpinButton *generalGroupsSizeWeeksSpi; Gtk::SpinButton *generalGroupsFileWeeksSpin; Gtk::SpinButton *generalGroupsSizeDaySpin; Gtk::SpinButton *generalGroupsFilesDaySpin; Gtk::SpinButton *generalGroupsSizeHourSpin; Gtk::SpinButton *generalGroupsFilesHourSpin; Gtk::SpinButton *generalGroupsSizeMinuteSpin; Gtk::SpinButton *generalGroupsFilesMinuteSpin; Gtk::SpinButton *generalUsersSizWeeksSpin; Gtk::SpinButton *generalUsersFileWeeksSpin; Gtk::SpinButton *generalUsersSizeDaySpin; Gtk::SpinButton *generalUsersFilesDaySpin; Gtk::SpinButton *generalUsersSizeHourSpin; Gtk::SpinButton *generalUsersFilesHoursSpin; Gtk::SpinButton *generalUsersSizeMinuteSpin; Gtk::SpinButton *generalUsersFilesMinutesSpin; Gtk::Label *lblEditWndFsys; Gtk::CheckButton *quotegroupSizeSoftLimitCheck; Gtk::CheckButton *quotegroupSizeHardLimitCheck; Gtk::CheckButton *quotegroupFilesSoftLimitCheck; Gtk::CheckButton *quotegroupFilesHardLimitCheck; Gtk::SpinButton *quotegroupSizeSoftLimitSpin; Gtk::SpinButton *quotegroupSizeHardLimitSpin; Gtk::SpinButton *quotegroupFilesSoftLimitSpin; Gtk::SpinButton *quotegroupFilesHardLimitSpin; Gtk::Label *quotegroupFilesSoftLimitlabel; Gtk::ComboBoxText *quotegroupSizeSoftLimitCombo; Gtk::ComboBoxText *quotegroupSizeHardLimitCombo; Gtk::Button *quotegroupCancelButton; Gtk::Button *quotegroupSaveButton; Gtk::Button *btnFilterGroups; Gtk::Button *btnFilterUsers; Gtk::Button *btnFilterProject; Gtk::ComboBoxText *quotegroupDeviceCombo; Gtk::Label *lblHeadeWndWeb; Gtk::Label *lblwebHeaderName; Gtk::Label *lblhelpText; Gtk::Label *lblhelpHeader; Gtk::CheckButton *chkAlwaysOpenHelp; Gtk::Button *btnReadHelp; 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; WebKitWebView *one; #endif public: Lib_save::Save obj_save = Lib_save::Save(); Lib_Load::Load obj_load = Lib_Load::Load(); Devices::Parted obj_device = Devices::Parted(); Quotas_sys::Quotas_sys obj_quotas_sys = Quotas_sys::Quotas_sys(); Quotas_ubconfig::Quotas_ubconfig obj_quotas_ubconfig = Quotas_ubconfig::Quotas_ubconfig(); My_Process::My_Process_system obj_process_system = My_Process::My_Process_system(); My_Process::My_Process_call obj_process_call = My_Process::My_Process_call(); map_str_str map_gui_cfg; map_str_str map_global_cfg; map_str_str map_system_cfg; vector vec_param_names; map_str_str map_device; string str_cmd_error; string save_user_or_group; 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); ~MainWindow(); void settings(); void flag_block_gui(); void lacalization(); void add_CSS(); void get_builder(); void event(); void init_work_tv_g_u_p(); 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(); void info_status_app(string stule); void groupsFilters_show(); 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); void wrapper_save_system_cfg(); void wrapper_save_global_cfg(); 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); void init_spin_all(); void format_cmd_quotas_system(struct struct_quotas& _struct_quota); void format_cmd_quotas_ubconfig(struct struct_quotas& _struct_quota); void load_global_cfg(); void load_system_cfg(); struct partition_cmd wrapper_settings_quotas(); void filling_device_combo_box_template(Gtk::ComboBoxText *combo_box, map_str_str &map_device); bool save_template(string section, string flag_save); void view_add_columns(Gtk::TreeView &treeView); void check_limit(Gtk::CheckButton *check_button, Gtk::SpinButton *spin, Gtk::ComboBoxText *combo_box); void check_limit(Gtk::CheckButton *check_button, Gtk::SpinButton *spin, Gtk::Label *combo_box); }; void help(); #endif