From 8e90dd950d3724ff385a5d41bf2a249f7bdafe68 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 17 Feb 2023 12:19:09 +0600 Subject: [PATCH 01/22] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B8,=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B3=20=D1=81=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=BE=D0=B9=20ntp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- Makefile | 6 + source/CMakeLists.txt | 4 +- source/main.cc | 22 +- source/ubl-settings-datetime.cc | 142 ++++++++-- source/ubl-settings-datetime.h | 29 ++- ubl-settings-datetime.desktop | 3 +- ubl-settings-datetime.glade | 444 ++++++++++++++++++++------------ ubl-settings-datetime_ru.po | 20 +- 9 files changed, 478 insertions(+), 196 deletions(-) diff --git a/.gitignore b/.gitignore index 45460e9..8a32e88 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ compile/ source/**/ubl_settings_datetime source/**/main.o source/**/ubl_settings_datetime.o -reg/ \ No newline at end of file +reg/ +ubl-util-standard.h +ubl-util-standard.c \ No newline at end of file diff --git a/Makefile b/Makefile index 39c6a5d..7d04dae 100644 --- a/Makefile +++ b/Makefile @@ -21,6 +21,12 @@ all: init build init: @echo "Initialize ..."; \ + if [ ! -f source/ubl-util-standard.h ]; then \ + ln -s /usr/share/ubl-util-standard/ubl-util-standard.h source/ubl-util-standard.h; \ + fi; \ + if [ ! -f source/ubl-util-standard.c ]; then \ + ln -s /usr/share/ubl-util-standard/ubl-util-standard.c source/ubl-util-standard.c; \ + fi; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" depend: diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 27292b0..09e128f 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -13,9 +13,11 @@ find_package(ICU REQUIRED COMPONENTS uc dt in io) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ -O2 -pipe -fno-plt -fexceptions \ -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ - -fstack-clash-protection -fcf-protection ") + -fstack-clash-protection -fcf-protection -g") set(SOURCE_FILES + ubl-util-standard.h + ubl-util-standard.c main.cc ubl-settings-datetime.cc ubl-settings-datetime.h) diff --git a/source/main.cc b/source/main.cc index 4c57ffb..a77bd61 100644 --- a/source/main.cc +++ b/source/main.cc @@ -1,9 +1,3 @@ -#include -#include -#include -#include -#include -#include #include "ubl-settings-datetime.h" int main(int argc, char* argv[]) { string str_argv=""; @@ -22,6 +16,22 @@ int main(int argc, char* argv[]) { if ((str_argv.find("-s")!=std::string::npos) || (str_argv.find("--socket-id")!=std::string::npos)){ + for (int i=3; i -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include + #include "ubl-settings-datetime.h" using namespace std; @@ -25,6 +11,7 @@ bool flag_datetime = false; bool flag_timezone = false; bool flag_ntp = false; bool flag_update = false; +int socket_ext_id_I=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} { @@ -33,7 +20,14 @@ CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_descr socketIDArg.set_short_name('s'); 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"); + add_entry(socketIDArg, m_socketID); + add_entry(socketExtId, socket_ext_id_I); } ::Window CmdArgParser::GetSocketID() const{ return m_socketID; @@ -51,6 +45,17 @@ MainWindow::MainWindow(Glib::RefPtr const& builder) { } void MainWindow::settings(){ + Gtk::Widget *standartHead; + Gtk::Widget *plugBox; + Gtk::Window *window; + Gtk::Widget *boxButton; + builder->get_widget("standartHead",standartHead); + builder->get_widget("plugBox",plugBox); + builder->get_widget("window",window); + builder->get_widget("boxButton",boxButton); + + + ubl_get_standard_ui(standartHead,plugBox,boxButton,window,"ubl-settings-datetime.svg",_("Settings the date and time"),_("ubl-settings-datetime"),0,socket_ext_id_I); year=0, month=0, day=0; this->get_builder(); this->lacalization(); @@ -63,8 +68,6 @@ void MainWindow::settings(){ this->flag_block_gui(); this->event(); this->parse_text_date(); - - } else{ numTimeHrs->set_sensitive(false); @@ -102,6 +105,12 @@ int MainWindow::check_root(){ return 0; } void MainWindow::lacalization(){ + lblSave->set_label(_("Save")); + lblDownload->set_label(_("Download")); + btnDownloadGlobal->set_label(_("Download global")); + btnSaveLocal->set_label(_("Save global")); + btnSaveGlobl->set_label(_("Save local")); + txtDate->set_tooltip_text(_("Date of\nFormat: DD.MM.YYYY")); txtNtpServer->set_tooltip_text(_("Enter the name of the ntp-server or its ip-address.\nWhen entering multiple addresses, separate them with commas.")); lblSynchronizebChkGLob->set_text(_("Synchronize via NTP:")); @@ -230,6 +239,12 @@ void MainWindow::get_builder(){ builder->get_widget("lblNtpStop",lblNtpStop); builder->get_widget("lblNtpClose",lblNtpClose); builder->get_widget("lblBanerStopNtp",lblBanerStopNtp); + builder->get_widget("btnSaveLocal",btnSaveLocal); + builder->get_widget("btnSaveGlobl",btnSaveGlobl); + builder->get_widget("lblSave",lblSave); + builder->get_widget("btnDownload",btnDownload); + builder->get_widget("lblDownload",lblDownload); + builder->get_widget("btnDownloadGlobal", btnDownloadGlobal); //builder->get_widget("cbxSynchronizeNtp",cbxSynchronizeNtp); @@ -307,7 +322,9 @@ bool MainWindow::focus_ntp(GdkEventFocus* event){ "@","[","]","\\","{","}","|","~", " " }; bool flag_error = false; + bool flag_error_check_ntp = false; string str_ntp = txtNtpServer->get_text(); + flag_error_check_ntp = this->check_ntp(str_ntp); for (const auto &simvol: array_simvol){ if (str_ntp.find(simvol)!=std::string::npos){ flag_error=true; @@ -315,19 +332,102 @@ bool MainWindow::focus_ntp(GdkEventFocus* event){ } } - if (flag_error==false){ + if ((flag_error==false) && (flag_error_check_ntp==false)){ cmd = "/usr/bin/ubconfig set network NTPSERVERS=\"" + str_ntp + "\""; response_cmd = system(cmd.c_str()); } else{ - lblMessage->set_text(_("An invalid character is entered")); - mess_dchp->show(); - } + if (flag_error==true){ + lblMessage->set_text(_("An invalid character is entered")); + mess_dchp->show(); + } + else if (flag_error_check_ntp==true){ + lblMessage->set_text(_("Error in the ntp name")); + mess_dchp->show(); + } } + + } + return true; } +vector MainWindow::find_all(string &str_ntp, string substr){ + size_t index = 0; + vector sub_index; + while ((index = str_ntp.find(substr, index)) != std::string::npos) { + index += substr.length(); + sub_index.push_back(index); + } + return sub_index; +} + +bool MainWindow::check_ntp(string &str_ntp){ + vector sub_index = this->find_all(str_ntp,"."); + if (sub_index.size()==1){ + int index_point = sub_index[0]; + int len_str_ntp = str_ntp.length(); + if (((len_str_ntp-index_point)>=2) && (index_point>2)){ + return false; + } + else{ + return true; + } + } + else if (sub_index.size()==3){ + int index_str_ntp = sub_index[0]; + int index_str_ntp_1 = sub_index[1]; + int index_str_ntp_2 = sub_index[2]; + if (((index_str_ntp>0) && (index_str_ntp<=4)) && + (index_str_ntp_1>(index_str_ntp+1)) && + ((index_str_ntp_1-index_str_ntp)<=4) && + (index_str_ntp_2>(index_str_ntp_1+1)) && + ((index_str_ntp_2-index_str_ntp_1)<=4) && + ((str_ntp.length()-index_str_ntp_2)<=3)) { + string simvol; + bool flag_error=false; + char char_ntp; + for (size_t i = 0; i < str_ntp.size(); i++){ + flag_error=false; + cout << str_ntp[i] << endl; + char_ntp = char(str_ntp[i]); + cout << char_ntp << endl; + for (int index=0;index<11;index++){ + + if (index==10){ + simvol="."; + } + else{ + simvol = to_string(index); + } + cout << (simvol==to_string(char_ntp)) << endl; + cout << simvol << " " << to_string(char_ntp) << endl; + if (simvol==to_string(char_ntp)){ + flag_error=false; + + break; + } + else{ + flag_error=true; + } + } + if (flag_error==true){ + return true; + } + } + } + else{ + return true; + } + } + else{ + return true; + } + return false; + +} + struct MainWindow::Result MainWindow::wrapper_call(string cmd){ struct Result obj_result; string response=this->call(cmd); diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index c1572ab..35ec850 100644 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -1,14 +1,21 @@ #ifndef UBL_SETTINGS_DATETIME_H #define UBL_SETTINGS_DATETIME_H #include -#include -#include -#include -#include -#include #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ubl-util-standard.c" using namespace std; @@ -22,7 +29,7 @@ extern bool flag_datetime; extern bool flag_timezone; extern bool flag_ntp; extern bool flag_update; - +extern int socket_ext_id_I; class CmdArgParser : public Glib::OptionGroup { public: @@ -70,6 +77,8 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblSynchronizeBtn; Gtk::Label *lblDateTimeSettingGlob; Gtk::Label *lblTimeBios; + Gtk::Label *lblSave; + Gtk::Label *lblDownload; Gtk::Label *lblBanerStopNtp; Gtk::Button *btnHardwareTime; Gtk::CheckButton *cbxSynchronizeNtp; @@ -80,6 +89,11 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblNtpClose; Gtk::Entry *txtNtpServer; Gtk::Entry *txtDate; + Gtk::Widget *btnSave; + Gtk::Widget *btnDownload; + Gtk::MenuItem *btnSaveLocal; + Gtk::MenuItem *btnSaveGlobl; + Gtk::MenuItem *btnDownloadGlobal; std::map > time_reg_map; std::map > time_reg_map_local; unsigned int year=0; @@ -101,6 +115,7 @@ class MainWindow : public Gtk::ApplicationWindow { }; vector array_region_local; vector array_region; + public: MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); @@ -145,6 +160,8 @@ class MainWindow : public Gtk::ApplicationWindow { string str_remove(std::string& source, const std::string to_remove); vector split(const std::string &s, char delim); struct Result wrapper_call(string cmd); + bool check_ntp(string &str_ntp); + vector find_all(string &str_ntp, string substr); }; diff --git a/ubl-settings-datetime.desktop b/ubl-settings-datetime.desktop index 1037bf7..521b6fe 100644 --- a/ubl-settings-datetime.desktop +++ b/ubl-settings-datetime.desktop @@ -7,8 +7,9 @@ GenericName[ru]=Настройка даты и времени Comment=Date time settings Comment[ru]=Приложение для настройки даты и времени Type=Application -Exec=pkexec ubl-settings-datetime +Exec=pkexec ubl-settings-datetime --lock-datetime Icon=ubl-settings-datetime Terminal=false X-XfcePluggable=true +X-UBLPluggable=true Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;X-UBL-SettingsManager;X-UBL-SystemSettings; \ No newline at end of file diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index ccf56b9..da31a0f 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -2,183 +2,47 @@ - + + True False - Внимание! - dialog - + True False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 6 - 6 - Enter DHCP ! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - + Save Local + True + + + + + True + False + Save Global + True - + + True False - Внимание! - center - dialog - + True False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 5 - 5 - 5 - 5 - 6 - 6 - Enter DHCP ! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - + Download Global + True False - Настройки даты и времени True False vertical - + True False vertical @@ -277,6 +141,18 @@ 0 + + + False + True + 0 + + + + + True + False + vertical True @@ -460,7 +336,7 @@ Format: DD.MM.YYYY True True 5 - 8 + 5 5 5 6 @@ -538,7 +414,7 @@ Format: DD.MM.YYYY True True 5 - 8 + 10 5 10 6 @@ -938,7 +814,7 @@ Format: DD.MM.YYYY True False - Часовой пояс + Time Zone @@ -975,7 +851,90 @@ Format: DD.MM.YYYY False True - 0 + 1 + + + + + + + True + False + True + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + ubl-settings-datetime + + + + + True + False + + + True + True + False + True + menu1 + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Save + + + + + False + True + 1 + + + + + True + True + False + True + menu2 + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download + + + + + False + True + 2 + + + + + 1 @@ -1004,6 +963,173 @@ Format: DD.MM.YYYY + + False + Внимание! + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 6 + 6 + Enter DHCP ! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + + + False + Внимание! + center + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 5 + 5 + 5 + 5 + 6 + 6 + Enter DHCP ! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + False diff --git a/ubl-settings-datetime_ru.po b/ubl-settings-datetime_ru.po index e6017e0..49531f0 100644 --- a/ubl-settings-datetime_ru.po +++ b/ubl-settings-datetime_ru.po @@ -22,6 +22,9 @@ msgstr "Введён недопустимый символ" msgid "Longyearbyen" msgstr "Лонгйир" +msgid "Error in the ntp name" +msgstr "Ошибка в имени ntp" + msgid "Stop the synchronization service" msgstr "Остановить сервис синхронизации" @@ -1633,9 +1636,24 @@ msgstr " --lock-update Отключить сохранение измене msgid "Options:\n" msgstr "Опции:\n" +msgid "Save" +msgstr "Сохранить" + +msgid "Save global" +msgstr "Сохранить глобально" + +msgid "Save local" +msgstr "Сохранить локально" + +msgid "Download global" +msgstr "Загрузить глобально" + msgid "Disabled" msgstr "Отключено" +msgid "Download" +msgstr "Загрузить" + msgid "Argument not recognized\n" -msgstr "Не распознанный аргумент\n" +msgstr "Нepacпoзнaнный аргумент\n" -- 2.35.1 From c0680032f9e1317756f7cebef855ef2cb2f06571 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 17 Feb 2023 15:23:48 +0600 Subject: [PATCH 02/22] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=B8=20=D0=BD=D0=BE=D0=B2=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=81?= =?UTF-8?q?=D1=80=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-datetime.cc | 285 ++++++++++++++------------------ source/ubl-settings-datetime.h | 19 ++- ubl-settings-datetime.glade | 140 +--------------- ubl-settings-datetime_ru.po | 3 + 4 files changed, 150 insertions(+), 297 deletions(-) diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index 12492e6..aea15cc 100644 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -68,8 +68,13 @@ void MainWindow::settings(){ this->flag_block_gui(); this->event(); this->parse_text_date(); + btnSaveGlobl->set_sensitive(false); + this->download_local_cfg(); } else{ + btnSaveLocal->set_sensitive(false); + btnSaveGlobl->set_sensitive(false); + btnDownload->set_sensitive(false); numTimeHrs->set_sensitive(false); numTimeMin->set_sensitive(false); lblTime->set_sensitive(false); @@ -87,8 +92,6 @@ void MainWindow::settings(){ lblSynchronizebChkGLob->set_sensitive(false); cbDhcp->set_sensitive(false); txtNtpServer->set_sensitive(false); - lblTimeZoneGlob->set_sensitive(false); - lblRegGlob->set_sensitive(false); lblZone1Glob->set_sensitive(false); lblDateTimeSetting->set_sensitive(false); this->event(); @@ -104,13 +107,14 @@ int MainWindow::check_root(){ } return 0; } + void MainWindow::lacalization(){ lblSave->set_label(_("Save")); lblDownload->set_label(_("Download")); btnDownloadGlobal->set_label(_("Download global")); - btnSaveLocal->set_label(_("Save global")); - btnSaveGlobl->set_label(_("Save local")); - + btnDownloadlocal->set_label(_("Download local")); + btnSaveLocal->set_label(_("Save local")); + btnSaveGlobl->set_label(_("Save global")); txtDate->set_tooltip_text(_("Date of\nFormat: DD.MM.YYYY")); txtNtpServer->set_tooltip_text(_("Enter the name of the ntp-server or its ip-address.\nWhen entering multiple addresses, separate them with commas.")); lblSynchronizebChkGLob->set_text(_("Synchronize via NTP:")); @@ -125,9 +129,6 @@ void MainWindow::lacalization(){ lblTimeZone->set_text(_("Time zone")); lblReg->set_text(_("Region")); lblZone->set_text(_("Zone")); - lblRegGlob->set_text(_("Region")); - lblZone1Glob->set_text(_("Zone")); - lblTimeZoneGlob->set_text(_("Time zone")); lblSynchronizeBtn->set_text(_("Sync by")); lblDateTimeSettingGlob->set_text(_("Global customization")); this->set_title(_("ubl-settings-datetime")); @@ -159,8 +160,6 @@ void MainWindow::flag_block_gui(){ if (flag_timezone==true){ cbRegion->set_sensitive(false); cbZone->set_sensitive(false); - cbRegionGlob->set_sensitive(false); - cbZoneGlob->set_sensitive(false); //btnChooseDate->set_sensitive(false); cbDhcp->set_sensitive(false); } @@ -170,12 +169,6 @@ void MainWindow::flag_block_gui(){ } if (flag_update==true){ lblDateTimeSettingGlob->set_sensitive(false); - //lblSynchronizebChkGLob->set_sensitive(false); - lblTimeZoneGlob->set_sensitive(false); - lblRegGlob->set_sensitive(false); - cbRegionGlob->set_sensitive(false); - lblZone1Glob->set_sensitive(false); - cbZoneGlob->set_sensitive(false); txtNtpServer->set_sensitive(false); cbDhcp->set_sensitive(false); } @@ -207,9 +200,7 @@ void MainWindow::get_builder(){ builder->get_widget("cbDhcp", cbDhcp); builder->get_widget("txtDate", txtDate); builder->get_widget("cbRegion", cbRegion); - builder->get_widget("cbRegionGlob", cbRegionGlob); builder->get_widget("cbZone", cbZone); - builder->get_widget("cbZoneGlob", cbZoneGlob); builder->get_widget("txtNtpServer", txtNtpServer); builder->get_widget("cldrDate", cldrDate); builder->get_widget("mess_dchp", mess_dchp); @@ -221,9 +212,6 @@ void MainWindow::get_builder(){ builder->get_widget("lblTimeZone",lblTimeZone); builder->get_widget("lblReg",lblReg); builder->get_widget("lblZone",lblZone); - builder->get_widget("lblRegGlob",lblRegGlob); - builder->get_widget("lblZone1Glob",lblZone1Glob); - builder->get_widget("lblTimeZoneGlob",lblTimeZoneGlob); //builder->get_widget("lblSynchronizebChk",_lblSynchronizebChk); builder->get_widget("lblSynchronizebChkGLob",lblSynchronizebChkGLob); builder->get_widget("lblSynchronizeBtn",lblSynchronizeBtn); @@ -242,9 +230,11 @@ void MainWindow::get_builder(){ builder->get_widget("btnSaveLocal",btnSaveLocal); builder->get_widget("btnSaveGlobl",btnSaveGlobl); builder->get_widget("lblSave",lblSave); + builder->get_widget("btnSave",btnSave); builder->get_widget("btnDownload",btnDownload); builder->get_widget("lblDownload",lblDownload); builder->get_widget("btnDownloadGlobal", btnDownloadGlobal); + builder->get_widget("btnDownloadlocal", btnDownloadlocal); //builder->get_widget("cbxSynchronizeNtp",cbxSynchronizeNtp); @@ -269,15 +259,40 @@ void MainWindow::event(){ btnChooseDate->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::calendar_show)); cbDhcp->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::event_entry_cbDhcp)); cbRegion->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::append_zone)); - cbRegionGlob->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::append_zone_glob)); - cbZone->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::enter_zone)); - cbZoneGlob->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::enter_zone_glob)); - txtNtpServer->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_ntp)); cldrDate->signal_day_selected_double_click().connect(sigc::mem_fun(*this, &MainWindow::get_calendar)); mess_sudo->signal_delete_event().connect(sigc::mem_fun(*this, &MainWindow::gui_exit_2)); btnNtpWinClose->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::wind_close_ntp)); btnNtpStop->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::stop_ntp)); + btnDownloadGlobal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_globl_cfg)); + btnSaveLocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::save_local_cfg)); + btnSaveGlobl->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::save_global_cfg)); + btnDownloadlocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); +} + +void MainWindow::download_globl_cfg(){ + this->entry_dhcp_mess(); + string cmd = "/usr/bin/ubconfig --default --source global get clock ZONE"; + this->fill_in_reg_zone(cmd); + btnSaveGlobl->set_sensitive(true); +} + +void MainWindow::download_local_cfg(){ + string cmd = "/usr/bin/ubconfig --default --source system get clock ZONE"; + this->fill_in_reg_zone(cmd); } + +void MainWindow::save_local_cfg(){ + string cmd = "ubconfig --target system set clock ZONE="; + this->enter_zone(cmd); +} + +void MainWindow::save_global_cfg(){ + string cmd = "/usr/bin/ubconfig --target global set clock ZONE="; + this->enter_zone(cmd); + this->save_Dhcp(); +} + + void MainWindow::wind_close_ntp(){ windowsNnpClose->hide(); } @@ -309,8 +324,7 @@ void MainWindow::gui_mess_close(){ mess_dchp->hide(); } -bool MainWindow::focus_ntp(GdkEventFocus* event){ - if (event!=NULL){} +bool MainWindow::focus_ntp(){ if (txtNtpServer->get_text()=="" || txtNtpServer->get_text()==" "){ lblMessage->set_text(_("Enter DHCP!")); mess_dchp->show(); @@ -455,76 +469,88 @@ struct MainWindow::Result MainWindow::wrapper_call(string cmd){ } return obj_result; } - void MainWindow::event_entry_cbDhcp(){ - Glib::ustring str_dhcp = cbDhcp->get_active_text(); + string str_dhcp = cbDhcp->get_active_text(); + string cmd = ""; int activ_index = cbDhcp->get_active_row_number(); - if (str_dhcp.length()!=0){ - if (activ_index==0){ - btnUpdateDateTime->set_sensitive(false); - string cmd = "/usr/bin/ubconfig set network NTPSERVERS=default"; - response_cmd=system(cmd.c_str()); - txtNtpServer->set_sensitive(false); - cbDhcp->set_active(activ_index); - cmd = "/usr/bin/ubconfig --source=default get NTPSERVERS_DEFAULT"; - struct Result obj_result = this->wrapper_call(cmd); - if (obj_result.error==0){ - txtNtpServer->set_text(obj_result.response); - } - else{ - //string error = ""; - //error = string(_("ERROR")) + "\n" + obj_result.response; - //lblMessage->set_text(error); - //mess_dchp->show(); - } + if (str_dhcp.length()==0){ + cbDhcp->set_active(0); + } + else if (activ_index==0){ + txtNtpServer->set_text(""); + btnUpdateDateTime->set_sensitive(false); + txtNtpServer->set_sensitive(false); + /* + cmd = "/usr/bin/ubconfig --source=default get NTPSERVERS_DEFAULT"; + struct Result obj_result = this->wrapper_call(cmd); + if (obj_result.error==0){ + txtNtpServer->set_text(obj_result.response); } - else if (activ_index==1){ - btnUpdateDateTime->set_sensitive(false); - string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; - response_cmd=system(cmd.c_str()); - txtNtpServer->set_sensitive(false); + else{ + //string error = ""; + //error = string(_("ERROR")) + "\n" + obj_result.response; + //lblMessage->set_text(error); + //mess_dchp->show(); + }*/ + + } + else if (activ_index==1){ + btnUpdateDateTime->set_sensitive(false); + txtNtpServer->set_sensitive(false); + txtNtpServer->set_text(""); + } + else if (activ_index==2){ + txtNtpServer->set_sensitive(true); + /* + string cmd = "/usr/bin/ubconfig get network NTPSERVERS"; + struct Result obj_result = this->wrapper_call(cmd); + if (obj_result.error==0){ + if (obj_result.response.find("default")==std::string::npos){ + if (obj_result.response.find("dhcp")==std::string::npos){ + txtNtpServer->set_text(obj_result.response); + } cbDhcp->set_active(activ_index); - txtNtpServer->set_text(""); - } - else if (activ_index==2){ - btnUpdateDateTime->set_sensitive(false); - txtNtpServer->set_sensitive(true); - if (txtNtpServer->get_text().find("default")!=std::string::npos){ - txtNtpServer->set_text(""); - } - string cmd = "/usr/bin/ubconfig get network NTPSERVERS"; - struct Result obj_result = this->wrapper_call(cmd); - if (obj_result.error==0){ - if (obj_result.response.find("default")==std::string::npos){ - if (obj_result.response.find("dhcp")==std::string::npos){ - txtNtpServer->set_text(obj_result.response); - } - cbDhcp->set_active(activ_index); - } } - else if (obj_result.error==3){} - else{ - string error = ""; - error = string(_("ERROR")) + "\n" + obj_result.response; - lblMessage->set_text(error); - mess_dchp->show(); - } } - else if (activ_index==3){ - string cmd = "/usr/bin/ubconfig remove network NTPSERVERS"; - response_cmd=system(cmd.c_str()); - txtNtpServer->set_text(""); - txtNtpServer->set_sensitive(false); - btnUpdateDateTime->set_sensitive(true); - this->stop_ntp(); - } + else if (obj_result.error==3){} + else{ + string error = ""; + error = string(_("ERROR")) + "\n" + obj_result.response; + lblMessage->set_text(error); + mess_dchp->show(); } - - else{ + */ + } + else if (activ_index==3){ + txtNtpServer->set_text(""); + txtNtpServer->set_sensitive(false); + btnUpdateDateTime->set_sensitive(true); + this->stop_ntp(); + } +} + +void MainWindow::save_Dhcp(){ + int activ_index = cbDhcp->get_active_row_number(); + string str_dhcp = cbDhcp->get_active_text(); + string cmd = ""; + if (str_dhcp.length()==0){ + + } + else if (activ_index==0){ + string cmd = "/usr/bin/ubconfig set network NTPSERVERS=default"; + response_cmd=system(cmd.c_str()); + } + else if (activ_index==1){ string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; response_cmd=system(cmd.c_str()); - cbDhcp->set_active(0); } + else if (activ_index==2){ + this->focus_ntp(); + } + else if (activ_index==3){ + string cmd = "/usr/bin/ubconfig remove network NTPSERVERS"; + response_cmd=system(cmd.c_str()); + } } string MainWindow::str_remove(std::string& source, const std::string to_remove){ @@ -575,7 +601,7 @@ void MainWindow::calendar_show(){ popCalendar->show(); } -void MainWindow::enry_dhcp_mess(){ +void MainWindow::entry_dhcp_mess(){ string cmd = "/usr/bin/ubconfig get network NTPSERVERS"; struct Result obj_result = this->wrapper_call(cmd); if (obj_result.error==0){ @@ -629,27 +655,8 @@ void MainWindow::enry_dhcp_mess(){ } } -void MainWindow::get_config(){ - this->read_file(); - this->update_hour_minute(); - this->update_calendar(); - this->enry_dhcp_mess(); - string cmd = "/usr/bin/ubconfig --default --source global get clock ZONE"; - struct Result obj_result = this->wrapper_call(cmd); - if (obj_result.error==0){ - auto arr_reg_zone_glob = this->split_region_zone(obj_result.response); - if (arr_reg_zone_glob[0].length()!=0){ - this->append_region_zone(arr_reg_zone_glob[0],arr_reg_zone_glob[1],cbRegionGlob,cbZoneGlob); - } - else{ - this->append_region_zone("","",cbRegionGlob,cbZoneGlob); - } +void MainWindow::fill_in_reg_zone(string &cmd){ - } - else { - this->append_region_zone("","",cbRegionGlob,cbZoneGlob); - } - cmd = "/usr/bin/ubconfig --default --source system get clock ZONE"; struct Result obj_result_1 = this->wrapper_call(cmd); if (obj_result_1.error==0){ auto arr_reg_zone = this->split_region_zone(obj_result_1.response); @@ -663,6 +670,16 @@ void MainWindow::get_config(){ else { this->append_region_zone("","",cbRegion,cbZone); } +} + + + +void MainWindow::get_config(){ + this->read_file(); + this->update_hour_minute(); + this->update_calendar(); + this->entry_dhcp_mess(); + } @@ -684,7 +701,7 @@ array MainWindow::split_region_zone(string read_reg_zon_cfg){ } -void MainWindow::enter_zone(){ +void MainWindow::enter_zone(string &cmd){ int activ_index_reg = cbRegion->get_active_row_number(); string reg_text=array_region[activ_index_reg]; int activ_index = cbZone->get_active_row_number(); @@ -700,8 +717,7 @@ void MainWindow::enter_zone(){ if (!(zone_text.empty())){ str_zone=zone_text; str_region=reg_text; - string cmd = ""; - cmd = " ubconfig --target system set clock ZONE=" + str_region + "/" + str_zone; + cmd = cmd + str_region + "/" + str_zone; response_cmd=system(cmd.c_str()); } else{ @@ -724,36 +740,6 @@ void MainWindow::parse_text_date(){ } } -void MainWindow::enter_zone_glob(){ - int activ_index_reg = cbRegionGlob->get_active_row_number(); - string reg_text=array_region[activ_index_reg]; - int activ_index = cbZoneGlob->get_active_row_number(); - string zone_text=""; - if(!(reg_text.empty())){ - int index=0; - for (const auto &zone :time_reg_map.at(reg_text)){ - if (index==activ_index){ - zone_text=zone; - } - index+=1; - } - if (!(zone_text.empty())){ - //str_zoneGlob = zone_text.substr(zone_text.find(") ")+2,zone_text.length()); - string cmd = "/usr/bin/ubconfig --target global set clock ZONE=" +reg_text +"/" + zone_text; - response_cmd=system(cmd.c_str()); - } - else{ - str_zoneGlob=""; - str_region_glob=""; - } - } - else{ - str_zoneGlob=""; - str_region_glob=""; - } -} - - void MainWindow::append_region_zone(string region, string zone, Gtk::ComboBoxText *tmpCbReg, Gtk::ComboBoxText *tmpCbZone){ str_region=region; str_region_glob=region; @@ -789,6 +775,7 @@ void MainWindow::append_region_zone(string region, string zone, Gtk::ComboBoxTex tmpCbReg->set_active_text(reg); } } + tmpCbZone->remove_all(); index = 0; string zone_mixing = ""; string path_reg_zone = ""; @@ -852,23 +839,7 @@ void MainWindow::append_zone(){ cbZone->set_active(0); } -void MainWindow::append_zone_glob(){ - cbZoneGlob->remove_all(); - int index = cbRegionGlob->get_active_row_number(); - string str_region_glob = array_region[index]; - string zone_mixing=""; - string path_dir=""; - - if(str_region_glob.length()!=0){ - for (const auto &_str_zone : time_reg_map_local.at(str_region_glob)){ - cbZoneGlob->append(Glib::ustring(_str_zone)); - } - } - cbZoneGlob->set_active(0); -} - void MainWindow::update_time_date(){ - //this->enter_zone(); string cmd = ""; if ((year!=0) && (month !=0) && (day !=0)){ string str_month = ""; diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index 35ec850..0e2640b 100644 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -53,9 +53,7 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::CheckButton *cbxSynchronizeNtpGlob; Gtk::Box *boxColor; Gtk::ComboBoxText *cbRegion; - Gtk::ComboBoxText *cbRegionGlob; Gtk::ComboBoxText *cbZone; - Gtk::ComboBoxText *cbZoneGlob; Gtk::Window *mess_dchp; Gtk::Window *mess_sudo; Gtk::Popover *popCalendar; @@ -69,9 +67,7 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblTimeZone; Gtk::Label *lblReg; Gtk::Label *lblZone; - Gtk::Label *lblRegGlob; Gtk::Label *lblZone1Glob; - Gtk::Label *lblTimeZoneGlob; Gtk::Label *lblSynchronizebChk; Gtk::Label *lblSynchronizebChkGLob; Gtk::Label *lblSynchronizeBtn; @@ -93,7 +89,9 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Widget *btnDownload; Gtk::MenuItem *btnSaveLocal; Gtk::MenuItem *btnSaveGlobl; + Gtk::MenuItem *btnDownloadGlobal; + Gtk::MenuItem *btnDownloadlocal; std::map > time_reg_map; std::map > time_reg_map_local; unsigned int year=0; @@ -120,6 +118,12 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); virtual ~MainWindow() = default; + void fill_in_reg_zone(string &cmd); + void download_globl_cfg(); + void save_local_cfg(); + void save_global_cfg(); + void save_Dhcp(); + void download_local_cfg(); void post_entry_data(); void lacalization(); void settings(); @@ -128,14 +132,13 @@ class MainWindow : public Gtk::ApplicationWindow { void get_builder(); void event(); void gui_mess_close(); - bool focus_ntp(GdkEventFocus* event); + bool focus_ntp(); void event_entry_cbDhcp(); void get_calendar(); void calendar_show(); - void enry_dhcp_mess(); + void entry_dhcp_mess(); void get_config(); - void enter_zone(); - void enter_zone_glob(); + void enter_zone(string &cmd); void set_ntp_toggle(); void append_region_zone(string region, string zone, Gtk::ComboBoxText *tmpCbReg, Gtk::ComboBoxText *tmpCbZone); string call(string cmd); diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index da31a0f..6ef784d 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -33,6 +33,14 @@ True + + + True + False + Download Local + True + + False @@ -692,138 +700,6 @@ Format: DD.MM.YYYY 1 - - - True - False - 5 - 10 - 5 - 10 - 6 - 0.019999999552965164 - in - - - True - False - - - True - False - - - False - True - 1 - - - - - True - False - 8 - 5 - 8 - 5 - 6 - 13 - Region - 0 - - - False - True - 2 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 13 - - - False - True - 3 - - - - - True - False - 10 - 5 - 10 - 5 - 5 - 13 - Area - 0 - - - False - True - 4 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 13 - - - False - True - 5 - - - - - 5 - True - False - 15 - 5 - 15 - 5 - 5 - 5 - - - False - True - 6 - - - - - - - True - False - Time Zone - - - - - False - True - 2 - - diff --git a/ubl-settings-datetime_ru.po b/ubl-settings-datetime_ru.po index 49531f0..f28ed5e 100644 --- a/ubl-settings-datetime_ru.po +++ b/ubl-settings-datetime_ru.po @@ -1648,6 +1648,9 @@ msgstr "Сохранить локально" msgid "Download global" msgstr "Загрузить глобально" +msgid "Download local" +msgstr "Загрузить локально" + msgid "Disabled" msgstr "Отключено" -- 2.35.1 From e6b1c664ff78ca1a373407e7633f8ab7a2551067 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 17 Feb 2023 16:04:57 +0600 Subject: [PATCH 03/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20=D1=81=20=D0=B2=D0=B2?= =?UTF-8?q?=D0=BE=D0=B4=D0=BE=D0=BC=20ip=20=D0=B0=D0=B4=D1=80=D0=B5=D1=81?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-datetime.cc | 20 +-- source/ubl-settings-datetime.h | 1 - ubl-settings-datetime.glade | 299 +++++++++++++++----------------- ubl-settings-datetime_ru.po | 4 +- 4 files changed, 150 insertions(+), 174 deletions(-) diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index aea15cc..9ad55c1 100644 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -88,7 +88,6 @@ void MainWindow::settings(){ lblReg->set_sensitive(false); lblZone->set_sensitive(false); lblTimeZone->set_sensitive(false); - lblDateTimeSettingGlob->set_sensitive(false); lblSynchronizebChkGLob->set_sensitive(false); cbDhcp->set_sensitive(false); txtNtpServer->set_sensitive(false); @@ -122,7 +121,7 @@ void MainWindow::lacalization(){ cbDhcp->append(_("DHCP")); cbDhcp->append(_("Manual")); cbDhcp->append(_("Disabled")); - lblDateTimeSetting->set_text(_("Local Configuration")); + lblDateTimeSetting->set_text(_("Current date and time")); lblHead->set_text(_("Settings the date and time")); lblTime->set_text(_("Time")); lblData->set_text(_("Date")); @@ -130,7 +129,6 @@ void MainWindow::lacalization(){ lblReg->set_text(_("Region")); lblZone->set_text(_("Zone")); lblSynchronizeBtn->set_text(_("Sync by")); - lblDateTimeSettingGlob->set_text(_("Global customization")); this->set_title(_("ubl-settings-datetime")); windowsNnpClose->set_title(_("Warning!")); mess_sudo->set_title(_("Warning!")); @@ -168,7 +166,6 @@ void MainWindow::flag_block_gui(){ txtNtpServer->set_sensitive(false); } if (flag_update==true){ - lblDateTimeSettingGlob->set_sensitive(false); txtNtpServer->set_sensitive(false); cbDhcp->set_sensitive(false); } @@ -215,7 +212,6 @@ void MainWindow::get_builder(){ //builder->get_widget("lblSynchronizebChk",_lblSynchronizebChk); builder->get_widget("lblSynchronizebChkGLob",lblSynchronizebChkGLob); builder->get_widget("lblSynchronizeBtn",lblSynchronizeBtn); - builder->get_widget("lblDateTimeSettingGlob",lblDateTimeSettingGlob); builder->get_widget("lblTimeBios",lblTimeBios); builder->get_widget("btnHardwareTime",btnHardwareTime); builder->get_widget("mess_sudo",mess_sudo); @@ -279,6 +275,8 @@ void MainWindow::download_globl_cfg(){ void MainWindow::download_local_cfg(){ string cmd = "/usr/bin/ubconfig --default --source system get clock ZONE"; this->fill_in_reg_zone(cmd); + this->update_hour_minute(); + this->update_calendar(); } void MainWindow::save_local_cfg(){ @@ -401,11 +399,10 @@ bool MainWindow::check_ntp(string &str_ntp){ ((str_ntp.length()-index_str_ntp_2)<=3)) { string simvol; bool flag_error=false; - char char_ntp; + char char_ntp[1]={0}; for (size_t i = 0; i < str_ntp.size(); i++){ flag_error=false; - cout << str_ntp[i] << endl; - char_ntp = char(str_ntp[i]); + char_ntp[0] = str_ntp[i]; cout << char_ntp << endl; for (int index=0;index<11;index++){ @@ -415,9 +412,9 @@ bool MainWindow::check_ntp(string &str_ntp){ else{ simvol = to_string(index); } - cout << (simvol==to_string(char_ntp)) << endl; - cout << simvol << " " << to_string(char_ntp) << endl; - if (simvol==to_string(char_ntp)){ + cout << (simvol==char_ntp) << endl; + cout << simvol << " " << char_ntp << endl; + if (simvol==char_ntp){ flag_error=false; break; @@ -678,7 +675,6 @@ void MainWindow::get_config(){ this->read_file(); this->update_hour_minute(); this->update_calendar(); - this->entry_dhcp_mess(); } diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index 0e2640b..e2b6b1c 100644 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -71,7 +71,6 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblSynchronizebChk; Gtk::Label *lblSynchronizebChkGLob; Gtk::Label *lblSynchronizeBtn; - Gtk::Label *lblDateTimeSettingGlob; Gtk::Label *lblTimeBios; Gtk::Label *lblSave; Gtk::Label *lblDownload; diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index 6ef784d..dbad9a0 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -450,150 +450,13 @@ Format: DD.MM.YYYY 3 - - - True - False - 5 - 10 - 5 - 10 - 6 - 0.019999999552965164 - in - - - True - False - - - True - False - - - False - True - 1 - - - - - True - False - 8 - 5 - 8 - 5 - 6 - 13 - Region - 0 - - - False - True - 2 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 13 - - - False - True - 3 - - - - - True - False - 10 - 5 - 10 - 5 - 6 - 13 - Area - 0 - - - False - True - 4 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 13 - - - False - True - 5 - - - - - 5 - True - False - - - False - True - 6 - - - - - True - False - - - False - True - 7 - - - - - - - True - False - Time Zone - - - - - False - True - 5 - - True False - Local Configuration + Current date and time @@ -633,25 +496,6 @@ Format: DD.MM.YYYY 5 5 vertical - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - Synchronize via NTP: - - - False - True - 0 - - True @@ -703,10 +547,10 @@ Format: DD.MM.YYYY - + True False - Global customization + Synchronize via NTP: @@ -723,6 +567,143 @@ Format: DD.MM.YYYY 2 + + + True + False + 5 + 10 + 5 + 10 + 6 + 0.019999999552965164 + in + + + True + False + + + True + False + + + False + True + 1 + + + + + True + False + 8 + 5 + 8 + 5 + 6 + 13 + Region + 0 + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 13 + + + False + True + 3 + + + + + True + False + 10 + 5 + 10 + 5 + 6 + 13 + Area + 0 + + + False + True + 4 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 13 + + + False + True + 5 + + + + + 5 + True + False + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + + + + + + True + False + Time Zone + + + + + False + True + 3 + + False diff --git a/ubl-settings-datetime_ru.po b/ubl-settings-datetime_ru.po index f28ed5e..323798f 100644 --- a/ubl-settings-datetime_ru.po +++ b/ubl-settings-datetime_ru.po @@ -52,8 +52,8 @@ msgstr "OK" msgid "Settings the date and time" msgstr "Настройки даты и времени" -msgid "Local Configuration" -msgstr "Локальная настройка" +msgid "Current date and time" +msgstr "Текущие дата и время" msgid "Global customization" msgstr "Глобальная настройка" -- 2.35.1 From b694b789984e6f89eee0bde8d3bce6b39f69822f Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 17 Feb 2023 18:07:01 +0600 Subject: [PATCH 04/22] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D1=91=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD,=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BE?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-datetime.cc | 24 ++++- source/ubl-settings-datetime.h | 7 +- ubl-settings-datetime.desktop | 2 +- ubl-settings-datetime.glade | 164 +++++++++++++++++++++++++++----- 4 files changed, 166 insertions(+), 31 deletions(-) diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index 9ad55c1..264f9a4 100644 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -12,6 +12,7 @@ bool flag_timezone = false; bool flag_ntp = false; bool flag_update = false; int socket_ext_id_I=0; +int socket_trd_id_I=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} { @@ -26,8 +27,14 @@ CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_descr 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; @@ -49,13 +56,15 @@ void MainWindow::settings(){ Gtk::Widget *plugBox; Gtk::Window *window; Gtk::Widget *boxButton; + Gtk::Widget *btnSave; builder->get_widget("standartHead",standartHead); builder->get_widget("plugBox",plugBox); builder->get_widget("window",window); builder->get_widget("boxButton",boxButton); + builder->get_widget("btnSave",btnSave); - ubl_get_standard_ui(standartHead,plugBox,boxButton,window,"ubl-settings-datetime.svg",_("Settings the date and time"),_("ubl-settings-datetime"),0,socket_ext_id_I); + ubl_make_plugs(boxButton,btnSave, socket_ext_id_I, socket_trd_id_I); year=0, month=0, day=0; this->get_builder(); this->lacalization(); @@ -226,11 +235,13 @@ void MainWindow::get_builder(){ builder->get_widget("btnSaveLocal",btnSaveLocal); builder->get_widget("btnSaveGlobl",btnSaveGlobl); builder->get_widget("lblSave",lblSave); - builder->get_widget("btnSave",btnSave); + builder->get_widget("btnDownload",btnDownload); builder->get_widget("lblDownload",lblDownload); builder->get_widget("btnDownloadGlobal", btnDownloadGlobal); builder->get_widget("btnDownloadlocal", btnDownloadlocal); + builder->get_widget("btnSettings", btnSettings); + builder->get_widget("aboutWindows", aboutWindows); //builder->get_widget("cbxSynchronizeNtp",cbxSynchronizeNtp); @@ -263,8 +274,14 @@ void MainWindow::event(){ btnSaveLocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::save_local_cfg)); btnSaveGlobl->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::save_global_cfg)); btnDownloadlocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); + btnSettings->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::about_Dialog_show)); +} + +void MainWindow::about_Dialog_show(){ + aboutWindows->show(); } + void MainWindow::download_globl_cfg(){ this->entry_dhcp_mess(); string cmd = "/usr/bin/ubconfig --default --source global get clock ZONE"; @@ -675,8 +692,7 @@ void MainWindow::get_config(){ this->read_file(); this->update_hour_minute(); this->update_calendar(); - - + this->entry_dhcp_mess(); } array MainWindow::split_region_zone(string read_reg_zon_cfg){ diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index e2b6b1c..f6af689 100644 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -30,6 +30,7 @@ extern bool flag_timezone; extern bool flag_ntp; extern bool flag_update; extern int socket_ext_id_I; +extern int socket_trd_id_I; class CmdArgParser : public Glib::OptionGroup { public: @@ -84,13 +85,16 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblNtpClose; Gtk::Entry *txtNtpServer; Gtk::Entry *txtDate; - Gtk::Widget *btnSave; Gtk::Widget *btnDownload; Gtk::MenuItem *btnSaveLocal; Gtk::MenuItem *btnSaveGlobl; Gtk::MenuItem *btnDownloadGlobal; Gtk::MenuItem *btnDownloadlocal; + Gtk::AboutDialog *aboutWindows; + //Gtk::MenuButton *btnSave; + //Gtk::MenuButton *btnDownload; + Gtk::Button *btnSettings; std::map > time_reg_map; std::map > time_reg_map_local; unsigned int year=0; @@ -119,6 +123,7 @@ class MainWindow : public Gtk::ApplicationWindow { virtual ~MainWindow() = default; void fill_in_reg_zone(string &cmd); void download_globl_cfg(); + void about_Dialog_show(); void save_local_cfg(); void save_global_cfg(); void save_Dhcp(); diff --git a/ubl-settings-datetime.desktop b/ubl-settings-datetime.desktop index 521b6fe..9c4cd2e 100644 --- a/ubl-settings-datetime.desktop +++ b/ubl-settings-datetime.desktop @@ -7,7 +7,7 @@ GenericName[ru]=Настройка даты и времени Comment=Date time settings Comment[ru]=Приложение для настройки даты и времени Type=Application -Exec=pkexec ubl-settings-datetime --lock-datetime +Exec=pkexec ubl-settings-datetime Icon=ubl-settings-datetime Terminal=false X-XfcePluggable=true diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index dbad9a0..d25ecc8 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -2,6 +2,43 @@ + + False + О Программе + center + dialog + ubl-settings-datetime + 1.4 + Copyright © 2021 - the ublinux team + Настройка даты времени + https://ublinux.ru/ + www.ublinux.ru + UBGroup + UBGroup + ubl-settings-datetime + gpl-2-0 + + + False + vertical + 2 + + + False + end + + + False + False + 0 + + + + + + + + True False @@ -26,18 +63,18 @@ True False - + True False - Download Global + Download Local True - + True False - Download Local + Download Global True @@ -732,16 +769,34 @@ Format: DD.MM.YYYY - + True - False + True + False + True + menu1 - + True - True - False - True - menu1 + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + go-bottom + + + False + True + 0 + + True @@ -754,44 +809,103 @@ Format: DD.MM.YYYY 6 Save + + False + True + 1 + + + + + + + 1 + + + + + True + False + + + True + True + False + True + menu2 + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + media-floppy + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download + + + False + True + 1 + + + False True - 1 + 0 - + True True - False True - menu2 - + True False - 5 - 5 - 5 - 5 - 6 - 6 - Download + 25 + emblem-system False True - 2 + 1 - 1 + end + 2 -- 2.35.1 From dcd5cac5430f5e492dec13bd6dec568f2f3cb633 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 17 Feb 2023 18:07:54 +0600 Subject: [PATCH 05/22] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D1=91=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD,=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BE?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ubl-settings-datetime.glade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index d25ecc8..d3f96dd 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -891,8 +891,8 @@ Format: DD.MM.YYYY True False + gtk-execute 25 - emblem-system -- 2.35.1 From 7e5f2a4e2954f31c732936b29ffbaa7d9994878c Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 20 Feb 2023 12:19:28 +0600 Subject: [PATCH 06/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-datetime.cc | 8 ++++++-- source/ubl-settings-datetime.h | 1 + ubl-settings-datetime.glade | 5 +++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index 264f9a4..8a05a04 100644 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -75,10 +75,12 @@ void MainWindow::settings(){ numTimeMin->set_increments(1.0,1.0); this->get_config(); this->flag_block_gui(); + btnBoxAboutDialog->set_visible(false); this->event(); this->parse_text_date(); btnSaveGlobl->set_sensitive(false); this->download_local_cfg(); + } else{ btnSaveLocal->set_sensitive(false); @@ -102,6 +104,7 @@ void MainWindow::settings(){ txtNtpServer->set_sensitive(false); lblZone1Glob->set_sensitive(false); lblDateTimeSetting->set_sensitive(false); + btnBoxAboutDialog->set_visible(false); this->event(); } @@ -117,6 +120,8 @@ int MainWindow::check_root(){ } void MainWindow::lacalization(){ + //aboutWindows->set_title(_("")); + aboutWindows->set_comments(_("Settings the date and time")); lblSave->set_label(_("Save")); lblDownload->set_label(_("Download")); btnDownloadGlobal->set_label(_("Download global")); @@ -242,9 +247,8 @@ void MainWindow::get_builder(){ builder->get_widget("btnDownloadlocal", btnDownloadlocal); builder->get_widget("btnSettings", btnSettings); builder->get_widget("aboutWindows", aboutWindows); - + builder->get_widget("btnBoxAboutDialog", btnBoxAboutDialog); //builder->get_widget("cbxSynchronizeNtp",cbxSynchronizeNtp); - this->add_CSS(); } void MainWindow::gui_exit(){ diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index f6af689..fea3c82 100644 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -92,6 +92,7 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::MenuItem *btnDownloadGlobal; Gtk::MenuItem *btnDownloadlocal; Gtk::AboutDialog *aboutWindows; + Gtk::ButtonBox *btnBoxAboutDialog; //Gtk::MenuButton *btnSave; //Gtk::MenuButton *btnDownload; Gtk::Button *btnSettings; diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index d3f96dd..39e93de 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -23,7 +23,8 @@ vertical 2 - + + btnBoxAboutDialog False end @@ -743,7 +744,7 @@ Format: DD.MM.YYYY - False + True True 1 -- 2.35.1 From 0f6c42dc90645d71feb76f24b9fc167c193e2580 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 21 Feb 2023 09:30:18 +0600 Subject: [PATCH 07/22] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D1=91?= =?UTF-8?q?=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD=20=D0=BA=D0=BD?= =?UTF-8?q?=D0=BE=D0=BF=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-datetime.cc | 44 +- source/ubl-settings-datetime.h | 2 + ubl-settings-datetime.glade | 1094 ++++++++++++++++--------------- ubl-settings-datetime_ru.po | 65 ++ 4 files changed, 673 insertions(+), 532 deletions(-) diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index 8a05a04..36a39f7 100644 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -56,15 +56,15 @@ void MainWindow::settings(){ Gtk::Widget *plugBox; Gtk::Window *window; Gtk::Widget *boxButton; - Gtk::Widget *btnSave; + Gtk::Widget *boxSave; builder->get_widget("standartHead",standartHead); builder->get_widget("plugBox",plugBox); builder->get_widget("window",window); builder->get_widget("boxButton",boxButton); - builder->get_widget("btnSave",btnSave); + builder->get_widget("boxSave",boxSave); - ubl_make_plugs(boxButton,btnSave, socket_ext_id_I, socket_trd_id_I); + ubl_make_plugs(boxButton,boxSave, socket_ext_id_I, socket_trd_id_I); year=0, month=0, day=0; this->get_builder(); this->lacalization(); @@ -79,8 +79,7 @@ void MainWindow::settings(){ this->event(); this->parse_text_date(); btnSaveGlobl->set_sensitive(false); - this->download_local_cfg(); - + this->download_local_cfg(); } else{ btnSaveLocal->set_sensitive(false); @@ -106,8 +105,20 @@ void MainWindow::settings(){ lblDateTimeSetting->set_sensitive(false); btnBoxAboutDialog->set_visible(false); this->event(); + } + //popCalendar->show_all(); + +} + +bool MainWindow::gui_set_orientation(GdkEventConfigure* event){ + if (event){} + //int w; + //w = this->get_width(); + //popWarning->set_default_widget(w); + return false; + } int MainWindow::check_root(){ @@ -248,7 +259,8 @@ void MainWindow::get_builder(){ builder->get_widget("btnSettings", btnSettings); builder->get_widget("aboutWindows", aboutWindows); builder->get_widget("btnBoxAboutDialog", btnBoxAboutDialog); - //builder->get_widget("cbxSynchronizeNtp",cbxSynchronizeNtp); + + this->add_CSS(); } void MainWindow::gui_exit(){ @@ -279,6 +291,7 @@ void MainWindow::event(){ btnSaveGlobl->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::save_global_cfg)); btnDownloadlocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); btnSettings->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::about_Dialog_show)); + signal_configure_event().connect(sigc::mem_fun(*this, &MainWindow::gui_set_orientation), false); } void MainWindow::about_Dialog_show(){ @@ -975,9 +988,24 @@ void MainWindow::read_file(){ std::ifstream in1(entry_zone.path()); // окрываем файл для чтения if (in1.is_open()){ string key_zone = entry_zone.path().filename().string(); - if (key_zone.length()!=0 || key_zone!=" "){ + + if (fs::is_directory(path_dir+"/"+key_zone)){ + string reg_reg_zone = path_dir+"/"+key_zone; + for (const auto & entry_reg_reg_zone : fs::directory_iterator(reg_reg_zone)){ + std::ifstream in2(entry_zone.path()); // окрываем файл для чтения + if (in2.is_open()){ + string reg_reg_zone = entry_reg_reg_zone.path().filename().string(); + zone.push_back(reg_reg_zone); + path_reg_zone=key_reg + "/" + reg_reg_zone; + key_zone_local = this->zone_file_read(path_reg_zone) +_(reg_reg_zone.c_str()); + zone_local.push_back(key_zone_local); + } + in2.close(); + } + } + else if (key_zone.length()!=0 || key_zone!=" "){ zone.push_back(key_zone); - path_reg_zone=key_reg + "/" + key_zone; + path_reg_zone = key_reg + "/" + key_zone; key_zone_local = this->zone_file_read(path_reg_zone) +_(key_zone.c_str()); zone_local.push_back(key_zone_local); } diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index fea3c82..322d986 100644 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -88,6 +88,7 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Widget *btnDownload; Gtk::MenuItem *btnSaveLocal; Gtk::MenuItem *btnSaveGlobl; + Gtk::MenuItem *btnDownloadGlobal; Gtk::MenuItem *btnDownloadlocal; @@ -162,6 +163,7 @@ class MainWindow : public Gtk::ApplicationWindow { void stop_ntp(); void wind_close_ntp(); void wrapper_update_time_date(); + bool gui_set_orientation(GdkEventConfigure* event); string zone_file_read(string zone); void sort_zone(vector *time_reg_map_local,vector *time_reg_map); array split_region_zone(string read_reg_zon_cfg); diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index 39e93de..e4945fe 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -2,6 +2,16 @@ + + True + False + start + True + vertical + + + + False О Программе @@ -83,43 +93,43 @@ False - + True False - vertical - + True False vertical - + True False + vertical - - 90 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 69 - ubl-settings-datetime - - - False - True - 0 - - - - + True False + + + 90 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 69 + ubl-settings-datetime + + + False + True + 0 + + True @@ -128,56 +138,67 @@ True False - vertical - - 255 + True False - Date and time settings - - - - - - + vertical + + + 255 + True + False + Date and time settings + + + + + + + + + True + True + 0 + + - True + False True 0 - False + True True 0 + + + True + False + + + False + True + 1 + + True True - 0 - - - - - True - False - - - False - True 1 - True + False True - 1 + 0 @@ -187,256 +208,178 @@ 0 - - - False - True - 0 - - - - - True - False - vertical True False vertical - + True False - 5 - 5 - 5 - 5 - 0.019999999552965164 - in + vertical - + True False 5 + 5 5 - 5 - vertical + 5 + 0.019999999552965164 + in True False + 5 + 5 + 5 + vertical - - 0 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Time - True - 0 - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - 2 - 0.099999999776482579 - True - - - False - True - 1 - - - - - True - False - : - - - False - True - 2 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - 2 - True - - - False - True - 3 - - - - - 20 + True False - 5 - 5 - 5 - 5 - 6 - 6 - Date - True - 0 - - - False - True - 4 - - - - - 191 - True - True - Date -Format: DD.MM.YYYY - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 5 - - - - - True - True - True - Интерактивный выбор даты - 5 - 5 - 5 - 5 - 6 - 6 - + + 0 True False - x-office-calendar + 5 + 5 + 5 + 5 + 6 + 6 + Time + True + 0 + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + 2 + 0.099999999776482579 + True + + + False + True + 1 + - - - False - True - 6 - - - - - False - True - 1 - - - - - True - False - - - True - True - True - 5 - 5 - 5 - 5 - 6 - 6 - + True False - center - center + : + + + False + True + 2 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + 2 + True + + + False + True + 3 + + + + + 20 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Date + True + 0 + + + False + True + 4 + + + + + 191 + True + True + Date +Format: DD.MM.YYYY + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 5 + + + + + True + True + True + Интерактивный выбор даты + 5 + 5 + 5 + 5 + 6 + 6 True False - 5 - 5 - 5 - 5 - media-playlist-repeat - - - False - True - 0 - - - - - True - False - center - center - Sync by + x-office-calendar - - False - True - 1 - + + False + True + 6 + - - False - True - 0 - - - - - True - False - False True @@ -444,110 +387,208 @@ Format: DD.MM.YYYY - + True False - - - False - True - 2 - - - - - True - True - True - 5 - 10 - 5 - 10 - 6 - 6 - + + True + True + True + 5 + 5 + 5 + 5 + 6 + 6 + + + True + False + center + center + + + True + False + 5 + 5 + 5 + 5 + media-playlist-repeat + + + False + True + 0 + + + + + True + False + center + center + Sync by + + + False + True + 1 + + + + + + + False + True + 0 + + + + True False - center - center - Synchronize hardware time + + False + True + 1 + + + + + True + False + + + False + True + 2 + + + + + True + True + True + 5 + 10 + 5 + 10 + 6 + 6 + + + True + False + center + center + Synchronize hardware time + + + + + True + True + 3 + - True + False True 3 - - False - True - 3 - + + + + True + False + Current date and time + - - - - True - False - Current date and time - + + False + True + 0 + False True - 0 + 1 - - - False - True - 1 - - - - - True - False - vertical - + True False - 5 - 5 - 5 - 5 - 0.019999999552965164 - in + vertical - + True False 5 + 5 5 - 5 - vertical + 5 + 0.019999999552965164 + in True False + 5 + 5 + 5 + vertical - + True False - 5 - 5 - 5 - 5 - 6 - 5 + + + True + False + 5 + 5 + 5 + 5 + 6 + 5 + + + False + True + 1 + + + + + -1 + True + True + Enter the name of the ntp server or its ip address. When entering multiple addresses, separate them with spaces. + center + 5 + 10 + 5 + 10 + 6 + 5 + + + True + True + 3 + + False @@ -555,26 +596,48 @@ Format: DD.MM.YYYY 1 - - - -1 - True - True - Enter the name of the ntp server or its ip address. When entering multiple addresses, separate them with spaces. - center - 5 - 10 - 5 - 10 - 6 - 5 - - - True - True - 3 - - + + + + + True + False + Synchronize via NTP: + + + + + False + True + 0 + + + + + False + True + 2 + + + + + True + False + 5 + 10 + 5 + 10 + 6 + 0.019999999552965164 + in + + + True + False + + + True + False False @@ -582,76 +645,170 @@ Format: DD.MM.YYYY 1 + + + True + False + 8 + 5 + 8 + 5 + 6 + 13 + Region + 0 + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 13 + False + False + + + False + True + 3 + + + + + True + False + 10 + 5 + 10 + 5 + 6 + 13 + Area + 0 + + + False + True + 4 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 13 + False + False + + + False + True + 5 + + + + + 5 + True + False + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + - + True False - Synchronize via NTP: + Time Zone False True - 0 + 3 False True - 2 + 1 + + + -1 + + + + + + + True + False + True + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + ubl-settings-datetime + + + + + True + False - + True - False - 5 - 10 - 5 - 10 - 6 - 0.019999999552965164 - in + True + False + True + menu1 True False - - True - False - - - False - True - 1 - - - - - True - False - 8 - 5 - 8 - 5 - 6 - 13 - Region - 0 - - - False - True - 2 - - - - + True False 5 @@ -659,35 +816,17 @@ Format: DD.MM.YYYY 5 5 6 - 13 - - - False - True - 3 - - - - - True - False - 10 - 5 - 10 - 5 - 6 - 13 - Area - 0 + 6 + go-bottom False True - 4 + 0 - + True False 5 @@ -695,129 +834,30 @@ Format: DD.MM.YYYY 5 5 6 - 13 - - - False - True - 5 - - - - - 5 - True - False - - - False - True - 6 - - - - - True - False + 6 + Save False True - 7 + 1 - - - True - False - Time Zone - - + False True - 3 + 0 - - - True - True - 1 - - - - - - - True - False - True - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - ubl-settings-datetime - - - - - True - True - False - True - menu1 - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - go-bottom - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Save - - - False - True - 1 - - - - + 1 @@ -867,6 +907,9 @@ Format: DD.MM.YYYY 6 6 Download + False @@ -903,6 +946,9 @@ Format: DD.MM.YYYY 1 + end diff --git a/ubl-settings-datetime_ru.po b/ubl-settings-datetime_ru.po index 323798f..ba88644 100644 --- a/ubl-settings-datetime_ru.po +++ b/ubl-settings-datetime_ru.po @@ -1660,3 +1660,68 @@ msgstr "Загрузить" msgid "Argument not recognized\n" msgstr "Нepacпoзнaнный аргумент\n" +msgid "La_Rioja" +msgstr "Риоха" + +msgid "Rio_Gallegos" +msgstr "Рио-Гальегос" + +msgid "Salta" +msgstr "Сальта" + +msgid "San_Juan" +msgstr "Сан-Хуан" + +msgid "San_Luis" +msgstr "Сан-Луис" + +msgid "Tucuman" +msgstr "Тукуман" + +msgid "Ushuaia" +msgstr "Ушуая" + +msgid "Knox" +msgstr "Ноксвилл" + +msgid "Marengo" +msgstr "Маренго" + +msgid "Petersburg" +msgstr "Петербург" + +msgid "Tell_City" +msgstr "Телл-Сити" + +msgid "Vevay" +msgstr "Вевей" + +msgid "Vincennes" +msgstr "Венсен" + +msgid "Winamac" +msgstr "Winamac" + +msgid "Monticello" +msgstr "Монтиселло" + +msgid "Beulah" +msgstr "Беула" + +msgid "Center" +msgstr "Центр" + +msgid "New_Salem" +msgstr "Нью-Салем" + +msgid "Windhoek" +msgstr "Виндхук" + +msgid "Iqaluit" +msgstr "Икалуит" + +msgid "EasterIsland" +msgstr "Остров Пасхи" + +msgid "Andorra" +msgstr "Андорра" \ No newline at end of file -- 2.35.1 From 7923ce74b73a53cead7dfb88a1712ff61045b719 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 21 Feb 2023 15:38:16 +0600 Subject: [PATCH 08/22] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=BD=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 4 + alert.svg | 55 +++++ checked.svg | 327 +++++++++++++++++++++++++++++ close.svg | 54 +++++ source/ubl-settings-datetime.cc | 208 +++++++++++++------ source/ubl-settings-datetime.h | 40 ++-- style.css | 11 + ubl-settings-datetime.glade | 352 ++++++++++++-------------------- ubl-settings-datetime_ru.po | 40 +++- warning.svg | 55 +++++ 10 files changed, 846 insertions(+), 300 deletions(-) create mode 100644 alert.svg create mode 100644 checked.svg create mode 100644 close.svg create mode 100644 warning.svg diff --git a/Makefile b/Makefile index 7d04dae..e6d9f93 100644 --- a/Makefile +++ b/Makefile @@ -117,6 +117,10 @@ install: check uninstall @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" "${pkgname}.svg" @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" "${pkgname}.png" @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" bg_top.png + @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" alert.svg + @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" checked.svg + @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" warning.svg + @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" close.svg @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ @update-desktop-database --quiet 2>/dev/null @touch /usr/share/applications diff --git a/alert.svg b/alert.svg new file mode 100644 index 0000000..c14c381 --- /dev/null +++ b/alert.svg @@ -0,0 +1,55 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/checked.svg b/checked.svg new file mode 100644 index 0000000..7956b34 --- /dev/null +++ b/checked.svg @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + diff --git a/close.svg b/close.svg new file mode 100644 index 0000000..d869d85 --- /dev/null +++ b/close.svg @@ -0,0 +1,54 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index 36a39f7..f40b2d7 100644 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -78,8 +78,11 @@ void MainWindow::settings(){ btnBoxAboutDialog->set_visible(false); this->event(); this->parse_text_date(); - btnSaveGlobl->set_sensitive(false); + this->download_globl_cfg(); this->download_local_cfg(); + orevrlayInfo->add_overlay(*boxInfoError); + imgInfo->set("/usr/share/ubl-settings-datetime/images/checked.svg"); + imageCloseInfo->set("/usr/share/ubl-settings-datetime/images/close.svg"); } else{ btnSaveLocal->set_sensitive(false); @@ -112,14 +115,6 @@ void MainWindow::settings(){ } -bool MainWindow::gui_set_orientation(GdkEventConfigure* event){ - if (event){} - //int w; - //w = this->get_width(); - //popWarning->set_default_widget(w); - return false; - -} int MainWindow::check_root(){ if (geteuid()!=0){ @@ -131,12 +126,12 @@ int MainWindow::check_root(){ } void MainWindow::lacalization(){ - //aboutWindows->set_title(_("")); - aboutWindows->set_comments(_("Settings the date and time")); + btnSynopsis->set_label(_("Synopsis")); + aboutProgram->set_label(_("About the program")); + aboutWindows->set_comments(_("Setting the date and time")); lblSave->set_label(_("Save")); lblDownload->set_label(_("Download")); btnDownloadGlobal->set_label(_("Download global")); - btnDownloadlocal->set_label(_("Download local")); btnSaveLocal->set_label(_("Save local")); btnSaveGlobl->set_label(_("Save global")); txtDate->set_tooltip_text(_("Date of\nFormat: DD.MM.YYYY")); @@ -155,13 +150,9 @@ void MainWindow::lacalization(){ lblZone->set_text(_("Zone")); lblSynchronizeBtn->set_text(_("Sync by")); this->set_title(_("ubl-settings-datetime")); - windowsNnpClose->set_title(_("Warning!")); mess_sudo->set_title(_("Warning!")); mess_dchp->set_title(_("Warning!")); lblTimeBios->set_text(_("Synchronize hardware time")); - lblBanerStopNtp->set_text(_("Active service detected\nAutomatic time and date synchronization service detected")); - lblNtpStop->set_text(_("Stop the synchronization service")); - lblNtpClose->set_text(_("Close")); //_lblSynchronizebChk->set_text(_("Synchronize via NTP")); } @@ -207,7 +198,22 @@ void MainWindow::add_CSS(){ //Glib::RefPtr context_button = btnHardwareTime->get_style_context(); context->add_class("cssboxColor1"); context_lbl_head->add_class("textHead"); - //context_button->add_class("textHead"); + Glib::RefPtr boxInfo = boxInfoError->get_style_context(); + boxInfo->add_class("boxInfoOK"); + Glib::RefPtr btnWarngingCloseCss = btnWarngingClose->get_style_context(); + btnWarngingCloseCss->add_class("boxInfoOK"); +} + +void MainWindow::info_status_app(string style){ + 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 + Glib::RefPtr boxInfo = boxInfoError->get_style_context(); + boxInfo->add_class(style); + Glib::RefPtr btnWarngingCloseCss = btnWarngingClose->get_style_context(); + btnWarngingCloseCss->add_class(style); } void MainWindow::get_builder(){ @@ -242,12 +248,6 @@ void MainWindow::get_builder(){ builder->get_widget("mess_sudo",mess_sudo); builder->get_widget("lblMessageSudo",lblMessageSudo); builder->get_widget("btnMessCloseSudo",btnMessCloseSudo); - builder->get_widget("windowsNnpClose",windowsNnpClose); - builder->get_widget("btnNtpStop",btnNtpStop); - builder->get_widget("btnNtpWinClose",btnNtpWinClose); - builder->get_widget("lblNtpStop",lblNtpStop); - builder->get_widget("lblNtpClose",lblNtpClose); - builder->get_widget("lblBanerStopNtp",lblBanerStopNtp); builder->get_widget("btnSaveLocal",btnSaveLocal); builder->get_widget("btnSaveGlobl",btnSaveGlobl); builder->get_widget("lblSave",lblSave); @@ -255,12 +255,17 @@ void MainWindow::get_builder(){ builder->get_widget("btnDownload",btnDownload); builder->get_widget("lblDownload",lblDownload); builder->get_widget("btnDownloadGlobal", btnDownloadGlobal); - builder->get_widget("btnDownloadlocal", btnDownloadlocal); builder->get_widget("btnSettings", btnSettings); builder->get_widget("aboutWindows", aboutWindows); builder->get_widget("btnBoxAboutDialog", btnBoxAboutDialog); - - + builder->get_widget("btnSynopsis", btnSynopsis); + builder->get_widget("aboutProgram", aboutProgram); + builder->get_widget("boxInfoError", boxInfoError); + builder->get_widget("orevrlayInfo", orevrlayInfo); + builder->get_widget("btnWarngingClose", btnWarngingClose); + builder->get_widget("lblWarning", lblWarning); + builder->get_widget("imgInfo", imgInfo); + builder->get_widget("imageCloseInfo", imageCloseInfo); this->add_CSS(); } void MainWindow::gui_exit(){ @@ -284,26 +289,37 @@ void MainWindow::event(){ cbRegion->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::append_zone)); cldrDate->signal_day_selected_double_click().connect(sigc::mem_fun(*this, &MainWindow::get_calendar)); mess_sudo->signal_delete_event().connect(sigc::mem_fun(*this, &MainWindow::gui_exit_2)); - btnNtpWinClose->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::wind_close_ntp)); - btnNtpStop->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::stop_ntp)); btnDownloadGlobal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_globl_cfg)); btnSaveLocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::save_local_cfg)); btnSaveGlobl->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::save_global_cfg)); - btnDownloadlocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); - btnSettings->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::about_Dialog_show)); - signal_configure_event().connect(sigc::mem_fun(*this, &MainWindow::gui_set_orientation), false); + aboutProgram->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::about_Dialog_show)); + btnDownload->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); + btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); + btnWarngingClose->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::close_banner_info)); + Glib::signal_timeout().connect(sigc::mem_fun(*this, &MainWindow::close_banner_info_timer), 10000); } -void MainWindow::about_Dialog_show(){ - aboutWindows->show(); +bool MainWindow::close_banner_info_timer(){ + if (bool_close_banner_info==true){ + boxInfoError->hide(); + } + + return false; } +void MainWindow::close_banner_info(){ + boxInfoError->hide(); +} -void MainWindow::download_globl_cfg(){ - this->entry_dhcp_mess(); - string cmd = "/usr/bin/ubconfig --default --source global get clock ZONE"; - this->fill_in_reg_zone(cmd); - btnSaveGlobl->set_sensitive(true); +void MainWindow::synopsis_show(){ + //wrapper_system("xdg-open https://wiki.ublinux.ru/ru/home"); + error_info=0; + warning_info=0; +} + + +void MainWindow::about_Dialog_show(){ + aboutWindows->show(); } void MainWindow::download_local_cfg(){ @@ -311,45 +327,120 @@ void MainWindow::download_local_cfg(){ this->fill_in_reg_zone(cmd); this->update_hour_minute(); this->update_calendar(); + info_warning_error(0); +} + +void MainWindow::download_globl_cfg(){ + this->entry_dhcp_mess(); + string cmd = "/usr/bin/ubconfig --default --source global get clock ZONE"; + this->fill_in_reg_zone(cmd); + info_warning_error(1); } void MainWindow::save_local_cfg(){ string cmd = "ubconfig --target system set clock ZONE="; this->enter_zone(cmd); + info_warning_error(2); } void MainWindow::save_global_cfg(){ string cmd = "/usr/bin/ubconfig --target global set clock ZONE="; this->enter_zone(cmd); this->save_Dhcp(); + info_warning_error(3); } -void MainWindow::wind_close_ntp(){ - windowsNnpClose->hide(); +void MainWindow::info_warning_error(int mess){ + boxInfoError->show(); + if (error_info!=0){ + imgInfo->set("/usr/share/ubl-settings-datetime/images/alert.svg"); + bool_close_banner_info=false; + info_status_app("boxInfoError"); + error_info=0; + warning_info=0; + if (mess == 0){ + lblWarning->set_text(_("Local configuration reading error")); + } + else if (mess == 1){ + lblWarning->set_text(_("Global configuration read error")); + } + else if (mess == 2){ + lblWarning->set_text(_("Local configuration write error")); + } + else if (mess == 3){ + lblWarning->set_text(_("Global configuration write error")); + } + } + else if (warning_info!=0){ + imgInfo->set("/usr/share/ubl-settings-datetime/images/warning.svg"); + bool_close_banner_info=false; + info_status_app("boxInfoWarning"); + error_info=0; + warning_info=0; + if (mess == 0){ + lblWarning->set_text(_("Local configuration reading error")); + } + else if (mess == 1){ + lblWarning->set_text(_("Global configuration read error")); + } + else if (mess == 2){ + lblWarning->set_text(_("Local configuration write error")); + } + else if (mess == 3){ + lblWarning->set_text(_("Global configuration write error")); + } + + } + else{ + imgInfo->set("/usr/share/ubl-settings-datetime/images/checked.svg"); + bool_close_banner_info=true; + info_status_app("boxInfoOK"); + if (mess == 0){ + lblWarning->set_text(_("Local configuration downloaded successfully")); + } + else if (mess == 1){ + lblWarning->set_text(_("Global configuration downloaded successfully")); + } + else if (mess == 2){ + lblWarning->set_text(_("Local configuration successfully written")); + } + else if (mess == 3){ + lblWarning->set_text(_("Global configuration successfully written")); + } + } } + void MainWindow::stop_ntp(){ string cmd = "SEL_SERVICE=\"systemd-timesyncd\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service; "; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); cmd ="SEL_SERVICE=\"ntpd\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE}; "; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); cmd ="SEL_SERVICE=\"ntpdate\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE}; "; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); cmd = "SEL_SERVICE=\"chronyd\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE}; "; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); cmd ="SEL_SERVICE=\"openntpd\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ntpd; "; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); cmd ="SEL_SERVICE=\"ptp4l\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE}; "; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); cmd ="SEL_SERVICE=\"phc2sys\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE} "; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); + +} + +void MainWindow::wrapper_system(string cmd){ + int response_cmd = system(cmd.c_str()); + if (response_cmd!=0){ + error_info+=1; + } } void MainWindow::hardware_clock(){ string cmd = "hwclock --systohc"; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); } void MainWindow::gui_mess_close(){ @@ -380,7 +471,7 @@ bool MainWindow::focus_ntp(){ } if ((flag_error==false) && (flag_error_check_ntp==false)){ cmd = "/usr/bin/ubconfig set network NTPSERVERS=\"" + str_ntp + "\""; - response_cmd = system(cmd.c_str()); + wrapper_system(cmd); } else{ if (flag_error==true){ @@ -437,7 +528,6 @@ bool MainWindow::check_ntp(string &str_ntp){ for (size_t i = 0; i < str_ntp.size(); i++){ flag_error=false; char_ntp[0] = str_ntp[i]; - cout << char_ntp << endl; for (int index=0;index<11;index++){ if (index==10){ @@ -446,8 +536,6 @@ bool MainWindow::check_ntp(string &str_ntp){ else{ simvol = to_string(index); } - cout << (simvol==char_ntp) << endl; - cout << simvol << " " << char_ntp << endl; if (simvol==char_ntp){ flag_error=false; @@ -487,16 +575,19 @@ struct MainWindow::Result MainWindow::wrapper_call(string cmd){ else{ obj_result.response = response; obj_result.error = 1; + warning_info+=1; } } else{ obj_result.response = response; obj_result.error = 2; + warning_info+=1; } } else{ obj_result.response = response; obj_result.error = 3; + warning_info+=1; } return obj_result; } @@ -569,18 +660,18 @@ void MainWindow::save_Dhcp(){ } else if (activ_index==0){ string cmd = "/usr/bin/ubconfig set network NTPSERVERS=default"; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); } else if (activ_index==1){ string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); } else if (activ_index==2){ this->focus_ntp(); } else if (activ_index==3){ string cmd = "/usr/bin/ubconfig remove network NTPSERVERS"; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); } } @@ -747,7 +838,7 @@ void MainWindow::enter_zone(string &cmd){ str_zone=zone_text; str_region=reg_text; cmd = cmd + str_region + "/" + str_zone; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); } else{ str_zone=""; @@ -771,7 +862,6 @@ void MainWindow::parse_text_date(){ void MainWindow::append_region_zone(string region, string zone, Gtk::ComboBoxText *tmpCbReg, Gtk::ComboBoxText *tmpCbZone){ str_region=region; - str_region_glob=region; int index = 0; Glib::ustring reg_local = ""; int size_vec = array_region_local.size(); @@ -892,7 +982,7 @@ void MainWindow::update_time_date(){ if (str_data==str_data_entry){ cmd = "date +%Y%m%d -s \"" + to_string(year)+ str_month+str_day+"\""; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); txtDate->set_text(str_data); year=0; month=0; @@ -912,7 +1002,7 @@ void MainWindow::update_time_date(){ cmd = "date +%T -s \""+ to_string(hour) + ":" + to_string(minute) + ":" + to_string(ltm->tm_sec) +"\""; - response_cmd=system(cmd.c_str()); + wrapper_system(cmd); } void MainWindow::post_entry_data(){ diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index 322d986..5e82786 100644 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -75,42 +75,37 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *lblTimeBios; Gtk::Label *lblSave; Gtk::Label *lblDownload; - Gtk::Label *lblBanerStopNtp; Gtk::Button *btnHardwareTime; Gtk::CheckButton *cbxSynchronizeNtp; - Gtk::Window *windowsNnpClose; - Gtk::Button *btnNtpStop; - Gtk::Button *btnNtpWinClose; - Gtk::Label *lblNtpStop; - Gtk::Label *lblNtpClose; Gtk::Entry *txtNtpServer; Gtk::Entry *txtDate; - Gtk::Widget *btnDownload; + Gtk::MenuButton *btnDownload; Gtk::MenuItem *btnSaveLocal; - Gtk::MenuItem *btnSaveGlobl; - - + Gtk::MenuItem *btnSaveGlobl; Gtk::MenuItem *btnDownloadGlobal; - Gtk::MenuItem *btnDownloadlocal; Gtk::AboutDialog *aboutWindows; Gtk::ButtonBox *btnBoxAboutDialog; - //Gtk::MenuButton *btnSave; - //Gtk::MenuButton *btnDownload; - Gtk::Button *btnSettings; + Gtk::MenuButton *btnSettings; + Gtk::MenuItem *btnSynopsis; + Gtk::MenuItem *aboutProgram; + Gtk::Widget *boxInfoError; + Gtk::Overlay *orevrlayInfo; + Gtk::Button *btnWarngingClose; + Gtk::Label *lblWarning; + Gtk::Image *imgInfo; + Gtk::Image *imageCloseInfo; std::map > time_reg_map; std::map > time_reg_map_local; unsigned int year=0; unsigned int month=0; unsigned int day=0; + int error_info = 0; + int warning_info = 0; int hour; int minute; string str_region=""; - string str_region_glob=""; - string str_txtDate; - string strtxtNtpServer; string str_zone=""; - string str_zoneGlob; - int response_cmd; + bool bool_close_banner_info=true; template struct Result{ Type response; @@ -123,6 +118,10 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); virtual ~MainWindow() = default; + void info_warning_error(int mess); + bool close_banner_info_timer(); + void close_banner_info(); + void synopsis_show(); void fill_in_reg_zone(string &cmd); void download_globl_cfg(); void about_Dialog_show(); @@ -162,8 +161,9 @@ class MainWindow : public Gtk::ApplicationWindow { bool gui_exit_2(GdkEventAny* event); void stop_ntp(); void wind_close_ntp(); + void wrapper_system(string cmd); + void info_status_app(string style); void wrapper_update_time_date(); - bool gui_set_orientation(GdkEventConfigure* event); string zone_file_read(string zone); void sort_zone(vector *time_reg_map_local,vector *time_reg_map); array split_region_zone(string read_reg_zon_cfg); diff --git a/style.css b/style.css index 88c8a58..8a2e785 100644 --- a/style.css +++ b/style.css @@ -4,3 +4,14 @@ .textHead{ text-shadow: 1px 1px #ffffff; } +.boxInfoOK{ + background-color:#6edf64; +} + +.boxInfoWarning{ + background-color: rgba(242, 255, 0, 1); +} + +.boxInfoError{ + background-color: rgba(255, 0, 0, 1); +} diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index e4945fe..ce8e835 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -2,16 +2,6 @@ - - True - False - start - True - vertical - - - - False О Программе @@ -20,7 +10,7 @@ ubl-settings-datetime 1.4 Copyright © 2021 - the ublinux team - Настройка даты времени + Setting the date and time https://ublinux.ru/ www.ublinux.ru UBGroup @@ -50,6 +40,87 @@ + + True + False + start + True + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + gtk-dialog-warning + + + False + True + 0 + + + + + True + False + start + center + 6 + 5 + 5 + 5 + 6 + 6 + Warning! + + + + + + + True + True + 1 + + + + + True + False + True + none + + + True + False + gtk-remove + + + + + False + True + end + 3 + + + + + True + True + 0 + + + True False @@ -74,18 +145,30 @@ True False - + + True + False + Download Global + True + + + + + True + False + + True False - Download Local + Synopsis True - + True False - Download Global + About the program True @@ -93,7 +176,7 @@ False - + True False @@ -335,7 +418,7 @@ - 191 + -1 True True Date @@ -348,7 +431,7 @@ Format: DD.MM.YYYY 6 - False + True True 5 @@ -362,7 +445,7 @@ Format: DD.MM.YYYY 5 5 5 - 5 + 7 6 6 @@ -397,7 +480,7 @@ Format: DD.MM.YYYY True 5 5 - 5 + 7 5 6 6 @@ -476,7 +559,7 @@ Format: DD.MM.YYYY 5 10 5 - 10 + 5 6 6 @@ -561,7 +644,7 @@ Format: DD.MM.YYYY 5 5 6 - 5 + 6 False @@ -581,7 +664,7 @@ Format: DD.MM.YYYY 5 10 6 - 5 + 6 True @@ -627,7 +710,7 @@ Format: DD.MM.YYYY 10 5 10 - 6 + 5 0.019999999552965164 in @@ -673,7 +756,7 @@ Format: DD.MM.YYYY 5 5 6 - 13 + 6 False False @@ -711,7 +794,7 @@ Format: DD.MM.YYYY 5 5 6 - 13 + 6 False False @@ -793,16 +876,16 @@ Format: DD.MM.YYYY - + True False - + True True False True - menu1 + menu2 True @@ -817,7 +900,7 @@ Format: DD.MM.YYYY 5 6 6 - go-bottom + media-floppy False @@ -826,7 +909,7 @@ Format: DD.MM.YYYY - + True False 5 @@ -835,7 +918,7 @@ Format: DD.MM.YYYY 5 6 6 - Save + Download False @@ -864,16 +947,16 @@ Format: DD.MM.YYYY - + True False - + True True False True - menu2 + menu1 True @@ -888,7 +971,7 @@ Format: DD.MM.YYYY 5 6 6 - media-floppy + go-bottom False @@ -897,7 +980,7 @@ Format: DD.MM.YYYY - + True False 5 @@ -906,10 +989,7 @@ Format: DD.MM.YYYY 5 6 6 - Download - + Save False @@ -919,6 +999,9 @@ Format: DD.MM.YYYY + False @@ -927,16 +1010,23 @@ Format: DD.MM.YYYY - + True True + False True + menu3 True False + 5 + 5 + 5 + 5 + 6 + 6 gtk-execute - 25 @@ -952,7 +1042,7 @@ Format: DD.MM.YYYY end - 2 + 3 @@ -1148,178 +1238,4 @@ Format: DD.MM.YYYY - - False - - - True - False - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 50 - emblem-important - - - False - True - 0 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Active service detected -Automatic time and date synchronization service detected - - - True - True - 1 - - - - - True - True - 0 - - - - - True - False - - - True - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - False - - - True - False - 5 - 5 - 5 - 5 - media-playback-stop - - - False - True - 0 - - - - - True - False - Stop the synchronization service - - - False - True - 1 - - - - - - - True - True - 0 - - - - - True - True - True - 5 - 5 - 5 - 5 - 6 - 6 - - - True - False - - - True - False - 6 - 5 - 5 - 5 - window-close - - - False - True - 0 - - - - - True - False - Close - - - False - True - 1 - - - - - - - True - True - 1 - - - - - False - True - 1 - - - - - diff --git a/ubl-settings-datetime_ru.po b/ubl-settings-datetime_ru.po index ba88644..1bf5130 100644 --- a/ubl-settings-datetime_ru.po +++ b/ubl-settings-datetime_ru.po @@ -49,6 +49,9 @@ msgstr "Введите DHCP!" msgid "OK" msgstr "OK" +msgid "Setting the date and time" +msgstr "Настройка даты времени" + msgid "Settings the date and time" msgstr "Настройки даты и времени" @@ -1640,10 +1643,10 @@ msgid "Save" msgstr "Сохранить" msgid "Save global" -msgstr "Сохранить глобально" +msgstr "Сохранить в глобальную конфигурацию" msgid "Save local" -msgstr "Сохранить локально" +msgstr "Сохранить в локальную конфигурацию" msgid "Download global" msgstr "Загрузить глобально" @@ -1724,4 +1727,35 @@ msgid "EasterIsland" msgstr "Остров Пасхи" msgid "Andorra" -msgstr "Андорра" \ No newline at end of file +msgstr "Андорра" + +msgid "About the program" +msgstr "О программе" + +msgid "Synopsis" +msgstr "Справка" + +msgid "Local configuration reading error" +msgstr "Ошибка чтения локальной конфигурации" + +msgid "Local configuration write error" +msgstr "Ошибка записи локальной конфигурации" + +msgid "Global configuration read error" +msgstr "Ошибка чтения глобальной конфигурации" + +msgid "Global configuration write error" +msgstr "Ошибка записи глобальной конфигурации" + +msgid "Local configuration downloaded successfully" +msgstr "Успешно загружена локальная конфигурация" + +msgid "Global configuration downloaded successfully" +msgstr "Успешно загружена глобальная конфигурация" + +msgid "Global configuration successfully written" +msgstr "Успешно записана глобальная конфигурация" + +msgid "Local configuration successfully written" +msgstr "Успешно записана локальная конфигурация" + diff --git a/warning.svg b/warning.svg new file mode 100644 index 0000000..ab59be1 --- /dev/null +++ b/warning.svg @@ -0,0 +1,55 @@ + + + + + + image/svg+xml + + + + + + + + -- 2.35.1 From 41b01991dcc7e2c4657d9014348a1740d780b927 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Feb 2023 09:09:27 +0600 Subject: [PATCH 09/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B3=20=D1=81=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=BE=D0=BD=D0=BD=D1=8B=D0=BC=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 0 Makefile | 2 - README.md | 0 VERSION.md | 0 alert.svg | 0 bg_top.png | Bin checked.svg | 6 +- close.svg | 0 ...x.pkexec.ubl-settings-datetime.exec.policy | 0 screenshot/screenshot.png | Bin source/CMakeLists.txt | 0 source/main.cc | 0 source/ubl-settings-datetime.cc | 196 ++--- source/ubl-settings-datetime.h | 39 +- style.css | 16 +- ubl-settings-datetime.desktop | 0 ubl-settings-datetime.glade | 739 +++++++++++------- ubl-settings-datetime.png | Bin ubl-settings-datetime.svg | 0 ubl-settings-datetime_ru.po | 13 +- warning.svg | 2 +- 21 files changed, 572 insertions(+), 441 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 Makefile mode change 100644 => 100755 README.md mode change 100644 => 100755 VERSION.md mode change 100644 => 100755 alert.svg mode change 100644 => 100755 bg_top.png mode change 100644 => 100755 checked.svg mode change 100644 => 100755 close.svg mode change 100644 => 100755 ru.ublinux.pkexec.ubl-settings-datetime.exec.policy mode change 100644 => 100755 screenshot/screenshot.png mode change 100644 => 100755 source/CMakeLists.txt mode change 100644 => 100755 source/main.cc mode change 100644 => 100755 source/ubl-settings-datetime.cc mode change 100644 => 100755 source/ubl-settings-datetime.h mode change 100644 => 100755 style.css mode change 100644 => 100755 ubl-settings-datetime.desktop mode change 100644 => 100755 ubl-settings-datetime.glade mode change 100644 => 100755 ubl-settings-datetime.png mode change 100644 => 100755 ubl-settings-datetime.svg mode change 100644 => 100755 ubl-settings-datetime_ru.po mode change 100644 => 100755 warning.svg diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/Makefile b/Makefile old mode 100644 new mode 100755 index e6d9f93..66c7629 --- a/Makefile +++ b/Makefile @@ -117,10 +117,8 @@ install: check uninstall @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" "${pkgname}.svg" @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" "${pkgname}.png" @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" bg_top.png - @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" alert.svg @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" checked.svg @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" warning.svg - @install -Dm644 -t "${pkgdir}/usr/share/${pkgname}/images/" close.svg @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ @update-desktop-database --quiet 2>/dev/null @touch /usr/share/applications diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/VERSION.md b/VERSION.md old mode 100644 new mode 100755 diff --git a/alert.svg b/alert.svg old mode 100644 new mode 100755 diff --git a/bg_top.png b/bg_top.png old mode 100644 new mode 100755 diff --git a/checked.svg b/checked.svg old mode 100644 new mode 100755 index 7956b34..e3cab42 --- a/checked.svg +++ b/checked.svg @@ -21,11 +21,11 @@ inkscape:pagecheckerboard="0" showgrid="false" inkscape:zoom="14.8125" - inkscape:cx="-12.219409" + inkscape:cx="-4.6919831" inkscape:cy="9.9578059" inkscape:window-width="1920" inkscape:window-height="1027" - inkscape:window-x="1920" + inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg25" /> @@ -323,5 +323,5 @@ + style="fill:#4d4d4d;fill-opacity:1" /> diff --git a/close.svg b/close.svg old mode 100644 new mode 100755 diff --git a/ru.ublinux.pkexec.ubl-settings-datetime.exec.policy b/ru.ublinux.pkexec.ubl-settings-datetime.exec.policy old mode 100644 new mode 100755 diff --git a/screenshot/screenshot.png b/screenshot/screenshot.png old mode 100644 new mode 100755 diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/source/main.cc b/source/main.cc old mode 100644 new mode 100755 diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc old mode 100644 new mode 100755 index f40b2d7..c773f88 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -78,15 +78,16 @@ void MainWindow::settings(){ btnBoxAboutDialog->set_visible(false); this->event(); this->parse_text_date(); + this->download_local_cfg(); this->download_globl_cfg(); - this->download_local_cfg(); - orevrlayInfo->add_overlay(*boxInfoError); - imgInfo->set("/usr/share/ubl-settings-datetime/images/checked.svg"); - imageCloseInfo->set("/usr/share/ubl-settings-datetime/images/close.svg"); + + //orevrlayInfo->add_overlay(*boxInfoError); + //imgInfo->set("/usr/share/ubl-settings-datetime/images/checked.svg"); + //GdkPixbuf* pixbuf_image = gdk_pixbuf_new_from_file_at_size("/usr/share/ubl-settings-datetime/images/close.svg", 12,12,NULL); + //GtkWidget* imageInfo = GTK_WIDGET(imageCloseInfo->gobj()); + //gtk_image_set_from_pixbuf(GTK_IMAGE(imageInfo), pixbuf_image); } else{ - btnSaveLocal->set_sensitive(false); - btnSaveGlobl->set_sensitive(false); btnDownload->set_sensitive(false); numTimeHrs->set_sensitive(false); numTimeMin->set_sensitive(false); @@ -108,6 +109,8 @@ void MainWindow::settings(){ lblDateTimeSetting->set_sensitive(false); btnBoxAboutDialog->set_visible(false); this->event(); + imgInfo->set("/usr/share/ubl-settings-datetime/images/checked.svg"); + } @@ -127,13 +130,15 @@ int MainWindow::check_root(){ void MainWindow::lacalization(){ btnSynopsis->set_label(_("Synopsis")); - aboutProgram->set_label(_("About the program")); + btnAbout->set_label(_("About the program")); + lblDonwlodLocal->set_label(_("Download local")); + lblDonwlolGlob->set_label(_("Download global")); + lblSaveGlob->set_label(_("Save to Global configuration")); + lblSaveLocal->set_label(_("Save to local configuration")); + lblSaveLocalGlob->set_label(_("Save to global and local configuration")); aboutWindows->set_comments(_("Setting the date and time")); lblSave->set_label(_("Save")); lblDownload->set_label(_("Download")); - btnDownloadGlobal->set_label(_("Download global")); - btnSaveLocal->set_label(_("Save local")); - btnSaveGlobl->set_label(_("Save global")); txtDate->set_tooltip_text(_("Date of\nFormat: DD.MM.YYYY")); txtNtpServer->set_tooltip_text(_("Enter the name of the ntp-server or its ip-address.\nWhen entering multiple addresses, separate them with commas.")); lblSynchronizebChkGLob->set_text(_("Synchronize via NTP:")); @@ -198,22 +203,14 @@ void MainWindow::add_CSS(){ //Glib::RefPtr context_button = btnHardwareTime->get_style_context(); context->add_class("cssboxColor1"); context_lbl_head->add_class("textHead"); - Glib::RefPtr boxInfo = boxInfoError->get_style_context(); - boxInfo->add_class("boxInfoOK"); - Glib::RefPtr btnWarngingCloseCss = btnWarngingClose->get_style_context(); - btnWarngingCloseCss->add_class("boxInfoOK"); } -void MainWindow::info_status_app(string style){ - 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 + +void MainWindow::info_status_app(string stule){ Glib::RefPtr boxInfo = boxInfoError->get_style_context(); - boxInfo->add_class(style); - Glib::RefPtr btnWarngingCloseCss = btnWarngingClose->get_style_context(); - btnWarngingCloseCss->add_class(style); + boxInfo->remove_class("boxInfoMessOK"); + boxInfo->remove_class("boxInfoMessError"); + boxInfo->add_class(stule); } void MainWindow::get_builder(){ @@ -248,24 +245,34 @@ void MainWindow::get_builder(){ builder->get_widget("mess_sudo",mess_sudo); builder->get_widget("lblMessageSudo",lblMessageSudo); builder->get_widget("btnMessCloseSudo",btnMessCloseSudo); - builder->get_widget("btnSaveLocal",btnSaveLocal); - builder->get_widget("btnSaveGlobl",btnSaveGlobl); builder->get_widget("lblSave",lblSave); - builder->get_widget("btnDownload",btnDownload); builder->get_widget("lblDownload",lblDownload); - builder->get_widget("btnDownloadGlobal", btnDownloadGlobal); - builder->get_widget("btnSettings", btnSettings); builder->get_widget("aboutWindows", aboutWindows); builder->get_widget("btnBoxAboutDialog", btnBoxAboutDialog); - builder->get_widget("btnSynopsis", btnSynopsis); - builder->get_widget("aboutProgram", aboutProgram); builder->get_widget("boxInfoError", boxInfoError); - builder->get_widget("orevrlayInfo", orevrlayInfo); - builder->get_widget("btnWarngingClose", btnWarngingClose); builder->get_widget("lblWarning", lblWarning); builder->get_widget("imgInfo", imgInfo); - builder->get_widget("imageCloseInfo", imageCloseInfo); + builder->get_widget("popDownloadMenu", popDownloadMenu); + builder->get_widget("popSaveMenu", popSaveMenu); + builder->get_widget("popAbout", popAbout); + builder->get_widget("btnSave", btnSave); + builder->get_widget("btnSettings", btnSettings); + builder->get_widget("btnDownload", btnDownload); + builder->get_widget("btnSynopsis", btnSynopsis); + builder->get_widget("btnAbout", btnAbout); + builder->get_widget("btnDonwlodLocal", btnDonwlodLocal); + builder->get_widget("btnDonwlolGlob", btnDonwlolGlob); + builder->get_widget("btnSaveLocalGlob", btnSaveLocalGlob); + builder->get_widget("btnSaveLocal", btnSaveLocal); + builder->get_widget("btnSaveGlob", btnSaveGlob); + builder->get_widget("lblSynopsis", lblSynopsis); + builder->get_widget("lblAbout", lblAbout); + builder->get_widget("lblDonwlodLocal", lblDonwlodLocal); + builder->get_widget("lblDonwlolGlob", lblDonwlolGlob); + builder->get_widget("lblSaveLocalGlob", lblSaveLocalGlob); + builder->get_widget("lblSaveLocal", lblSaveLocal); + builder->get_widget("lblSaveGlob", lblSaveGlob); this->add_CSS(); } void MainWindow::gui_exit(){ @@ -289,26 +296,16 @@ void MainWindow::event(){ cbRegion->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::append_zone)); cldrDate->signal_day_selected_double_click().connect(sigc::mem_fun(*this, &MainWindow::get_calendar)); mess_sudo->signal_delete_event().connect(sigc::mem_fun(*this, &MainWindow::gui_exit_2)); - btnDownloadGlobal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_globl_cfg)); - btnSaveLocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::save_local_cfg)); - btnSaveGlobl->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::save_global_cfg)); - aboutProgram->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::about_Dialog_show)); - btnDownload->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); - btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); - btnWarngingClose->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::close_banner_info)); - Glib::signal_timeout().connect(sigc::mem_fun(*this, &MainWindow::close_banner_info_timer), 10000); -} - -bool MainWindow::close_banner_info_timer(){ - if (bool_close_banner_info==true){ - boxInfoError->hide(); - } - - return false; -} - -void MainWindow::close_banner_info(){ - boxInfoError->hide(); + btnDownload->signal_clicked().connect([&](){popDownloadMenu->show();}); + btnSave->signal_clicked().connect([&](){popSaveMenu->show();}); + btnSettings->signal_clicked().connect([&](){popAbout->show();}); + btnAbout->signal_clicked().connect([&](){aboutWindows->show();}); + btnSynopsis->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show)); + btnDonwlodLocal->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg)); + btnDonwlolGlob->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::download_globl_cfg)); + btnSaveLocalGlob->signal_clicked().connect([&](){save_global_local_cfg();}); + btnSaveLocal->signal_clicked().connect([&](){save_local_cfg();}); + btnSaveGlob->signal_clicked().connect([&](){save_global_cfg();}); } void MainWindow::synopsis_show(){ @@ -317,11 +314,6 @@ void MainWindow::synopsis_show(){ warning_info=0; } - -void MainWindow::about_Dialog_show(){ - aboutWindows->show(); -} - void MainWindow::download_local_cfg(){ string cmd = "/usr/bin/ubconfig --default --source system get clock ZONE"; this->fill_in_reg_zone(cmd); @@ -349,33 +341,19 @@ void MainWindow::save_global_cfg(){ this->save_Dhcp(); info_warning_error(3); } - +void MainWindow::save_global_local_cfg(){ + string cmd = "ubconfig --target system set clock ZONE="; + this->enter_zone(cmd); + info_warning_error(4); + cmd = "/usr/bin/ubconfig --target global set clock ZONE="; + this->enter_zone(cmd); + this->save_Dhcp(); +} void MainWindow::info_warning_error(int mess){ - boxInfoError->show(); - if (error_info!=0){ - imgInfo->set("/usr/share/ubl-settings-datetime/images/alert.svg"); - bool_close_banner_info=false; - info_status_app("boxInfoError"); - error_info=0; - warning_info=0; - if (mess == 0){ - lblWarning->set_text(_("Local configuration reading error")); - } - else if (mess == 1){ - lblWarning->set_text(_("Global configuration read error")); - } - else if (mess == 2){ - lblWarning->set_text(_("Local configuration write error")); - } - else if (mess == 3){ - lblWarning->set_text(_("Global configuration write error")); - } - } - else if (warning_info!=0){ + if (error_info>0 || warning_info>0){ + info_status_app("boxInfoMessError"); imgInfo->set("/usr/share/ubl-settings-datetime/images/warning.svg"); - bool_close_banner_info=false; - info_status_app("boxInfoWarning"); error_info=0; warning_info=0; if (mess == 0){ @@ -390,12 +368,13 @@ void MainWindow::info_warning_error(int mess){ else if (mess == 3){ lblWarning->set_text(_("Global configuration write error")); } - + else if (mess == 4){ + lblWarning->set_text(_("Error saved local and global configuration")); + } } else{ + info_status_app("boxInfoMessOK"); imgInfo->set("/usr/share/ubl-settings-datetime/images/checked.svg"); - bool_close_banner_info=true; - info_status_app("boxInfoOK"); if (mess == 0){ lblWarning->set_text(_("Local configuration downloaded successfully")); } @@ -408,6 +387,9 @@ void MainWindow::info_warning_error(int mess){ else if (mess == 3){ lblWarning->set_text(_("Global configuration successfully written")); } + else if (mess == 4){ + lblWarning->set_text(_("Successfully saved local and global configuration")); + } } } @@ -602,18 +584,7 @@ void MainWindow::event_entry_cbDhcp(){ txtNtpServer->set_text(""); btnUpdateDateTime->set_sensitive(false); txtNtpServer->set_sensitive(false); - /* - cmd = "/usr/bin/ubconfig --source=default get NTPSERVERS_DEFAULT"; - struct Result obj_result = this->wrapper_call(cmd); - if (obj_result.error==0){ - txtNtpServer->set_text(obj_result.response); - } - else{ - //string error = ""; - //error = string(_("ERROR")) + "\n" + obj_result.response; - //lblMessage->set_text(error); - //mess_dchp->show(); - }*/ + } else if (activ_index==1){ @@ -623,25 +594,6 @@ void MainWindow::event_entry_cbDhcp(){ } else if (activ_index==2){ txtNtpServer->set_sensitive(true); - /* - string cmd = "/usr/bin/ubconfig get network NTPSERVERS"; - struct Result obj_result = this->wrapper_call(cmd); - if (obj_result.error==0){ - if (obj_result.response.find("default")==std::string::npos){ - if (obj_result.response.find("dhcp")==std::string::npos){ - txtNtpServer->set_text(obj_result.response); - } - cbDhcp->set_active(activ_index); - } - } - else if (obj_result.error==3){} - else{ - string error = ""; - error = string(_("ERROR")) + "\n" + obj_result.response; - lblMessage->set_text(error); - mess_dchp->show(); - } - */ } else if (activ_index==3){ txtNtpServer->set_text(""); @@ -746,6 +698,10 @@ void MainWindow::entry_dhcp_mess(){ txtNtpServer->set_text(obj_result.response); } else{ + if (obj_result.error==2){ + error_info-=1; + warning_info-=1; + } //string error = ""; //error = string(_("ERROR")) + "\n" + obj_result.response; //lblMessage->set_text(error); @@ -800,7 +756,6 @@ void MainWindow::get_config(){ this->read_file(); this->update_hour_minute(); this->update_calendar(); - this->entry_dhcp_mess(); } array MainWindow::split_region_zone(string read_reg_zon_cfg){ @@ -921,6 +876,13 @@ void MainWindow::append_region_zone(string region, string zone, Gtk::ComboBoxTex index+=1; } } + if (region=="Etc" && zone==""){ + error_info-=1; + warning_info-=1; + } + else if (region==""){ + error_info+=1; + } } string MainWindow::call(string cmd){ diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h old mode 100644 new mode 100755 index 5e82786..1831d81 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -58,6 +58,9 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Window *mess_dchp; Gtk::Window *mess_sudo; Gtk::Popover *popCalendar; + Gtk::Popover *popSaveMenu; + Gtk::Popover *popDownloadMenu; + Gtk::Popover *popAbout; Gtk::Calendar *cldrDate; Gtk::Label *lblMessage; Gtk::Label *lblMessageSudo; @@ -79,23 +82,31 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::CheckButton *cbxSynchronizeNtp; Gtk::Entry *txtNtpServer; Gtk::Entry *txtDate; - Gtk::MenuButton *btnDownload; - Gtk::MenuItem *btnSaveLocal; - Gtk::MenuItem *btnSaveGlobl; - Gtk::MenuItem *btnDownloadGlobal; + Gtk::Button *btnDownload; + Gtk::Button *btnSave; + Gtk::Button *btnSettings; Gtk::AboutDialog *aboutWindows; Gtk::ButtonBox *btnBoxAboutDialog; - Gtk::MenuButton *btnSettings; - Gtk::MenuItem *btnSynopsis; - Gtk::MenuItem *aboutProgram; - Gtk::Widget *boxInfoError; - Gtk::Overlay *orevrlayInfo; - Gtk::Button *btnWarngingClose; + + Gtk::Box *boxInfoError; Gtk::Label *lblWarning; Gtk::Image *imgInfo; - Gtk::Image *imageCloseInfo; std::map > time_reg_map; std::map > time_reg_map_local; + Gtk::Button *btnSaveLocalGlob; + Gtk::Button *btnSaveLocal; + Gtk::Button *btnSaveGlob; + Gtk::Button *btnDonwlolGlob; + Gtk::Button *btnDonwlodLocal; + Gtk::Button *btnAbout; + Gtk::Button *btnSynopsis; + Gtk::Label *lblSaveLocalGlob; + Gtk::Label *lblSaveLocal; + Gtk::Label *lblSaveGlob; + Gtk::Label *lblDonwlolGlob; + Gtk::Label *lblDonwlodLocal; + Gtk::Label *lblAbout; + Gtk::Label *lblSynopsis; unsigned int year=0; unsigned int month=0; unsigned int day=0; @@ -119,12 +130,10 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(Glib::RefPtr const& builder); virtual ~MainWindow() = default; void info_warning_error(int mess); - bool close_banner_info_timer(); - void close_banner_info(); void synopsis_show(); + void save_global_local_cfg(); void fill_in_reg_zone(string &cmd); void download_globl_cfg(); - void about_Dialog_show(); void save_local_cfg(); void save_global_cfg(); void save_Dhcp(); @@ -162,7 +171,7 @@ class MainWindow : public Gtk::ApplicationWindow { void stop_ntp(); void wind_close_ntp(); void wrapper_system(string cmd); - void info_status_app(string style); + void info_status_app(string stule); void wrapper_update_time_date(); string zone_file_read(string zone); void sort_zone(vector *time_reg_map_local,vector *time_reg_map); diff --git a/style.css b/style.css old mode 100644 new mode 100755 index 8a2e785..ea9b691 --- a/style.css +++ b/style.css @@ -1,17 +1,13 @@ +.boxInfoMessError{ + background-color: #ea9999; +} .cssboxColor1{ background: url("/usr/share/ubl-settings-datetime/images/bg_top.png") no-repeat; } +.boxInfoMessOK{ + background-color: #f3f0ac; +} .textHead{ text-shadow: 1px 1px #ffffff; } -.boxInfoOK{ - background-color:#6edf64; -} -.boxInfoWarning{ - background-color: rgba(242, 255, 0, 1); -} - -.boxInfoError{ - background-color: rgba(255, 0, 0, 1); -} diff --git a/ubl-settings-datetime.desktop b/ubl-settings-datetime.desktop old mode 100644 new mode 100755 diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade old mode 100644 new mode 100755 index ce8e835..93061eb --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -5,17 +5,24 @@ False О Программе + False + True center + ubl-settings-datetime dialog + True ubl-settings-datetime - 1.4 + 1.28 Copyright © 2021 - the ublinux team Setting the date and time https://ublinux.ru/ www.ublinux.ru + Это приложение распространяется без каких-либо гарантий. +Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. UBGroup UBGroup - ubl-settings-datetime + ublinux-ubconfig + True gpl-2-0 @@ -24,9 +31,11 @@ 2 - btnBoxAboutDialog False end + + + False @@ -40,150 +49,471 @@ - - True + False - start - True - vertical + Внимание! + dialog True False + vertical - + True False 5 5 5 5 - 6 - 6 - gtk-dialog-warning + + + True + False + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 6 + 6 + Enter DHCP ! + + + True + True + 1 + + False True - 0 + 1 - + + OK True - False - start - center - 6 + True + True + 5 5 5 5 - 6 - 6 - Warning! - - - - + 3 + 3 - True + False True 1 + + + + + False + Внимание! + center + dialog + + + True + False + vertical - + True False - True - none + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + - + + 160 True False - gtk-remove + start + center + 5 + 5 + 5 + 5 + 6 + 6 + Enter DHCP ! + + True + True + 1 + False True - end - 3 + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 - - True - True - 0 - - - True + False - - True - False - Save Local - True - - - - + True False - Save Global - True + 0 + none + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + True + + + True + False + start + Synopsis + + + + + False + True + 0 + + + + + True + True + True + + + True + False + start + About the program + + + + + False + True + 1 + + + + + + + + + - - True + False - + True False - Download Global - True + 0 + none + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + + + True + False + start + Download local + + + + + False + True + 0 + + + + + True + True + True + start + + + True + False + start + Download global + + + + + False + True + 1 + + + + + + + + + - - True + False - - True - False - Synopsis - True - - - - + True False - About the program - True + 0 + none + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + + + True + False + start + Save to global and local configuration + + + + + False + True + 0 + + + + + True + True + True + + + True + False + start + Save to local configuration + + + + + False + True + 1 + + + + + True + True + True + + + True + False + start + Save to Global configuration + + + + + False + True + 2 + + + + + + + + + False - + True False + vertical - + True False vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + gtk-missing-image + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + + + + + + + True + True + 1 + + + + + False + True + 0 + + True @@ -288,7 +618,7 @@ False True - 0 + 1 @@ -443,9 +773,9 @@ Format: DD.MM.YYYY True Интерактивный выбор даты 5 - 5 + 10 5 - 7 + 10 6 6 @@ -478,7 +808,7 @@ Format: DD.MM.YYYY True True True - 5 + 7 5 7 5 @@ -559,7 +889,7 @@ Format: DD.MM.YYYY 5 10 5 - 5 + 10 6 6 @@ -707,9 +1037,9 @@ Format: DD.MM.YYYY True False 5 - 10 + 5 5 - 10 + 5 5 0.019999999552965164 in @@ -756,7 +1086,7 @@ Format: DD.MM.YYYY 5 5 6 - 6 + 10 False False @@ -794,7 +1124,7 @@ Format: DD.MM.YYYY 5 5 6 - 6 + 10 False False @@ -847,12 +1177,14 @@ Format: DD.MM.YYYY False True - 1 + 2 - -1 + False + True + 0 @@ -885,13 +1217,15 @@ Format: DD.MM.YYYY True False True - menu2 + True + none + popDownloadMenu True False - + True False 5 @@ -900,7 +1234,7 @@ Format: DD.MM.YYYY 5 6 6 - media-floppy + Download False @@ -909,16 +1243,16 @@ Format: DD.MM.YYYY - + True - False - 5 - 5 - 5 - 5 - 6 - 6 - Download + False + True + False + True + False + + + False @@ -928,9 +1262,6 @@ Format: DD.MM.YYYY - False @@ -956,13 +1287,15 @@ Format: DD.MM.YYYY True False True - menu1 + True + none + popSaveMenu True False - + True False 5 @@ -971,7 +1304,10 @@ Format: DD.MM.YYYY 5 6 6 - go-bottom + Save + False @@ -980,16 +1316,15 @@ Format: DD.MM.YYYY - + True - False - 5 - 5 - 5 - 5 - 6 - 6 - Save + False + True + False + True + + + False @@ -999,9 +1334,6 @@ Format: DD.MM.YYYY - False @@ -1015,19 +1347,11 @@ Format: DD.MM.YYYY True False True - menu3 + True + none + popAbout - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - gtk-execute - + @@ -1071,171 +1395,4 @@ Format: DD.MM.YYYY - - False - Внимание! - dialog - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 6 - 6 - Enter DHCP ! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - - - - - - False - Внимание! - center - dialog - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 5 - 5 - 5 - 5 - 6 - 6 - Enter DHCP ! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - - - - diff --git a/ubl-settings-datetime.png b/ubl-settings-datetime.png old mode 100644 new mode 100755 diff --git a/ubl-settings-datetime.svg b/ubl-settings-datetime.svg old mode 100644 new mode 100755 diff --git a/ubl-settings-datetime_ru.po b/ubl-settings-datetime_ru.po old mode 100644 new mode 100755 index 1bf5130..d2360a6 --- a/ubl-settings-datetime_ru.po +++ b/ubl-settings-datetime_ru.po @@ -52,6 +52,12 @@ msgstr "OK" msgid "Setting the date and time" msgstr "Настройка даты времени" +msgid "Successfully saved local and global configuration" +msgstr "Успешно сохранена локальная и глобальная конфигурация" + +msgid "Error saved local and global configuration" +msgstr "Ошибка сохранена локальной и глобальной конфигурации" + msgid "Settings the date and time" msgstr "Настройки даты и времени" @@ -1642,10 +1648,13 @@ msgstr "Опции:\n" msgid "Save" msgstr "Сохранить" -msgid "Save global" +msgid "Save to global and local configuration" +msgstr "Сохранить в глобальную и локальную конфигурацию" + +msgid "Save to Global configuration" msgstr "Сохранить в глобальную конфигурацию" -msgid "Save local" +msgid "Save to local configuration" msgstr "Сохранить в локальную конфигурацию" msgid "Download global" diff --git a/warning.svg b/warning.svg old mode 100644 new mode 100755 index ab59be1..9a90dba --- a/warning.svg +++ b/warning.svg @@ -50,6 +50,6 @@ inkscape:window-maximized="1" /> -- 2.35.1 From 503878ff6be83b187ca64e4dab2c933665e37070 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Feb 2023 09:19:21 +0600 Subject: [PATCH 10/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=81=D0=BA=D1=80=D0=B8=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- screenshot/screenshot.png | Bin 51334 -> 56825 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/screenshot/screenshot.png b/screenshot/screenshot.png index b69565f73e1c4bec0b0b3343e7bde0c5fa8f521f..daf786e5996e07b8cbde4f53b55ec2836bbd9c9e 100755 GIT binary patch literal 56825 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
  • $(c7aDDJls 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 literal 51334 zcmYhiWmFtp6D>SQfB*>++}+*X-QC@t;4UG!JHg!s3+@se1{j>+!QI{OJnwh!THlXZ zBR$=HPMtbcwRi1~Qc;rrf{2F*006$o%1EdI08lsoy%3-wzjQj96F}Zz+{9!x5D*Yn zx0L?@03-le2~iF2oYMfW9Q>iDcmCCRP;M>vgXg&ki;2N^D20o{Ff1|X!Z1|mvT!4D zF%qaiD6xw{)=8+R`@->Lhm`+osAb=b9p`o zxeXOXMbHhSWHAg4kGMa~730Ng#IbZOk|eR-J~P!7ysDfeO8)PAP{_C9t^eP_eHHru zdqkKVbo#$Dgt;v;1tAw2-9CV0x+y@5>6~Q800=m~OqgB-SEl}d*U3*rYXs#~3Od{L zsRDul1w9VQoYUz`9oZ>lFx5u?-D>E=kcZc^c24Mz741K7fK77AWZ~$nQc!tyNl+3a z9d6D(t5h{}YgeUBwT&mL9(5vY)uv_<*&@N21kQsrdIJwEOQwQ3-3S*qHDa{Ba^TV++BDGrY7%lJkEUzRVq4w$0Yx=CJyV6)0?9yQ9|MsTEsL) zXR}fAY@(l>GcueF6J87&ba0fC|H5Z!0%1!tU0F21{33T?x6@8?sWHQSnB~T-fd;QP zc%0(O+U2kLLHwD$Rvn+|lmXyx*Hr{(l{TSW9Ar6p3BJMu9^c-@YexSBr{3^MaO*$M9G$JW^@-%b(G^uPzZZV3c}&chnn3wUUf02Pd*U*vQ! zfBvnc@#|UkMM8y=oTNP2ZpRGe2h~5`h}S@tv*ahquPMO`|8Ua{-;MYWSY2(c?%U*XPN9vhYIfK^a^PObSIAM=F+5wy`A=BtYh*U`zdYR^N=SV1kO>m8pS)><9L zG6upEXc*{#e7`?-!jNE~gaJGR@hSWHd=`IIG>1Ap&mUc{4w7UfP(%Owzw47WDBXX| zWv!We&7%GnanK{F>&MHN6KuxUgfWYbr^Qvhtn3Z%vxQGyoA$^GCoE2{p*Mjph4*ft z{Ym1k2c=mIL$|XFwWHqq?1dQN7md!3)y?%jm$k+qKfTTrIY&c)D`Av`r_*MS&6YF+ zsBD~|bye`Ai5>0>5y968?HYrt^=A)>{+1g34ZjygvV-fYTBf=R@5>&)+0f0$w+AHQ zX8?ey^BR~u+aOKc)vK@BI10-E%JaBietP-@_`b+{5O{gs*+52YS9)uLBc-{pN8dxW zdp;J^731^+_6X!ko0xAWR4Qh&*qw88fo%AkO27fns( z_S5LskdQAYJ!zJ_7>H*Z&2wh;@wL^}1pMbW%0gcw2EN?gN%Wt#-}LAM~g((!BuVVU?Y>o ziwrXIeM(~h1ztT_?@%l8y-hS`;o)axX8}wU_Wl-aZx4ruUq?riibsq$AOmdsAM_R& zW&xz`*RSeuU+@$H(=*cYT~{iJne{^b_9)t}ujM_wjC}6mgzOLi2!*`V69z5*rA0Kx zjK;j?&rOBma1W9uLSVZk>-`RlSm8TQ=ssDegD0Za`w9^m*?;To{P5E&vwYr{CK;dr z@FXO1`DvH|R#sM`yz)J)lw(d=L;m!kYzCCS3GBDouDoR!`R5r_0evUxNA`RLxUy^7 zN_JP9?QP7l0BgLwkT~SH+0xwD_zeIn3J9Le<_fHTWCzgDFc1itl`K0jG11b}F&Vwx zEy?%3LIY}hpVG%&c0xZ8vT}0P)^@BX9Gvah^(R&)UA|E*E-n(etu-we*E!faQT3~T zDyuhN)v8{L4nnsAwm=XJ{3+-$cSigsSAl}(8_;v55kTbCUy_b|7< zw^i0Bt#Mc>+3M;V1->^>8ar(?)z{YEubem&aQVZU+J#PkcH8fM8@8Xb&J(dA1cW2w zCe!&36^QN(D+7YJlhtzB)~)ogDp^iKm($YBkNAtF;y#1F1U>CxN63|y(9qN83fjYw zKBO7folB456o{*id2~`#-M-Jxck4e)FoCw?*I$N}eg&g$e+ra_7ij59Q>}N#r>`QH zfM?1T>`-z~d;5!GxcNc&$p0qa^O%3{Ha?@?d_tbU=i5Iho7W}Kx&9S^6+^j{0uS)u zRaZCEFgX3r51`3ZhJTFldy=hp9yOzLP#YirrL z!iw_jR5wBu9QQ%#1ELJllMPvEJK7)o#DJiw>P6!7FT3D^N_)*A#+?2L%z zO`rVV3no4Tqj8~DxQPK4C-Q6!(=27Kr$^R#cMG$W&OP@RN9@*$`MgK~u|FgL4P>G& zpSfWt%GA{Kq?qk(^w|2P)ufbcB)}dfrm)inEI@LIGP=mS+bG@=%4FhiJy-VGa<7o! z!(fUH@20a(uhreLy>pw({hE*8!+BI?1{uo_(4Lc>UF`5OyJGaL$;J8lYKxN#PwtJf z;ACz}3Z0IxBEV#z!&zAOb~CA1%J>xoq9SzJ#m)~(=WsJ{;s!A2U+<0Y8QWeY&xnf$ zyw&FNEAih{Lmc>XgxQI2fRHipl26!gA83^X7u0ojU-FRe{W|lrS{BbFc6F8C)y)k~ zGZmc0o15ro4C{m_#bLFHftbJJl7H+84TzXVH(oj}h$~E;x}2YgXYI!!r=TyQ*xCPj zwf-RVoyVbhDtfB05fc|o&*o?!6>p}}9`|OW58&#Z&PcToHEGs^DyZ)Ahs0F8&qRNF znNblGayWP~ki*4EB{i2yJ=Gy*%yWIlMJSwYXdvcxPNq2Odk@IX?Sc3M#Ec7ejI@k~ zo%{Hjs=<~}B*MM_go%5I5h<6Gre|ln-dCH|69k>s+O8luPlnhV67y)K3E$ql@aab4 zVE~QG2E0xNW5C%GS~(amrKw-z_1~zK(=FTU3t2UPb7Z0FIJOjRn<*O+0UoxW@}dj=B7$pfTOL%) z-y*PoBx*R-t-d~`zQbN&iphLeY5nmnnB8~r%z#3TD3fZ!wP^%2{PxN=Zh32Ud!Y95f9I2 zNP^9i60^6r*VXk=ays9S!xw(BKm$Y;JwEpuX9gYHN-GLdVIT%{n>|I>rQ2?yoNl%r zMG&jW>i0MtJw~PM=Xj&L#Fl&(2-s)HSXE3P{>FmLzIRwG{Biru9O8JlzsAwXrJGw? zx<01#EzacBO0@9-5JOfG@G}v7b$)$+Y2K`sLJ)13NV0so3+ffPD0z}5c0&faLNcII zc~wnK8bW1V)yt~7^0e7p#6>Ppx8#qhWi~N~`}jEhHW{OcibqnteE9iVG2 z-GvG-d~aX-W@uf0k;~or`iuKxE8*q-T({{`H~on<5HQ^5Q48`>FYwm88BaJ0&+4TrMaQAx8Ivn{Ar1&EC7BQS&mafF7!mWFo z|6kxTM*5;y3c($aJK{G?0{lhS3Nk7P(rNzz6YQ+T zBs6dLY77-{OEZi!BpentN)CHFVii|sBitN(J5VbPz+r*72tqJVeDU5e`K(bCt*Ft( za}2uE_TVo7fE44abXHbY$R86DR2n)uGo0`e1X79GBmR|70G6vs?2hsk!ZR}Ts0yH5 zJPk`ox;RKVx`emg<7Ba`OQ3Oi;znS^C98iuB)zO#?3VO%hGlzk@xY#|B@IiO|Fegl zkXS`a3l}pp3P6D>g%u`6>>)K!o?4XtxvY$;b=9$6$34?rK$`oAFf`FqctMf|?m>UpTtZGUOlY4 z+V3dPY+!B;B{uG)4y$VeOWZ7RJoWGAWM~Ve_yz5*|(z52P*B)v@XP;~~ z6iUB8FU8SOo|XEpJgU!FW|2)B;!s-1JXbg) zmN1{rQ!JLMtE9$Ux|NYpq! z>Lh31H$T?IC9^_)3ceq>=^3oue7)D(7EpZ`UaT-wH&=?R1PJp8Wz&~Y=-hKk7oq}9Ut!0Pp#hqjq%Lw?;>3bAj=<;` z)-vkbWW5vHjfIdSowQd(jKEuzr!32Z zi5FR4@>mxSkLGnJYEX)dBpaW_C?VsSpqv%t&tYOmY1|F$Y~JRFSwC5|76#wRJv1jI z^axnIHBHo@PL#t0n`3aAQ0H?_wf7{ z*t%L{Z!T+G{&8$$*f=Ts&O`7u-SX!j6BeBLiR0VKLr-L-tRf&VnF5j^7MGTgLR2&~ zQui5iLrXL&Ug$xt^78T&==C}b(M32J$e#4ZBd2^%$rPNNoTQ=ET2)IYj&^o*3=B=H zXQ7)OAdgtB#@b-DI|7KcQ4t7S2GNwPPx*!Pj3pa=n0azTQzn{bW_#F(%%Brf> zR%c^V)52wkvP`~8dhwBcJarqY-gPJLOa%*(K9?L4gxuU*p?t6d*Ga6pIeqCF?M^^w zB29E)Z_vd?w^d_%MTJZOup6Ku=FkbVN8n{LZhx zX6|s*Cy%({QFR8=dSOtZI8^(c;s}!DGa@7=jjM`ODMd64Ajp^yV7=qHvnRVq5>4<1 z>`#_Gp2U}am81vKA$9li#RmQ%wer+e-8AZcnn}=VdFp(UD*@T{Y^9plW_qReSsv@~ z5SZkA4z(EY?9)-j7$gawDQ6P5!j@#kivt3q0UDZ`^>WB$nnPGIVG@6Cx)$s>vnL${ zP~s+PZ6if59!zx8cX(uzDOCC6g{4LWz(^se5E9~i4L3>xQqr1tDxn)5XMOKDg5Dd3 zf;c+_-6P=7o_qAuGBPqIQ+y8TYp8ZvQO^JmSF2-C;vjQza5S~HVq;_L*JxEO$eB4i zI_~*woO#;k?P;8w=($CLxf6T;m`oqsKxnCkqp07cE}dZmTQU@8t*f6zMaH_oQe!J& zWePMH$A^cbV6a!a!Hi8R@{EOUc$-^UWhE^)H#aqP#HnFXu6AXGf%Hjq(c@cS{0?NS zXksO9pT>o$5TL;~(M2{+0V{U0H|n6;?>uW88%hcu;id{y-v(G1@Uww`qCQ`cc}WCwC}J?-j9@%LgOm{pi&Q{0Zvh!r7uT~LE^`R zg_@?O<{MNmg)Aih7UIydT;WaJbS<0h`v?hrico2Iu3_abr0!QqrlfLmGzEYgH3TnQ60Flfk3magMwA$LM2gD3`tujr$qw- zDOElzYF6~UljCDOeSJ4KH^Q$GV-{qD$z{qE=(f(z5JwxVv0$Jzk0_CpXd)B;V*Z3a zNMM<~>(2Li=#US^Tv{^FEY?!j$-&{)TY#6BcaT!dJDsJI3;cui{>i_lriPM|60#ZE z{xu7fAoc&kigmHJrXFBvZ*M0Ukt9QtO>R0DJ@6rUWdb!!d9o(+8zLsj44&MZNjK@#-Mcz1KAiS8>5F3~_vuFerJ%?r zthmiNmQEnBh$iVWbe45^=D+axi*dhgYzx37_rFCAy#SsHEpQ zsFE{ho^#{nAw@Jo`O2uUF+)Z5*;LDI!$}jVCb1w82r^)s)N|E&p2I)UKww;490dI5 zE9YDcTe9#4qC^aAeg9<<&j7M`%?Ol55sUQRh*U+XZ`P?t!pI*B^#&i@Jari{*WWe| zX($ljp}~k{^?yFlB!SyjZ=fSk5-E?QEHOhNz&2Ij|AuLn4=g^O$~AZeiSbdOr0=dJq4Gp4fFeQp|C zDZ-*hk_FXW&1ytMDuNaN%l6knirrdZ1KBs_)5 zchIbJc%PEGJfi1uV}``$A=e^ z8RAe0k=BcM+CcjHzi{HD^!4?1(;1nVAo)Lp#0C^6gPW9JL<0%-`@6e|3(SM1N(WL| zP16DG6ta5CA`cuEH2>~=$&(Or4@x{$SJ#?86NRGA@);5~rd%dd3>h9nAJH`dq^#hP zF(%0+Rf}d2Kn>8$kkIXmX2?lCrcSFas5$m-Z0#9)1#jOXboobnvd1K7Y@%5|FzDGu zdr~O*Y)WMul>__X+2brLy%^u?#Hb|G5UIGG%_FoF2&9O%t6qdUf)guD1OlxZGtni< z#6GJg4li=53?r~&HD(e-l}b)FFqkDWfQo4F)RR(|RsGRg7co9TRtbVqAt_ZqnId6C zJRA)#35}aODl9!EZ`n4ny#azlwtZ&>zraF6{1UQ8LqkJc*>Q)(cT9X$iAu$b?JZ4B zIt*Cb0y8#|ut*UDKScT8T!l`093zs9 zg(qNI>Fdv0%2yKEWQH+@5wr-*^>)uaAP|}pCe`wu;%{5;R&8sB!(V-F)cz3^I{$zD z?IW=a7cq%}ySGLn=ElW1+cK2wu0Y^;0|SW7M4^in2gYSR*_NjNHdR88OY%TO*^adD zm!)pZkQrAtZ#?;84oy@C`%nRY_Bzh5iG+HFlRICpvlYvFoizyW1Sx_V5}EMgJjdi5 z^qv{ynwFdG<98y*Hdj`nSzB}%C}JSc5)ThgfG7d9R|Iw``5Z=NpEbp?ie*j^B>{=@ zkSb}*OO0%DauQ-`yJoyb8gZLz&IA6;E=ygl^gW01t=a4r<#{&$(|q+W0m9McUv-K{3a1oLMn&{QDcwEXR6!>6o!-6WTAxB3U)YXM-lSB($RSdRp^5~>Ba@^5j zgD1n!3Tc-@R_h`reVN^b10U1U^g;%WmIc@WQ`s!9Tk`v92kpLBPQ>fXEQu3Jp(&N} zj)^gvn5dBA2r+EzyG}9Aiq(?Spo5>I5q;7!ZfK-BCo^-xfsbsmg|3p^ilC)uWD4_< z_wn&D1Z_m15IeDDB3K`F&2|&r*iAizhr>y#ekI^B;mVF;4*SlR;((MkW5P`*{(5Ru zm(f-zsXB;ru)B-;ek|Wy_>CUauz9hxPeD&d7m1cTZ>OZU++@^Qm8?>WPgY)Ek7lm$ z^?ec&mX;l|+a_0`h%5*{JxNu z@ip}DH%<5D(6fD>ag%M(fXL{Qsj>PCzOgf6=n#2Cx>1$?S3owJIu~{TpyW_CtQAhUj++Iep|2&Ig(o_aZkS>$Px+iI zRud|c>QW&UM<>SYY%sC`S<>kJ*=kHojGL?L=pzgb%rs3t6*jqy77MaDS2p3-k$6J> z>zkWgC2AL+llzAUXuVT{5#1WC-c8~-DbV;hKtvz(*Kt$a*j_N5Nwp+A(R5^^+b;qc z7qS^R)w`KBmnxE_QY}iqn98bQ$-WWYLjTg)i+dQ%`cX%NxJ(?p)0uR{@v~lT&TE#9 zKiatyf?4qu+;ItXt(LZ86g!#y_6HKUPZN_Jh2)}2&M05Z#5ibLH^*L4#VP#FyaPK!AHJz^OHE}#4vKAF4B z9eW%(Kk6YJiLwrNEIUNHiIbVyU+*L!PY`9-41Km^ng9HSPm|Q~?!?wynCI|g?o(j3 zQ^&y>rM>5Z#q$afWcB~F0MM0cIzu|2FjJ1Y|B{=zvLTSdRYYCfR$N?eUd~c8Gryew zi8&zTZ7Sim<(Uv^q1iqF%k-oXNVX{kuk8_;QSQ(V-4AOeCojnDbrskN2G&Ah1>#s*R=x18p*IM%1 z_acvAiZ{gWK}l?>PB2UCzQCU`*!w0u^yevoE~X5&psU}KL2Q1~EU)uL3v~=HMq|I# z%#d}4qM?Bf<}U4XInLY%dWu>?T>3c4yZ0(hyr`8|l45kw;o=NPky(o}hcM`u1MlH; z#DQ-)<|7+^@1LKh+&ephW~Ucq;s|V&tL{?+CG8j7vrk5_^5BNki%+zl|8|fPu06MXgDW zh5WOAfW=N86d_@LSU!69HgK9;^!ieDL2TT%LL6^#3q4#wr;~IV%hx{0SzlB@!A-4r zZyI~D+J#@09cXh2#~Q-}g$j+VlY}d&!3$O2m9(ZAEBt5$I@rAExGyPo{uLA(B^(VjQ7B_i~QQ?OV>j=)!!OqFhRQ}Q$Khy8+-y2GZh=U(aOjt=14Pnv%kQU~Z7r7($D zn+)`$^Ll`3-fNUZ53=7DF7D?UHkWqOP)(X?R5Zi+9*SPS`q6GHvL+~!g`i!HebhdK zTUUwNzE7P(@u&a$ryZt%^T#H1cvSwt{o;buM-3+edzgh!OAfDRwYsdeX0FU$txg`V zrlSYbUQU6sU;hge99AUOS8rwmf_nJ zr?jW227lwsw`K5>(CyZ>f;|GnwldKK#``(^fjrpRbtfzOTb?V1Upp7}PaI!b-XFzjci@9f+br{q9lcV?r(kJY7|t9WdUu^KHr+N( z?UjW(5@dxmrde~(ZGE+2Y$=;^mFi_Xd_aK_RxDo)+&kh}_~?m}XZYUKJKv+YY>R*7 z0DB2k{z;T<=^pB@pB#68-&U6SHBivmO4R-@sOa!pqch+1<7EUrTe$~AjFVKyu;aMLhLZ#K}-2eYmlszX@eKmEq+F zE~JVgViorX5T!s5Ch45H<}fRjhlqRuzmZGt4$}ru1I+H1v>i0qtIu)Fb*ovbGKknW z$Pg^d1pvr|8ou)-;|5-*1|KD}3RH8Kg_r{oT1{S$i;in8y&XgVR52#)^H|>Ux)&>3 zKYMm)9Jm@ku^h1KSBG&4THy0@bXr*VUCAU(MSZig6OiK682Vg-A&=N{$r%)!PACh(bfc3 ztr9Y$_o10$?{reF>;Ws@gI(R9ub- zRI?7;FpH8KW!Se>p`ha?rC{W2q)o*N#mv zV!jkKPfCaZFWtr5pYrWKDFu-p{R`G&&=kc1A*j;(s93RcG$|A}ar_A4!ZESZ)=Vre zPoQhaRt#Nq#F~5Mo%7DSsISR;OxS5lu~u%(`ZP_X1ggo3*)avsc?wd^OqN^S`guhGj>riIA?S z)~*Y0e`K;iEQBoi4V=gfOkK8M!=uF|!;2Goel(ZQU>v~FpD0@%A&%43)x?Zl*c!?k zCxD`NO<&_IaUPTE+%G>*EPOlV)4NC_AdeD3IXe2?FM3mRGL3YvAbE1DzT@$neT2y# zkK;>v$ubzs);V4^vs?^{Y_6q|+lwT9B1%}%mmo`uAPTS;sWl{*jwSIzyb&}HN1>t) zHHkflWjaVZ+!{EA(O_(%T5;4b#gxJ15trxsR)SXKH%~tK124hrg>3j&%c94-TH6tSaM%&b6o{7WALJ?U0(P%PfWWGYo|{@oyY=inDP@?w-dV*YVu+)% zZ-u#Iy&gi9K?q>o*Ej#)ruPMU;mqj%JtmpGAn zZVckocidU83)!@mfE2E^wI{7Km%Du63q z7!u-=?@&s>IUN9TM0ot9Ge99--GeZ&Xnu`N}#IJGgz0`Y{I@Y;vA7p!+ zt;rO0B+@u3m2JDEo@(IcZlT~}qbeCNZyKkKj2>}3Q%2vC-29Ei1Bga%TcP)U{}Sbn z47Zx|Y|j(c|JPBa{E@06=@+~(dpa?V)rbzRnK=R04+0{RsF`uqfy3w9SrGHW!a_jv zYn6Ed@BMZR)4jJqr9@QGPW;pws32SdhOZHqB zYw8AxUU#3Y)3C4}-=K=2Wi746rX%(I#HF-5`qtCM_F>S(^zk^Yi`o~zutXU%|B$Ga zMvzU0ov%;Yl~8l|o1D_K$yOG|gyj1P>3Frtv$YO|qjxSR&nieu&92N%$n%sX{`36v zyi;>|C%nS?3|R@x?M_7LS9oOPMswt7HQj$Cng*Jh zZzjVpxN-tlY|C>!J4g`tWFh?5)4Vz-=K>NI0}Ug+W{RVPYe$Y&m25Jm8A-@eV+<@t&+r|;oE1Fv!Lqokzm$i`cAkw!d$9hSn%8;r-7P&q)bf<^@}YsYn; zhcKBT1%>lc;20Seat%B+t(^Sq6pcU{^yMDw-c?g#HKXwYCUQ6c5I+l*Bw^KKYArJ( zC$M4JAsN&1=H4*62*ca88tdjq2VAU+QT(cDBQ#+6QN$1i`kziqR~xE%S8odu;M#Rf z$?vqnLN?tVKN}*c7;$X$4DirPE{Ttihma)Mll$L!WZY_;Y}7QH`%=tX_2OP5QSDAH z&uW20ycR08AX#c4utya{@I@;H^-ILZ`(lJu&l#yROQH2;CaW40X|Ei&sw(bsXU>^OJuK@ zQD0&Dx-#z9j+2jFFRs7nq~r3og&gp3zJGC2#el#{@C~GkkYik@o`%6ntFCtFo{6=) zKW&+Xfjp3?W224ZBVlaQU56!MooC-c8?C0UPJY>6Ao??M3boatDL0A_Kj+uY?VAMQ zc4tg8L_>5&?%xEA0Hqp&Sw*<`rGNrFU`3%(8c+i@b-rgIpbytNhc~c4lzYQFV5!!y zh$irHMjDjP-21N!sZ24u%(9jyT3Pr_Ls4;(u$7sHk#*HKIBj02EuR1eyFn8YTO`~&Hui5&; z?#%D&S!(CrqrstlV*14)rHR(8N$vcg{mG0sF_tR;$=LN3wjm5adCha6 z)OrFXOw6e6VN83&_k0os@NWqILcn|~mK^*{33#>qb5X~0zyWw%t-27pTp$=X)=F0sOX|$UC;tILD?$O8)WcOZOec30t7ry?lSUR(1(LjeNT;@Uw3LC6C-}uxCb>Vr%=#hAU^pErHomyWlG3qd0X{U zkBvtop7)#spXL%UDQ!<}v0?f^DC&4%vmvUnXWVeB#gFLTU zhw?dFw#=!{t^0LN&VxMn{s3+Ra@hv0GVPoIJlZ+wypM-XBY7Hi8K_tneSQ3=5c+PG zvC$(wB54{S@1h<=NT(NkppIdA`nMjMIgvR(F(KkNL$*ygwM*TcDutj7U`SX}Ovp73 z-7q&|gXI(kZrlpI^@r?|XX?}`W5Ang0d{g^O?1a4s7|Z)#c4U4`D-1GJl&dA zbB6)btWA&~xY+UPvp(RjzPi`>m)73rzuj)}na}|K2km^9vzi|!*g;`rN!CU|UUw+j z!p|?{xA5VRe(RXU^^?D_!{*)VYWm!#uD(jQ^(x7bsZyK zsKP_02K8v8VeqljVr?A6>^Wz*=hIVDGkNi#t*PnZ>DjUF)Vlfw@I!+h9e%d6|0T2ihToWNGpeJr{~@zG>seK0=f4N9p4Usm#&V)DmWlgyzaWnXa*s*F z2qT%~*L!PuuCuk5DfJ-Fzh{xx=GE_k>ee(43B)-Mf3{0CNLPIFHuW{#-W4IKs&ei; zrs%fr;iJ=YC%tzw@F#H8$0twAnHsR`D-c4$!OhK25I?-w^1Pp}qS2(ssF#-_mLOGp z60~-IivQVCt|t#M%84V^g$3vI@DQT#Mumm6U>6&48?{H;Q9sJi%X(bogo^Qy;gFD! z&OAFAMqG)^6@-q6;-pvsBST*iia2Lbphc7)@VumpRa3?&5JHBJRuJIs>eTNF%mItT zCb62$)8okt^gtj@^zQG~6eb@iWc4zFw@dMayujzoQ0X4MhTSvnO`RTx!zo)tcz@`y!Awgtg0E(DytUK1hUow6yq<-s@^>*B1?SXxYw7VxK{fF3(1}>aDuet z*xv7tlcY}lMdq6K=f+PMv(Am=!npE9?~@+D=D}m* z@n8fk#CgL{cccB>IAKlE=<{nE;>FXsa&Nm>Ri&fRrZcmU^HTDMcaYB2mYXuho}Y&1 z+uS$sIIyVV_<}f)4;8tc;68)6yVYZ$;SD6*^E4g<^{y%|TW6dB7Yz zy*W_S`&oPGum4>LJf^0g+j+J0hqpKddK6xn&Op+k$AgfZJcR6fdAQi@@Sqo~Xlwgx zR{xzqTF=Vd{w2enE77EgLh$2WIxAa0c~4m2S$ih&hvpTs1VX^gx%?P=1Yhx{T{AKs z$LPg_m%BSok8{K?i9=+*SQo>9fk_l$MgAU5&i%hh6j3{EMMXs-B>T}m?>|0ygT3U9 zUZ?>Ql2;-D->^R>d}qz{E;E9{i)SF+1Hb$?Z9})Jz8mnyLpcn+(DHpRiqpp#Cg8W@ z#d|9@b5&*K(dj9L>jV{)`RjSPyo^*puj4^a7GERnpC3M}--0%^)vZ%oEFU(Q7oE{z z|CmKRsqw_$yu3kry9YOwKxhC>lxEETW-pk2OK;m`u7@!MDNCN8eI->#wTEO!j@*<5P~1Wm=Q zdO5Gu;{%MmFQ-6Y-drdax6?E2kL%YbH>iJMt-|g+1W_K?g4f&jFZL&(n9g{fcqwz^ z(dg(|%GR}o{X0Td&)aNe;R>2)tIOH8hfM7I#rYX@J3BkELKRijq=79HT`g2trg*RS zhcrk-3k;DcvjQ&r`HAUxTKaw85>`D=t7h4zCvLb>zMp7jyk1YJbBt|$_g-x|TWxV% zIUit~}rO5AnHSlbNErn;S&Ngjdvp{*wyYHyt8E?s}Xl z*Sw2!ceP3U(FMZH7Wy384`I4I&z9i<3?PMEj`)L59lxS)T*ZI%&ASxmcOG!5DP((| z*&iYMzwCGd+8~?kfWXV$T-{Aw{bp>gj3{WA0^ohJ^ASfR*wN9EHOgx~r2y~_*ebVb z{JahKlIdn`OXs-W?R=DVm(>(LTxQtmNyusUw?1VUrca-knTXAT1z-4cbA4&eI`LYY z$4mI6e$$^)3fX8muOEjSy}fPB^$MJ*WDxZ-B&jckkBM&9JnB9 zB2E*nIV#pjU|_HpUd`Azft85E1{D`4OpJ7ve(oKM%~Yf!(^8i)*vSGg24_)3BbO|Z zV=Ix`LMoNf_p>p?CYVKK1BV}MCr%XW!a?Whx8Ynn;&#@&)O|G$TG4^D{L^>Xcxia( zqHxSH&Ed=e-w_!8y+6UZ(8b~yTxG{hEd)9(Hy>;g2P)JCtu?~~c+v$Qc6p0v#$4>L zVtLt(-wwaIzP&9H?rwLb97GpYj3NR|Vyy`{Gfhze&}kFEv0H|(at3GL-(P)ZDsT{B zWvPfconlu_AD&^dz0R?8-~it7{4ayw{BwK0^N2~Yluz-TzkxHFd;%s3g%ohj=obS% zR{Fu-@qSl@o%_ZfFzsW*XPeS_LGAUWah91V`F{Nj2!TNv@UjEi_7IZc4_Pj3`5Y~X z4S)(l*e=ucEC1Np+XVE5mFK$e>|qDi+c{d3JYK^SLpmdKXkvpul-O8skfn<2pIL&2 z>+2X_Qw_AWwV(WRvw9H#|4BrY4!l)0JiIg~1HkVfr{1Rt-4R;DgFlqNyeV#eG@P`a zR|OuueHCZ3KXkP_=Wuc;;F8Z~6{2>R%v=zAF_T0x5+5gda{~ z=Xmy@hFDZr9)jp1h~B_aOyAm)KAHd-j#3tn!zPggp@?QSkHGvrWdf4E1;7xklq$y9 z_aDBJy;f2F4{H`|R|4<=3sKKjP{b_$enic(kP3eq4;-2wo(5(Wuy-zhERZ7Hw61eY zszxBtZT&(gd~#Q^7hE?KrkN&xo%9?yTrj(>U)!-e3}T}AP!cu`zmH`3Pt-j?Hy@c+ z3+vzY!!-8udg7liy5ywMW;6s;a}qQz?KqABEXdK(pFvERm@ok7LDw!U9`q=?C5F{I zM=?cs=kkx|7vd3|O}`z^l;K!5D$o83G(Z8(@wbnQW~JWVD%L^fuH5&{jhjeSXxj~o zF{t_-gr}a5-Z}|c=-}+SE^ixKv`i)c{bnz+85s@$U z4dI5Zv;u*iQC7RJsw$iMiFItEWt4>wz?=VVY2zi5^_z?YM1H^dX zn-G#q0p;2wK{=WplX<7sZ}OR!Y^)2c!#_j{>g#9rT+=c#*pa^>!$paTFcU32>2Msx z{wJ_#V6d;(iM*?6T!a$QTu`AIY^a{J+VLS8Ssz@_Q!59lnSUj2@q7cY^6%sL^7CB7 zL*t%vc0-c)$Kznqi!|rT;F1T0k$AXZp22gc1`n@iE~{yn%RpP69wt zQN@`$W!iO$C4DoC#WEbA>*EO>K#~*By3rJ{)WCU?QKMUjs>iLt5ZZyo$fVbSUeVF~ zx_a>nc^F55fZcWWR}z3kZZ;^RS_MNgrO{?t4lwG%8=;wMi+lSwrf!k5nSj&u^sKkN zfjv_&a7wl@$ZPBgaGAip8I+&ZJhzx8biZBI95*Q)SJ(B%t$n__)SM^XN|>r5qLI8| z*o6$RQWSJ`-K$7XUyM=Cga^biI_B3J?A$z!BMQ31q3`|t^Y0};pi*|9C*Bmt7ccD= z7q2k`3o8|KHv!i`=%TF{>Ys>V_p-xcRw0d4w-K{$7Q`7KfQSW$fYS~mjdYSiJme3P zvko4ru;1A+SQ@!jr`P8soA^W7d{1S!;4-Ke-AZmtk;Fyd=p*^ zqqMY?w@`sPwi_~6DKbOjT5XKd%F4>x+V~09L^jHtshch>#9g6o$>8ebZJ!ORMq7I9 z;u#wVNE~1xmx@J&70vD)d$mwW7S1||*x@FKH+9XhU+9|V0yE)Iyi+62kG`LSbcYZtz08%k_!9w>H z-+4GZ2d8T~9}L|Nexj`1X49sTv-a74yyZA>bno}O$-Ggy^7-dtH6Gnj6RTh>6X(~> zZPlLC>UG+Jy!2Z(Z~IaP#^tEAz`PHcac;N9dc2GAQ04^ilCLRIsd-;?o0m4{HZs4(5 zL_*N&vwsJ&swSljBa`_=4C)Sa9Pum9m=(m>!^v)5KK zCN$Xa`*;`Oe8*q^jDYP5(`?W4w;Oim{T0Vz_%yhItuT;Q_s5Vcplx^FXUWLBMMBoz z&hGk&4@v|dXW8LCIT_tB2dHA84IqR-lsphMVc>#QGeqJ@RXf@-_N%x| zn?h9DtF4|l?#Jp+yo*5=E7ZB^zZ6w;DTT_2Fl5G4>=p*a<1)eHnXtrs!)=9?LsnjP zyty1BxQ$^Cy9A+U@?0@{bzW~AaCev2-+lAm zygTz_hF@?Rn%=wju3A;KYV9LpkFv(Tr*huY#Vnj1PkbHYb=X|Xeiusu0+N3Jjk__V z2Kt9K*~#LRpmw%~QJ)QtKt3#z^E^$(}&o?=RCk`FZoRr-X5%TUQspi=m^*wpT>~|9?MM&x&DUh zTU!guCrE=Qvbc_h^t|8wo5L(>C%g>}t%A{D=woVmoH2NN7@iP12UccL!tInTmw4Z% z7oE={>90rIM(qPRJeC$8fV)#kq*u;~z+p`(Tg1gKm`;U8(6nnMh|tZ3{7qT8=L^8R z2Dr-UvxAAz*>l}<*dd10oc+`q5dxs^wVEJz`2>6zvn@k55$IiC@*3R8qyo;sFMs5q zABJVOB!8blHNV6A(;<=1jPLG9UaBb3F@3uqg*afp4-3ULOCdV9TUmzdPG zDSI|Yy#G;GH~E5iVP$1OvXLnrmv;|r z#nS^WK)t5&Y4S+DzVw@5aIblW1K&^`=zO$Z;l``eCC?*^M4-fHlPwmUWX6JE@_@+5 z^l3Iu&cf32ozS&I*jS=fLLvS>lP-N^L2|p>SOHktX{mm-Em|L=yy9^A1&s8ehlq&eQd`wrgf4*5G){Vio`Fs0%Huju1xUXWkk7H z@%-6vjK7@PYw@7*eM>5_jWBulV>rX3ytRDL|GY<%=rsrM$W#P(T;77^DQGtllt(qW zA$u9}b2|Lm-yhZc%@Y26iOMTmsrv-_t~CgT{|~==m`OO)5MNsxWsXx0kG~h{M*EXa z24nd>F`{G}jy73?wSUqi37$YnM_z$ca*`A{PbvGJ1tDfMi96lN_8Rh}0tkOz?S zNXcU9Zte6nkbep9!N#T(2U-DqGV^G*T6)Io2>a>)B=4|dn?w=n#6W-?%JY(`Jxa?+ z`|iho^?1nG)iLO(s33zXZEbtLJ1B|6fPlV*go!^^jX2wT2^v6l=F1>9_73pCV)z8< zpdT$aVJJlJK{q!yL`3@Glc*p5!1%YA@4X%#`9DNoRw6%XWgyd?b*$Ykc7Wbu1TGY6v4F)J?ZQI0x&!2|mx z_4dC1PrpzOgyg$c6Ocj4%M)SSLl=R8c>uaijJ&;V-cj~_*)E#gLkfv!xMN^qnyF$L ztYdh32~g=S&GKUOy2hD(CZtC}OQn^(y1GgcN0a*{7;Tg_aJlYC=#z-Wad<9M z7(W_3u-Y*NjPT5+au7il*4B4VFN8x$NlEYj0Cc_dbR8!rC!kOZ18Qt^?fI^xrk1sL zjIx)N<|Us7(5^$o1}OZw(m2rTmYy(xfj$= zdD!4A;jXKw;PTHir^n<58u=nu)%+~Z7+;<(D2>PyrNh} zbF7O~)_9t+ykewO{n7A1G(YiW*c;T;7_U8kUS8q__gw5P`GzrtXfCA>jeFPoIzS=W6|>XJ6v6F z8YUXXii*q_B~I9}#ZF|w?_74Ico?OW&Fe^xG^YbV0l zzx)}I9aMDV%`C{gUxoKFl3>l-U?vmO#<-9~OHk-PctB;84@8I!_DT8tW zv5lPfogpgTovZF@YS;t!xj_ZC;4C|tj9A}0gh71g6m`Ael8{_QX#Qjdx!KbJwOqRQ zGfRCDaRdgcI}E6O-f3XDxNW^EzL(F-vK0)Z$ha+y2j{jd#yx`PJ}v#l^_@%@8xGWu zH~e@3BS|jp6QK>_Q6YqTk%HR2uj2?diBXX9dM&KiCa}+K`C1VnQ&Y-D>O!HCWJz`A zhE!R;k83H&h`fee_7l@Bz)1L?&MGgbji�+_yIGRH;9B#;x|*;tNR8^pdbzGi0kp zWwh~Ap==d_ghTx9XC$_qPqhg{NBWDYd>{BH^M@DL=kh2Rs%ue2_80fEQxl+OS^$ZE z`W9=Dn|Y}7U)tzj&k6l%4eGC!yHjp?r@uhP_XRT+esUjp1iwYh^Y3V$RwLOtw(GSS z9pYMOr6qREs1_8g6jgg5Ku57yUH8?gJ{i?ppWSN6j~8hA58`o~!BreuMAj}7LMk3O zsfXA+&i}EWu>vm(+ju?3fTPPr<7Be~2lVg0T~i&!({k4B8#5hAUyebBQ{J#mFJ1y| z*XzzHUSy#jR`Q@3msK7csPh6^8&!_4s%9I(3^P4=FI`B9tpGWWD@k1OvuKV(47x zI`JA}-Wf+JiM*w37^CRfzsMm!2Rv)*lY@TjaF?$?9GGVVRnj6}I9OE>>7q;0;gSj^ zoQRCr@x7h9;yl9Qlc?Iw567c2lIyIrK0HfpRiMXF=L^79hX`|Z+kI9tADPCqyH3?z zxd62}=SSVGN<|K=y;Q&9UtJQUrTA%NleNqPBZS|lb9;(cSdH$ z&{+Ovw|_CA?L7i+D_UXh~Z*&{_qfRM!aQi%m5ajnJZ+8bGfQ* z=qb;4(yLb#Wlxh%pA(rB5e-$Vg;*a?wj&UlAnz*_7TDPU&1mCx28~|wwzlgPTJ;|j zUP+N`MwMY>HI7>~2NuX4aAG;kV!r?JU>F3^X|gDBL2>C~Z0&o$7iPzQ@V(&1n2~hj z{{H38@xr(}kC{SvMe``X+*~M^U}aV{ogLi&>8jxFAX2WvHNTs?wEC-W(Lww#RrB?4 z<7pEGVyv{R`R~$OXZbLP*AZFFx+Xl%LLMOb=LhJM(N)Wt8^aIM#zO9NlrW(0$vZYE zlD59k^6Ji7x04kqu*jLT%9tC3ME@H@%o6%3UQkR=!i?8530~Hr-Fw%obK$oILB{In zJMR}e#Xh_~0tl;o1 z6ssiNT_j3a`iay1_dk=-(lDWhV>tEX^s7y0_ZLHq;^Hva*w_P7fBUgkKHbuhC7*>a+Dz%HYJ5U=D}FJ5#lF0 zbvYX129IT7`Ko>(OB^OoW@r=7{_QIkXMR$ZRuKC|eLkw&Dj2VyJb6cxNdQmv9olFb zkc?RtGe=sey&Yw9j$!)uE{Ec0>`M*8mki#q%YQ7jM8(~Yb-v=ZVnP6Og3oklCWUwi_2is;HyG;pg5du41 zPKaE-TPRZsdsd$Qb~h8EEoF;xq2If_iRxl|{Kmtkvja}@;I@OZ==HA(oKg8M`PEOh zsn3cq0MXT8BJFy2F+JYz3Z7u0-u(T?$HPdFvYn$%O?yudMamx#XppXz_RC+}pP#5a zoD_K9pTtBqP{qb z7?>+n^Lifc&vdjywAz~E1cvc9e=8PNf0^MKM9}RnlqYA(P;g>E9E=t=y?HY~>wp$e zJqij8-*$O>zx?3kA?&>Kb3yw!@VG?68z?CD5liWKB!80PHWZOuDoI~Vs4zSSekP8$ zC5V32+ATre&mS4rX?2O-+w`H!fZ5TW^eH9Dz+{^TUY}rWo zMYeDwOmQ`#ybk)%j|14H?7^@UdPP#SQeX0!{bO|JI$M6JMF+B8*^2n>U@}>;Q;n2z zSXh0x8Jj{Ghuhv|csTf*e&px6HH?BVBUc-3m3O%vNbzND-i)`c?Ci?lSyy(O8zq+r zW-i7@=J&q&bPGpe_@^rDL(vmr_39vEaRoF>gmDrVgDpXaj7(Da45iKC9#ecOCeKVs zt_&-R7^q0fG0$jDaXi0F9$MwQ_G4|~lAczS>3e`?qy@XYDBqcMg^;F(-c z7}OPfEE3#ZR93tu2M^c2hoC$b;bzHWTg^=v4253ICjE$=Yh$v%hE-mMn44@)l?uJi z-@$o4lDTFQ{4!#B{(Cnqg^Ew&g3pgTRTS@Hcn^{sDNnJqT+2n9vo}W|Za)#`hG_<> zVXIqG-%ElVOQQ8F;?TlH{gQcgxAwRb$*I#1`ZX66(_YkniV_}XlJ!~X@1kThPA$IY zZIsm{lH74V!Ptb>F5Ygb5tH>#suRrxBeSBx*Z6g38{#FY&}ML_+pmaqi}cLH`h~(A zAol?hQElIMUI9`ao8D{m%-@m}8G+=Wsh0s2qO)=L89vft$rjh~-6OmjrI`3Z^ zhN$R7KD8bCX9u&zs|}VENiuyh9aDu@Fju_08oS?sv3N^=|@6nXq))u0ytc$RYdx`mr)zm!2_h3sDNE2~6VfTD~?% z)m09JZS9ShnLV%>CkrGaZoA)9;%PiD4^@yM*-nt|p5Ui(9u@Z{NOMAWk5L zykD#kF%OgxXt5;R)ShDZ-5J3yRR#3obai#*W?cX|wqRK+`0|Y$d`cNc0@W-ZLmomD z;Qs<`%`z~;XdV$!HJs>SN>iUAsyO>YKA*E#q!rOr_iZYbs^T|F08|RPia%;>^!8$F zwZuwS26V0#@l9?EdaJK|SG~=G`s~YPmeFVtUwdd=$uuzO3xcotTYrh2Y8zz^Ej#ii znri9iIyxgW%VN2ui5jM7MiLhGVCK^&$;3%Tp~VlIIHisOm71g^fP>a3L4^M)+{qnw z{e@u^U>I~ms%HX&yYlFHdGSccdv$IY)nZ{|AGoyTaM0g(wp=DjlP7(B>)X2m z_DHMlMv**0qjt2$h64|vtASn3KJIQ8Ov!Acm;>*Qq<=8HcU4$aWF%N$SJ$C$@8{Pg zkMNk7-+u{%V^#3@UUMu#Dp~toSKor5GQrd5+|}J`nD4dBr-KMX;MaY8Z2^^ zXf%^e@g(Sys3<8*Rq5K-?P@hAvIVnKQ)v^19WZ%maL}8^E@Fj9{{gxdffh3b2=cR7 z;xO;uRRn2QCL7|F&(i_DvvkiBl2iM4NX|J5~$<>#SuLw z+!$T-_kk!_+Li#z4Cs+=)SjK0QBhGj*ZWzWsZwe)ofoohC+L2vD(syr}xb(RLxtj)M8O`p#f9fAqjqc zS|#F1X-MwXH|2#eY;f-{n;JO^8S^;P!|FKTGK5)M;*iPu9WDC4PKxu2l3!cke!_W~ zHS=2aRPd^mS&BfWR3Bo{mLmd3Oo!V zpg|2K^J)Qm!Z?dxu14ePfCRRyhd@c_1 z+%?+3I|?-fTB7Hz)M&7HGMOwKqyAwsrw|ijUp)9k<8#a$-4G5vy!ds1(WK*9Q<1Ab z>|J;`O!l4K6&Dp<%Fjs!IO!MYGNnMy6s4unBL@VsQQ<@#{`{o(M;&$~%p%YNmJ1eQ zM_^OUGX0#)W`wb|hx~M6A{Jnx;6M5ZkjT$=P#e{1QYAe2bOG$^iW{jfMG0JZP0I>s z!ShzG+=QvAsVyf_qeFXF2xl~{x-k$rB_QtwZE@&T$Mflr%A=`Yu23nBkB`5%d8Rjg zHTfJ0NXjs!0JcOP&}S%|nc~_r#BIRX&_?cCI&ll@>-mCgr}vG7-%A$TC4F+61gzI)^Z{gS7sOmMpLT^#)(A0 zI?HA=4FDOS41NnC?;)DZZ8Y{ zFxB$Yg*KK2Lctgae!nzh0BcGdTino~N*;GO3MJ@;B@)*64(5)j*JOYvi$PPznIZx6P~HR8&;yu>G1IF#6su3&&GH`p!VV zGT;%q%zu2m`Bif<;Ye6zKQlY)i1tAPHTQj3b(|a(a5G#c-6^X^nL^f*$)1q@3w~ln zM@L65uQtGsjqZFD{zr<@9bSIE&|9fWNKXy_e$fZJ%_T6<2(PH1Kn#qrX@t6Zi(Ka6 zBVYjRQcVV6mjXTqP(hjD*tzR9bG#d{;e>ntt}AVCZ%YzBLTr0}r0)dKtJtO2=sLgX z#TPMm$RKhb07@3xg~>97`)SmK)yME;c|L&Hi!wPnZOW*0AeiDV;(;|<1u8*T{wTyq z%PSHNZBcuA({DK}R%z$G?c8qlEs*CmgjtjdFXkz6L?EHLwP!weVtCXbP>WHI;+~Lq zwkLKXjX8>^>n#0hx8e*Tbk44wTC@teOaobWipXKf%kHh0hah3DpiA_+F+1J}W<)QN zKBpI1=J6?sVtlMVZtXPA%d4y7_{~Og$Z|9N>SiY#k_NPFJoi3?Jpn38Dy6EWsx2n>DwNVQXLrzP3a`#A zL%dK!_?~jvP1McCKW~5pOYwB8X4y!P;cAka`3z z7kaO0X<0gNHE-3ZS^eM@Sp6L@6i_)z8r=c5vQujYSUS}3en(vd8%}M`9T119)jT(% z67I`G6LD)_Kf2k<(VF`7dF~zJ!nYXb_H~UaUFGt5iG1`UZzWss8t$S`i)iQw0gbSM zUL05&O(XW`>Pc2c28Txp=N z3o@q@?}nuPoE79hO>2it)LOjUZ+E4#2LDPjO7~aqcicBNA~h*fW8-})+h-II|=lUJ!COOmJIx?sZopuZNErIym81zCUEmL8PrQv zF(LrsC_ukX88rpuURXcd89;3qMghzG*>*twaim1rDt zFE(+3?#3icL<9%p3vqb87Kfg*JA!D53SREuamS2dlRQfvUS5ENWgOHpfwtgmc*fLq z+pE_AG-d(fMD)}d<3~3uHk|p>;RY^Y$qrZuP)x^0ZNM%iCj(I0(I*rsb^JYC%f-ADsXH;sPM7WJ2jetpj(>tL3#~753Q%A$KLZ5XYy;B1;}L zG}(S&!+O|)X#s&2*r0$s0FQ;hc_?9FTm8cP@v-kyP#%s)f4F*ip(Va#-o>ce+KVK7VR12( zXY%NV6`7(zF}SN4-ct7)mUz6$Y>_-aF)E7Vz6+1d+R=@fnc3mZmsEE`vVcLvDTpal;YDbrwm{`~pApW-um+ekJH^{=n-VBo<4RGcd3@uwVE zQ=>aR&%uUxz*cTvb(A9F!o9yi526EY)_%Dcs9m-JcJTDk4Gcr?JiP!~cBWd< z5)?Q{IO)B?*+R>-tF(C(hiqe6!rQ9UR@e)FNqy8-~D zPOV^!QaL)n8exe?3>bAo`~f;=r+)T4O{5{7Uw@~AK~MH(x~uL3fd(ORPo`-_6lc0E zq|5gMEb^bNK+(gbHZ)z&H5@q20u|cidn)-f556qXFcedBb3p6_fUST@R7F#8Ky}8}AJEXizV>f`?51p8s^#+BtJA2q1<)&1FTYu9bw=*n z{;#ipRGcxt)%GL?(BGn>kc($MAFnM5{S5J_r1V3wm4cJJb60(S%2ADujTO)w&J@a$ z$HC)9$`tnI&%O8wl6Y+`HesXCVK=Rf>dY^06UWxD;zt8M7YO}Fr6!eVumF6&hO8coFcxh6+m7JzFF5p+vi1TA7ku!ZyBBUY-6;su`ox`E~|F@1B~O zRrA@T(p%Pv$B`k78%(Z5k@OqN-A|St%i;YYT>L;LPFKu<5cj)sSLP>3KfYu$PIUH+bbOFeVmdhqY%!tw9Ti z)^OJ`9J#e$)O^f-Te(~oR&4)Mi8#(AY@hNkTV+k9uM^OnW72K;m5~ALwTE9k7#-&2 zB5~xwHCLL5CvLpV`-Wjw@C3)bKadd@J;dJM04nw;ZmTD^6PdhFFLZbKUKztEcxx}Iqx(YOVz!Z0DS(94}sfQ@$F z!Y+Sh$Ye;N*FvFnp+lVkL)H)1|KR`P*F6M{lPL%g0-<8I@H~cqA09#Uyma=9fYEl; z@CFMj<8L7O*&r(u6K@|~UJ{{`)2(gBA@1>{v@(^XbMm4}qcz{!3g$US-f@!Ln+%Z& zVp5eUZIp?yN50n1V(*$u?$^=((IYtRB}4h@Q;})pX!?hmyeq(frPdE)&I1_;oJeDk zc=1xoxw$h_{IK$P-&+d7lcg0oMrkso7!YBF)Ai$sFrE{Ka-IgRnQ1LRFMxPDL?kXV zQ$D_6bO(`V=#Yb-Fzh9gj0B^>4u#3{U-)L2FHd~=h z-GEIqNO0PLYUcfQ*Gv~qiJ~WYJh*yr_yahh&A-GDnNRKBn!${AhGx%1XbL^qtmoob z+A_UC5?+R*ZxJ_oR0)oRVfp+T))ayN@~;ftJ06)KE$G)9y@)R7nS?hi6?=2Fb;d3- z4_D2|UHSfDo{*ErizUy^A_-XeT8A0E+zJgIbQnsRzmIe$@MOYBnfBlQO%wG#F*Fdl z-@pa*?nbzfJ_p%bg^c6S89w(>B=*+)l!o7UmzUn%2q zmELb%HLp{pqw3~G!fd&c=@QZDd=KSMb-X_`W1#TD3_E3k&J2z>aO72#PGS#Ju6eq% z)u$8GGSWuc_O5!_*EgGeM;)MxPtJx38PvyDICIIUf%cvk7=#B0lq1;@IqJlS2L)H@ z!4ZH?7y#Y|HLmNc@P(trR4?X&0c5`w)0=6Ag<2g$RA#w@?S;MV$zgjb5xC830a8rV zrfVP}mFpiMJ~UTKBDpmYrR1m}+B~yH2ltG-u0I0oQQAgDcMM8w(Kqkr30`0l4nbSVLv<2> z&!xL?{Sf0DhF?k>3_a>2CYQj*xXlY*>Q?Uw z=0|+3?+up@6rw3=BSSRwje#&~ThH;D!X0Ag+A?j*lUzgFP=k~-q1W5+l(hRfNtA;L zRx}?YyqC1U+X4F{N;-9Y(}fpA@^y0I5LfqFlJS=L4MW5d z;d(?TnfBcog57kDAkBX7NAw}3bMg|wVtQ4sRmMyFCHDHXdCm91K^OE-a|1D7I?z^D zg#r)hXeb$;KZnG0h0oHe3jW31*8J7i%jv503|3Jhudp{vpJz$7Dv)1v!@VEFy!Lbe zQ|A-XJUU}_d)HNgOyTm-Iq`$4`1g8HJri%ePx!vF5K~s1N{)Q?3irsC)jcubN}E<9 z9f2ORaLyB453A!Sx#hfHJbk^4Gt5m>P#q(r6rl?)=e|?V#FQPtEM3R#rXto*;4`6- znzcSe>m`-06h>Rz{nzPbQN^c6dd;1Qy1vFecfnNx0)d30zeR-jz5{`Nz`mp51%A$Z zH=@t{Z_fgIf(Ho@>*S!jgLS=HAmOrIre!n;4!L|N;(t&|Utom(TlyqsnR;+kNdIQP zlF#1PaX*p=!#tKKUFdp(1svY=TP8O8GkeZtqK;i}w}IbDX4>tZ1ek-e)i`Xe`SmIQ za+dwY59==v2sHmuf`0)?V*3+u99K(KCxF(3OIS?Z+t%pSt9X5PJH+US`D)J24TH|V z&!pBHcs-U%va-!&C@co1Kwi5oW5J)1N4s>KcaJ@PUN%}}IiIb6bKzkW`D<1$c=t?? zAB|5YrmVU#C5$;3+mDl#`l_j|{qx+Rx4-d-iz3)A>&xI#VXyW^<5S8B@7+C(0V$f4 zqGBeSwRV!cC*KBk`9e0grvzCFD$&~8SnHMfq~3RnLB%Hk$%$C3B%u19U&Q^A3z{972}cDgFQ%t<@)8T zw|%#YZrgp(q^q`Vb(UVp=Y@*ZxnhmGiZSFED3809`%!^o0I2=Aeg25cu6?gc$C0>G z;pvfnk|J2WdR-HSWZOxrWT!W8RHx}A?P<-WQ^EW2dYR*hQ)3xRWdDj1vTMTSXS=Bj z0KW&HAh;WGcp_dur>6;iwj#lwca5u=R0*E96_&)Ycb#{F5MT;6`(OuD#3Wz2lMNh( zzfZw^#gv@}R>yg;@-01O(Nup_!#0h&jI2B*rKzIe4ZJW~bRDZiG@jS_6nd^r<{S0f z_JK2V*EzCCIBEE)9`EM0@P|j6l{&UIpjzy_A!}b$1h!^BjO&AQKU`u`nW#x-#32}} zdq#d?!B|LKwqc}cx$e)uO8^7GW`h)_n?a!pi&ei;sw!QA%uw|3>IHNIctXAAaGH^3 z=fw@>zOckZHJZ009KEF@7|@^SP^H4Y=4FZl?$J7O<=+AERP_Vjr>?Sb%}okko{!!= zuWmYY-CwT4=jH}I0e~*U<9sUa101R|Ass_o1#>L5*yFQC`8*%nOYPj;c2HQ1&*j6+ zqCr;qbV==+btAq{xH3hkSlwEkI9sXe|v#Ecw65!|b-PP1K~?R%KIr!Ob1V3nAptfGQ%^40B|OyP`C z<7SdYUSfRTW&&HVVDs*~%wF`o519>Z?sef}f5dI=^$3)y=Xu*43-DW6_-2`SpKZ&H{SS zTHTw6i5$p%8Bf%LjEo#VQDJbAh!o7NWcsPBG)LiciP~@74wvj6=fc8}59yo7**|;?Z&N)%OCf}NR{IqJ9$|q1!dW1s+ zSS_^Lrsc(#nw{AEAzrt?w(Dh{`|5$D#NPK=rjSZcw+UJNMz8H~vXj+Dgb_BwwGvO} zF3;z)Z>_dEjia`m-#2xD?5Xb)Cwm`haFyIT}5A`$# zEHlO@B{#q4`qZ!t?8pCoF%cL&=``R(Kp-i0q5pPCg8zNe z?yBeph@42!&Zp&^QK|;mrp6L_9kXTJW51(p`9KBW=)>PSa+4o8aOXRGxC%;O6CgBSquKHF}{P8fRA0qj^a>^dVyH+|M{BosX(z zV+1@7z%+os_-N*ER#C%e20tlR0nEa%@g5}f>Amg$oU#8lDP?%({?Low{dAxx=%K?gm(IN1ywuNV2SYL57?oprZQfy0|nh%X)%qn z;HqV(Nb2+F6&0#K>w-dW{uBw>TFSc33RHOBegZXK>qQHdX|wFn-|(nv_Pa@&mI3m4Fq3+u(weaySmYRucJ8;X|3b~gY2bbvtgAN;FtQ@72>Rk()|u;Dw&2)3&Y zV({Y`FEis@(Wk4$a7|Yy?$!Wp))*BMiMI0p_P#eSAGgL8i`U@Ex_XF%RmG;>O-Mp$ zvVW?+%bvX38jYmdU~e;zWnwvH%`spGWczg^9hDOmmps+!u!|=%s+G9{V1=-g)=ipx zo|hM&vneiN>ltL@3)WBBQ^)Gf<*z(C&N|;7s@A)aNjTxjt}o0X*C*>Q7m}yEZ;G#5 zs9heWn>K|a0o)CaqcIzuZE;}BX5L#O?m4FBPa-8X`jjN?Jd z!XnYIx8v!`tHR#AZ2zzO7hdJYH7e{atct2-CC9^q1-wOTYmKsSF;FIby2o=UrB|oh z(yw5MOrw_@-d_Q?r=>+qGXE{j|WvCT4j*~k(tykaVJwshp$khl;U69E2KRf$yi_IT=-p3G{mYErAdON zFHd=?G-iQnz{4CAl}WGb5fH#&w@P%Jy^oXa(pQ#Guburj!lztn#~w-=eoPg88H)0J zv=m_|3JcFwSODhDU<&@VY}B}N%-ns8(v5^NO&Sbq3=nW6=i@%#e;ycd7v{;wRlL9wm&dfz%YL1Z+8rstNP-3O} zaH;EScxWpIWC2>$cDo~C^48PG-{xLr&HQ7f2o{#EMfcPf4#o9&3g@lW<^ex_ebddG z)BdT}AUg{__xgHnEb1B?Qf>YlG~`HGXxh6j8BHkj;N$D%j!SjA)Y$xO$ZfV*fX_q; zD28kMQU~w^kWS4RN(lD(b_{7RcCiDEzj|Fpwt(lcTKW382=Nm8}5e}S$bm2 z5^Flcm~2MdB+Oaf0=9>R30t<||mqUv_=w6o4Oy036kSf)?ez{E+|n z$Z`CS_-Hi+u%J22oN?f=fnOFs>Ht3r#?Ltx+L4+LUl;g2U*2|aDM21{bC3`&O$9R5 z*P~P0{gg?t!xxZdq(uKfkSbXILv*9&>}qSE+qFNf|kbYO3%0%>GUD zc&^MoG56&QudXZ}A%_-^FC59j~u z63`K;ng%%Mo!lcIH@ci$v?m+gi}uFv62M_i5~%~w{N;slm45R5^LH#gAD8@@w8l8; z+G>)u_yh!3$yaH}Bk=FY{y4#iHyu6x`tqj_K@}w>%x-}j!GtKBs5X3TVvbk0Ykygn zn1@%E1XT+t(*4JM@3skmk{4e5l>9e|A zwvgCnXH=~Ivg8PhJopfBoh)_OE}D~c$;WFzwvJa`Mw^Jd0fI>EY35mnZ+tkiUpr=6 z5A>!=tNCHyz<<>y#thh9Pm8vn4@!MrX>^R)O`CZaY?s`Q@1@h%v(nO>M#qhTbK;bE z#XqXP3x&RC(qQ=dfeE+I@#41l^;;$9(+|H+`)pS9w=5QG;ZH3e*iCMqeZJqc$ye%d z6kDb#uDSoat6cT>+C3ODQ8{=Mxc6DUoWEOhEqAD{`TY8L6f9ir{n~n9RO@kYIe+GV zy)%krcF``jg5OS?W?08MOC3W(8z+PE;&6;csk@4yr1%g(rXX&1A8Ks^i1YdhE5?Q9)4 zv2rl;omIlS7ca74;FPX!eEMgFy`unXAM`gfH3d2}BU65^G+3b?tv;7yxAe5h` zyV0sh*KYCxO3l1&Fg7Mt?S}wz>^-|PH#Hsj{czU(7E{jlDe#ciyX9;Eh?n;iPV6$- znb5wc_%?gJ4B7${eAI{fibUped_N4N0LFg5(g3w$?(}uy#7gZ6&<$$&K#>X^P^r(3 zH<{95Xj)<;4ZbCL?vyRQHIZ@=u&~CK>wMZMmVD)t!06X=mzx;*XjE{{vs+A!b3rl^6NAxsfKDeM=MV9KeiCrjd(;*zX{%#H&R3xmoka-T-)O{q z<+l*Zme+9$UFRRP5ef=L__*{_SP`8T!|K|V?YCSqJ%VUM0cC*5taPU%5Vf=PMv^L6eaKoeU!A)XBQs60)ix<+T{~z zSl_76&wg+1k%F1*hH^{1j271Oa?*t}C?~7h6-_(zi}K!=xoLc!IlKQ+_Xg_MF+p&s z8~$%ETnN0E7R+!mk00@1LwscWPMTrRtni>ViP z`RvEDu+#1%6~lY75*D)$`0V(NJd7MW`?Z+&iV4F;?%e6@!#^oSf0#nvETrp;mY>TN z$Z~bcZ4k){lxP^#b(Z9Xd_m32j^!EjaBuqEe*6=C#iHp%YFf*c>N?$B{JoqF>vpjz zdC%-8Zr(t^jz26CwfrM=q6A%3-KV>&rCkHg%dVXs&w_R;C<$h08KA#R zX7Q&mXk9*EO)_iM6_`(E0To&MvicpN3?el~{Cby%!#>Fva+FHV)-1(qkIpN7FXuxj z>TZ+mJb-orL+ne{%5G0qrvl?JM2yB@*NNShm1puQ~f2Cu-g8@B?oXdW_0{tt2BeQr-RfpOuS%N#zj8MUQ5VE8=n}U;)`c zl-~uCLs1PD)$v{TR-Wx^3!PprpJd+76RIC?Pd7@9+tb`JOSm$Io89aPUSAMFVw;l* z8rnN}c_!Qm_O=jKj^iR+1Ksl}(b_JUhvWLm-AMy9x7myO!f9WNmX8OVV_QfdAz$jR zUnvCzv!er^pP#o)enSgnrhfzQ$C@K;>Ke!>QBzWy`ND&Qh*+)WN8N5IW-jd;H22vKKz+KV693p+#op?UF;8aT>Xsg1** zuFgnLQ}=MtvZn2qM$6!)zZe$$Zr2=+E=-x3Yqi7~#w;x$nHLQcgQZk$G|J2K+U9v%}I zzMv9QBhN2EKmIG<{J#L({{?6IeH;16t)!A8p)xzb5V>d^Rd1d5CKxrpyzOQC-#+wq z&jZ9Dpl+*K^KSr$QM-Tg6Oa=jh~}nyTD9+X-Tq4ga2>^h-FSx_C1aj1ZddJnucwC$ z**s{i)=_nU6|JG7T{K<7>-zU)F|#?PvrztjaRK@#4Ra;}=uto%A{~jDq*Dg|FG-0e z9@}w}_T4X>fC64(&)${q-TKd1!Pk9Y;gg4dG5p-#cQHcnb^?TJn6Vq?U-p>|n3{Mq z94~Q7Q2$`V{YWE^v2|j)~L-6}bjDa0THr;L(!QYDR=I(goonOdd^+^@zBoOR&49bKnh z?M`MIP933%oORtvtHf_+wc8CGOpbf7^7CVpHCT;H1Wz$03|6kza0tF_U6-O#1UH>5 z`CczU*s}eem%k#xU7xw0H&ZC2v@2Ghexr)TjSzz;E1qpUZs(v@%ubR4i^AQJa2Ua( zP=+)T4kyTlh(mnZ%l4gEL`uGetv$WErmNCLZ(ofqGpj8m2$2Fu&&g2{0ph%XVeHU9 zEH|YGHq&0APo*}y_rEUQYn~H066UYYrzB}bKvh+yPy~Mb_wC=jH@~rLao-PB9*hPT zH4^uIhAADyXNfvg$OJQjDqdg;!^v7JJ0v7Q74&7I7~p(zf3mkcnbMZ4CTSpB2eZy6 z41>2r7tFx{6b5vtVoo5{xSaPlb!R7TLvuqUV(=$RjqX795NikNM?!FXq(%q z!&4>Zhk!qevKm!--4B2_@qdncLKBgU&0K2pU99-5IOv4villp?-L+*H{ZF2G%#VkI z@-x}>&LRZC9YH?U1bqBe9daTie*G#b`*?TqpJ+Xc*MBqfPQdeM-c!aD#t?z-56zvZ z<~PEjN=QqkeKs*zdgVCA;Pz!9SC1fg3dlYHXoKlDuW0pRCb#SE(>y_y&T*pz;ZXhP zj#I1dDLg__+xqDciGKzu5LNekirf`i4od2oXMOy6X$xuf9xLhCUlt>u4!T=!_1S4d z6@0K7DY%f9_6q(bQ%J~5r%086kNk)Lm3Z;Hrx7VBXgHRUK4_WtB#$d`%pa@Gzq}>k zBOFbI^~_T**Jih;!-&weYgQ?>ptcYWe$+Kp)J(Qcn++xfIA30FXL*a3(bA!0L5~J> z9fZS*?dvSw8|C#`{tro9uTMkSLq=a4wg2Y=TZ$GVi;t_>(;TOepaV{;S4miAt?{=H zR*Kw}2X65knbNEM59v#MSezXC$LRvcg#ZW&ux)JLN@e$Mmw*m_W36QH5mZCi(Wai7 z^7FdgU7mQP+1T&gX$yy~3+T|^SSn+j6d}qU@UaQ&*V90lxVWs{!jd{xXPKWY@h?Cn z2FTI%+B99#-U}=oG~C}UT@KNmU z+V8@1;>?yMCo8+`e}0E5@L)AffYgBRS}@j#tb4K2y~TnbG2t40zK8dO-iPB?K+dYg zpk8kK+S}~FBaFsfg<-;20_yX^8<<;~_RMD1+UU|-1@it~mTP}s;QS=v8|~%^!`1;7 z_sGbYgt5xl0FL`s;W1&@`>$?vieh7KWiiS~`Yq=|;MlbNlRP@Av%nyU+VM@A;g+jDeZ8)~t2k z-@2}gM63QJ#jg1>-+qM#HNfy>^DW2;T3BqkySGCg9HIsY)Yufmh^qx|e#{%}ZEWZ{ zc{Y;Hz~-A=$uoiuj11f`-l>_=NGq2r-#YJ#bz{__P&CXNK>0r?K&NA@@3wBRM z5?23yiT5@}ge9@>kK)G=EmqS-px=i-&<3uRilwE4g3F3JXzqIQGb{T@q8>t#!M%aV zA8-?*o}S`igx2O(p_&lVE`v8>H{P78Fq)~dm@QD$OEu(t-r&4r%SyQF;GQAm4Jvc^ zU3R}xh<^Dpe+z^+#OY+PVzY*pQ{7jC`{IeAkr_Mz-1a0jrnl<=LZMEW70h1&|0 z(3(O|ck7-CWkjNXCo5OaQIkBc3rWZF526AI)xNd-#%Fs4^R`3D&MAiUu{WP(F#YNq?AK%lmfLdl4%kvb~habSyul$RxPAT%5?n z-`-xUnV;It9==Od*fSHlz4)H>AXnMKM3KR#gY9{aS~0k7I86Hq{jtbSc})AKn!T@? z^_m;MZ5}a}H-=#?^K^(4^2J7{SAS?NQMGz~cW?`4oi;3F?kvFGUC#mW_VWt~4D#&Y z(xy6af~a+kisiN_SpaqWG#Czuo-gLXEmF9L-1qj*c@l^PzS)(N=~PS?MhgB0+eSt@ zuVT*INFuHhqwDIC@W9hm8R;G%?V>W{$52g|%60=_DS23jn%;PJ=1CbtC1p7G^%w7S zxMsrMaPwa3Wx2)Jb_D6nC>n03L1VcXgZt6~zmt{?(<2S5A9&>hjNlnc0gDjjzZN0N z&o9!wc0a8#P6+Y4W+@l`?3MFfZS{TB+3bf3)}ax36Vu#V*O5L5^zu=n&&=^o+a5 z`OIcjnycJL=dEvV-JKhb@HT>X!WYx8cHfUEch>p0nmQHE+8TOb-4B4hmc{17CWD`S z0`3x0ks_&>(Z?&fYzZTzOc6LzHXHcQH`@39VKWtF@8Yl#p(Hh6OCjBGzQoqsNcdQc zi3F2l!ZgKFed|)HrKV(j3|A#WdOG(0Z@J9RY!vhUe}Tv~S?U~J+v>Ljs5YFqK9s?18@nfNL_Q>{q{uZ}(8%HQ2U^!OUI61T+>;5XV+APnWFBcn&z;l2dEy_F?H z2Y=9jP)kb!u-A~jIWE_>Ij2P>$IMlT?!QM|f;^5Qp|Ffvh8iyL-M*3H$WLQKfWZ*? zlURFF_s=H~flqiSa?$r-4$`P=IqhmSm@26Fwi$oGalgqkM4><&<=>(OzP~e@6%su= zdz}G|Pn7Bek145;HI@h#N*0Jb82*_=Td2Zkx;p&n!PN`@Y~yr(t7P4BQIuDAzn}Vv z_)hM{`rqkWQAryv+Sa+xEs1#N5Q3rA|DI^j*sv-h1YdBGVmQ60gh%q^%6yZV-cY)Z z7?u0gu5g|SjenFj^Uhr1d}(agqx-v+2WsVuwR-?)ilcZpug(I;qWo3r&Y>G!1}4SH z|3iqO;?N9n5L{Ii2b_(Y?UeWjSLdJ}NXE23S~y~jK%1TLB&$q_+tE^{5}V>=piS`tyyx zXnRyrE{iw2YY-VdTdit4t9Fyo9g)!?j6ufdu(V_lAqvjn6vR%x{S^cF6@}7eTuq4P zL4qWLV)9?~?ot^^8wyiDkLSLG!B+Q=3s zO)M`K%98La{Nj)z0zro-*0fsrJFu6K~Qew3`wp#fx(H9EFCQ)yww zN?B1uK4a4tWzqB@S#BEmMrr#qWCwJu8fB#?Sot zUH10ID&_$_!6X_}XNdpe+|0KI*tpV4hxeEfxU72)?^!f1614Ix7n{)sSWze{G)|^o zp8H(S&t$k9;L3`D2Mzq{K}Fz!=GlC**+ygT+hWNG!qH|O;)S2H2VPPkQlDRRg^?uB z=VC+X3{CH^p%Z_5Tg_B z?rGb<@EL2TU6xQe14{jd*?VJRaXeaGWJ9Vy%KK|*c#(RI!?UH32ljbnLfG7foLy^K zQ0U3;D0QO0nK!yA8-4Ba8|}hC#g6cAyPWN9qPp_AIQ9=htN|fimiP9gv=#en)wcdm zYQW#Q0ZSi&YhpVV=2{IYEPoXSiv^~Q1nHGgxU$s^9jx6<&*ysQZc*3Q-B!y|M(28T z$-Zvxef0sK%S~>l;k&{(9ln|j0sB-j<;do58uebPL;E_=6iyGPZ7BK8xpTns_LOn) zfRNRGUq&NhV%NQV`OyH;7YZ;~TiSnk-c_z^C(H9c()A9v&5W~~ddErK$i(dh7@YJS zjUh;l05noOXFirDy*`<58Edr_;_2$TSh5UG*h~?qQgP1ug(R?u`8WW^qh1m%Zmt z9$+s7=DNs6MBzk%SO!kM&m?JVhS#o7#*m(d(<6$pTKjdx0>b)Y_)}pao?2(4SKey4 zcxZP-Z^O=+^rtuaz>X|$I$ap+Cc`RwhB?R6QPG*J!eHBA()O#}cWpz@5(HvyFrLu@ z`L5DJA@ZL6Gp7+CporNVcMLE$AC%4RUWq7xujy7e z%x`gQP%9rUeewn&D>1Bx)xY~sx0hWImhI(BDtrli zUp!M{zS_m))0FaOiKZs`iW$5I3Bg9!=Q{!1-c7rnfJ>hqB4a~rBh4;DVBLzTYClcD z{eVt9>U-7i4um8DMvnPkP6KI(8K6tN?(O~Nl*P%peHQ%99!M+-1v}sv#i)}0EWMj6 zL(N;W4c9A?bFOz8H=X2OhrMmnG6DA~PIeK3pUCH5MBLajwJgQ7W_J7fTwQVl&$tn> zFbfWh`EJQEO>MT=Z1RE^z@`=7jQaC^dVuV0b`k;+JbaXP-$lwZ*e~GCtUeQIUkaJY~uf)^u~#fYz=QS8fuT@4Dc^ zp-?{73BZ*Fh=+a6i+pjC7DAU^7VuOWyO!6Bd-m7gP;cW8)Dgoi zibKRA6KpVqSVv^Cx=Ui;?V*_-h%p9ePZX&h7o@vMG2ti1#U%|S_<)7qKbgBvT4q$Q zQDZ9Kxlc;s{}!1{!h+=G<;TQSf)4inFM=dAiE<>+1l=~JwBv6hg(E?FBuA|f3!>BD zH08Q99Msrq2`dVy2Q3zuYu*>CR9Vf+Z2mq=Yv>N^Wu$*4ijp+&x|u~e<4IFIa3Hx1 zyc%r{{X|+e!ygH?AV%}Dfv5H?F%GPMy}H_;U(~zq`TJr%A2x$0q>a1w|N21LVZpgw zw5I?Mi>x0^r2zMw$GLCD3;+8}o*R06kbx%S!HkZtyM>B2>!NK@#0c;B{0GEaF~=l&-oQI0HRykN1~LC{%TdZpw+ z3+euBLwEI_u=Ca&*#>vgD}o~y1=v10N4VI+ zmb$>W86Uvya@rde`D$LR0j%7<@+Ln76$*q3N1UzFr+uO#=eQrA@eckM=$jLj{5Q}i zU#jNk8~L0qS7Oj`;A(&dx;9b>#e#s+Y6@fM^r^>uo$t}2_W^FrEF3CH@N1>kbUy#k zNOI{DE=m@Ne675ZcW_YFOqw>AE5a^cZtXbC$;CN5w|bpDQy*-iYyspf>6n|P6>7T{ zp%zqv^QEkp$QWenJSrMantHfdgvkbO$bf{tKoQ>Cm|e2|*ooaKWt>~!PG1CwyV06~ zMaJwpH1f_5>uM8T&hKnJS)k6Hnr=MoDWID%#1gARYN8M22lu%ysDRrqo2514rdbrQ z-9F((!^H{}e+X#G2k z0F2DRI4LR+MFo`9eu(y&5u==>b8g_TC^f`0c%TCko_kFO%5h zNP+J@g}d$jPjzkr;Olb)#)vYNsJ7@lOL@>E`=0@ME2)C`Fz0&_O zMIk-<)p+STsQvM|UbBOZPb+nT2@9UCZk^?=^Yv$dmM+U%6ugc)N3;7n(QxVNwY_dS z3cvG$E0hqUorTHGZuh&FOE@kr0Wj^n#j@v|-^=A_UP?PmMcn~gqu086l(PxQMS}It zU8GN;ouEZahbud)t6Wm;aX|*R?ZPjodb-|oupT$-H5?Ak+TxoM^YcY!e*@s@h#sWg z@lY@GU-9!s-&Lc@77pY{7er(Ek|6-i z^Yu<7yk4wlHmkoWL?~te7#7~UbpCatdFWW#N|D$Ha4(ooqo`2uz8rqGJ7NNYo8a1V z1Hsj$u9SeuOSV)QX1Dmow5=nt_|1w$Qo&%V)f^oz1*c^P*5?;Oce_@_1JUUT4)CdH zFJoaGaF0DD=+}aot^feqZwlQ(uLrSy*burSW&4*COc^4OF%!SUZ@LB}6hI;_NqM0p z36yoTKh*W!Y59aSTW8b&Dj&k&0B4Y2sX+nwbazbGt@CJ)(D4L?s9=wSnhC}0+FL_R zC1!jHnwaFUL&e{b`!4O66uaD=K*gBI1RXZNQ#`mRjim{5-w#j+820l)GZOlv?04rP z*JoP(K4?r;!X> z6*&Sr6-w({y<9QWNrD(pe+SoM{}IC+py9wM&LOHU^R|eR>c~}l#j#z?4l_tY`qz)e zlTsLu_3ezCAT6V7+b?}tmI(X9V5wgJFIBVufz_(mOMC~8fAT3H?!dbQf*_Ga57$1B zYmk)Q{kxS8uEGD>x^5d{MuNA2x8u}qqvMx*3O;8z^OHH+pRC`%l5ms!=E+^cbRk9W z6_Jq4GduW%|FGD*4ahx&nW^a&z~n_PKVwEKacPHG(Kx)OGK(~&^kw?w^jLH*ec@zz zMC+aE_^;dy^5qyxtqQnp;V2h0y-b%|$ z?@v*jmm<8D&aY|1$RAZ=Aicr+wruIHYSekY11NKb$8y$;fVrQM*uoO11=yJZRaDPe z$CX`D2JYsL%l`yZvBcj3NG(q&j6<>NRHt5|?FyiEu!?}2{vs%D!G0(L@Bbwn(Nz5* zV)*laj8DB~8Ui_L4mi22tSt6(Y#QJi0_u3|&lb&e08(scX`WtjU<6TaLBU`WS7~p) z0NFu^>W*TnKu%O&AjZD$`rIXSgP9dn)!+W{oH_S;0);Nzq=Bh~d3zVwx3+(Z*qe8K zgS&x1{=LEMNxPe;MEgz&`_bDkC@2g;(DCvKjAB^CME!f1tyL)uHlqb=ug4SrkU1gp zKAuuT9gmjyK2cPZ_{2e^)g{H3@9H;=cc_Z#o<}`8`vYq|YdFKg6hdFbD92$TLH83_ z(m@{>EXb_uJ|4pBe^*o+LK7?GQV$HZ|AMat{=P41x`oeDyCZ; zDWPNu3X^_t+^aMgaL7|GoG^!oe#U~h9tiUI9&UfW$dd(=#7U$|mwI<>c>e~3Gr5v#7hP`rey?ohQ5QbKUQMjrQ017KYt2%QODC~ zzSe~|u$^W(y>IP>zcIVJlQH4Q1z{e&V{%?dO`KTd6ogA*h$rM4Tg zk(&xnU!9(tN|b#un9BTkR}k|qAkPFea0|Llj$HvL?j;A|NnYr>Pva`bdtyccGs&#) zRTDqa$wPXKWpdXZ`?Y%2_8A|cCWR3yQAW>bJnb)`gxKnSQZ76?+D$v_Msy2;EAnCA z^Rb`LaUy>p=F^JGn>YqRQx&lVbYX)a>lIrK^L}(xDs3n!&eDlr7x11Nub$ zkSY8>kYHjwcRO*DG06j$z;vO0erQNCOQ~pVo1s)KONoX$gG1OszRvv-d)?e%^`NLq z?8}$_%-S-?dn;VNgJIvJURbsd(sT00L1SO~DG0mX#f+G%6muC?RF!p}lglxcN6|m) zkcP1aiAkGEBGOD8%ZL|e*EwrINa`CpdERBy>(j;1HC8M z&{DXJw(mrPLla8ZzfZr7HdxTz@6b8S$-yL*2k3$$ULu?Xe|v8YxS@>#p5Pn@E~L0D z4F~tBmqpX({tO!a9@Wai0^$qx&W`hy&IPUdgnU#VKDK0Bs`|4&W3#3U94IROS{psW zD0F?Za2rTd47??Oto0pohgW+6FPjasQ1Y$bhxEWX!TFes_uACjg8fJ1xfF;bf9JIE zaQ>t|ypGN|)9?`K2P1L>sJ;3z`Ua%UKjwWh20NkbgC3CBPIw#xEF>m$DiBlu=dVTq z_e$U5#sByV^3bx=3)fGk2jua}d98BfjQDpG`Vr-_em;rdUEdsY?R>rM7TyVV_Ky-X zxHwdFcLeR|k>2ERGEP&6co?R=u+`uO+vlrnn2)=kM5_R)Ma|I|`c{crv0`58kk3g~ zRY_R8>9w0@qmaEEBi`egg?yH3;_$9ca^H^zgd+|Jk+Zt7zNhO$+7(xh!D1m;qgy9D z5i2~P-iMPyh{t>h{P@N?9+;$=r(EyqNSw$z+PY9CnDH1XO|qDZKm7BnNZ9FzY#TwA z<})#iW~dy^V%6I0-R)H)s9$_|U-xZ=5{=(9v21Ljp4;j9PL`;jC9GVxBB-{)2VOme zjSUts%Z2N~lb+kFE4uiicLncS7MeZR3drH#et$woI<-o2G$MQ!CU>9lPJXYt7f}9OI`_sF$XaKTe$3HFHrr+!=p`M=LAK;Iy6y;+sU= zh`XcXA-RQy4_n)7p&N&n0{+8b$9;7FZdLk;*md`@+4SrzrN07Ing~jGaHzD9w-9&v zlAop>g+KFMg3I}x-=(7|lU|*{2mLo)1MlPGL%^PeyKE#yg#(e&E#&c9H9pHJc*el% zWIp`cfTBa}Q&03xQ7+h+eq`Zxc0&B4B5S(ixVzpK#?@QuRvUU7F@k1>5;@T_d0k=w zn4~!0lnc+vWxP%<3bjhNM&@n6LnA=uI+^YrnISM~;jB8tKoc8`m3-dH54ts%`QXE} zTkJV@Ceo&%3lNlG>d~PI+smsy7z#y_+}%#=3fM3}(}=cO9?bJ}Q%j#ZXpidKWBUdd z=O-kazN=G(u8ZlTA17682*0p>bz)B%^EbKY_6YW-a_6**A+4g}m9t4>X?^eJmY9`( z$xDC#ygY4;l-A6Yg9H$LP_S)&^Me~sOXD$hB|pm!-LI{4srx-UPW^O4pHS^B1wn9! zEWyw_235e=Hb&!xzhFKULAm{Imf?Aj4lj^rV5XmMHo}bTBPARzr%AT+x@CB zS;maVemP;YXf|KZVXlv;x3q;&hYBUz*x98-U!D(LN1#0+6Dxq`v>W5_1qJ%OxN(9x_k3|9$%J862hIK$8kEYQIjoa0 zPq+-;Z}*o*l$Eyg;wbS6A^vTZ*l&MV~X@bJ`7{N0q@>UtvA6NGp?0Od=c&4GnGeH1;H~&g~ oW|KtHp(8 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 Date: Mon, 27 Feb 2023 10:18:45 +0600 Subject: [PATCH 11/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B8=20=D0=BB=D0=B0=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D0=BA=D0=BE=D0=BD=D1=84?= =?UTF-8?q?=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-datetime.cc | 160 +++++++++++++++++++------------- source/ubl-settings-datetime.h | 6 +- 2 files changed, 96 insertions(+), 70 deletions(-) diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index c773f88..f51b484 100755 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -79,7 +79,6 @@ void MainWindow::settings(){ this->event(); this->parse_text_date(); this->download_local_cfg(); - this->download_globl_cfg(); //orevrlayInfo->add_overlay(*boxInfoError); //imgInfo->set("/usr/share/ubl-settings-datetime/images/checked.svg"); @@ -319,11 +318,16 @@ void MainWindow::download_local_cfg(){ this->fill_in_reg_zone(cmd); this->update_hour_minute(); this->update_calendar(); + string cmd_get_dhcp = "/usr/bin/ubconfig --source system get network NTPSERVERS"; + string cmd_default_get_dhcp = "/usr/bin/ubconfig --source=default get NTPSERVERS_DEFAULT"; + this->entry_dhcp_mess(cmd_get_dhcp, cmd_default_get_dhcp); info_warning_error(0); } void MainWindow::download_globl_cfg(){ - this->entry_dhcp_mess(); + string cmd_get_dhcp = "/usr/bin/ubconfig --target global get network NTPSERVERS"; + string cmd_default_get_dhcp = "/usr/bin/ubconfig --source=default get NTPSERVERS_DEFAULT"; + this->entry_dhcp_mess(cmd_get_dhcp, cmd_default_get_dhcp); string cmd = "/usr/bin/ubconfig --default --source global get clock ZONE"; this->fill_in_reg_zone(cmd); info_warning_error(1); @@ -333,12 +337,22 @@ void MainWindow::save_local_cfg(){ string cmd = "ubconfig --target system set clock ZONE="; this->enter_zone(cmd); info_warning_error(2); + + string cmd_default = "/usr/bin/ubconfig --target system set network NTPSERVERS=default"; + string cmd_dhcp = "/usr/bin/ubconfig --target system set network NTPSERVERS=dhcp"; + string cmd_set_ntp = "/usr/bin/ubconfig --target system set network NTPSERVERS=\""; + string remove = "/usr/bin/ubconfig --target system remove network NTPSERVERS"; + this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); } void MainWindow::save_global_cfg(){ string cmd = "/usr/bin/ubconfig --target global set clock ZONE="; this->enter_zone(cmd); - this->save_Dhcp(); + string cmd_default = "/usr/bin/ubconfig --target global set network NTPSERVERS=default"; + string cmd_dhcp = "/usr/bin/ubconfig --target global set network NTPSERVERS=dhcp"; + string cmd_set_ntp = "/usr/bin/ubconfig --target global set network NTPSERVERS=\""; + string remove = "/usr/bin/ubconfig --target global remove network NTPSERVERS"; + this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); info_warning_error(3); } void MainWindow::save_global_local_cfg(){ @@ -347,7 +361,17 @@ void MainWindow::save_global_local_cfg(){ info_warning_error(4); cmd = "/usr/bin/ubconfig --target global set clock ZONE="; this->enter_zone(cmd); - this->save_Dhcp(); + string cmd_default = "/usr/bin/ubconfig --target global set network NTPSERVERS=default"; + string cmd_dhcp = "/usr/bin/ubconfig --target global set network NTPSERVERS=dhcp"; + string cmd_set_ntp = "/usr/bin/ubconfig --target global set network NTPSERVERS=\""; + string remove = "/usr/bin/ubconfig --target global remove network NTPSERVERS"; + this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); + + cmd_default = "/usr/bin/ubconfig --target system set network NTPSERVERS=default"; + cmd_dhcp = "/usr/bin/ubconfig --target system set network NTPSERVERS=dhcp"; + cmd_set_ntp = "/usr/bin/ubconfig --target system set network NTPSERVERS=\""; + remove = "/usr/bin/ubconfig --target system remove network NTPSERVERS"; + this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); } void MainWindow::info_warning_error(int mess){ @@ -429,7 +453,7 @@ void MainWindow::gui_mess_close(){ mess_dchp->hide(); } -bool MainWindow::focus_ntp(){ +bool MainWindow::focus_ntp(string &cmd_set_ntp){ if (txtNtpServer->get_text()=="" || txtNtpServer->get_text()==" "){ lblMessage->set_text(_("Enter DHCP!")); mess_dchp->show(); @@ -452,7 +476,8 @@ bool MainWindow::focus_ntp(){ } } if ((flag_error==false) && (flag_error_check_ntp==false)){ - cmd = "/usr/bin/ubconfig set network NTPSERVERS=\"" + str_ntp + "\""; + cmd = cmd_set_ntp + str_ntp + "\""; + //cmd = "/usr/bin/ubconfig set network NTPSERVERS=\"" + str_ntp + "\""; wrapper_system(cmd); } else{ @@ -603,80 +628,33 @@ void MainWindow::event_entry_cbDhcp(){ } } -void MainWindow::save_Dhcp(){ - int activ_index = cbDhcp->get_active_row_number(); +void MainWindow::save_Dhcp(string &cmd_default, string &cmd_dhcp, string &remove, string &cmd_set_ntp){ + int activ_index = cbDhcp->get_active_row_number(); string str_dhcp = cbDhcp->get_active_text(); - string cmd = ""; if (str_dhcp.length()==0){ } else if (activ_index==0){ - string cmd = "/usr/bin/ubconfig set network NTPSERVERS=default"; - wrapper_system(cmd); + //string cmd = "/usr/bin/ubconfig set network NTPSERVERS=default"; + wrapper_system(cmd_default); } else if (activ_index==1){ - string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; - wrapper_system(cmd); + //string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; + wrapper_system(cmd_dhcp); } else if (activ_index==2){ - this->focus_ntp(); + this->focus_ntp(cmd_set_ntp); + //this->focus_ntp("/usr/bin/ubconfig set network NTPSERVERS=\""); } else if (activ_index==3){ - string cmd = "/usr/bin/ubconfig remove network NTPSERVERS"; - wrapper_system(cmd); + //string cmd = "/usr/bin/ubconfig remove network NTPSERVERS"; + wrapper_system(remove); } } -string MainWindow::str_remove(std::string& source, const std::string to_remove){ - auto begin = source.find(to_remove); - if (begin!=std::string::npos){ - int len_to_remove = to_remove.length(); - source.erase(begin, begin+len_to_remove); - } - return source; -} - -void MainWindow::get_calendar(){ - string str_month = ""; - string str_day = ""; - cldrDate->get_date(year, month, day); - if (month <10){ - str_month = "0"+to_string(month+1); - } - else{ - str_month = to_string(month+1); - } - if (day <10){ - str_day = "0"+to_string(day); - } - else{ - str_day = to_string(day); - } - string date = str_day + '.' + str_month + '.' + to_string(year); - txtDate->set_text(date); - popCalendar->hide(); -} - -void MainWindow::calendar_show(){ - if (year==0){ - time_t now = time(0); - tm *ltm = localtime(&now); - unsigned int y=1900+ ltm->tm_year; - unsigned int m=ltm->tm_mon; - unsigned int d=ltm->tm_mday; - cldrDate->select_month(m,y); - cldrDate->select_day(d); - } - else{ - cldrDate->select_month(month,year); - cldrDate->select_day(day); - - } - popCalendar->show(); -} - -void MainWindow::entry_dhcp_mess(){ - string cmd = "/usr/bin/ubconfig get network NTPSERVERS"; +void MainWindow::entry_dhcp_mess(string cmd_get_dhcp, string cmd_default_get_dhcp){ + //string cmd = "/usr/bin/ubconfig get network NTPSERVERS"; + string cmd = cmd_get_dhcp; struct Result obj_result = this->wrapper_call(cmd); if (obj_result.error==0){ string str_dhcp = obj_result.response; @@ -691,7 +669,8 @@ void MainWindow::entry_dhcp_mess(){ else if (str_dhcp=="default"){ btnUpdateDateTime->set_sensitive(false); cbDhcp->set_active(0); - string cmd = "/usr/bin/ubconfig --source=default get NTPSERVERS_DEFAULT"; + //string cmd = "/usr/bin/ubconfig --source=default get NTPSERVERS_DEFAULT"; + cmd = cmd_default_get_dhcp; struct Result obj_result = this->wrapper_call(cmd); txtNtpServer->set_sensitive(false); if (obj_result.error==0){ @@ -733,6 +712,53 @@ void MainWindow::entry_dhcp_mess(){ } } +string MainWindow::str_remove(std::string& source, const std::string to_remove){ + auto begin = source.find(to_remove); + if (begin!=std::string::npos){ + int len_to_remove = to_remove.length(); + source.erase(begin, begin+len_to_remove); + } + return source; +} + +void MainWindow::get_calendar(){ + string str_month = ""; + string str_day = ""; + cldrDate->get_date(year, month, day); + if (month <10){ + str_month = "0"+to_string(month+1); + } + else{ + str_month = to_string(month+1); + } + if (day <10){ + str_day = "0"+to_string(day); + } + else{ + str_day = to_string(day); + } + string date = str_day + '.' + str_month + '.' + to_string(year); + txtDate->set_text(date); + popCalendar->hide(); +} + +void MainWindow::calendar_show(){ + if (year==0){ + time_t now = time(0); + tm *ltm = localtime(&now); + unsigned int y=1900+ ltm->tm_year; + unsigned int m=ltm->tm_mon; + unsigned int d=ltm->tm_mday; + cldrDate->select_month(m,y); + cldrDate->select_day(d); + } + else{ + cldrDate->select_month(month,year); + cldrDate->select_day(day); + + } + popCalendar->show(); +} void MainWindow::fill_in_reg_zone(string &cmd){ struct Result obj_result_1 = this->wrapper_call(cmd); diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index 1831d81..ee4ed48 100755 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -136,7 +136,7 @@ class MainWindow : public Gtk::ApplicationWindow { void download_globl_cfg(); void save_local_cfg(); void save_global_cfg(); - void save_Dhcp(); + void save_Dhcp(string &cmd_default, string &cmd_dhcp, string &remove, string &cmd_set_ntp); void download_local_cfg(); void post_entry_data(); void lacalization(); @@ -146,11 +146,11 @@ class MainWindow : public Gtk::ApplicationWindow { void get_builder(); void event(); void gui_mess_close(); - bool focus_ntp(); + bool focus_ntp(string &cmd_set_ntp); void event_entry_cbDhcp(); void get_calendar(); void calendar_show(); - void entry_dhcp_mess(); + void entry_dhcp_mess(string cmd_get_dhcp, string cmd_default_get_dhcp); void get_config(); void enter_zone(string &cmd); void set_ntp_toggle(); -- 2.35.1 From 34484f75388b41a55a871cbb9d69368035df7084 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Feb 2023 10:55:14 +0600 Subject: [PATCH 12/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B1=D0=B0=D0=B3=D0=B8=20=D1=81=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=BE=D0=BC=20=D0=B8=D0=BD=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BE=D0=B1=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-datetime.cc | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index f51b484..d40ac05 100755 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -308,9 +308,11 @@ void MainWindow::event(){ } void MainWindow::synopsis_show(){ + int start_error = error_info; //wrapper_system("xdg-open https://wiki.ublinux.ru/ru/home"); - error_info=0; - warning_info=0; + if (start_error!=error_info){ + error_info=start_error; + } } void MainWindow::download_local_cfg(){ @@ -336,13 +338,12 @@ void MainWindow::download_globl_cfg(){ void MainWindow::save_local_cfg(){ string cmd = "ubconfig --target system set clock ZONE="; this->enter_zone(cmd); - info_warning_error(2); - string cmd_default = "/usr/bin/ubconfig --target system set network NTPSERVERS=default"; string cmd_dhcp = "/usr/bin/ubconfig --target system set network NTPSERVERS=dhcp"; string cmd_set_ntp = "/usr/bin/ubconfig --target system set network NTPSERVERS=\""; string remove = "/usr/bin/ubconfig --target system remove network NTPSERVERS"; this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); + info_warning_error(2); } void MainWindow::save_global_cfg(){ @@ -358,7 +359,6 @@ void MainWindow::save_global_cfg(){ void MainWindow::save_global_local_cfg(){ string cmd = "ubconfig --target system set clock ZONE="; this->enter_zone(cmd); - info_warning_error(4); cmd = "/usr/bin/ubconfig --target global set clock ZONE="; this->enter_zone(cmd); string cmd_default = "/usr/bin/ubconfig --target global set network NTPSERVERS=default"; @@ -366,12 +366,12 @@ void MainWindow::save_global_local_cfg(){ string cmd_set_ntp = "/usr/bin/ubconfig --target global set network NTPSERVERS=\""; string remove = "/usr/bin/ubconfig --target global remove network NTPSERVERS"; this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); - cmd_default = "/usr/bin/ubconfig --target system set network NTPSERVERS=default"; cmd_dhcp = "/usr/bin/ubconfig --target system set network NTPSERVERS=dhcp"; cmd_set_ntp = "/usr/bin/ubconfig --target system set network NTPSERVERS=\""; remove = "/usr/bin/ubconfig --target system remove network NTPSERVERS"; this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); + info_warning_error(4); } void MainWindow::info_warning_error(int mess){ @@ -419,6 +419,7 @@ void MainWindow::info_warning_error(int mess){ void MainWindow::stop_ntp(){ + int start_error = error_info; string cmd = "SEL_SERVICE=\"systemd-timesyncd\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service; "; wrapper_system(cmd); cmd ="SEL_SERVICE=\"ntpd\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE}; "; @@ -433,7 +434,10 @@ void MainWindow::stop_ntp(){ wrapper_system(cmd); cmd ="SEL_SERVICE=\"phc2sys\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE} "; wrapper_system(cmd); - + if (start_error!=error_info){ + error_info=start_error; + } + cout << error_info << endl; } void MainWindow::wrapper_system(string cmd){ @@ -477,7 +481,6 @@ bool MainWindow::focus_ntp(string &cmd_set_ntp){ } if ((flag_error==false) && (flag_error_check_ntp==false)){ cmd = cmd_set_ntp + str_ntp + "\""; - //cmd = "/usr/bin/ubconfig set network NTPSERVERS=\"" + str_ntp + "\""; wrapper_system(cmd); } else{ @@ -635,20 +638,20 @@ void MainWindow::save_Dhcp(string &cmd_default, string &cmd_dhcp, string &remove } else if (activ_index==0){ - //string cmd = "/usr/bin/ubconfig set network NTPSERVERS=default"; wrapper_system(cmd_default); } else if (activ_index==1){ - //string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; wrapper_system(cmd_dhcp); } else if (activ_index==2){ this->focus_ntp(cmd_set_ntp); - //this->focus_ntp("/usr/bin/ubconfig set network NTPSERVERS=\""); } else if (activ_index==3){ - //string cmd = "/usr/bin/ubconfig remove network NTPSERVERS"; + int start_error = error_info; wrapper_system(remove); + if (start_error != error_info){ + error_info=start_error; + } } } @@ -678,7 +681,6 @@ void MainWindow::entry_dhcp_mess(string cmd_get_dhcp, string cmd_default_get_dhc } else{ if (obj_result.error==2){ - error_info-=1; warning_info-=1; } //string error = ""; @@ -709,6 +711,7 @@ void MainWindow::entry_dhcp_mess(string cmd_get_dhcp, string cmd_default_get_dhc txtNtpServer->set_text(""); txtNtpServer->set_sensitive(false); btnUpdateDateTime->set_sensitive(true); + warning_info-=1; } } @@ -903,11 +906,10 @@ void MainWindow::append_region_zone(string region, string zone, Gtk::ComboBoxTex } } if (region=="Etc" && zone==""){ - error_info-=1; warning_info-=1; } else if (region==""){ - error_info+=1; + warning_info+=1; } } -- 2.35.1 From 856a1298e19c982fa567f919a21b5a737574d813 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Feb 2023 11:35:53 +0600 Subject: [PATCH 13/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20makefile,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20.?= =?UTF-8?q?=D1=81=20=D0=B8=20.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- Makefile | 6 --- source/ubl-settings-datetime.cc | 2 +- source/ubl-util-standard.c | 70 +++++++++++++++++++++++++++++++++ source/ubl-util-standard.h | 22 +++++++++++ ubl-settings-datetime_ru.po | 5 ++- 6 files changed, 98 insertions(+), 11 deletions(-) create mode 100644 source/ubl-util-standard.c create mode 100644 source/ubl-util-standard.h diff --git a/.gitignore b/.gitignore index 8a32e88..45460e9 100755 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,4 @@ compile/ source/**/ubl_settings_datetime source/**/main.o source/**/ubl_settings_datetime.o -reg/ -ubl-util-standard.h -ubl-util-standard.c \ No newline at end of file +reg/ \ No newline at end of file diff --git a/Makefile b/Makefile index 66c7629..3e7f1a4 100755 --- a/Makefile +++ b/Makefile @@ -21,12 +21,6 @@ all: init build init: @echo "Initialize ..."; \ - if [ ! -f source/ubl-util-standard.h ]; then \ - ln -s /usr/share/ubl-util-standard/ubl-util-standard.h source/ubl-util-standard.h; \ - fi; \ - if [ ! -f source/ubl-util-standard.c ]; then \ - ln -s /usr/share/ubl-util-standard/ubl-util-standard.c source/ubl-util-standard.c; \ - fi; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" depend: diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index d40ac05..4cdf835 100755 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -1086,7 +1086,7 @@ void MainWindow::read_file(){ else if (key_zone.length()!=0 || key_zone!=" "){ zone.push_back(key_zone); path_reg_zone = key_reg + "/" + key_zone; - key_zone_local = this->zone_file_read(path_reg_zone) +_(key_zone.c_str()); + key_zone_local = this->zone_file_read(path_reg_zone) + _(key_zone.c_str()); zone_local.push_back(key_zone_local); } } diff --git a/source/ubl-util-standard.c b/source/ubl-util-standard.c new file mode 100644 index 0000000..8d7e9ee --- /dev/null +++ b/source/ubl-util-standard.c @@ -0,0 +1,70 @@ +#include "ubl-util-standard.h" +#ifndef __cplusplus +#ifndef UBL_GET_STANDARD_UI +#define UBL_GET_STANDARD_UI + + +inline returnstruct *ubl_make_plugs(GtkWidget *LeftWidget, GtkWidget *RightWidget, int left_plug_id, int right_plug_id){ + returnstruct *ret=(returnstruct*)malloc(sizeof(returnstruct*)); + if (left_plug_id>0&&LeftWidget){ + GtkWidget *plug=gtk_plug_new(left_plug_id); + GtkWidget *toplug=LeftWidget; + if (gtk_widget_get_parent(GTK_WIDGET(toplug))){ + g_object_ref(G_OBJECT(toplug)); + GtkWidget *parent=gtk_widget_get_parent(toplug); + gtk_container_remove(GTK_CONTAINER(parent),toplug); + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + } else + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + gtk_widget_show(GTK_WIDGET(plug)); + ret->plugLeft=plug; + } + if (right_plug_id>0&&RightWidget){ + GtkWidget *plug=gtk_plug_new(right_plug_id); + GtkWidget *toplug=RightWidget; + if (gtk_widget_get_parent(GTK_WIDGET(toplug))){ + g_object_ref(G_OBJECT(toplug)); + GtkWidget *parent=gtk_widget_get_parent(toplug); + gtk_container_remove(GTK_CONTAINER(parent),toplug); + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + } else + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + gtk_widget_show(GTK_WIDGET(plug)); + ret->plugRight=plug; + } + return ret; +} + +#endif + +#else + + +inline void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, int left_plug_id, int right_plug_id){ + if (left_plug_id>0&&LeftWidget){ + GtkWidget *plug=gtk_plug_new(left_plug_id); + GtkWidget *toplug=GTK_WIDGET(LeftWidget->gobj()); + if (gtk_widget_get_parent(GTK_WIDGET(toplug))){ + g_object_ref(G_OBJECT(toplug)); + GtkWidget *parent=gtk_widget_get_parent(toplug); + gtk_container_remove(GTK_CONTAINER(parent),toplug); + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + } else + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + gtk_widget_show(GTK_WIDGET(plug)); + } + if (right_plug_id>0&&RightWidget){ + GtkWidget *plug=gtk_plug_new(right_plug_id); + GtkWidget *toplug=GTK_WIDGET(RightWidget->gobj()); + if (gtk_widget_get_parent(GTK_WIDGET(toplug))){ + g_object_ref(G_OBJECT(toplug)); + GtkWidget *parent=gtk_widget_get_parent(toplug); + gtk_container_remove(GTK_CONTAINER(parent),toplug); + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + } else + gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); + gtk_widget_show(GTK_WIDGET(plug)); + } + return; +} +#endif \ No newline at end of file diff --git a/source/ubl-util-standard.h b/source/ubl-util-standard.h new file mode 100644 index 0000000..4c1ae22 --- /dev/null +++ b/source/ubl-util-standard.h @@ -0,0 +1,22 @@ +#define STANDARD_PATH "/usr/share/ubl-util-standard/ubl-util-standard.glade" +#define CSS_PATH "/usr/share/ubl-util-standard/ubl-util-standard.css" +#ifndef __cplusplus +#include +#include + +typedef struct { + GtkWidget *plugLeft; + GtkWidget *plugRight; + + +} returnstruct; +static returnstruct *ubl_make_plugs(GtkWidget *LeftWidget, GtkWidget *RightWidget, int left_plug_id, int right_plug_id); +#else +#include +#include +#include +#include + + +static void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, int left_plug_id, int right_plug_id); +#endif \ No newline at end of file diff --git a/ubl-settings-datetime_ru.po b/ubl-settings-datetime_ru.po index d2360a6..0f6c7f0 100755 --- a/ubl-settings-datetime_ru.po +++ b/ubl-settings-datetime_ru.po @@ -1712,7 +1712,10 @@ msgid "Vincennes" msgstr "Венсен" msgid "Winamac" -msgstr "Winamac" +msgstr "Винамаке" + +msgid "ComodRivadavia" +msgstr "Комодоро-Ривадавия" msgid "Monticello" msgstr "Монтиселло" -- 2.35.1 From 39feafc2d0d7d0c43455bdd34157d966799e3b40 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Feb 2023 16:24:34 +0600 Subject: [PATCH 14/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD=20?= =?UTF-8?q?=D0=BE=D0=BA=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/ubl-settings-datetime.cc | 23 +++----- source/ubl-settings-datetime.h | 21 +++---- ubl-settings-datetime.glade | 97 ++++++++------------------------- 3 files changed, 40 insertions(+), 101 deletions(-) diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index 4cdf835..171cffc 100755 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -128,13 +128,13 @@ int MainWindow::check_root(){ } void MainWindow::lacalization(){ - btnSynopsis->set_label(_("Synopsis")); - btnAbout->set_label(_("About the program")); - lblDonwlodLocal->set_label(_("Download local")); - lblDonwlolGlob->set_label(_("Download global")); - lblSaveGlob->set_label(_("Save to Global configuration")); - lblSaveLocal->set_label(_("Save to local configuration")); - lblSaveLocalGlob->set_label(_("Save to global and local configuration")); + //btnSynopsis->set_label(_("Synopsis")); + //btnAbout->set_label(_("About the program")); + //btnDonwlodLocal->set_label(_("Download local")); + //btnDonwlolGlob->set_label(_("Download global")); + //btnSaveGlob->set_label(_("Save to Global configuration")); + //btnSaveLocal->set_label(_("Save to local configuration")); + //btnSaveLocalGlob->set_label(_("Save to global and local configuration")); aboutWindows->set_comments(_("Setting the date and time")); lblSave->set_label(_("Save")); lblDownload->set_label(_("Download")); @@ -145,6 +145,7 @@ void MainWindow::lacalization(){ cbDhcp->append(_("DHCP")); cbDhcp->append(_("Manual")); cbDhcp->append(_("Disabled")); + lblDateTimeSetting->set_text(_("Current date and time")); lblHead->set_text(_("Settings the date and time")); lblTime->set_text(_("Time")); @@ -265,13 +266,7 @@ void MainWindow::get_builder(){ builder->get_widget("btnSaveLocalGlob", btnSaveLocalGlob); builder->get_widget("btnSaveLocal", btnSaveLocal); builder->get_widget("btnSaveGlob", btnSaveGlob); - builder->get_widget("lblSynopsis", lblSynopsis); - builder->get_widget("lblAbout", lblAbout); - builder->get_widget("lblDonwlodLocal", lblDonwlodLocal); - builder->get_widget("lblDonwlolGlob", lblDonwlolGlob); - builder->get_widget("lblSaveLocalGlob", lblSaveLocalGlob); - builder->get_widget("lblSaveLocal", lblSaveLocal); - builder->get_widget("lblSaveGlob", lblSaveGlob); + this->add_CSS(); } void MainWindow::gui_exit(){ diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index ee4ed48..5ca24be 100755 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -93,20 +93,13 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Image *imgInfo; std::map > time_reg_map; std::map > time_reg_map_local; - Gtk::Button *btnSaveLocalGlob; - Gtk::Button *btnSaveLocal; - Gtk::Button *btnSaveGlob; - Gtk::Button *btnDonwlolGlob; - Gtk::Button *btnDonwlodLocal; - Gtk::Button *btnAbout; - Gtk::Button *btnSynopsis; - Gtk::Label *lblSaveLocalGlob; - Gtk::Label *lblSaveLocal; - Gtk::Label *lblSaveGlob; - Gtk::Label *lblDonwlolGlob; - Gtk::Label *lblDonwlodLocal; - Gtk::Label *lblAbout; - Gtk::Label *lblSynopsis; + Gtk::ModelButton *btnSaveLocalGlob; + Gtk::ModelButton *btnSaveLocal; + Gtk::ModelButton *btnSaveGlob; + Gtk::ModelButton *btnDonwlolGlob; + Gtk::ModelButton *btnDonwlodLocal; + Gtk::ModelButton *btnAbout; + Gtk::ModelButton *btnSynopsis; unsigned int year=0; unsigned int month=0; unsigned int day=0; diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index 93061eb..ba1b1d8 100755 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -21,7 +21,7 @@ Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. UBGroup UBGroup - ublinux-ubconfig + ubl-settings-datetime True gpl-2-0 @@ -238,44 +238,29 @@ False vertical - + True True True - True - - - True - False - start - Synopsis - - + Synopsis False True - 0 + 2 - + True True True - - - True - False - start - About the program - - + About the program False True - 1 + 3 @@ -310,44 +295,29 @@ False vertical - + True True True - - - True - False - start - Download local - - + Download local False True - 0 + 2 - + True True True - start - - - True - False - start - Download global - - + Download global False True - 1 + 3 @@ -382,63 +352,42 @@ False vertical - + True True True - - - True - False - start - Save to global and local configuration - - + Save to global and local configuration False True - 0 + 3 - + True True True - - - True - False - start - Save to local configuration - - + Save to local configuration False True - 1 + 4 - + True True True - - - True - False - start - Save to Global configuration - - + Save to Global configuration False True - 2 + 5 @@ -1193,6 +1142,7 @@ Format: DD.MM.YYYY True False + ubl-settings-datetime True @@ -1204,6 +1154,7 @@ Format: DD.MM.YYYY 5 6 6 + 32 ubl-settings-datetime -- 2.35.1 From a7613c5b7bf65ca4cc1ac621efde33967c2eaa3e Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Feb 2023 17:51:30 +0600 Subject: [PATCH 15/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BE=D0=BA=D0=BD=D0=BE=20about?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- #ubl-settings-datetime.glade# | 1363 +++++++++++++++++++++++++++++++ source/ubl-settings-datetime.cc | 10 +- source/ubl-settings-datetime.h | 2 + style.css | 3 + ubl-settings-datetime.glade | 24 +- ubl-settings-datetime_ru.po | 3 + 6 files changed, 1397 insertions(+), 8 deletions(-) create mode 100644 #ubl-settings-datetime.glade# diff --git a/#ubl-settings-datetime.glade# b/#ubl-settings-datetime.glade# new file mode 100644 index 0000000..9012e06 --- /dev/null +++ b/#ubl-settings-datetime.glade# @@ -0,0 +1,1363 @@ + + + + + + False + О Программе + False + True + center + ubl-settings-datetime + dialog + True + ubl-settings-datetime + 1.2 + Copyright © 2023 - UBSoft Software LLC + Setting the date and time + https://ublinux.ru/ + Project Home Page + Это приложение распространяется без каких-либо гарантий. +Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. + UBGroup + UBGroup + ubl-settings-datetime + True + gpl-2-0 + + + False + vertical + 2 + + + False + end + + + + + + False + False + 0 + + + + + + + + + + False + Внимание! + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 6 + 6 + Enter DHCP ! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + + + False + Внимание! + center + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 5 + 5 + 5 + 5 + 6 + 6 + Enter DHCP ! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + + + False + + + True + False + 0 + none + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + Synopsis + + + False + True + 2 + + + + + True + True + True + About the program + + + False + True + 3 + + + + + + + + + + + + + + False + + + True + False + 0 + none + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + Download local + + + False + True + 2 + + + + + True + True + True + Download global + + + False + True + 3 + + + + + + + + + + + + + + False + + + True + False + 0 + none + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + Save to global and local configuration + + + False + True + 3 + + + + + True + True + True + Save to local configuration + + + False + True + 4 + + + + + True + True + True + Save to Global configuration + + + False + True + 5 + + + + + + + + + + + + + + False + + + True + False + vertical + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + gtk-missing-image + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + vertical + + + True + False + + + 90 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 69 + ubl-settings-datetime + + + False + True + 0 + + + + + True + False + + + True + False + + + True + False + vertical + + + 255 + True + False + Date and time settings + + + + + + + + + True + True + 0 + + + + + False + True + 0 + + + + + True + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + True + 1 + + + + + False + True + 0 + + + + + False + True + 1 + + + + + True + False + vertical + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + vertical + + + True + False + + + 0 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Time + True + 0 + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + 2 + 0.099999999776482579 + True + + + False + True + 1 + + + + + True + False + : + + + False + True + 2 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + 2 + True + + + False + True + 3 + + + + + 20 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Date + True + 0 + + + False + True + 4 + + + + + -1 + True + True + Date +Format: DD.MM.YYYY + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 5 + + + + + True + True + True + Интерактивный выбор даты + 5 + 10 + 5 + 10 + 6 + 6 + + + True + False + x-office-calendar + + + + + False + True + 6 + + + + + False + True + 1 + + + + + True + False + + + True + True + True + 7 + 5 + 7 + 5 + 6 + 6 + + + True + False + center + center + + + True + False + 5 + 5 + 5 + 5 + media-playlist-repeat + + + False + True + 0 + + + + + True + False + center + center + Sync by + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + + + False + True + 2 + + + + + True + True + True + 5 + 10 + 5 + 10 + 6 + 6 + + + True + False + center + center + Synchronize hardware time + + + + + True + True + 3 + + + + + False + True + 3 + + + + + + + True + False + Current date and time + + + + + False + True + 0 + + + + + False + True + 1 + + + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + -1 + True + True + Enter the name of the ntp server or its ip address. When entering multiple addresses, separate them with spaces. + center + 5 + 10 + 5 + 10 + 6 + 6 + + + True + True + 3 + + + + + False + True + 1 + + + + + + + True + False + Synchronize via NTP: + + + + + False + True + 0 + + + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + + + True + False + + + False + True + 1 + + + + + True + False + 8 + 5 + 8 + 5 + 6 + 13 + Region + 0 + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 10 + False + False + + + False + True + 3 + + + + + True + False + 10 + 5 + 10 + 5 + 6 + 13 + Area + 0 + + + False + True + 4 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 10 + False + False + + + False + True + 5 + + + + + 5 + True + False + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + + + + + + True + False + Time Zone + + + + + False + True + 3 + + + + + False + True + 2 + + + + + False + True + 0 + + + + + + + True + False + True + + + True + False + 5 + 5 + 5 + 5 + 2 + ubl-settings-datetime + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 32 + ubl-settings-datetime + + + + + True + False + + + True + True + False + True + True + none + popDownloadMenu + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download + + + False + True + 0 + + + + + True + False + True + False + True + False + + + + + + False + True + 1 + + + + + + + False + True + 0 + + + + + + 1 + + + + + True + False + + + True + True + False + True + True + none + popSaveMenu + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Save + + + + False + True + 0 + + + + + True + False + True + False + True + + + + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + True + False + True + True + none + popAbout + + + + + + False + True + 1 + + + + + + end + 3 + + + + + + + 240 + 185 + False + btnChooseDate + bottom + none + + + True + True + 10 + 10 + 10 + 10 + 10 + 10 + 2023 + 1 + 10 + + + + diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index 171cffc..8cf8555 100755 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -136,6 +136,7 @@ void MainWindow::lacalization(){ //btnSaveLocal->set_label(_("Save to local configuration")); //btnSaveLocalGlob->set_label(_("Save to global and local configuration")); aboutWindows->set_comments(_("Setting the date and time")); + aboutWindows->set_website_label(_("Project Home Page")); lblSave->set_label(_("Save")); lblDownload->set_label(_("Download")); txtDate->set_tooltip_text(_("Date of\nFormat: DD.MM.YYYY")); @@ -154,7 +155,7 @@ void MainWindow::lacalization(){ lblReg->set_text(_("Region")); lblZone->set_text(_("Zone")); lblSynchronizeBtn->set_text(_("Sync by")); - this->set_title(_("ubl-settings-datetime")); + lblHeader->set_text(_("ubl-settings-datetime")); mess_sudo->set_title(_("Warning!")); mess_dchp->set_title(_("Warning!")); lblTimeBios->set_text(_("Synchronize hardware time")); @@ -200,9 +201,11 @@ void MainWindow::add_CSS(){ styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application Glib::RefPtr context = boxColor->get_style_context(); Glib::RefPtr context_lbl_head = lblHead->get_style_context(); - //Glib::RefPtr context_button = btnHardwareTime->get_style_context(); + context->add_class("cssboxColor1"); context_lbl_head->add_class("textHead"); + + } @@ -266,7 +269,8 @@ void MainWindow::get_builder(){ builder->get_widget("btnSaveLocalGlob", btnSaveLocalGlob); builder->get_widget("btnSaveLocal", btnSaveLocal); builder->get_widget("btnSaveGlob", btnSaveGlob); - + builder->get_widget("headerBar", headerBar); + builder->get_widget("lblHeader", lblHeader); this->add_CSS(); } void MainWindow::gui_exit(){ diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index 5ca24be..06d3f45 100755 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -100,6 +100,8 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::ModelButton *btnDonwlodLocal; Gtk::ModelButton *btnAbout; Gtk::ModelButton *btnSynopsis; + Gtk::HeaderBar *headerBar; + Gtk::Label *lblHeader; unsigned int year=0; unsigned int month=0; unsigned int day=0; diff --git a/style.css b/style.css index ea9b691..d8a3e99 100755 --- a/style.css +++ b/style.css @@ -10,4 +10,7 @@ .textHead{ text-shadow: 1px 1px #ffffff; } +.textHeaderBar{ + font-weight: bold; +} diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index ba1b1d8..971ddd9 100755 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -12,11 +12,11 @@ dialog True ubl-settings-datetime - 1.28 - Copyright © 2021 - the ublinux team + 1.2 + Copyright © 2023 - UBSoft Software LLC Setting the date and time https://ublinux.ru/ - www.ublinux.ru + https://ublinux.ru/ Это приложение распространяется без каких-либо гарантий. Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. UBGroup @@ -1139,11 +1139,25 @@ Format: DD.MM.YYYY - + True False - ubl-settings-datetime True + + + True + False + 5 + 5 + 5 + 5 + 2 + ubl-settings-datetime + + + + + True diff --git a/ubl-settings-datetime_ru.po b/ubl-settings-datetime_ru.po index 0f6c7f0..dfa6ea3 100755 --- a/ubl-settings-datetime_ru.po +++ b/ubl-settings-datetime_ru.po @@ -1714,6 +1714,9 @@ msgstr "Венсен" msgid "Winamac" msgstr "Винамаке" +msgid "Project Home Page" +msgstr "Домашняя страница проекта" + msgid "ComodRivadavia" msgstr "Комодоро-Ривадавия" -- 2.35.1 From 4a1713ce6972d21c599ebe7679537b03cb46fb89 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 27 Feb 2023 17:53:44 +0600 Subject: [PATCH 16/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- #ubl-settings-datetime.glade# | 1363 --------------------------------- ubl-settings-datetime.glade | 2 +- 2 files changed, 1 insertion(+), 1364 deletions(-) delete mode 100644 #ubl-settings-datetime.glade# diff --git a/#ubl-settings-datetime.glade# b/#ubl-settings-datetime.glade# deleted file mode 100644 index 9012e06..0000000 --- a/#ubl-settings-datetime.glade# +++ /dev/null @@ -1,1363 +0,0 @@ - - - - - - False - О Программе - False - True - center - ubl-settings-datetime - dialog - True - ubl-settings-datetime - 1.2 - Copyright © 2023 - UBSoft Software LLC - Setting the date and time - https://ublinux.ru/ - Project Home Page - Это приложение распространяется без каких-либо гарантий. -Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. - UBGroup - UBGroup - ubl-settings-datetime - True - gpl-2-0 - - - False - vertical - 2 - - - False - end - - - - - - False - False - 0 - - - - - - - - - - False - Внимание! - dialog - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 6 - 6 - Enter DHCP ! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - - - - - - False - Внимание! - center - dialog - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 5 - 5 - 5 - 5 - 6 - 6 - Enter DHCP ! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - - - - - - False - - - True - False - 0 - none - - - True - False - 5 - 5 - 5 - 5 - - - True - False - vertical - - - True - True - True - Synopsis - - - False - True - 2 - - - - - True - True - True - About the program - - - False - True - 3 - - - - - - - - - - - - - - False - - - True - False - 0 - none - - - True - False - 5 - 5 - 5 - 5 - - - True - False - vertical - - - True - True - True - Download local - - - False - True - 2 - - - - - True - True - True - Download global - - - False - True - 3 - - - - - - - - - - - - - - False - - - True - False - 0 - none - - - True - False - 5 - 5 - 5 - 5 - - - True - False - vertical - - - True - True - True - Save to global and local configuration - - - False - True - 3 - - - - - True - True - True - Save to local configuration - - - False - True - 4 - - - - - True - True - True - Save to Global configuration - - - False - True - 5 - - - - - - - - - - - - - - False - - - True - False - vertical - - - True - False - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - gtk-missing-image - - - False - True - 0 - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - - - - - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - vertical - - - True - False - - - 90 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 69 - ubl-settings-datetime - - - False - True - 0 - - - - - True - False - - - True - False - - - True - False - vertical - - - 255 - True - False - Date and time settings - - - - - - - - - True - True - 0 - - - - - False - True - 0 - - - - - True - True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - True - 1 - - - - - False - True - 0 - - - - - False - True - 1 - - - - - True - False - vertical - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - 5 - 5 - vertical - - - True - False - - - 0 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Time - True - 0 - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - 2 - 0.099999999776482579 - True - - - False - True - 1 - - - - - True - False - : - - - False - True - 2 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - 2 - True - - - False - True - 3 - - - - - 20 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Date - True - 0 - - - False - True - 4 - - - - - -1 - True - True - Date -Format: DD.MM.YYYY - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 5 - - - - - True - True - True - Интерактивный выбор даты - 5 - 10 - 5 - 10 - 6 - 6 - - - True - False - x-office-calendar - - - - - False - True - 6 - - - - - False - True - 1 - - - - - True - False - - - True - True - True - 7 - 5 - 7 - 5 - 6 - 6 - - - True - False - center - center - - - True - False - 5 - 5 - 5 - 5 - media-playlist-repeat - - - False - True - 0 - - - - - True - False - center - center - Sync by - - - False - True - 1 - - - - - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - False - - - False - True - 2 - - - - - True - True - True - 5 - 10 - 5 - 10 - 6 - 6 - - - True - False - center - center - Synchronize hardware time - - - - - True - True - 3 - - - - - False - True - 3 - - - - - - - True - False - Current date and time - - - - - False - True - 0 - - - - - False - True - 1 - - - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - 5 - 5 - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 1 - - - - - -1 - True - True - Enter the name of the ntp server or its ip address. When entering multiple addresses, separate them with spaces. - center - 5 - 10 - 5 - 10 - 6 - 6 - - - True - True - 3 - - - - - False - True - 1 - - - - - - - True - False - Synchronize via NTP: - - - - - False - True - 0 - - - - - False - True - 2 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - - - True - False - - - False - True - 1 - - - - - True - False - 8 - 5 - 8 - 5 - 6 - 13 - Region - 0 - - - False - True - 2 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 10 - False - False - - - False - True - 3 - - - - - True - False - 10 - 5 - 10 - 5 - 6 - 13 - Area - 0 - - - False - True - 4 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 10 - False - False - - - False - True - 5 - - - - - 5 - True - False - - - False - True - 6 - - - - - True - False - - - False - True - 7 - - - - - - - True - False - Time Zone - - - - - False - True - 3 - - - - - False - True - 2 - - - - - False - True - 0 - - - - - - - True - False - True - - - True - False - 5 - 5 - 5 - 5 - 2 - ubl-settings-datetime - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 32 - ubl-settings-datetime - - - - - True - False - - - True - True - False - True - True - none - popDownloadMenu - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Download - - - False - True - 0 - - - - - True - False - True - False - True - False - - - - - - False - True - 1 - - - - - - - False - True - 0 - - - - - - 1 - - - - - True - False - - - True - True - False - True - True - none - popSaveMenu - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Save - - - - False - True - 0 - - - - - True - False - True - False - True - - - - - - False - True - 1 - - - - - - - False - True - 0 - - - - - True - True - False - True - True - none - popAbout - - - - - - False - True - 1 - - - - - - end - 3 - - - - - - - 240 - 185 - False - btnChooseDate - bottom - none - - - True - True - 10 - 10 - 10 - 10 - 10 - 10 - 2023 - 1 - 10 - - - - diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index 971ddd9..9012e06 100755 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -16,7 +16,7 @@ Copyright © 2023 - UBSoft Software LLC Setting the date and time https://ublinux.ru/ - https://ublinux.ru/ + Project Home Page Это приложение распространяется без каких-либо гарантий. Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. UBGroup -- 2.35.1 From 84275f37f299520914469a25aefee7484db571c7 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Tue, 28 Feb 2023 09:27:11 +0600 Subject: [PATCH 17/22] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/CMakeLists.txt | 2 +- source/ubl-settings-datetime.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 09e128f..b0d3007 100755 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -13,7 +13,7 @@ find_package(ICU REQUIRED COMPONENTS uc dt in io) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ -O2 -pipe -fno-plt -fexceptions \ -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ - -fstack-clash-protection -fcf-protection -g") + -fstack-clash-protection -fcf-protection") set(SOURCE_FILES ubl-util-standard.h diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index 8cf8555..e749358 100755 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -64,7 +64,7 @@ void MainWindow::settings(){ builder->get_widget("boxSave",boxSave); - ubl_make_plugs(boxButton,boxSave, socket_ext_id_I, socket_trd_id_I); + ubl_make_plugs(boxSave,boxButton, socket_ext_id_I, socket_trd_id_I); year=0, month=0, day=0; this->get_builder(); this->lacalization(); -- 2.35.1 From bb45aa7aae7353e18e6735e662604f297d4e4e79 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 1 Mar 2023 11:26:16 +0600 Subject: [PATCH 18/22] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=B0=D1=80=D0=BC=D0=B5=D1=82=D1=80=D1=8B=20=D0=B1=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- #ubl-settings-datetime.glade#~ | 1398 +++++++++++++++++++++++++++++++ source/main.cc | 87 +- source/ubl-settings-datetime.cc | 132 ++- source/ubl-settings-datetime.h | 9 +- ubl-settings-datetime.glade | 0 5 files changed, 1505 insertions(+), 121 deletions(-) create mode 100644 #ubl-settings-datetime.glade#~ mode change 100755 => 100644 ubl-settings-datetime.glade diff --git a/#ubl-settings-datetime.glade#~ b/#ubl-settings-datetime.glade#~ new file mode 100644 index 0000000..720e5a8 --- /dev/null +++ b/#ubl-settings-datetime.glade#~ @@ -0,0 +1,1398 @@ + + + + + + False + О Программе + False + True + center + ubl-settings-datetime + dialog + True + ubl-settings-datetime + 1.2 + Copyright © 2023 - UBSoft Software LLC + Setting the date and time + https://ublinux.ru/ + Project Home Page + Это приложение распространяется без каких-либо гарантий. +Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. + UBGroup + UBGroup + ubl-settings-datetime + True + gpl-2-0 + + + False + vertical + 2 + + + False + end + + + + + + False + False + 0 + + + + + + + + + + 730 + 530 + False + center + ubconfig-gui + south-west + + + + + + True + False + + + + + + True + False + 5 + 10 + 5 + 10 + 25 + ubconfig-gui + + + + + + + + + + False + Внимание! + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 6 + 6 + Enter DHCP ! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + + + False + Внимание! + center + dialog + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + 5 + 5 + 6 + 6 + 50 + gtk-dialog-warning + + + True + True + 0 + + + + + 160 + True + False + start + center + 5 + 5 + 5 + 5 + 6 + 6 + Enter DHCP ! + + + True + True + 1 + + + + + False + True + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 + + + + + + + False + + + True + False + 0 + none + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + Synopsis + + + False + True + 2 + + + + + True + True + True + About the program + + + False + True + 3 + + + + + + + + + + + + + + False + + + True + False + 0 + none + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + Download local + + + False + True + 2 + + + + + True + True + True + Download global + + + False + True + 3 + + + + + + + + + + + + + + False + + + True + False + 0 + none + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + + + True + True + True + Save to global and local configuration + + + False + True + 3 + + + + + True + True + True + Save to local configuration + + + False + True + 4 + + + + + True + True + True + Save to Global configuration + + + False + True + 5 + + + + + + + + + + + + + + False + + + True + False + vertical + + + True + False + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + gtk-missing-image + + + False + True + 0 + + + + + True + False + start + 5 + 5 + 5 + 5 + 6 + 6 + + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + vertical + + + True + False + + + 90 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 69 + ubl-settings-datetime + + + False + True + 0 + + + + + True + False + + + True + False + + + True + False + vertical + + + 255 + True + False + Date and time settings + + + + + + + + + True + True + 0 + + + + + False + True + 0 + + + + + True + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + True + 1 + + + + + False + True + 0 + + + + + False + True + 1 + + + + + True + False + vertical + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + vertical + + + True + False + + + 0 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Time + True + 0 + + + False + True + 0 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + 2 + 0.099999999776482579 + True + + + False + True + 1 + + + + + True + False + : + + + False + True + 2 + + + + + True + True + 5 + 5 + 5 + 5 + 6 + 6 + 2 + True + + + False + True + 3 + + + + + 20 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Date + True + 0 + + + False + True + 4 + + + + + -1 + True + True + Date +Format: DD.MM.YYYY + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 5 + + + + + True + True + True + Интерактивный выбор даты + 5 + 10 + 5 + 10 + 6 + 6 + + + True + False + x-office-calendar + + + + + False + True + 6 + + + + + False + True + 1 + + + + + True + False + + + True + True + True + 7 + 5 + 7 + 5 + 6 + 6 + + + True + False + center + center + + + True + False + 5 + 5 + 5 + 5 + media-playlist-repeat + + + False + True + 0 + + + + + True + False + center + center + Sync by + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + + + False + True + 2 + + + + + True + True + True + 5 + 10 + 5 + 10 + 6 + 6 + + + True + False + center + center + Synchronize hardware time + + + + + True + True + 3 + + + + + False + True + 3 + + + + + + + True + False + Current date and time + + + + + False + True + 0 + + + + + False + True + 1 + + + + + True + False + vertical + + + True + False + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + vertical + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + -1 + True + True + Enter the name of the ntp server or its ip address. When entering multiple addresses, separate them with spaces. + center + 5 + 10 + 5 + 10 + 6 + 6 + + + True + True + 3 + + + + + False + True + 1 + + + + + + + True + False + Synchronize via NTP: + + + + + False + True + 0 + + + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + + + True + False + + + False + True + 1 + + + + + True + False + 8 + 5 + 8 + 5 + 6 + 13 + Region + 0 + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 10 + False + False + + + False + True + 3 + + + + + True + False + 10 + 5 + 10 + 5 + 6 + 13 + Area + 0 + + + False + True + 4 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 10 + False + False + + + False + True + 5 + + + + + 5 + True + False + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + + + + + + True + False + Time Zone + + + + + False + True + 3 + + + + + False + True + 2 + + + + + False + True + 0 + + + + + + + True + False + True + + + True + False + 5 + 5 + 5 + 5 + 2 + ubl-settings-datetime + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 32 + ubl-settings-datetime + + + + + True + False + + + True + True + False + True + True + none + popDownloadMenu + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Download + + + False + True + 0 + + + + + True + False + True + False + True + False + + + + + + False + True + 1 + + + + + + + False + True + 0 + + + + + + 1 + + + + + True + False + + + True + True + False + True + True + none + popSaveMenu + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Save + + + + False + True + 0 + + + + + True + False + True + False + True + + + + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + True + False + True + True + none + popAbout + + + + + + False + True + 1 + + + + + + end + 3 + + + + + + + 240 + 185 + False + btnChooseDate + bottom + none + + + True + True + 10 + 10 + 10 + 10 + 10 + 10 + 2023 + 1 + 10 + + + + diff --git a/source/main.cc b/source/main.cc index a77bd61..42b4f43 100755 --- a/source/main.cc +++ b/source/main.cc @@ -1,4 +1,7 @@ #include "ubl-settings-datetime.h" + +void pars_flag(int index_start, int argc, char* argv[]); + int main(int argc, char* argv[]) { string str_argv=""; string str_cmd_argv = ""; @@ -14,24 +17,9 @@ int main(int argc, char* argv[]) { str_argv = argv[1]; } - if ((str_argv.find("-s")!=std::string::npos) || (str_argv.find("--socket-id")!=std::string::npos)){ + if (str_argv.find("--socket-id")!=std::string::npos){ - for (int i=3; iget_widget_derived("window", wnd); auto r = app->run(*wnd); @@ -93,4 +59,45 @@ int main(int argc, char* argv[]) { cout << gettext("Argument not recognized"); return 0; } +} + +void pars_flag(int index_start, int argc, char* argv[]){ + string str_argv=""; + for (int i=index_start; ievent(); this->parse_text_date(); this->download_local_cfg(); - - //orevrlayInfo->add_overlay(*boxInfoError); - //imgInfo->set("/usr/share/ubl-settings-datetime/images/checked.svg"); - //GdkPixbuf* pixbuf_image = gdk_pixbuf_new_from_file_at_size("/usr/share/ubl-settings-datetime/images/close.svg", 12,12,NULL); - //GtkWidget* imageInfo = GTK_WIDGET(imageCloseInfo->gobj()); - //gtk_image_set_from_pixbuf(GTK_IMAGE(imageInfo), pixbuf_image); } else{ btnDownload->set_sensitive(false); @@ -109,11 +106,7 @@ void MainWindow::settings(){ btnBoxAboutDialog->set_visible(false); this->event(); imgInfo->set("/usr/share/ubl-settings-datetime/images/checked.svg"); - - - } - //popCalendar->show_all(); } @@ -159,14 +152,10 @@ void MainWindow::lacalization(){ mess_sudo->set_title(_("Warning!")); mess_dchp->set_title(_("Warning!")); lblTimeBios->set_text(_("Synchronize hardware time")); - //_lblSynchronizebChk->set_text(_("Synchronize via NTP")); } void MainWindow::flag_block_gui(){ if (flag_datetime==true){ - //numTimeHrs->set_sensitive(false); - //numTimeMin->set_sensitive(false); - //txtDate->set_sensitive(false); btnUpdateDateTime->set_sensitive(false); numTimeHrs->set_sensitive(false); numTimeMin->set_sensitive(false); @@ -180,17 +169,28 @@ void MainWindow::flag_block_gui(){ if (flag_timezone==true){ cbRegion->set_sensitive(false); cbZone->set_sensitive(false); - //btnChooseDate->set_sensitive(false); - cbDhcp->set_sensitive(false); } - if (flag_ntp==true){ + if (flag_ntp_mode==true){ cbDhcp->set_sensitive(false); txtNtpServer->set_sensitive(false); + flag_ntp_edit = true; } - if (flag_update==true){ + if (flag_ntp_edit==true){ txtNtpServer->set_sensitive(false); - cbDhcp->set_sensitive(false); } + if (flag_load_global==true){ + btnDonwlolGlob->set_sensitive(false); + } + if (flag_save==true){ + btnSave->set_sensitive(false); + } + if (flag_save_local==true){ + btnSaveLocal->set_sensitive(false); + } + if (flag_save_global==true){ + btnSaveGlob->set_sensitive(false); + } + } void MainWindow::add_CSS(){ @@ -201,11 +201,8 @@ void MainWindow::add_CSS(){ styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application Glib::RefPtr context = boxColor->get_style_context(); Glib::RefPtr context_lbl_head = lblHead->get_style_context(); - context->add_class("cssboxColor1"); context_lbl_head->add_class("textHead"); - - } @@ -240,7 +237,6 @@ void MainWindow::get_builder(){ builder->get_widget("lblTimeZone",lblTimeZone); builder->get_widget("lblReg",lblReg); builder->get_widget("lblZone",lblZone); - //builder->get_widget("lblSynchronizebChk",_lblSynchronizebChk); builder->get_widget("lblSynchronizebChkGLob",lblSynchronizebChkGLob); builder->get_widget("lblSynchronizeBtn",lblSynchronizeBtn); builder->get_widget("lblTimeBios",lblTimeBios); @@ -249,7 +245,6 @@ void MainWindow::get_builder(){ builder->get_widget("lblMessageSudo",lblMessageSudo); builder->get_widget("btnMessCloseSudo",btnMessCloseSudo); builder->get_widget("lblSave",lblSave); - builder->get_widget("lblDownload",lblDownload); builder->get_widget("aboutWindows", aboutWindows); builder->get_widget("btnBoxAboutDialog", btnBoxAboutDialog); @@ -356,20 +351,29 @@ void MainWindow::save_global_cfg(){ info_warning_error(3); } void MainWindow::save_global_local_cfg(){ - string cmd = "ubconfig --target system set clock ZONE="; - this->enter_zone(cmd); - cmd = "/usr/bin/ubconfig --target global set clock ZONE="; - this->enter_zone(cmd); - string cmd_default = "/usr/bin/ubconfig --target global set network NTPSERVERS=default"; - string cmd_dhcp = "/usr/bin/ubconfig --target global set network NTPSERVERS=dhcp"; - string cmd_set_ntp = "/usr/bin/ubconfig --target global set network NTPSERVERS=\""; - string remove = "/usr/bin/ubconfig --target global remove network NTPSERVERS"; - this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); - cmd_default = "/usr/bin/ubconfig --target system set network NTPSERVERS=default"; - cmd_dhcp = "/usr/bin/ubconfig --target system set network NTPSERVERS=dhcp"; - cmd_set_ntp = "/usr/bin/ubconfig --target system set network NTPSERVERS=\""; - remove = "/usr/bin/ubconfig --target system remove network NTPSERVERS"; - this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); + string cmd = ""; + string cmd_default = ""; + string cmd_dhcp = ""; + string cmd_set_ntp = ""; + string remove = ""; + if (flag_save_global==false){ + cmd = "/usr/bin/ubconfig --target global set clock ZONE="; + this->enter_zone(cmd); + cmd_default = "/usr/bin/ubconfig --target global set network NTPSERVERS=default"; + cmd_dhcp = "/usr/bin/ubconfig --target global set network NTPSERVERS=dhcp"; + cmd_set_ntp = "/usr/bin/ubconfig --target global set network NTPSERVERS=\""; + remove = "/usr/bin/ubconfig --target global remove network NTPSERVERS"; + this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); + } + if (flag_save_local==false){ + cmd = "ubconfig --target system set clock ZONE="; + this->enter_zone(cmd); + cmd_default = "/usr/bin/ubconfig --target system set network NTPSERVERS=default"; + cmd_dhcp = "/usr/bin/ubconfig --target system set network NTPSERVERS=dhcp"; + cmd_set_ntp = "/usr/bin/ubconfig --target system set network NTPSERVERS=\""; + remove = "/usr/bin/ubconfig --target system remove network NTPSERVERS"; + this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); + } info_warning_error(4); } @@ -417,28 +421,6 @@ void MainWindow::info_warning_error(int mess){ } -void MainWindow::stop_ntp(){ - int start_error = error_info; - string cmd = "SEL_SERVICE=\"systemd-timesyncd\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service; "; - wrapper_system(cmd); - cmd ="SEL_SERVICE=\"ntpd\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE}; "; - wrapper_system(cmd); - cmd ="SEL_SERVICE=\"ntpdate\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE}; "; - wrapper_system(cmd); - cmd = "SEL_SERVICE=\"chronyd\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE}; "; - wrapper_system(cmd); - cmd ="SEL_SERVICE=\"openntpd\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ntpd; "; - wrapper_system(cmd); - cmd ="SEL_SERVICE=\"ptp4l\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE}; "; - wrapper_system(cmd); - cmd ="SEL_SERVICE=\"phc2sys\"; systemctl --quiet is-active ${SEL_SERVICE}.service &>/dev/null && systemctl stop ${SEL_SERVICE}.service || pkill -9 ${SEL_SERVICE} "; - wrapper_system(cmd); - if (start_error!=error_info){ - error_info=start_error; - } - cout << error_info << endl; -} - void MainWindow::wrapper_system(string cmd){ int response_cmd = system(cmd.c_str()); if (response_cmd!=0){ @@ -620,13 +602,14 @@ void MainWindow::event_entry_cbDhcp(){ txtNtpServer->set_text(""); } else if (activ_index==2){ - txtNtpServer->set_sensitive(true); + if (flag_ntp_edit==false){ + txtNtpServer->set_sensitive(true); + } } else if (activ_index==3){ txtNtpServer->set_text(""); txtNtpServer->set_sensitive(false); btnUpdateDateTime->set_sensitive(true); - this->stop_ntp(); } } @@ -655,7 +638,6 @@ void MainWindow::save_Dhcp(string &cmd_default, string &cmd_dhcp, string &remove } void MainWindow::entry_dhcp_mess(string cmd_get_dhcp, string cmd_default_get_dhcp){ - //string cmd = "/usr/bin/ubconfig get network NTPSERVERS"; string cmd = cmd_get_dhcp; struct Result obj_result = this->wrapper_call(cmd); if (obj_result.error==0){ @@ -671,7 +653,6 @@ void MainWindow::entry_dhcp_mess(string cmd_get_dhcp, string cmd_default_get_dhc else if (str_dhcp=="default"){ btnUpdateDateTime->set_sensitive(false); cbDhcp->set_active(0); - //string cmd = "/usr/bin/ubconfig --source=default get NTPSERVERS_DEFAULT"; cmd = cmd_default_get_dhcp; struct Result obj_result = this->wrapper_call(cmd); txtNtpServer->set_sensitive(false); @@ -682,10 +663,6 @@ void MainWindow::entry_dhcp_mess(string cmd_get_dhcp, string cmd_default_get_dhc if (obj_result.error==2){ warning_info-=1; } - //string error = ""; - //error = string(_("ERROR")) + "\n" + obj_result.response; - //lblMessage->set_text(error); - //mess_dchp->show(); } } else{ @@ -701,7 +678,9 @@ void MainWindow::entry_dhcp_mess(string cmd_get_dhcp, string cmd_default_get_dhc else{ cbDhcp->set_active(2); txtNtpServer->set_text(str_dhcp); - txtNtpServer->set_sensitive(true); + if (flag_ntp_edit==false){ + txtNtpServer->set_sensitive(true); + } } } } @@ -921,7 +900,6 @@ string MainWindow::call(string cmd){ exit(1); } while (fgets(path, PATH_MAX, fp) != NULL){ - //printf("%s", path); break; } status = pclose(fp); @@ -933,7 +911,6 @@ string MainWindow::call(string cmd){ } void MainWindow::append_zone(){ - //int length_zone = time_reg_map.at(str_region).size(); cbZone->remove_all(); int index = cbRegion->get_active_row_number(); string str_region = array_region[index]; @@ -1052,26 +1029,25 @@ void MainWindow::read_file(){ string path_reg_zone = ""; namespace fs = std::filesystem; for (const auto & entry : fs::directory_iterator("/usr/share/zoneinfo/")){ - std::ifstream in(entry.path()); // окрываем файл для чтения + std::ifstream in(entry.path()); if (in.is_open()){ string key_reg = entry.path().filename().string(); string path_dir = "/usr/share/zoneinfo/"+key_reg; if (fs::is_directory(path_dir)){ if (key_reg!="Pacific"){ if (key_reg!="posix"){ - //if (key_reg!="Etc"){ if (key_reg!="right"){ vector zone; vector zone_local; for (const auto & entry_zone : fs::directory_iterator(path_dir)){ - std::ifstream in1(entry_zone.path()); // окрываем файл для чтения + std::ifstream in1(entry_zone.path()); if (in1.is_open()){ string key_zone = entry_zone.path().filename().string(); if (fs::is_directory(path_dir+"/"+key_zone)){ string reg_reg_zone = path_dir+"/"+key_zone; for (const auto & entry_reg_reg_zone : fs::directory_iterator(reg_reg_zone)){ - std::ifstream in2(entry_zone.path()); // окрываем файл для чтения + std::ifstream in2(entry_zone.path()); if (in2.is_open()){ string reg_reg_zone = entry_reg_reg_zone.path().filename().string(); zone.push_back(reg_reg_zone); diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index 06d3f45..9859a5a 100755 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -27,8 +27,12 @@ extern string path_locale; extern string path_css; extern bool flag_datetime; extern bool flag_timezone; -extern bool flag_ntp; -extern bool flag_update; +extern bool flag_ntp_mode; +extern bool flag_ntp_edit; +extern bool flag_save; +extern bool flag_save_local; +extern bool flag_save_global; +extern bool flag_load_global; extern int socket_ext_id_I; extern int socket_trd_id_I; class CmdArgParser : public Glib::OptionGroup @@ -163,7 +167,6 @@ class MainWindow : public Gtk::ApplicationWindow { int check_root(); void gui_exit(); bool gui_exit_2(GdkEventAny* event); - void stop_ntp(); void wind_close_ntp(); void wrapper_system(string cmd); void info_status_app(string stule); diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade old mode 100755 new mode 100644 -- 2.35.1 From b7a33c66c6c8e0b96d733dd726ebee0dd7e68199 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 1 Mar 2023 16:07:35 +0600 Subject: [PATCH 19/22] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B5=20=D1=81=D0=B8=D0=BD?= =?UTF-8?q?=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B0=D0=BF=D0=BF=D0=B0=D1=80=D0=B0=D1=82=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- #ubl-settings-datetime.glade#~ | 1398 ------------------------------- screenshot/screenshot.png | Bin 56825 -> 58027 bytes source/ubl-settings-datetime.cc | 64 +- source/ubl-settings-datetime.h | 4 + source/ubl-util-standard.c | 1 - source/ubl-util-standard.h | 2 - ubl-settings-datetime.glade | 252 +++--- ubl-settings-datetime_ru.po | 12 + 8 files changed, 218 insertions(+), 1515 deletions(-) delete mode 100644 #ubl-settings-datetime.glade#~ diff --git a/#ubl-settings-datetime.glade#~ b/#ubl-settings-datetime.glade#~ deleted file mode 100644 index 720e5a8..0000000 --- a/#ubl-settings-datetime.glade#~ +++ /dev/null @@ -1,1398 +0,0 @@ - - - - - - False - О Программе - False - True - center - ubl-settings-datetime - dialog - True - ubl-settings-datetime - 1.2 - Copyright © 2023 - UBSoft Software LLC - Setting the date and time - https://ublinux.ru/ - Project Home Page - Это приложение распространяется без каких-либо гарантий. -Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. - UBGroup - UBGroup - ubl-settings-datetime - True - gpl-2-0 - - - False - vertical - 2 - - - False - end - - - - - - False - False - 0 - - - - - - - - - - 730 - 530 - False - center - ubconfig-gui - south-west - - - - - - True - False - - - - - - True - False - 5 - 10 - 5 - 10 - 25 - ubconfig-gui - - - - - - - - - - False - Внимание! - dialog - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 6 - 6 - Enter DHCP ! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - - - - - - False - Внимание! - center - dialog - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - 5 - 5 - 6 - 6 - 50 - gtk-dialog-warning - - - True - True - 0 - - - - - 160 - True - False - start - center - 5 - 5 - 5 - 5 - 6 - 6 - Enter DHCP ! - - - True - True - 1 - - - - - False - True - 1 - - - - - OK - True - True - True - 5 - 5 - 5 - 5 - 3 - 3 - - - False - True - 1 - - - - - - - False - - - True - False - 0 - none - - - True - False - 5 - 5 - 5 - 5 - - - True - False - vertical - - - True - True - True - Synopsis - - - False - True - 2 - - - - - True - True - True - About the program - - - False - True - 3 - - - - - - - - - - - - - - False - - - True - False - 0 - none - - - True - False - 5 - 5 - 5 - 5 - - - True - False - vertical - - - True - True - True - Download local - - - False - True - 2 - - - - - True - True - True - Download global - - - False - True - 3 - - - - - - - - - - - - - - False - - - True - False - 0 - none - - - True - False - 5 - 5 - 5 - 5 - - - True - False - vertical - - - True - True - True - Save to global and local configuration - - - False - True - 3 - - - - - True - True - True - Save to local configuration - - - False - True - 4 - - - - - True - True - True - Save to Global configuration - - - False - True - 5 - - - - - - - - - - - - - - False - - - True - False - vertical - - - True - False - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - gtk-missing-image - - - False - True - 0 - - - - - True - False - start - 5 - 5 - 5 - 5 - 6 - 6 - - - - - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - vertical - - - True - False - - - 90 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 69 - ubl-settings-datetime - - - False - True - 0 - - - - - True - False - - - True - False - - - True - False - vertical - - - 255 - True - False - Date and time settings - - - - - - - - - True - True - 0 - - - - - False - True - 0 - - - - - True - True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - True - 1 - - - - - False - True - 0 - - - - - False - True - 1 - - - - - True - False - vertical - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - 5 - 5 - vertical - - - True - False - - - 0 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Time - True - 0 - - - False - True - 0 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - 2 - 0.099999999776482579 - True - - - False - True - 1 - - - - - True - False - : - - - False - True - 2 - - - - - True - True - 5 - 5 - 5 - 5 - 6 - 6 - 2 - True - - - False - True - 3 - - - - - 20 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Date - True - 0 - - - False - True - 4 - - - - - -1 - True - True - Date -Format: DD.MM.YYYY - 5 - 5 - 5 - 5 - 6 - 6 - - - True - True - 5 - - - - - True - True - True - Интерактивный выбор даты - 5 - 10 - 5 - 10 - 6 - 6 - - - True - False - x-office-calendar - - - - - False - True - 6 - - - - - False - True - 1 - - - - - True - False - - - True - True - True - 7 - 5 - 7 - 5 - 6 - 6 - - - True - False - center - center - - - True - False - 5 - 5 - 5 - 5 - media-playlist-repeat - - - False - True - 0 - - - - - True - False - center - center - Sync by - - - False - True - 1 - - - - - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - False - - - False - True - 2 - - - - - True - True - True - 5 - 10 - 5 - 10 - 6 - 6 - - - True - False - center - center - Synchronize hardware time - - - - - True - True - 3 - - - - - False - True - 3 - - - - - - - True - False - Current date and time - - - - - False - True - 0 - - - - - False - True - 1 - - - - - True - False - vertical - - - True - False - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - 5 - 5 - 5 - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 1 - - - - - -1 - True - True - Enter the name of the ntp server or its ip address. When entering multiple addresses, separate them with spaces. - center - 5 - 10 - 5 - 10 - 6 - 6 - - - True - True - 3 - - - - - False - True - 1 - - - - - - - True - False - Synchronize via NTP: - - - - - False - True - 0 - - - - - False - True - 2 - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 0.019999999552965164 - in - - - True - False - - - True - False - - - False - True - 1 - - - - - True - False - 8 - 5 - 8 - 5 - 6 - 13 - Region - 0 - - - False - True - 2 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 10 - False - False - - - False - True - 3 - - - - - True - False - 10 - 5 - 10 - 5 - 6 - 13 - Area - 0 - - - False - True - 4 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 10 - False - False - - - False - True - 5 - - - - - 5 - True - False - - - False - True - 6 - - - - - True - False - - - False - True - 7 - - - - - - - True - False - Time Zone - - - - - False - True - 3 - - - - - False - True - 2 - - - - - False - True - 0 - - - - - - - True - False - True - - - True - False - 5 - 5 - 5 - 5 - 2 - ubl-settings-datetime - - - - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 32 - ubl-settings-datetime - - - - - True - False - - - True - True - False - True - True - none - popDownloadMenu - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Download - - - False - True - 0 - - - - - True - False - True - False - True - False - - - - - - False - True - 1 - - - - - - - False - True - 0 - - - - - - 1 - - - - - True - False - - - True - True - False - True - True - none - popSaveMenu - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 - Save - - - - False - True - 0 - - - - - True - False - True - False - True - - - - - - False - True - 1 - - - - - - - False - True - 0 - - - - - True - True - False - True - True - none - popAbout - - - - - - False - True - 1 - - - - - - end - 3 - - - - - - - 240 - 185 - False - btnChooseDate - bottom - none - - - True - True - 10 - 10 - 10 - 10 - 10 - 10 - 2023 - 1 - 10 - - - - diff --git a/screenshot/screenshot.png b/screenshot/screenshot.png index daf786e5996e07b8cbde4f53b55ec2836bbd9c9e..17e3a477cc0d42e8c90f819f06170e36262000e4 100755 GIT binary patch literal 58027 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 literal 56825 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
  • $(c7aDDJls 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 diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc index 3cbf79e..3639da0 100755 --- a/source/ubl-settings-datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -152,6 +152,10 @@ void MainWindow::lacalization(){ mess_sudo->set_title(_("Warning!")); mess_dchp->set_title(_("Warning!")); lblTimeBios->set_text(_("Synchronize hardware time")); + lblHW->set_text(_("Synchronize hardware time:")); + cbHw->append(_("Local time")); + cbHw->append(_("UTC time")); + } void MainWindow::flag_block_gui(){ @@ -266,6 +270,8 @@ void MainWindow::get_builder(){ builder->get_widget("btnSaveGlob", btnSaveGlob); builder->get_widget("headerBar", headerBar); builder->get_widget("lblHeader", lblHeader); + builder->get_widget("lblHW", lblHW); + builder->get_widget("cbHw", cbHw); this->add_CSS(); } void MainWindow::gui_exit(){ @@ -299,11 +305,13 @@ void MainWindow::event(){ btnSaveLocalGlob->signal_clicked().connect([&](){save_global_local_cfg();}); btnSaveLocal->signal_clicked().connect([&](){save_local_cfg();}); btnSaveGlob->signal_clicked().connect([&](){save_global_cfg();}); + } void MainWindow::synopsis_show(){ int start_error = error_info; - //wrapper_system("xdg-open https://wiki.ublinux.ru/ru/home"); + wrapper_system("xdg-open https://wiki.ublinux.ru/ru/home &"); + //gtk_show_uri_on_window(NULL, "https://wiki.ublinux.ru/ru/home", 0, 0); if (start_error!=error_info){ error_info=start_error; } @@ -317,6 +325,8 @@ void MainWindow::download_local_cfg(){ string cmd_get_dhcp = "/usr/bin/ubconfig --source system get network NTPSERVERS"; string cmd_default_get_dhcp = "/usr/bin/ubconfig --source=default get NTPSERVERS_DEFAULT"; this->entry_dhcp_mess(cmd_get_dhcp, cmd_default_get_dhcp); + string hw = "/usr/bin/ubconfig --default --source system get clock HWCLOCK_SYNC"; + this->entry_hardware_clock(hw); info_warning_error(0); } @@ -326,17 +336,22 @@ void MainWindow::download_globl_cfg(){ this->entry_dhcp_mess(cmd_get_dhcp, cmd_default_get_dhcp); string cmd = "/usr/bin/ubconfig --default --source global get clock ZONE"; this->fill_in_reg_zone(cmd); + string hw = "/usr/bin/ubconfig --default --source global get clock HWCLOCK_SYNC"; + this->entry_hardware_clock(hw); info_warning_error(1); } void MainWindow::save_local_cfg(){ - string cmd = "ubconfig --target system set clock ZONE="; + string cmd = "/usr/bin/ubconfig --target system set clock ZONE="; this->enter_zone(cmd); string cmd_default = "/usr/bin/ubconfig --target system set network NTPSERVERS=default"; string cmd_dhcp = "/usr/bin/ubconfig --target system set network NTPSERVERS=dhcp"; string cmd_set_ntp = "/usr/bin/ubconfig --target system set network NTPSERVERS=\""; string remove = "/usr/bin/ubconfig --target system remove network NTPSERVERS"; this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); + string local = "/usr/bin/ubconfig --target system set clock HWCLOCK_SYNC=localtime"; + string hw = "/usr/bin/ubconfig --target system set clock HWCLOCK_SYNC=utc"; + this->hardware_clock_global(local, hw); info_warning_error(2); } @@ -348,6 +363,9 @@ void MainWindow::save_global_cfg(){ string cmd_set_ntp = "/usr/bin/ubconfig --target global set network NTPSERVERS=\""; string remove = "/usr/bin/ubconfig --target global remove network NTPSERVERS"; this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); + string local = "/usr/bin/ubconfig --target global set clock HWCLOCK_SYNC=localtime"; + string hw = "/usr/bin/ubconfig --target global set clock HWCLOCK_SYNC=utc"; + this->hardware_clock_global(local, hw); info_warning_error(3); } void MainWindow::save_global_local_cfg(){ @@ -357,22 +375,11 @@ void MainWindow::save_global_local_cfg(){ string cmd_set_ntp = ""; string remove = ""; if (flag_save_global==false){ - cmd = "/usr/bin/ubconfig --target global set clock ZONE="; - this->enter_zone(cmd); - cmd_default = "/usr/bin/ubconfig --target global set network NTPSERVERS=default"; - cmd_dhcp = "/usr/bin/ubconfig --target global set network NTPSERVERS=dhcp"; - cmd_set_ntp = "/usr/bin/ubconfig --target global set network NTPSERVERS=\""; - remove = "/usr/bin/ubconfig --target global remove network NTPSERVERS"; - this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); + this->save_local_cfg(); + } if (flag_save_local==false){ - cmd = "ubconfig --target system set clock ZONE="; - this->enter_zone(cmd); - cmd_default = "/usr/bin/ubconfig --target system set network NTPSERVERS=default"; - cmd_dhcp = "/usr/bin/ubconfig --target system set network NTPSERVERS=dhcp"; - cmd_set_ntp = "/usr/bin/ubconfig --target system set network NTPSERVERS=\""; - remove = "/usr/bin/ubconfig --target system remove network NTPSERVERS"; - this->save_Dhcp(cmd_default, cmd_dhcp, remove, cmd_set_ntp); + this->save_global_cfg(); } info_warning_error(4); } @@ -429,6 +436,31 @@ void MainWindow::wrapper_system(string cmd){ } +void MainWindow::hardware_clock_global(string &local, string &utc){ + int index = cbHw->get_active_row_number(); + cout << index << endl; + if (index == 0){ + cout << local << endl; + wrapper_system(local); + } + else if (index == 1){ + cout << utc << endl; + wrapper_system(utc); + } +} + +void MainWindow::entry_hardware_clock(string &cmd){ + struct Result obj_result = this->wrapper_call(cmd); + if (obj_result.error == 0){ + if (obj_result.response == "localtime"){ + cbHw->set_active(0); + } + else{ + cbHw->set_active(1); + } + } +} + void MainWindow::hardware_clock(){ string cmd = "hwclock --systohc"; wrapper_system(cmd); diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h index 9859a5a..2069e94 100755 --- a/source/ubl-settings-datetime.h +++ b/source/ubl-settings-datetime.h @@ -106,6 +106,8 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::ModelButton *btnSynopsis; Gtk::HeaderBar *headerBar; Gtk::Label *lblHeader; + Gtk::Label *lblHW; + Gtk::ComboBoxText *cbHw; unsigned int year=0; unsigned int month=0; unsigned int day=0; @@ -128,8 +130,10 @@ class MainWindow : public Gtk::ApplicationWindow { MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); MainWindow(Glib::RefPtr const& builder); virtual ~MainWindow() = default; + void hardware_clock_global(string &local, string &utc); void info_warning_error(int mess); void synopsis_show(); + void entry_hardware_clock(string &cmd); void save_global_local_cfg(); void fill_in_reg_zone(string &cmd); void download_globl_cfg(); diff --git a/source/ubl-util-standard.c b/source/ubl-util-standard.c index 8d7e9ee..8cff122 100644 --- a/source/ubl-util-standard.c +++ b/source/ubl-util-standard.c @@ -65,6 +65,5 @@ inline void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, in gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug)); gtk_widget_show(GTK_WIDGET(plug)); } - return; } #endif \ No newline at end of file diff --git a/source/ubl-util-standard.h b/source/ubl-util-standard.h index 4c1ae22..3209625 100644 --- a/source/ubl-util-standard.h +++ b/source/ubl-util-standard.h @@ -1,5 +1,3 @@ -#define STANDARD_PATH "/usr/share/ubl-util-standard/ubl-util-standard.glade" -#define CSS_PATH "/usr/share/ubl-util-standard/ubl-util-standard.css" #ifndef __cplusplus #include #include diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index 9012e06..10068ec 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -996,114 +996,175 @@ Format: DD.MM.YYYY True False + vertical - - True - False - - - False - True - 1 - - - - - True - False - 8 - 5 - 8 - 5 - 6 - 13 - Region - 0 - - - False - True - 2 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 10 - False - False - - - False - True - 3 - - - - - True - False - 10 - 5 - 10 - 5 - 6 - 13 - Area - 0 - - - False - True - 4 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 10 - False - False - - - False - True - 5 - - - - - 5 + True False + + + True + False + start + 8 + 31 + 8 + 31 + 6 + 13 + Synchronize hardware time: + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 10 + False + False + + + False + True + 1 + + False True - 6 + 0 - + True False + + + True + False + + + False + True + 1 + + + + + True + False + 8 + 5 + 8 + 5 + 6 + 6 + Region + 0 + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 10 + False + False + + + False + True + 3 + + + + + True + False + 10 + 5 + 10 + 5 + 6 + 13 + Area + 0 + + + False + True + 4 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 10 + False + False + + + False + True + 5 + + + + + 5 + True + False + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + False True - 7 + 1 @@ -1152,6 +1213,7 @@ Format: DD.MM.YYYY 5 5 2 + False ubl-settings-datetime @@ -1166,8 +1228,6 @@ Format: DD.MM.YYYY 5 5 5 - 6 - 6 32 ubl-settings-datetime @@ -1197,8 +1257,6 @@ Format: DD.MM.YYYY 5 5 5 - 6 - 6 Download @@ -1267,8 +1325,6 @@ Format: DD.MM.YYYY 5 5 5 - 6 - 6 Save