From 9dee33eacaf595307a16307317c5b00c37ad3335 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 25 Apr 2023 12:57:10 +0600 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=20define,=20=D0=B8=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20CMakeLists?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 14 +- source/main.cc | 6 +- source/ubl-settings-diskquota.cc | 330 +++++++++++++++++-------------- source/ubl-settings-diskquota.h | 122 +++++++++++- 4 files changed, 318 insertions(+), 154 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index f90aabc..eb46b27 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -8,6 +8,14 @@ include_directories(${GTK_INCLUDE_DIRS}) link_directories(${GTK_LIBRARY_DIRS}) add_definitions(${GTK_CFLAGS_OTHER}) +option(WEBKIT_FOUND "" ON) + +if(WEBKIT_FOUND) + PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) + include_directories(${WEBKIT_INCLUDE_DIRS}) + link_directories(${WEBKIT_LIBRARY_DIRS}) + add_definitions(${WEBKIT_CFLAGS_OTHER}) +endif() #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ @@ -45,5 +53,9 @@ set(LIBRARIES pthread) add_executable(ubl-settings-diskquota ${SOURCE_FILES}) -target_link_libraries(ubl-settings-diskquota ${LIBRARIES} ${ICU_LIBRARIES}) +target_link_libraries(ubl-settings-diskquota PUBLIC ${WEBKIT_LIBRARIES} ${LIBRARIES}) +target_include_directories(ubl-settings-diskquota PUBLIC + "${PROJECT_BINARY_DIR}" + ${WEBKIT_INCLUDE_DIRS} + ) install(TARGETS ubl-settings-diskquota DESTINATION bin) \ No newline at end of file diff --git a/source/main.cc b/source/main.cc index 1d97603..319c259 100644 --- a/source/main.cc +++ b/source/main.cc @@ -11,9 +11,9 @@ int main(int argc, char** argv) { if (argc > 1){ str_argv = argv[1]; } - bindtextdomain(app_name.c_str(), "/usr/share/locale/"); - bind_textdomain_codeset(app_name.c_str(), "UTF-8"); - textdomain(app_name.c_str()); + bindtextdomain(app_name, "/usr/share/locale/"); + bind_textdomain_codeset(app_name, "UTF-8"); + textdomain(app_name); if (str_argv.find("--socket-id") != std::string::npos) { auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example.plug"); auto builder = Gtk::Builder::create_from_file(path_glade); diff --git a/source/ubl-settings-diskquota.cc b/source/ubl-settings-diskquota.cc index 17c5d2d..e8d8179 100755 --- a/source/ubl-settings-diskquota.cc +++ b/source/ubl-settings-diskquota.cc @@ -1,13 +1,6 @@ #include "ubl-settings-diskquota.h" using namespace std; -const string path_app = "/usr/bin/"; -const string path_glade = "/usr/share/ubl-settings-diskquota/ui/ubl-settings-diskquota.glade"; -const string app_name = "ubl-settings-diskquota"; -const string path_locale = "/usr/share/locale/"; -const string path_css = "/usr/share/ubl-settings-diskquota/css/ubl-settings-diskquota.css"; -const string path_img_head_background = "/usr/share/ubl-settings-diskquota/images/logo-background.png"; - int socket_ext_id_I = 0; int socket_trd_id_I = 0; @@ -58,14 +51,23 @@ void MainWindow::settings() { boxFuncs->set_sensitive(false); btnSave->set_sensitive(false); btnLoad->set_sensitive(false); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-diskquota.warning", Gtk::ICON_SIZE_MENU); - info_status_app("boxInfoMessError"); - lblWarning->set_text(_("The program must be run as root")); + imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU); + info_status_app(info_box_error_css); + lblWarning->set_text(program_as_root); } 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); + #ifdef WEBKIT_FOUND + void *handle=NULL; + handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); + if (handle) { + one = WEBKIT_WEB_VIEW( webkit_web_view_new() ); + three = Glib::wrap(GTK_WIDGET(one)); + wndWeb->add(*three); + } + #endif } void MainWindow::init_spin_all() { @@ -141,120 +143,120 @@ void MainWindow::init_tree_view() { this->init_tree_view_general(); } void MainWindow::init_tree_view_general() { - GeneralQuotasTree->append_column_editable(_("Status"), m_columnsGeneral.status); - GeneralQuotasTree->append_column(_("Quota type"), m_columnsGeneral.type_quotas); - GeneralQuotasTree->append_column(_("Device\nProject"), m_columnsGeneral.device); - GeneralQuotasTree->append_column(_("User"), m_columnsGeneral.user); - GeneralQuotasTree->append_column(_("Group"), m_columnsGeneral.group); - GeneralQuotasTree->append_column(_("Soft limit\n(size)"), m_columnsGeneral.soft_limit_size); - GeneralQuotasTree->append_column(_("Severe\nlimitation\n(size)"), m_columnsGeneral.hard_limit_size); - GeneralQuotasTree->append_column(_("Deferring\na hard\nlimit\n(size)"), m_columnsGeneral.hard_limit_size_delay); - GeneralQuotasTree->append_column(_("Soft limit\n(files)"), m_columnsGeneral.soft_limit_files); - GeneralQuotasTree->append_column(_("Severe\nlimitation\n(files)"), m_columnsGeneral.hard_limit_files); - GeneralQuotasTree->append_column(_("Deferring\na hard\nlimit\n(files)"), m_columnsGeneral.hard_limit_delay); + GeneralQuotasTree->append_column_editable(str_status, m_columnsGeneral.status); + GeneralQuotasTree->append_column(str_quota, m_columnsGeneral.type_quotas); + GeneralQuotasTree->append_column(str_device_project, m_columnsGeneral.device); + GeneralQuotasTree->append_column(str_user, m_columnsGeneral.user); + GeneralQuotasTree->append_column(str_group, m_columnsGeneral.group); + GeneralQuotasTree->append_column(str_tw_soft_limit, m_columnsGeneral.soft_limit_size); + GeneralQuotasTree->append_column(str_tw_severe_limitation, m_columnsGeneral.hard_limit_size); + GeneralQuotasTree->append_column(str_tw_deferring_size, m_columnsGeneral.hard_limit_size_delay); + GeneralQuotasTree->append_column(str_tw_soft_limit_files, m_columnsGeneral.soft_limit_files); + GeneralQuotasTree->append_column(str_tw_severe_limitation_files, m_columnsGeneral.hard_limit_files); + GeneralQuotasTree->append_column(str_tw_severe_limitation_files, m_columnsGeneral.hard_limit_delay); } 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); + string str_authors = string(copyright) + to_string(year); aboutWindows->set_copyright(str_authors); - aboutWindows->set_comments(_("Setting user quotas")); - 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")); - headerAboutTopic->set_label(_(app_name.c_str())); - headerTopic->set_label(_("ubl-settings-diskquota")); - UsersTabLabel->set_text(_("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")); - 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(_("Deferring a hard limit (size)")); - filtersHardSizeActivationFilterCheckbox->set_label(_("Hard limit activation time (size)")); - filtersFilesFilterCheckbox->set_label(_("Files")); - filtersSoftFilesFilterCheckbox->set_label(_("Soft Restriction (files)")); - filtersHardFilesFilterCheckbox->set_label(_("Severe limitation (files)")); - filtersHardFilesDelayFilterCheckbox->set_label(_("Deferring a hard limit (files)")); - 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:")); - btnLoadGlob->set_label(_("Load from global configuration")); - btnLoadLocal->set_label(_("Load from local configuration")); - btnAbout->set_label(_("About")); - btnSynopsis->set_label(_("Help")); - btnSaveLocalGlob->set_label(_("Save to global and local configuration")); - btnSaveGlob->set_label(_("Save to global configuration")); - btnSaveLocal->set_label(_("Save to local configuration")); - lblHeadFiltersWindow->set_label(_("Filters")); - ProjectTabLabel->set_label(_("Projects")); - usersProjectLabel->set_text(_("Device:")); + aboutWindows->set_comments(str_setting_user); + aboutWindows->set_website(website); + aboutWindows->set_version(_(version_application.c_str())); + aboutWindows->set_website_label(project_Home_page); + generalTabLabel->set_text(str_general_settings); + GroupsTabLabel->set_text(str_groups); + headerAboutTopic->set_label(_(app_name)); + headerTopic->set_label(name_app); + UsersTabLabel->set_text(str_users); + generalGroupsSizeLabel->set_text(str_excess_size_delay); + generalGroupsFilesLabel->set_text(str_excess_files_delay); + generalUsersSizeLabel->set_text(str_excess_size_delay); + generalUsersFilesLabel->set_text(str_excess_files_delay); + generalGroupsSizeWeeksLabel->set_text(str_weeks); + generalGroupsFilesWeeksLabel->set_text(str_weeks); + generalUsersSizeWeeksLabel->set_text(str_weeks); + generalUsersFilesWeeksLabel->set_text(str_weeks); + generalGroupsSizeDaysLabel->set_text(str_days); + generalGroupsFilesDaysLabel->set_text(str_days); + generalUsersSizeDaysLabel->set_text(str_days); + generalUsersFilesDaysLabel->set_text(str_days); + generalGroupsSizeHoursLabel->set_text(str_hours); + generalGroupsFilesHoursLabel->set_text(str_hours); + generalUsersSizeHoursLabel->set_text(str_hours); + generalUsersFilesHoursLabel->set_text(str_hours); + generalGroupsSizeMinutesLabel->set_text(str_minutes); + generalGroupsFilesMinutesLabel->set_text(str_minutes); + generalUsersSizeMinutesLabel->set_text(str_minutes); + generalUsersFilesMinutesLabel->set_text(str_minutes); + lblLoad->set_text(str_load_local); + lblSave->set_text(str_save_local); + groupsDeviceLabel->set_label(str_device); + usersDeviceLabel->set_label(str_device); + headLabel->set_label(str_lb_head); + filtersNameFilterCheckbox->set_label(str_name); + filtersQuotasFilterCheckbox->set_label(str_quotas); + filtersSizeFilterCheckbox->set_label(str_size); + filtersSoftSizeFilterCheckbox->set_label(str_soft_limit_size); + filtersHardSizeFilterCheckbox->set_label(str_hard_limit_size); + filtersHardSizeDelayFilterCheckbox->set_label(str_deferring_hard_limit_size); + filtersHardSizeActivationFilterCheckbox->set_label(str_hard_activation_size); + filtersFilesFilterCheckbox->set_label(str_files); + filtersSoftFilesFilterCheckbox->set_label(str_soft_restriction_files); + filtersHardFilesFilterCheckbox->set_label(str_severe_limitation_files); + filtersHardFilesDelayFilterCheckbox->set_label(str_deferring_limit_files); + filtersHardFilesActivationFilterCheckbox->set_label(str_hard_limit_time); + quotegroupDeviceLabel->set_text(str_device); + quotegroupDiskQuotasLabel->set_text(str_disk_quotas_device); + quotegroupGroupQuotasLabel->set_text(str_group_quotas_device); + quotegroupSizeFrameLabel->set_text(str_size); + quotegroupFilesFrameLabel->set_text(str_files); + quotegroupSizeCurrentlyLabel->set_text(str_currently_using); + quotegroupSizeSoftLimitLabel->set_text(str_soft_limit); + quoteSizeHardLimitLabel->set_text(str_hard_limit); + quoteFilesHardLimitLabel->set_text(str_hard_limit); + quotegroupFilesSoftLimitLabel->set_text(str_soft_limit); + quotegroupFilesCurrentlyLabel->set_text(str_currently_using); + quoteuserDiskQuotasLabel->set_text(str_disk_quotas_device); + quoteuserDeviceLabel->set_text(str_device); + quoteuserGroupQuotasLabel->set_text(str_user_quotas_device); + quoteuserSizeFrameLabel->set_text(str_size); + quoteuserSizeCurrentlyLabel->set_text(str_currently_using); + quoteuserSizeSoftLimitLabel->set_text(str_soft_limit); + quoteuserSizeHardLimitLabel1->set_text(str_hard_limit); + quoteuserFileSystemLabel->set_text(str_file_system); + quoteuserFilesFrameLabel->set_text(str_files); + quoteuserFilesCurrentlyLabel->set_text(str_currently_using_space); + quoteuserFilesSoftLimitLabel->set_text(str_soft_limit); + quoteFilesHardLimitLabel1->set_text(str_hard_limit); + quoteuserFilesHarLimitLabel->set_text(str_files); + quoteuserFilesSoftLimitlabel->set_text(str_files); + quotegroupFileSystemLabel->set_text(str_file_system); + btnLoadGlob->set_label(load_global); + btnLoadLocal->set_label(load_local); + btnAbout->set_label(str_about_1); + btnSynopsis->set_label(str_help); + btnSaveLocalGlob->set_label(save_all); + btnSaveGlob->set_label(save_global); + btnSaveLocal->set_label(save_local); + lblHeadFiltersWindow->set_label(str_filters); + ProjectTabLabel->set_label(str_projects); + usersProjectLabel->set_text(str_device); } void MainWindow::view_add_columns(Gtk::TreeView &treeView) { - 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(_("Severe\nlimitation\n(size)"), m_columns.hard_limit_size); - treeView.append_column(_("Deferring\na hard\nlimit\n(size)"), m_columns.hard_limit_size_delay); - treeView.append_column(_("Files"), m_columns.files); - treeView.append_column(_("Soft limit\n(files)"), m_columns.soft_limit_files); - treeView.append_column(_("Severe\nlimitation\n(files)"), m_columns.hard_limit_files); - treeView.append_column(_("Deferring\na hard\nlimit\n(files)"), m_columns.hard_limit_delay); + treeView.append_column(str_name, m_columns.name); + treeView.append_column_editable(str_quotas, m_columns.quotas); + treeView.append_column(str_size, m_columns.size); + treeView.append_column(str_tw_soft_limit, m_columns.soft_limit_size); + treeView.append_column(str_tw_severe_limitation, m_columns.hard_limit_size); + treeView.append_column(str_tw_deferring_size, m_columns.hard_limit_size_delay); + treeView.append_column(str_files, m_columns.files); + treeView.append_column(str_tw_soft_limit_files, m_columns.soft_limit_files); + treeView.append_column(str_tw_severe_limitation_files, m_columns.hard_limit_files); + treeView.append_column(str_tw_severe_limitation_files, m_columns.hard_limit_delay); } void MainWindow::filling_device_combo_box_template(Gtk::ComboBoxText *combo_box, map_str_str &map_device) { @@ -452,8 +454,13 @@ void MainWindow::get_builder() { builder->get_widget("btnFilterProject", btnFilterProject); builder->get_widget("btnFilterUsers", btnFilterUsers); builder->get_widget("btnFilterGroups", btnFilterGroups); - - + #ifdef WEBKIT_FOUND + void *handle=NULL; + handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); + if (handle) { + builder->get_widget("wndWeb", wndWeb); + } + #endif } @@ -580,8 +587,8 @@ void MainWindow::check_limit(Gtk::CheckButton *check_button, Gtk::SpinButton *sp void MainWindow::info_status_app(string stule) { Glib::RefPtr boxInfo = boxInfoError->get_style_context(); - boxInfo->remove_class("boxInfoMessOK"); - boxInfo->remove_class("boxInfoMessError"); + boxInfo->remove_class(info_box_ok_css); + boxInfo->remove_class(info_box_error_css); boxInfo->add_class(stule); } @@ -654,12 +661,43 @@ void MainWindow::wrapper_save_global_cfg() { } void MainWindow::synopsis_show() { - string cmd = "xdg-open " + string(_("https://wiki.ublinux.com/ru/Программное_обеспечение/Программы_и_утилиты/Все/")) + app_name; + if (flag_open_browser == true) { + this->open_browser(); + } + else { + wndShowWeb->show_all(); + } + +} + +void MainWindow::open_browser() { + #ifdef WEBKIT_FOUND + void *handle=NULL; + handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); + if (handle) { + webkit_web_view_load_uri(one, link_doc); + wndWeb->show_all(); + } + else { + this->template_open_browser(); + } + #else + this->template_open_browser(); + #endif +} + +void MainWindow::template_open_browser() { + string cmd = cmd_xdg + string(_(link_doc)) + " &"; + string buf = ""; if (geteuid() == 0) { string response_user = getlogin(); - cmd = "su -l " + response_user + " -c \" DISPLAY=$DISPLAY " + cmd + " \""; + int size_s = std::snprintf(nullptr, 0, cmd_execute, response_user.c_str(), cmd.c_str()) + 1; + auto size = static_cast(size_s); + std::unique_ptr buf(new char[ size ]); + std::snprintf( buf.get(), size, cmd_execute, response_user.c_str(), cmd.c_str() ); + cmd = std::string( buf.get(), buf.get() + size - 1 ); } - obj_process_system.call(cmd, "&"); + obj_process_system.call(cmd, ""); } void MainWindow::wrapper_save_system_cfg() { @@ -683,27 +721,27 @@ void MainWindow::load_template(map_str_str* map_temp, string str_load) { void MainWindow::info_warning_error(int mess) { if (obj_load.get_count_error() > 0 || obj_save.get_count_error() > 0) { - info_status_app("boxInfoMessError"); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-diskquota.warning", Gtk::ICON_SIZE_MENU); + info_status_app(info_box_error_css); + imgInfo->set_from_icon_name(icon_warning, Gtk::ICON_SIZE_MENU); string mess_error = ""; if (mess == 0) { - mess_error = string(_("Local configuration reading error")) + str_cmd_error; + mess_error = string(local_read_error) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 1) { - mess_error = string(_("Global configuration read error")) + str_cmd_error; + mess_error = string(global_read_error) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 2) { - mess_error = string(_("Local configuration write error")) + str_cmd_error; + mess_error = string(local_write_error) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 3) { - mess_error = string(_("Global configuration write error")) + str_cmd_error; + mess_error = string(global_write_error) + str_cmd_error; lblWarning->set_text(mess_error); } else if (mess == 4) { - mess_error = string(_("Error saved local and global configuration")) + str_cmd_error; + mess_error = string(error_save_all) + str_cmd_error; lblWarning->set_text(mess_error); } str_cmd_error = ""; @@ -711,39 +749,43 @@ void MainWindow::info_warning_error(int mess) { obj_save.set_count_error(0); } else { - info_status_app("boxInfoMessOK"); - imgInfo->set_from_icon_name("com.ublinux.ubl-settings-diskquota.checked", Gtk::ICON_SIZE_MENU); + info_status_app(info_box_ok_css); + imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU); if (mess == 0) { - lblWarning->set_text(_("Local configuration downloaded successfully")); + lblWarning->set_text(local_load_ok); } else if (mess == 1) { - lblWarning->set_text(_("Global configuration downloaded successfully")); + lblWarning->set_text(global_load_ok); } else if (mess == 2) { - lblWarning->set_text(_("Local configuration successfully written")); + lblWarning->set_text(local_ok_written); } else if (mess == 3) { - lblWarning->set_text(_("Global configuration successfully written")); + lblWarning->set_text(global_ok_written); } else if (mess == 4) { - lblWarning->set_text(_("Successfully saved local and global configuration")); + lblWarning->set_text(successfully_save_all); } else if (mess == 5) { - lblWarning->set_text(_("Nothing to save!")); + lblWarning->set_text(nothing_save); } } } +MainWindow::~MainWindow() { + #ifdef WEBKIT_FOUND + void *handle=NULL; + handle = dlopen("libwebkit2gtk-4.0.so", RTLD_LAZY); + if (handle) { + free(one); + } + #endif +} + void help() { - string version = string(_("ubl-settings-diskquota version: ")) + version_application + "\n"; + string version = string(str_version) + version_application + "\n"; cout << version.c_str(); - string help; - help = "GTK settings quotas. for UBLinux\n\n" - "Usage: ubl-settings-diskquota [OPTIONS...]\n" - "Options:\n" - " -h, --help Show this help\n" - " -V, --version Show package version\n"; - cout << gettext(help.c_str()); + cout << str_help_h; } diff --git a/source/ubl-settings-diskquota.h b/source/ubl-settings-diskquota.h index 40c9666..c253f1a 100644 --- a/source/ubl-settings-diskquota.h +++ b/source/ubl-settings-diskquota.h @@ -9,16 +9,116 @@ #include "my_device.h" #include "system_quotas.h" #include "ubconfig_quotas.h" +#include +#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 to global and local configuration") +#define save_local _("Save local configuration") +#define save_global _("Save global configuration") +#define load_global _("Load global configuration") +#define load_local _("Load local configuration") +#define read_online _("Read online") +#define cancel _("Cancel") +#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_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 quotas. for UBLinux\n\n""Usage: ubl-settings-diskquota [OPTIONS...]\n""Options:\n"" -h, --help Show this help\n"" -V, --version Show package version\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_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_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 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_soft_limit _("Soft limit\n(size)") +#define str_tw_severe_limitation _("Severe\nlimitation\n(size)") +#define str_tw_deferring_size _("Deferring\na hard\nlimit\n(size)") +#define str_tw_soft_limit_files _("Soft limit\n(files)") +#define str_tw_severe_limitation_files _("Severe\nlimitation\n(files)") +#define str_tw_deferring_limit_files _("Deferring\na hard\nlimit\n(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" using namespace std; -extern const string path_app; -extern const string path_glade; -extern const string app_name; -extern const string path_locale; -extern const string path_css; -extern const string path_img_head_background; extern string version_application; extern int socket_ext_id_I; @@ -208,6 +308,12 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Button *btnFilterUsers; Gtk::Button *btnFilterProject; Gtk::ComboBoxText *quotegroupDeviceCombo; + Gtk::Window *wndShowWeb; + #ifdef WEBKIT_FOUND + Gtk::Window *wndWeb; + Gtk::Widget *three; + WebKitWebView *one; + #endif public: Lib_save::Save obj_save = Lib_save::Save(); @@ -226,9 +332,11 @@ class MainWindow : public Gtk::ApplicationWindow { string save_user_or_group; string sys_or_ubconfig; string hw_or_sw = ""; + bool flag_open_browser = false; public: MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); + ~MainWindow(); void settings(); void lacalization(); void add_CSS(); @@ -240,6 +348,8 @@ class MainWindow : public Gtk::ApplicationWindow { void info_status_app(string stule); void groupsFilters_show(); void init_tree_view(); + void template_open_browser(); + void open_browser(); 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);