#include "ubl-settings-quotas.h" using namespace std; const string path_app = "/usr/bin/"; const string path_glade = "/usr/share/ubl-settings-quotas/ui/ubl-settings-quotas.glade"; const string app_name = "ubl-settings-quotas"; const string path_locale = "/usr/share/locale/"; const string path_css = "/usr/share/ubl-settings-quotas/css/ubl-settings-quotas.css"; const string path_img_head_background = "/usr/share/ubl-settings-quotas/ui/ubl-settings-quotas-banner.png"; int socket_ext_id_I = 0; int socket_trd_id_I = 0; string version_application = "1.0"; CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help) : Glib::OptionGroup{p_name, p_description, p_help} { Glib::OptionEntry socketIDArg; socketIDArg.set_long_name("socket-id"); socketIDArg.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); socketIDArg.set_description("Settings manager socket"); Glib::OptionEntry socketExtId; socketExtId.set_long_name("socket-ext-id"); socketExtId.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); socketExtId.set_description("Settings manager secondary socket"); Glib::OptionEntry socketTrdId; socketTrdId.set_long_name("socket-trd-id"); socketTrdId.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); socketTrdId.set_description("Settings manager secondary socket"); add_entry(socketIDArg, m_socketID); add_entry(socketExtId, socket_ext_id_I); add_entry(socketTrdId, socket_trd_id_I); } ::Window CmdArgParser::GetSocketID() const{ return m_socketID; } MainWindow::MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) : Gtk::ApplicationWindow(obj), builder{builder} { this->builder = builder; this->settings(); } MainWindow::MainWindow(Glib::RefPtr const& builder) { this->builder = builder; this->settings(); } void MainWindow::settings() { this->get_builder(); this->lacalization(); this->add_CSS(); btnBoxAboutDialog->set_visible(false); Gtk::Widget *boxWidget; builder->get_widget("boxColor", boxWidget); HeadOverlay->add_overlay(*boxWidget); ubl_make_plugs(boxSave, boxButton, socket_ext_id_I, socket_trd_id_I); if (geteuid() == 0) { this->view_add_columns(*usersQuotasTree); this->view_add_columns(*groupsQuotasTree); this->event(); } else { boxFuncs->set_sensitive(false); btnSave->set_sensitive(false); btnLoad->set_sensitive(false); imgInfo->set_from_icon_name("com.ublinux.ubl-settings-datetime.warning", Gtk::ICON_SIZE_MENU); info_status_app("boxInfoMessError"); lblWarning->set_text(gettext("The program must be run as root")); } } void MainWindow::lacalization() { time_t now = time(0); tm *ltm = localtime(&now); unsigned int year = 1900+ ltm->tm_year; string str_authors = string(gettext("Copyright © UBSoft LLC, 2022 - ")) + to_string(year); aboutWindows->set_copyright(str_authors); aboutWindows->set_comments(gettext("Date and Time")); aboutWindows->set_website(gettext("https://wiki.ublinux.com")); aboutWindows->set_version(gettext(version_application.c_str())); aboutWindows->set_website_label(gettext("Project Home Page")); generalTabLabel->set_text(gettext("General settings")); GroupsTabLabel->set_text(gettext("Groups")); UsersTabLabel->set_text(gettext("Users")); generalDeviceLabel->set_text(gettext("Device:")); generalFileSystemLabel->set_text(gettext("File system:")); generalGroupsFrameLabel->set_text(gettext("quotas for groups")); generalGroupsEnableCheck->set_label(gettext("Enable")); generalUsersEnableCheck->set_label(gettext("Enable")); generalUsersFrameLabel->set_label(gettext("quotas for users")); generalGroupsSizeLabel->set_text(gettext("Excess size delay period")); generalGroupsFilesLabel->set_text(gettext("Excess files delay period")); generalUsersSizeLabel->set_text(gettext("Excess size delay period")); generalUsersFilesLabel->set_text(gettext("Excess files delay period")); generalGroupsSizeWeeksLabel->set_text(gettext("weeks")); generalGroupsFilesWeeksLabel->set_text(gettext("weeks")); generalUsersSizeWeeksLabel->set_text(gettext("weeks")); generalUsersFilesWeeksLabel->set_text(gettext("weeks")); generalGroupsSizeDaysLabel->set_text(gettext("days")); generalGroupsFilesDaysLabel->set_text(gettext("days")); generalUsersSizeDaysLabel->set_text(gettext("days")); generalUsersFilesDaysLabel->set_text(gettext("days")); generalGroupsSizeHoursLabel->set_text(gettext("hours")); generalGroupsFilesHoursLabel->set_text(gettext("hours")); generalUsersSizeHoursLabel->set_text(gettext("hours")); generalUsersFilesHoursLabel->set_text(gettext("hours")); generalGroupsSizeMinutesLabel->set_text(gettext("minutes")); generalGroupsFilesMinutesLabel->set_text(gettext("minutes")); generalUsersSizeMinutesLabel->set_text(gettext("minutes")); generalUsersFilesMinutesLabel->set_text(gettext("minutes")); groupsFileSystemLabel->set_text(gettext("File system:")); usersFileSystemLabel->set_text(gettext("File system:")); usersFiltersButton->set_label(gettext("Filters")); groupsFiltersButton->set_label(gettext("Filters")); lblLoad->set_text(gettext("Load")); lblSave->set_text(gettext("Save")); groupsDeviceLabel->set_label(gettext("Device:")); usersDeviceLabel->set_label(gettext("Device:")); headLabel->set_label(gettext("Configuration of disk quotas parameters for system groups and users")); filtersNameFilterCheckbox->set_label(gettext("Name")); filtersQuotasFilterCheckbox->set_label(gettext("Quotas")); filtersSizeFilterCheckbox->set_label(gettext("Size")); filtersSoftSizeFilterCheckbox->set_label(gettext("Soft limit (size)")); filtersHardSizeFilterCheckbox->set_label(gettext("Hard limit (size)")); filtersHardSizeDelayFilterCheckbox->set_label(gettext("Hard limit (size) delay")); filtersHardSizeActivationFilterCheckbox->set_label(gettext("Hard limit (size) activation time")); filtersFilesFilterCheckbox->set_label(gettext("Files")); filtersSoftFilesFilterCheckbox->set_label(gettext("Soft limit (files)")); filtersHardFilesFilterCheckbox->set_label(gettext("Hard limit (files)")); filtersHardFilesDelayFilterCheckbox->set_label(gettext("Hard limit (files) delay")); filtersHardFilesActivationFilterCheckbox->set_label(gettext("Hard limit (file) activation time")); quotegroupDeviceLabel->set_text(gettext("Device:")); quotegroupDiskQuotasLabel->set_text(gettext("Disk quotas for this device:")); quotegroupGroupQuotasLabel->set_text(gettext("Group quotas for this device:")); quotegroupSizeFrameLabel->set_text(gettext("Size")); quotegroupFilesFrameLabel->set_text(gettext("Files")); quotegroupSizeCurrentlyLabel->set_text(gettext("Currently using:")); quotegroupSizeSoftLimitLabel->set_text(gettext("Soft limit")); quoteSizeHardLimitLabel->set_text(gettext("Hard limit")); quoteFilesHardLimitLabel->set_text(gettext("Hard limit")); quotegroupFilesSoftLimitLabel->set_text(gettext("Soft limit")); quotegroupFilesCurrentlyLabel->set_text(gettext("Currently using:")); quoteuserDiskQuotasLabel->set_text(gettext("Disk quotas for this device:")); quoteuserDeviceLabel->set_text(gettext("Device:")); quoteuserGroupQuotasLabel->set_text(gettext("User quotas for this device: ")); quoteuserSizeFrameLabel->set_text(gettext("Size")); quoteuserSizeCurrentlyLabel->set_text(gettext("Currently using:")); quoteuserSizeSoftLimitLabel->set_text(gettext("Soft limit")); quoteuserSizeHardLimitLabel1->set_text(gettext("Hard limit")); quoteuserFileSystemLabel->set_text(gettext("File system:")); quoteuserFilesFrameLabel->set_text(gettext("Files")); quoteuserFilesCurrentlyLabel->set_text(gettext("Currently using: ")); quoteuserFilesSoftLimitLabel->set_text(gettext("Soft limit")); quoteFilesHardLimitLabel1->set_text(gettext("Hard limit")); quoteuserFilesHarLimitLabel->set_text(gettext("files")); quoteuserFilesSoftLimitlabel->set_text(gettext("files")); quotegroupFileSystemLabel->set_text(gettext("File system:")); } void MainWindow::add_CSS() { Glib::RefPtr cssProvider = Gtk::CssProvider::create(); cssProvider->load_from_path(path_css); Glib::RefPtr styleContext = Gtk::StyleContext::create(); Glib::RefPtr screen = Gdk::Screen::get_default();//get default screen styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application HeadBackgroundImage->set(path_img_head_background); Glib::RefPtr headLabel_css = headLabel->get_style_context(); Glib::RefPtr boxButton_css = boxButton->get_style_context(); Glib::RefPtr boxSave_css = boxSave->get_style_context(); Glib::RefPtr headerBar_css = headerBar->get_style_context(); if (socket_trd_id_I == 0 && socket_ext_id_I == 0){ boxButton_css->add_class("bkim_no_plug"); boxSave_css->add_class("bkim_no_plug"); } headLabel_css->add_class("textHead"); } void MainWindow::get_builder() { builder->set_translation_domain(path_app); builder->get_widget("headerTopic", headerTopic); builder->get_widget("boxButton", boxButton); builder->get_widget("boxSave", boxSave); builder->get_widget("aboutWindows", aboutWindows); builder->get_widget("HeadOverlay", HeadOverlay); builder->get_widget("headerBar", headerBar); builder->get_widget("boxFuncs", boxFuncs); builder->get_widget("btnLoad", btnLoad); builder->get_widget("btnSave", btnSave); builder->get_widget("btnBoxAboutDialog", btnBoxAboutDialog); builder->get_widget("HeadBackgroundImage", HeadBackgroundImage); builder->get_widget("imgInfo", imgInfo); builder->get_widget("lblWarning", lblWarning); builder->get_widget("boxInfoError", boxInfoError); builder->get_widget("imgInfo", imgInfo); builder->get_widget("generalTabLabel", generalTabLabel); builder->get_widget("GroupsTabLabel", GroupsTabLabel); builder->get_widget("UsersTabLabel", UsersTabLabel); builder->get_widget("generalDeviceLabel", generalDeviceLabel); builder->get_widget("generalGroupsFrameLabel", generalGroupsFrameLabel); builder->get_widget("generalGroupsSizeLabel", generalGroupsSizeLabel); builder->get_widget("generalGroupsFilesLabel", generalGroupsFilesLabel); builder->get_widget("generalUsersFrameLabel", generalUsersFrameLabel); builder->get_widget("generalUsersSizeLabel", generalUsersSizeLabel); builder->get_widget("generalUsersFilesLabel", generalUsersFilesLabel); builder->get_widget("generalGroupsSizeWeeksLabel", generalGroupsSizeWeeksLabel); builder->get_widget("generalGroupsFilesWeeksLabel", generalGroupsFilesWeeksLabel); builder->get_widget("generalUsersSizeWeeksLabel", generalUsersSizeWeeksLabel); builder->get_widget("generalUsersFilesWeeksLabel", generalUsersFilesWeeksLabel); builder->get_widget("generalGroupsSizeDaysLabel", generalGroupsSizeDaysLabel); builder->get_widget("generalGroupsFilesDaysLabel", generalGroupsFilesDaysLabel); builder->get_widget("generalUsersSizeDaysLabel", generalUsersSizeDaysLabel); builder->get_widget("generalUsersFilesDaysLabel", generalUsersFilesDaysLabel); builder->get_widget("generalGroupsSizeHoursLabel", generalGroupsSizeHoursLabel); builder->get_widget("generalGroupsFilesHoursLabel", generalGroupsFilesHoursLabel); builder->get_widget("generalUsersSizeHoursLabel", generalUsersSizeHoursLabel); builder->get_widget("generalUsersFilesHoursLabel", generalUsersFilesHoursLabel); builder->get_widget("generalGroupsSizeMinutesLabel", generalGroupsSizeMinutesLabel); builder->get_widget("generalGroupsFilesMinutesLabel", generalGroupsFilesMinutesLabel); builder->get_widget("generalUsersSizeMinutesLabel", generalUsersSizeMinutesLabel); builder->get_widget("generalUsersFilesMinutesLabel", generalUsersFilesMinutesLabel); builder->get_widget("generalFileSystemLabel", generalFileSystemLabel); builder->get_widget("generalGroupsEnableCheck", generalGroupsEnableCheck); builder->get_widget("generalUsersEnableCheck", generalUsersEnableCheck); builder->get_widget("lblLoad", lblLoad); builder->get_widget("lblSave", lblSave); builder->get_widget("btnSettings", btnSettings); builder->get_widget("groupsFileSystemLabel", groupsFileSystemLabel); builder->get_widget("groupsFiltersButton", groupsFiltersButton); builder->get_widget("btnSettings", btnSettings); builder->get_widget("usersFiltersButton", usersFiltersButton); builder->get_widget("usersFileSystemLabel", usersFileSystemLabel); builder->get_widget("groupsDeviceLabel", groupsDeviceLabel); builder->get_widget("usersDeviceLabel", usersDeviceLabel); builder->get_widget("headLabel", headLabel); builder->get_widget("FiltersWindow", FiltersWindow); builder->get_widget("filtersNameFilterCheckbox", filtersNameFilterCheckbox); builder->get_widget("filtersQuotasFilterCheckbox", filtersQuotasFilterCheckbox); builder->get_widget("filtersSizeFilterCheckbox", filtersSizeFilterCheckbox); builder->get_widget("filtersSoftSizeFilterCheckbox", filtersSoftSizeFilterCheckbox); builder->get_widget("filtersHardSizeFilterCheckbox", filtersHardSizeFilterCheckbox); builder->get_widget("filtersHardSizeDelayFilterCheckbox", filtersHardSizeDelayFilterCheckbox); builder->get_widget("filtersHardSizeActivationFilterCheckbox", filtersHardSizeActivationFilterCheckbox); builder->get_widget("filtersFilesFilterCheckbox", filtersFilesFilterCheckbox); builder->get_widget("filtersSoftFilesFilterCheckbox", filtersSoftFilesFilterCheckbox); builder->get_widget("filtersHardFilesFilterCheckbox", filtersHardFilesFilterCheckbox); builder->get_widget("filtersHardFilesDelayFilterCheckbox", filtersHardFilesDelayFilterCheckbox); builder->get_widget("filtersHardFilesActivationFilterCheckbox", filtersHardFilesActivationFilterCheckbox); builder->get_widget("filtersHardFilesActivationFilterCheckbox", filtersHardFilesActivationFilterCheckbox); builder->get_widget("btnLoadGlob", btnLoadGlob); builder->get_widget("btnLoadLocal", btnLoadLocal); builder->get_widget("btnSynopsis", btnSynopsis); builder->get_widget("btnAbout", btnAbout); builder->get_widget("btnSaveLocalGlob", btnSaveLocalGlob); builder->get_widget("btnSaveGlob", btnSaveGlob); builder->get_widget("btnSaveLocal", btnSaveLocal); builder->get_widget("GroupsTabLabel", GroupsTabLabel); builder->get_widget("groupsQuotasTree", groupsQuotasTree); builder->get_widget("usersQuotasTree", usersQuotasTree); builder->get_widget("quotegroupDeviceLabel", quotegroupDeviceLabel); builder->get_widget("quotegroupFileSystemLabel", quotegroupFileSystemLabel); builder->get_widget("quotegroupDiskQuotasLabel", quotegroupDiskQuotasLabel); builder->get_widget("quotegroupGroupQuotasLabel", quotegroupGroupQuotasLabel); builder->get_widget("quotegroupSizeFrameLabel", quotegroupSizeFrameLabel); builder->get_widget("quotegroupFilesFrameLabel", quotegroupFilesFrameLabel); builder->get_widget("quotegroupSizeCurrentlyLabel", quotegroupSizeCurrentlyLabel); builder->get_widget("quotegroupFilesCurrentlyLabel", quotegroupFilesCurrentlyLabel); builder->get_widget("quotegroupSizeSoftLimitLabel", quotegroupSizeSoftLimitLabel); builder->get_widget("quoteSizeHardLimitLabel", quoteSizeHardLimitLabel); builder->get_widget("quotegroupFilesSoftLimitLabel", quotegroupFilesSoftLimitLabel); builder->get_widget("quoteFilesHardLimitLabel", quoteFilesHardLimitLabel); builder->get_widget("quotegroupFilesHarLimitLabel", quotegroupFilesHarLimitLabel); builder->get_widget("quoteuserDeviceLabel", quoteuserDeviceLabel); builder->get_widget("quoteuserFileSystemLabel", quoteuserFileSystemLabel); builder->get_widget("quoteuserDiskQuotasLabel", quoteuserDiskQuotasLabel); builder->get_widget("quoteuserGroupQuotasLabel", quoteuserGroupQuotasLabel); builder->get_widget("quoteuserSizeFrameLabel", quoteuserSizeFrameLabel); builder->get_widget("quoteuserSizeCurrentlyLabel", quoteuserSizeCurrentlyLabel); builder->get_widget("quoteuserSizeSoftLimitLabel", quoteuserSizeSoftLimitLabel); builder->get_widget("quoteuserSizeHardLimitLabel1", quoteuserSizeHardLimitLabel1); builder->get_widget("quoteuserFilesFrameLabel", quoteuserFilesFrameLabel); builder->get_widget("quoteuserFilesCurrentlyLabel", quoteuserFilesCurrentlyLabel); builder->get_widget("quoteuserFilesSoftLimitLabel", quoteuserFilesSoftLimitLabel); builder->get_widget("quoteFilesHardLimitLabel1", quoteFilesHardLimitLabel1); builder->get_widget("quoteuserFilesHarLimitLabel", quoteuserFilesHarLimitLabel); builder->get_widget("quoteuserFilesSoftLimitlabel", quoteuserFilesSoftLimitlabel); builder->get_widget("QuotasEditWindow", QuotasEditWindow); builder->get_widget("QuotasUserEditWindow", QuotasUserEditWindow); } void MainWindow::event() { btnLoadGlob->signal_activate().connect([&]() {}); btnLoadLocal->signal_activate().connect([&]() {}); btnSynopsis->signal_activate().connect([&]() {}); btnAbout->signal_activate().connect([&]() {}); btnSaveLocalGlob->signal_activate().connect([&]() {}); btnSaveGlob->signal_activate().connect([&]() {}); btnSaveLocal->signal_activate().connect([&]() {}); groupsFiltersButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::groupsFilters_show)); usersFiltersButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::groupsFilters_show)); } void MainWindow::groupsFilters_show() { FiltersWindow->show_all(); } void MainWindow::view_add_columns(Gtk::TreeView &treeView) { // TODO: // Не готово treeView.append_column(gettext("Name"), m_columns.name); treeView.append_column_editable(gettext("Quotas"), m_columns.quotas); treeView.append_column(gettext("Size"), m_columns.size); treeView.append_column(gettext("Soft limit\n(size)"), m_columns.soft_limit_size); treeView.append_column(gettext("Hard limit\n(size)"), m_columns.hard_limit_size); treeView.append_column(gettext("Hard limit\n(size) delay"), m_columns.hard_limit_size_delay); treeView.append_column(gettext("Hard limit\n(Size) activation\ntime"), m_columns.hard_limit_activ_time); treeView.append_column(gettext("Files"), m_columns.files); treeView.append_column(gettext("Soft limit\n(files)"), m_columns.soft_limit_files); treeView.append_column(gettext("Hard limit\n(files)"), m_columns.hard_limit_files); treeView.append_column(gettext("Hard limit\n(files) delay"), m_columns.hard_limit_delay); treeView.append_column(gettext("Hard limit\n(files) activation\ntime"), m_columns.hard_limit_files_activ_time); } void MainWindow::info_status_app(string stule) { Glib::RefPtr boxInfo = boxInfoError->get_style_context(); boxInfo->remove_class("boxInfoMessOK"); boxInfo->remove_class("boxInfoMessError"); boxInfo->add_class(stule); } SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr builder) :Gtk::Plug{p_socketID} { MainWindow* wnd = nullptr; builder->get_widget_derived("window", wnd); builder->get_widget("plugBox", plugBox); plugBox->get_parent()->remove(*plugBox); add(*plugBox); show_all_children(); } void help() { string version = string(gettext("ubl-settings-quotas version: ")) + version_application + "\n"; cout << version.c_str(); string help; help = "GTK settings quotas. for UBLinux\n\n" "Usage: ubl-settings-quotas [OPTIONS...]\n" "Options:\n" " -h, --help Show this help\n" " -V, --version Show package version\n"; cout << gettext(help.c_str()); }