Merge pull request 'develop' (#2) from develop into master

Reviewed-on: Igor1/ubl-settings-datetime#2
pull/17/head
Igor Belitskiy 3 years ago
commit 9fbc6c7a50

@ -12,8 +12,8 @@ CMAKE_COMMAND = cmake
CMAKE_SOURCE_DIR = ./source CMAKE_SOURCE_DIR = ./source
CMAKE_BUILD_DIR = ./compile CMAKE_BUILD_DIR = ./compile
DEPENDS = cmake DEPENDS = cmake
#PKGNAME = $(MAKEFILE_DIR) PKGNAME = $(MAKEFILE_DIR)
PKGNAME = ubl-settings-datetime #PKGNAME = ubl-settings-datetime
default_target: all default_target: all
all: init build all: init build

@ -1,4 +1,41 @@
# ubl-settings-datetime # ubl-settings-datetime
# Настройки даты и времени # Настройки даты и времени
[RU] Утилита для настройки даты и времени
Utility for setting the date and time
![alt text](screenshot/screenshot.png) ![alt text](screenshot/screenshot.png)
# Build
In order to build ubl-settings-datetime you will need:
- CMake
- C compiler
- GTK+ 3 & dependencies
Once you have all the necessary dependencies, you can use:
```sh
$ make
```
# Installation
After a successful build, just use:
```sh
$ sudo make install clean
```
# Uninstallation
After a successful build, just use:
```sh
$ sudo make uninstall
```
# Usage
```sh
$ ubl-settings-datetime --help
Usage: ubl-settings-datetime [--lock-timezone] [--lock-ntp] [--lock-datetime] [--lock-update]
Options:
--lock-timezone Disable timezone field editing
--lock-ntp Disable ntp field editing
--lock-datetime Disable datetime field editing
--lock-update Disable save changes
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 33 KiB

@ -7,7 +7,7 @@
<vendor>UBLinux</vendor> <vendor>UBLinux</vendor>
<vendor_url>https://ublinux.ru</vendor_url> <vendor_url>https://ublinux.ru</vendor_url>
<action id="org.freedesktop.policykit.ubl-settings-datetime.pkexec.policy.run"> <action id="ru.ublinux.pkexec.ubl-settings-datetime.exec">
<description>Run "Time date settings" as root</description> <description>Run "Time date settings" as root</description>
<description xml:lang="ru">Запуск настройки даты и времени" с правами root</description> <description xml:lang="ru">Запуск настройки даты и времени" с правами root</description>
<message>Authentication is required to run the time date settings</message> <message>Authentication is required to run the time date settings</message>

@ -25,11 +25,7 @@ int main(int argc, char* argv[]) {
for (int i=1; i<argc; i++){ for (int i=1; i<argc; i++){
str_cmd_argv+= to_string(*argv[i]) + " "; str_cmd_argv+= to_string(*argv[i]) + " ";
} }
if (geteuid()!=0){
string cmd = "pkexec " + app_name + " " + str_cmd_argv ;
system(cmd.c_str());
return 0;
}
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
bindtextdomain("ubl-settings-datetime", "/usr/share/locale/"); bindtextdomain("ubl-settings-datetime", "/usr/share/locale/");
bind_textdomain_codeset("ubl-settings-datetime", "UTF-8"); bind_textdomain_codeset("ubl-settings-datetime", "UTF-8");
@ -41,7 +37,6 @@ int main(int argc, char* argv[]) {
int len_argv = 1; int len_argv = 1;
auto app = Gtk::Application::create(len_argv, argv, "org.gtkmm.example.plug"); auto app = Gtk::Application::create(len_argv, argv, "org.gtkmm.example.plug");
auto builder = Gtk::Builder::create_from_file(path_glade + "ubl-settings-datetime.glade"); auto builder = Gtk::Builder::create_from_file(path_glade + "ubl-settings-datetime.glade");
builder->set_translation_domain(app_name);
for (int i=0; i<argc; i++){ for (int i=0; i<argc; i++){
str_argv = argv[i]; str_argv = argv[i];
if (str_argv=="--help"){ if (str_argv=="--help"){
@ -71,7 +66,6 @@ int main(int argc, char* argv[]) {
else{ else{
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example.plug"); auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example.plug");
auto builder = Gtk::Builder::create_from_file(path_glade + "ubl-settings-datetime.glade"); auto builder = Gtk::Builder::create_from_file(path_glade + "ubl-settings-datetime.glade");
builder->set_translation_domain(app_name);
Glib::init(); Glib::init();
Glib::OptionContext context; Glib::OptionContext context;
CmdArgParser parser{ CmdArgParser parser{

@ -64,6 +64,8 @@ MainWindow::MainWindow(Glib::RefPtr<Gtk::Builder> const& builder) {
void MainWindow::settings(){ void MainWindow::settings(){
year=0, month=0, day=0; year=0, month=0, day=0;
this->get_builder(); this->get_builder();
this->event();
if (this->check_root()==0){
this->lacalization(); this->lacalization();
_numTimeHrs->set_range(0,23); _numTimeHrs->set_range(0,23);
_numTimeMin->set_range(0,59); _numTimeMin->set_range(0,59);
@ -71,9 +73,43 @@ void MainWindow::settings(){
_numTimeMin->set_increments(1.0,1.0); _numTimeMin->set_increments(1.0,1.0);
this->get_config(); this->get_config();
this->flag_block_gui(); this->flag_block_gui();
this->event();
this->parse_text_date(); this->parse_text_date();
} }
else{
_numTimeHrs->set_sensitive(false);
_numTimeMin->set_sensitive(false);
_lblTime->set_sensitive(false);
_lblData->set_sensitive(false);
_txtDate->set_sensitive(false);
_btnChooseDate->set_sensitive(false);
_btnUpdateDateTime->set_sensitive(false);
_btnHardwareTime->set_sensitive(false);
_cbRegion->set_sensitive(false);
_cbZone->set_sensitive(false);
_lblReg->set_sensitive(false);
_lblZone->set_sensitive(false);
_lblTimeZone->set_sensitive(false);
_lblDateTimeSettingGlob->set_sensitive(false);
_cbxSynchronizeNtpGlob->set_sensitive(false);
_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);
}
}
int MainWindow::check_root(){
if (geteuid()!=0){
_lblMessageSudo->set_text(gettext("The program must be run with \nsuperuser privileges!"));
_mess_sudo->show();
return 1;
}
return 0;
}
void MainWindow::lacalization(){ void MainWindow::lacalization(){
_txtDate->set_tooltip_text(gettext("Date of\nFormat: DD.MM.YYYY")); _txtDate->set_tooltip_text(gettext("Date of\nFormat: DD.MM.YYYY"));
@ -90,12 +126,12 @@ void MainWindow::lacalization(){
_lblRegGlob->set_text(gettext("Region")); _lblRegGlob->set_text(gettext("Region"));
_lblZone1Glob->set_text(gettext("Zone")); _lblZone1Glob->set_text(gettext("Zone"));
_lblTimeZoneGlob->set_text(gettext("Time zone")); _lblTimeZoneGlob->set_text(gettext("Time zone"));
_lblSynchronizeBtn->set_text(gettext("Apply local date and time settings")); _lblSynchronizeBtn->set_text(gettext("Sync by"));
_lblDateTimeSettingGlob->set_text(gettext("Global customization")); _lblDateTimeSettingGlob->set_text(gettext("Global customization"));
this->set_title(gettext("ubl-settings-datetime")); this->set_title(gettext("ubl-settings-datetime"));
_mess_dchp->set_title(gettext("Warning!")); _mess_dchp->set_title(gettext("Warning!"));
_lblTimeBios->set_text(gettext("Synchronize hardware time")); _lblTimeBios->set_text(gettext("Synchronize hardware time"));
_lblSynchronizebChk->set_text(gettext("Synchronize via NTP")); //_lblSynchronizebChk->set_text(gettext("Synchronize via NTP"));
} }
void MainWindow::flag_block_gui(){ void MainWindow::flag_block_gui(){
@ -104,6 +140,15 @@ void MainWindow::flag_block_gui(){
//_numTimeMin->set_sensitive(false); //_numTimeMin->set_sensitive(false);
//_txtDate->set_sensitive(false); //_txtDate->set_sensitive(false);
_btnUpdateDateTime->set_sensitive(false); _btnUpdateDateTime->set_sensitive(false);
_numTimeHrs->set_sensitive(false);
_numTimeMin->set_sensitive(false);
_btnChooseDate->set_sensitive(false);
_txtDate->set_sensitive(false);
_lblTimeBios->set_sensitive(false);
_btnHardwareTime->set_sensitive(false);
_lblTime->set_sensitive(false);
_lblData->set_sensitive(false);
//_cbxSynchronizeNtpGlob->set_sensitive(false);
} }
if (flag_timezone==true){ if (flag_timezone==true){
_cbRegion->set_sensitive(false); _cbRegion->set_sensitive(false);
@ -117,11 +162,10 @@ void MainWindow::flag_block_gui(){
_cbxSynchronizeNtpGlob->set_sensitive(false); _cbxSynchronizeNtpGlob->set_sensitive(false);
_cbDhcp->set_sensitive(false); _cbDhcp->set_sensitive(false);
_txtNtpServer->set_sensitive(false); _txtNtpServer->set_sensitive(false);
_cbxSynchronizeNtp->set_sensitive(false);
} }
if (flag_update==true){ if (flag_update==true){
_lblDateTimeSettingGlob->set_sensitive(false); _lblDateTimeSettingGlob->set_sensitive(false);
_lblSynchronizebChkGLob->set_sensitive(false); //_lblSynchronizebChkGLob->set_sensitive(false);
_cbxSynchronizeNtpGlob->set_sensitive(false); _cbxSynchronizeNtpGlob->set_sensitive(false);
_lblTimeZoneGlob->set_sensitive(false); _lblTimeZoneGlob->set_sensitive(false);
_lblRegGlob->set_sensitive(false); _lblRegGlob->set_sensitive(false);
@ -146,6 +190,7 @@ void MainWindow::add_CSS(){
} }
void MainWindow::get_builder(){ void MainWindow::get_builder(){
builder->set_translation_domain(path_app);
builder->get_widget("boxColor", _boxColor); builder->get_widget("boxColor", _boxColor);
builder->get_widget("btnUpdateDateTime", _btnUpdateDateTime); builder->get_widget("btnUpdateDateTime", _btnUpdateDateTime);
builder->get_widget("btnChooseDate", _btnChooseDate); builder->get_widget("btnChooseDate", _btnChooseDate);
@ -174,21 +219,36 @@ void MainWindow::get_builder(){
builder->get_widget("lblRegGlob",_lblRegGlob); builder->get_widget("lblRegGlob",_lblRegGlob);
builder->get_widget("lblZone1Glob",_lblZone1Glob); builder->get_widget("lblZone1Glob",_lblZone1Glob);
builder->get_widget("lblTimeZoneGlob",_lblTimeZoneGlob); builder->get_widget("lblTimeZoneGlob",_lblTimeZoneGlob);
builder->get_widget("lblSynchronizebChk",_lblSynchronizebChk); //builder->get_widget("lblSynchronizebChk",_lblSynchronizebChk);
builder->get_widget("lblSynchronizebChkGLob",_lblSynchronizebChkGLob); builder->get_widget("lblSynchronizebChkGLob",_lblSynchronizebChkGLob);
builder->get_widget("lblSynchronizeBtn",_lblSynchronizeBtn); builder->get_widget("lblSynchronizeBtn",_lblSynchronizeBtn);
builder->get_widget("lblDateTimeSettingGlob",_lblDateTimeSettingGlob); builder->get_widget("lblDateTimeSettingGlob",_lblDateTimeSettingGlob);
builder->get_widget("lblTimeBios",_lblTimeBios); builder->get_widget("lblTimeBios",_lblTimeBios);
builder->get_widget("btnHardwareTime",_btnHardwareTime); builder->get_widget("btnHardwareTime",_btnHardwareTime);
builder->get_widget("cbxSynchronizeNtp",_cbxSynchronizeNtp); builder->get_widget("mess_sudo",_mess_sudo);
builder->get_widget("lblMessageSudo",_lblMessageSudo);
builder->get_widget("btnMessCloseSudo",_btnMessCloseSudo);
//builder->get_widget("cbxSynchronizeNtp",_cbxSynchronizeNtp);
this->add_CSS(); this->add_CSS();
} }
void MainWindow::gui_exit(){
exit(1);
}
bool MainWindow::gui_exit_2(GdkEventAny* event){
if (event!=NULL){}
exit(1);
return true;
}
void MainWindow::event(){ void MainWindow::event(){
_cbxSynchronizeNtp->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_ntp_toggle)); //_cbxSynchronizeNtpGlob->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_ntp_toggle));
_btnHardwareTime->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::hardware_clock)); _btnHardwareTime->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::hardware_clock));
_btnMessClose->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::gui_mess_close)); _btnMessClose->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::gui_mess_close));
_btnMessCloseSudo->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::gui_exit));
//_cldrDate->signal_day_selected().connect(sigc::mem_fun(*this, &MainWindow::get_calendar)); //_cldrDate->signal_day_selected().connect(sigc::mem_fun(*this, &MainWindow::get_calendar));
_cbxSynchronizeNtpGlob->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_ntp_toggle_glob)); _cbxSynchronizeNtpGlob->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_ntp_toggle_glob));
_btnUpdateDateTime->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::update_time_date)); _btnUpdateDateTime->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::update_time_date));
@ -200,11 +260,12 @@ void MainWindow::event(){
_cbZoneGlob->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::enter_zone_glob)); _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)); _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)); _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));
} }
void MainWindow::set_ntp_toggle(){ void MainWindow::set_ntp_toggle(){
bool flag = _cbxSynchronizeNtp->get_active(); bool flag = _cbxSynchronizeNtpGlob->get_active();
if (flag_ntp==true){ if (flag_ntp==true || flag_datetime==true){
} }
else { else {
_numTimeHrs->set_sensitive(!flag); _numTimeHrs->set_sensitive(!flag);
@ -212,6 +273,9 @@ void MainWindow::set_ntp_toggle(){
_btnChooseDate->set_sensitive(!flag); _btnChooseDate->set_sensitive(!flag);
_txtDate->set_sensitive(!flag); _txtDate->set_sensitive(!flag);
_lblTimeBios->set_sensitive(!flag); _lblTimeBios->set_sensitive(!flag);
_btnUpdateDateTime->set_sensitive(!flag);
_lblTime->set_sensitive(!flag);
_lblData->set_sensitive(!flag);
} }
string cmd = ""; string cmd = "";
if (flag==false){ if (flag==false){
@ -264,7 +328,7 @@ void MainWindow::event_entry_cbDhcp(){
if ((str_dhcp!="") && (str_dhcp!="(null)") ){ if ((str_dhcp!="") && (str_dhcp!="(null)") ){
str_dhcp = str_dhcp.substr(str_dhcp.find("=")+1,str_dhcp.length()); str_dhcp = str_dhcp.substr(str_dhcp.find("=")+1,str_dhcp.length());
str_dhcp = str_dhcp.substr(0,str_dhcp.find("\n")); str_dhcp = str_dhcp.substr(0,str_dhcp.find("\n"));
if (str_dhcp!="dhcp"){ if (str_dhcp!="dhcp" && str_dhcp!="(null)"){
_txtNtpServer->set_text(str_dhcp); _txtNtpServer->set_text(str_dhcp);
} }
_txtNtpServer->set_sensitive(true); _txtNtpServer->set_sensitive(true);
@ -333,6 +397,10 @@ void MainWindow::enry_dhcp_mess(){
_lblMessage->set_text(gettext("Enter DHCP !")); _lblMessage->set_text(gettext("Enter DHCP !"));
_mess_dchp->show(); _mess_dchp->show();
} }
else if (str_dhcp=="(null)"){
_cbDhcp->set_active(0);
_txtNtpServer->set_text("");
}
else{ else{
_cbDhcp->set_active(1); _cbDhcp->set_active(1);
_txtNtpServer->set_text(str_dhcp); _txtNtpServer->set_text(str_dhcp);
@ -354,7 +422,7 @@ void MainWindow::get_config(){
this->enry_dhcp_mess(); this->enry_dhcp_mess();
string str_ntp = this->call("systemctl status ntpd.service systemd-timesyncd.service | grep \"Active: active\""); string str_ntp = this->call("systemctl status ntpd.service systemd-timesyncd.service | grep \"Active: active\"");
if (str_ntp.length()<50) { if (str_ntp.length()<50) {
_cbxSynchronizeNtp->set_active(false); _cbxSynchronizeNtpGlob->set_active(false);
_numTimeHrs->set_sensitive(true); _numTimeHrs->set_sensitive(true);
_numTimeMin->set_sensitive(true); _numTimeMin->set_sensitive(true);
_btnChooseDate->set_sensitive(true); _btnChooseDate->set_sensitive(true);
@ -362,7 +430,7 @@ void MainWindow::get_config(){
_lblTimeBios->set_sensitive(true); _lblTimeBios->set_sensitive(true);
} }
else{ else{
_cbxSynchronizeNtp->set_active(true); _cbxSynchronizeNtpGlob->set_active(true);
_numTimeHrs->set_sensitive(false); _numTimeHrs->set_sensitive(false);
_numTimeMin->set_sensitive(false); _numTimeMin->set_sensitive(false);
_btnChooseDate->set_sensitive(false); _btnChooseDate->set_sensitive(false);
@ -370,7 +438,7 @@ void MainWindow::get_config(){
_lblTimeBios->set_sensitive(false); _lblTimeBios->set_sensitive(false);
} }
string read_reg_zon_cfg = this->call("/usr/bin/ubconfig get clock ZONE"); string read_reg_zon_cfg = this->call("/usr/bin/ubconfig get clock ZONE");
if ((read_reg_zon_cfg != "") && (read_reg_zon_cfg !="(null)")){ if ((read_reg_zon_cfg != "") && (strstr(read_reg_zon_cfg.c_str() ,"(null)")==NULL)){
read_reg_zon_cfg = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("=")+1,read_reg_zon_cfg.length()); read_reg_zon_cfg = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("=")+1,read_reg_zon_cfg.length());
read_reg_zon_cfg = read_reg_zon_cfg.substr(0,read_reg_zon_cfg.find("\n")); read_reg_zon_cfg = read_reg_zon_cfg.substr(0,read_reg_zon_cfg.find("\n"));
string str_filling_reg = read_reg_zon_cfg.substr(0,read_reg_zon_cfg.find("/")); string str_filling_reg = read_reg_zon_cfg.substr(0,read_reg_zon_cfg.find("/"));
@ -380,7 +448,7 @@ void MainWindow::get_config(){
this->append_region_zone(str_filling_reg,str_filling_zon); this->append_region_zone(str_filling_reg,str_filling_zon);
} }
else { else {
this->append_region_zone("Asia","Omsk"); this->append_region_zone("Africa","Abidjan");
} }
} }
@ -414,9 +482,8 @@ void MainWindow::enter_zone_glob(){
Glib::ustring zone_text = _cbZoneGlob->get_active_text(); Glib::ustring zone_text = _cbZoneGlob->get_active_text();
Glib::ustring reg_text = _cbRegionGlob->get_active_text(); Glib::ustring reg_text = _cbRegionGlob->get_active_text();
if(!(zone_text.empty()) && !(reg_text.empty())){ if(!(zone_text.empty()) && !(reg_text.empty())){
str_zoneGlob = zone_text.substr(zone_text.find(") ")+2,zone_text.length()); //str_zoneGlob = zone_text.substr(zone_text.find(") ")+2,zone_text.length());
str_region_glob = reg_text; string cmd = "/usr/bin/ubconfig set clock ZONE=" +reg_text +"/" + zone_text;
string cmd = "/usr/bin/ubconfig set clock ZONE=" +str_region_glob +"/" + str_zoneGlob;
system(cmd.c_str()); system(cmd.c_str());
} }
else{ else{
@ -426,12 +493,16 @@ void MainWindow::enter_zone_glob(){
} }
void MainWindow::set_ntp_toggle_glob(){ void MainWindow::set_ntp_toggle_glob(){
bool flag = _cbxSynchronizeNtp->get_active(); this->set_ntp_toggle();
if (flag==true){ bool flag = _cbxSynchronizeNtpGlob->get_active();
system("/usr/bin/ubconfig remove network NTPSERVERS") if (flag==false){
system("/usr/bin/ubconfig remove network NTPSERVERS");
_cbDhcp->set_sensitive(false);
_txtNtpServer->set_sensitive(false);
} }
else{ else{
_cbDhcp->set_sensitive(true);
_txtNtpServer->set_sensitive(true);
} }
} }
@ -448,13 +519,12 @@ void MainWindow::append_region_zone(string region, string zone){
index+=1; index+=1;
} }
index = 0; index = 0;
string cheek_zone = ""; cout << zone;
for (const auto &_str_zone : time_reg_map.at(region)){ for (const auto &_str_zone : time_reg_map.at(region)){
_cbZone->append(_str_zone); _cbZone->append(_str_zone);
_cbZoneGlob->append(_str_zone); _cbZoneGlob->append(_str_zone);
if (_str_zone!=""){ if (_str_zone!=""){
cheek_zone = _str_zone.substr(_str_zone.find(") ")+2,_str_zone.length()); if (_str_zone == zone){
if (cheek_zone == zone){
_cbZone->set_active(index); _cbZone->set_active(index);
_cbZoneGlob->set_active(index); _cbZoneGlob->set_active(index);
} }
@ -556,8 +626,6 @@ void MainWindow::update_time_date(){
+ ":" + to_string(ltm->tm_sec) +"\""; + ":" + to_string(ltm->tm_sec) +"\"";
system(cmd.c_str()); system(cmd.c_str());
} }
cmd = "hwclock --systohc";
system(cmd.c_str());
} }
void MainWindow::post_entry_data(){ void MainWindow::post_entry_data(){
@ -673,5 +741,4 @@ void help(){
g_print(" --lock-ntp Disable ntp field editing\n"); g_print(" --lock-ntp Disable ntp field editing\n");
g_print(" --lock-datetime Disable datetime field editing\n"); g_print(" --lock-datetime Disable datetime field editing\n");
g_print(" --lock-update Disable save changes\n"); g_print(" --lock-update Disable save changes\n");
cout << "Параметры командной строки --lock-datetime\n --lock-timezone\n --lock-ntp\n --lock-update\n" << endl;
} }

@ -75,11 +75,15 @@ class MainWindow : public Gtk::ApplicationWindow {
void parse_text_date(); void parse_text_date();
void hardware_clock(); void hardware_clock();
void set_ntp_toggle_glob(); void set_ntp_toggle_glob();
int check_root();
void gui_exit();
bool gui_exit_2(GdkEventAny* event);
vector<std::string> split(const std::string &s, char delim); vector<std::string> split(const std::string &s, char delim);
private: private:
Glib::RefPtr<Gtk::Builder> builder; Glib::RefPtr<Gtk::Builder> builder;
Gtk::Button *_btnUpdateDateTime; Gtk::Button *_btnUpdateDateTime;
Gtk::Button *_btnChooseDate; Gtk::Button *_btnChooseDate;
Gtk::Button *_btnMessCloseSudo;
Gtk::Button *_btnMessClose; Gtk::Button *_btnMessClose;
Gtk::ComboBoxText *_cbDhcp; Gtk::ComboBoxText *_cbDhcp;
Gtk::SpinButton *_numTimeHrs; Gtk::SpinButton *_numTimeHrs;
@ -93,9 +97,11 @@ class MainWindow : public Gtk::ApplicationWindow {
Gtk::ComboBoxText *_cbZoneGlob; Gtk::ComboBoxText *_cbZoneGlob;
Gtk::Entry *_txtNtpServer; Gtk::Entry *_txtNtpServer;
Gtk::Window *_mess_dchp; Gtk::Window *_mess_dchp;
Gtk::Window *_mess_sudo;
Gtk::Popover *_popCalendar; Gtk::Popover *_popCalendar;
Gtk::Calendar *_cldrDate; Gtk::Calendar *_cldrDate;
Gtk::Label *_lblMessage; Gtk::Label *_lblMessage;
Gtk::Label *_lblMessageSudo;
Gtk::Label *_lblDateTimeSetting; Gtk::Label *_lblDateTimeSetting;
Gtk::Label *_lblHead; Gtk::Label *_lblHead;
Gtk::Label *_lblTime; Gtk::Label *_lblTime;

@ -7,7 +7,7 @@ GenericName[ru]=Настройка даты и времени
Comment=Date time settings Comment=Date time settings
Comment[ru]=Приложение для настройки даты и времени Comment[ru]=Приложение для настройки даты и времени
Type=Application Type=Application
Exec=ubl-settings-datetime Exec=pkexec ubl-settings-datetime
Icon=ubl-settings-datetime Icon=ubl-settings-datetime
Terminal=false Terminal=false
Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings; Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;

@ -5,6 +5,7 @@
<object class="GtkWindow" id="mess_dchp"> <object class="GtkWindow" id="mess_dchp">
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="title" translatable="yes">Внимание!</property> <property name="title" translatable="yes">Внимание!</property>
<property name="type-hint">dialog</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
@ -42,7 +43,7 @@
<property name="valign">center</property> <property name="valign">center</property>
<property name="margin-top">6</property> <property name="margin-top">6</property>
<property name="margin-bottom">6</property> <property name="margin-bottom">6</property>
<property name="label" translatable="yes">Введите DHCP !</property> <property name="label" translatable="yes">Enter DHCP !</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@ -79,6 +80,89 @@
</object> </object>
</child> </child>
</object> </object>
<object class="GtkWindow" id="mess_sudo">
<property name="can-focus">False</property>
<property name="title" translatable="yes">Внимание!</property>
<property name="window-position">center</property>
<property name="type-hint">dialog</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="pixel-size">50</property>
<property name="icon-name">gtk-dialog-warning</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lblMessageSudo">
<property name="width-request">160</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="label" translatable="yes">Enter DHCP !</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnMessCloseSudo">
<property name="label" translatable="yes">OK</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">3</property>
<property name="margin-bottom">3</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="window"> <object class="GtkWindow" id="window">
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="title" translatable="yes" context="Settings the date and time" comments="Date and Time Settings">Настройки даты и времени</property> <property name="title" translatable="yes" context="Settings the date and time" comments="Date and Time Settings">Настройки даты и времени</property>
@ -129,11 +213,12 @@
<property name="width-request">255</property> <property name="width-request">255</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Настройки даты и времени</property> <property name="label" translatable="yes">Date and time settings</property>
<attributes> <attributes>
<attribute name="font-desc" value="URW Gothic Semi-Bold 10"/>
<attribute name="weight" value="bold"/> <attribute name="weight" value="bold"/>
<attribute name="foreground" value="#000023233232"/> <attribute name="foreground" value="#000023233232"/>
<attribute name="size" value="12288"/> <attribute name="size" value="14336"/>
</attributes> </attributes>
</object> </object>
<packing> <packing>
@ -204,45 +289,13 @@
<property name="margin-start">5</property> <property name="margin-start">5</property>
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child>
<object class="GtkCheckButton" id="cbxSynchronizeNtp">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="draw-indicator">True</property>
<child>
<object class="GtkLabel" id="lblSynchronizebChk">
<property name="width-request">145</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="label" translatable="yes" context="Synchronize via NTP" comments="Synchronize via NTP">Синхронизировать через NTP</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<child> <child>
<object class="GtkLabel" id="lblTime"> <object class="GtkLabel" id="lblTime">
<property name="width-request">145</property> <property name="width-request">160</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-right">5</property> <property name="margin-right">5</property>
@ -250,7 +303,7 @@
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-top">6</property> <property name="margin-top">6</property>
<property name="margin-bottom">6</property> <property name="margin-bottom">6</property>
<property name="label" translatable="yes" context="Time" comments="Time">Время</property> <property name="label" translatable="yes" context="Time" comments="Time">Time</property>
<property name="wrap">True</property> <property name="wrap">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</object> </object>
@ -324,7 +377,7 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<child> <child>
<object class="GtkLabel" id="lblData"> <object class="GtkLabel" id="lblData">
<property name="width-request">145</property> <property name="width-request">160</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-right">5</property> <property name="margin-right">5</property>
@ -332,7 +385,7 @@
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-top">6</property> <property name="margin-top">6</property>
<property name="margin-bottom">6</property> <property name="margin-bottom">6</property>
<property name="label" translatable="yes" context="Date" comments="Date">Дата</property> <property name="label" translatable="yes" context="Date" comments="Date">Date</property>
<property name="wrap">True</property> <property name="wrap">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</object> </object>
@ -347,8 +400,8 @@
<property name="width-request">191</property> <property name="width-request">191</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="tooltip-text" translatable="yes" context="Date of&#10;Format: DD.MM.YYYY" comments="Date of&#10;Format: DD.MM.YYYY">Дата <property name="tooltip-text" translatable="yes" context="Date of&#10;Format: DD.MM.YYYY" comments="Date of&#10;Format: DD.MM.YYYY">Date
Формат: ДД.ММ.ГГГГ</property> Format: DD.MM.YYYY</property>
<property name="margin-left">5</property> <property name="margin-left">5</property>
<property name="margin-right">5</property> <property name="margin-right">5</property>
<property name="margin-start">5</property> <property name="margin-start">5</property>
@ -399,6 +452,62 @@
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<child>
<object class="GtkButton" id="btnUpdateDateTime">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="icon-name">media-playlist-repeat</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lblSynchronizeBtn">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Sync by</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
@ -426,16 +535,19 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property> <property name="margin-right">5</property>
<property name="margin-start">5</property> <property name="margin-start">5</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<child> <child>
<object class="GtkLabel" id="lblTimeBios"> <object class="GtkLabel" id="lblTimeBios">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">center</property> <property name="halign">center</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="label" translatable="yes">Синхронизировать аппаратное время</property> <property name="label" translatable="yes">Synchronize hardware time</property>
</object> </object>
</child> </child>
</object> </object>
@ -467,8 +579,6 @@
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-left">6</property>
<property name="margin-start">5</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
@ -484,13 +594,12 @@
<object class="GtkLabel" id="lblReg"> <object class="GtkLabel" id="lblReg">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes" context="Region" comments="Region">Регион</property>
<property name="margin-left">5</property> <property name="margin-left">5</property>
<property name="margin-right">5</property> <property name="margin-right">5</property>
<property name="margin-start">5</property> <property name="margin-start">5</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-bottom">8</property> <property name="margin-bottom">8</property>
<property name="label" translatable="yes" context="Region" comments="Region">Регион</property> <property name="label" translatable="yes" context="Region" comments="Region">Region</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</object> </object>
<packing> <packing>
@ -519,13 +628,12 @@
<object class="GtkLabel" id="lblZone"> <object class="GtkLabel" id="lblZone">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes" context="Zone" comments="Zone">Зона</property>
<property name="margin-left">5</property> <property name="margin-left">5</property>
<property name="margin-right">5</property> <property name="margin-right">5</property>
<property name="margin-start">5</property> <property name="margin-start">10</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-bottom">8</property> <property name="margin-bottom">8</property>
<property name="label" translatable="yes" context="Zone" comments="Zone">Зона</property> <property name="label" translatable="yes" context="Zone" comments="Zone">Area</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</object> </object>
<packing> <packing>
@ -579,7 +687,7 @@
<object class="GtkLabel" id="lblTimeZone"> <object class="GtkLabel" id="lblTimeZone">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Часовой пояс</property> <property name="label" translatable="yes">Time Zone</property>
</object> </object>
</child> </child>
</object> </object>
@ -589,67 +697,13 @@
<property name="position">5</property> <property name="position">5</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkButton" id="btnUpdateDateTime">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-bottom">6</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="icon-name">media-playlist-repeat</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lblSynchronizeBtn">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Применить локальную настройку даты и времени</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
</object> </object>
</child> </child>
<child type="label"> <child type="label">
<object class="GtkLabel" id="lblDateTimeSetting"> <object class="GtkLabel" id="lblDateTimeSetting">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes" context="Setting the date and time" comments="Setting the date and time">Локальная настройка</property> <property name="label" translatable="yes" context="Setting the date and time" comments="Setting the date and time">Local Configuration</property>
</object> </object>
</child> </child>
</object> </object>
@ -708,7 +762,7 @@
<object class="GtkLabel" id="lblSynchronizebChkGLob"> <object class="GtkLabel" id="lblSynchronizebChkGLob">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes" context="Synchronize via NTP" comments="Synchronize via NTP">Синхронизировать через NTP</property> <property name="label" translatable="yes" context="Synchronize via NTP" comments="Synchronize via NTP">Synchronize via NTP</property>
</object> </object>
</child> </child>
</object> </object>
@ -790,7 +844,7 @@
<property name="margin-start">5</property> <property name="margin-start">5</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-bottom">8</property> <property name="margin-bottom">8</property>
<property name="label" translatable="yes" context="Region" comments="Region">Регион</property> <property name="label" translatable="yes" context="Region" comments="Region">Region</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</object> </object>
<packing> <packing>
@ -821,10 +875,10 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-left">5</property> <property name="margin-left">5</property>
<property name="margin-right">5</property> <property name="margin-right">5</property>
<property name="margin-start">5</property> <property name="margin-start">10</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-bottom">8</property> <property name="margin-bottom">8</property>
<property name="label" translatable="yes" context="Zone" comments="Zone">Зона</property> <property name="label" translatable="yes" context="Zone" comments="Zone">Area</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</object> </object>
<packing> <packing>
@ -887,7 +941,7 @@
<object class="GtkLabel" id="lblDateTimeSettingGlob"> <object class="GtkLabel" id="lblDateTimeSettingGlob">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes" context="Setting date and time in global configuration" comments="Setting date and time in global configuration">Глобальная настройка</property> <property name="label" translatable="yes" context="Setting date and time in global configuration" comments="Setting date and time in global configuration">Global customization</property>
</object> </object>
</child> </child>
</object> </object>

@ -6,6 +6,9 @@
msgid "" msgid ""
msgstr "" msgstr ""
msgid "The program must be run with \nsuperuser privileges!"
msgstr "Программа должна быть запущена с правами \nсуперпользователя!"
msgid "Manually" msgid "Manually"
msgstr "Вручную" msgstr "Вручную"
@ -60,8 +63,8 @@ msgstr "Регион"
msgid "Zone" msgid "Zone"
msgstr "Зона" msgstr "Зона"
msgid "Apply local date and time settings" msgid "Sync by"
msgstr "Применить локальную настройку даты и времени" msgstr "Синхронизировать"
msgid "Automatic time synchronization" msgid "Automatic time synchronization"
msgstr "Автоматическая синхронизация времени" msgstr "Автоматическая синхронизация времени"

Loading…
Cancel
Save