You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ubl-settings-diskquota/source/ubl-settings-quotas.cc

362 lines
19 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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/images/logo-background.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<Gtk::Builder> const& builder)
: Gtk::ApplicationWindow(obj), builder{builder} {
this->builder = builder;
this->settings();
}
MainWindow::MainWindow(Glib::RefPtr<Gtk::Builder> 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->init_tree_view();
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(_("The program must be run as root"));
}
}
void MainWindow::init_tree_view() {
this->view_add_columns(*usersQuotasTree);
this->view_add_columns(*groupsQuotasTree);
}
void MainWindow::lacalization() {
time_t now = time(0);
tm *ltm = localtime(&now);
unsigned int year = 1900+ ltm->tm_year;
string str_authors = string(_("Copyright © UBSoft LLC, 2022 - ")) + to_string(year);
aboutWindows->set_copyright(str_authors);
aboutWindows->set_comments(_("Date and Time"));
aboutWindows->set_website(_("https://wiki.ublinux.com"));
aboutWindows->set_version(gettext(version_application.c_str()));
aboutWindows->set_website_label(_("Project Home Page"));
generalTabLabel->set_text(_("General settings"));
GroupsTabLabel->set_text(_("Groups"));
UsersTabLabel->set_text(_("Users"));
generalDeviceLabel->set_text(_("Device:"));
generalFileSystemLabel->set_text(_("File system:"));
generalGroupsFrameLabel->set_text(_("quotas for groups"));
generalGroupsEnableCheck->set_label(_("Enable"));
generalUsersEnableCheck->set_label(_("Enable"));
generalUsersFrameLabel->set_label(_("quotas for users"));
generalGroupsSizeLabel->set_text(_("Excess size delay period"));
generalGroupsFilesLabel->set_text(_("Excess files delay period"));
generalUsersSizeLabel->set_text(_("Excess size delay period"));
generalUsersFilesLabel->set_text(_("Excess files delay period"));
generalGroupsSizeWeeksLabel->set_text(_("weeks"));
generalGroupsFilesWeeksLabel->set_text(_("weeks"));
generalUsersSizeWeeksLabel->set_text(_("weeks"));
generalUsersFilesWeeksLabel->set_text(_("weeks"));
generalGroupsSizeDaysLabel->set_text(_("days"));
generalGroupsFilesDaysLabel->set_text(_("days"));
generalUsersSizeDaysLabel->set_text(_("days"));
generalUsersFilesDaysLabel->set_text(_("days"));
generalGroupsSizeHoursLabel->set_text(_("hours"));
generalGroupsFilesHoursLabel->set_text(_("hours"));
generalUsersSizeHoursLabel->set_text(_("hours"));
generalUsersFilesHoursLabel->set_text(_("hours"));
generalGroupsSizeMinutesLabel->set_text(_("minutes"));
generalGroupsFilesMinutesLabel->set_text(_("minutes"));
generalUsersSizeMinutesLabel->set_text(_("minutes"));
generalUsersFilesMinutesLabel->set_text(_("minutes"));
groupsFileSystemLabel->set_text(_("File system:"));
usersFileSystemLabel->set_text(_("File system:"));
usersFiltersButton->set_label(_("Filters"));
groupsFiltersButton->set_label(_("Filters"));
lblLoad->set_text(_("Load"));
lblSave->set_text(_("Save"));
groupsDeviceLabel->set_label(_("Device:"));
usersDeviceLabel->set_label(_("Device:"));
headLabel->set_label(_("Configuration of disk quotas parameters for system groups and users"));
filtersNameFilterCheckbox->set_label(_("Name"));
filtersQuotasFilterCheckbox->set_label(_("Quotas"));
filtersSizeFilterCheckbox->set_label(_("Size"));
filtersSoftSizeFilterCheckbox->set_label(_("Soft limit (size)"));
filtersHardSizeFilterCheckbox->set_label(_("Hard limit (size)"));
filtersHardSizeDelayFilterCheckbox->set_label(_("Hard limit (size) delay"));
filtersHardSizeActivationFilterCheckbox->set_label(_("Hard limit (size) activation time"));
filtersFilesFilterCheckbox->set_label(_("Files"));
filtersSoftFilesFilterCheckbox->set_label(_("Soft limit (files)"));
filtersHardFilesFilterCheckbox->set_label(_("Hard limit (files)"));
filtersHardFilesDelayFilterCheckbox->set_label(_("Hard limit (files) delay"));
filtersHardFilesActivationFilterCheckbox->set_label(_("Hard limit (file) activation time"));
quotegroupDeviceLabel->set_text(_("Device:"));
quotegroupDiskQuotasLabel->set_text(_("Disk quotas for this device:"));
quotegroupGroupQuotasLabel->set_text(_("Group quotas for this device:"));
quotegroupSizeFrameLabel->set_text(_("Size"));
quotegroupFilesFrameLabel->set_text(_("Files"));
quotegroupSizeCurrentlyLabel->set_text(_("Currently using:"));
quotegroupSizeSoftLimitLabel->set_text(_("Soft limit"));
quoteSizeHardLimitLabel->set_text(_("Hard limit"));
quoteFilesHardLimitLabel->set_text(_("Hard limit"));
quotegroupFilesSoftLimitLabel->set_text(_("Soft limit"));
quotegroupFilesCurrentlyLabel->set_text(_("Currently using:"));
quoteuserDiskQuotasLabel->set_text(_("Disk quotas for this device:"));
quoteuserDeviceLabel->set_text(_("Device:"));
quoteuserGroupQuotasLabel->set_text(_("User quotas for this device: "));
quoteuserSizeFrameLabel->set_text(_("Size"));
quoteuserSizeCurrentlyLabel->set_text(_("Currently using:"));
quoteuserSizeSoftLimitLabel->set_text(_("Soft limit"));
quoteuserSizeHardLimitLabel1->set_text(_("Hard limit"));
quoteuserFileSystemLabel->set_text(_("File system:"));
quoteuserFilesFrameLabel->set_text(_("Files"));
quoteuserFilesCurrentlyLabel->set_text(_("Currently using: "));
quoteuserFilesSoftLimitLabel->set_text(_("Soft limit"));
quoteFilesHardLimitLabel1->set_text(_("Hard limit"));
quoteuserFilesHarLimitLabel->set_text(_("files"));
quoteuserFilesSoftLimitlabel->set_text(_("files"));
quotegroupFileSystemLabel->set_text(_("File system:"));
}
void MainWindow::add_CSS() {
Glib::RefPtr<Gtk::CssProvider> cssProvider = Gtk::CssProvider::create();
cssProvider->load_from_path(path_css);
Glib::RefPtr<Gtk::StyleContext> styleContext = Gtk::StyleContext::create();
Glib::RefPtr<Gdk::Screen> 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<Gtk::StyleContext> headLabel_css = headLabel->get_style_context();
Glib::RefPtr<Gtk::StyleContext> boxButton_css = boxButton->get_style_context();
Glib::RefPtr<Gtk::StyleContext> boxSave_css = boxSave->get_style_context();
Glib::RefPtr<Gtk::StyleContext> 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(_("Name"), m_columns.name);
treeView.append_column_editable(_("Quotas"), m_columns.quotas);
treeView.append_column(_("Size"), m_columns.size);
treeView.append_column(_("Soft limit\n(size)"), m_columns.soft_limit_size);
treeView.append_column(_("Hard limit\n(size)"), m_columns.hard_limit_size);
treeView.append_column(_("Hard limit\n(size) delay"), m_columns.hard_limit_size_delay);
treeView.append_column(_("Hard limit\n(Size) activation\ntime"), m_columns.hard_limit_activ_time);
treeView.append_column(_("Files"), m_columns.files);
treeView.append_column(_("Soft limit\n(files)"), m_columns.soft_limit_files);
treeView.append_column(_("Hard limit\n(files)"), m_columns.hard_limit_files);
treeView.append_column(_("Hard limit\n(files) delay"), m_columns.hard_limit_delay);
treeView.append_column(_("Hard limit\n(files) activation\ntime"), m_columns.hard_limit_files_activ_time);
}
void MainWindow::info_status_app(string stule) {
Glib::RefPtr<Gtk::StyleContext> boxInfo = boxInfoError->get_style_context();
boxInfo->remove_class("boxInfoMessOK");
boxInfo->remove_class("boxInfoMessError");
boxInfo->add_class(stule);
}
SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr<Gtk::Builder> 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(_("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());
}