From 0786348b6394f64a5874bf784169a7af36145bdb Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 27 Jan 2023 17:55:42 +0600 Subject: [PATCH] fix and reload project in repo --- .gitignore | 7 +- Makefile | 17 +- README.md | 6 +- bg_top.png | Bin 0 -> 45513 bytes messages.pot | 123 ++ reg/Africa | 54 - reg/America | 147 -- reg/Antarctica | 12 - reg/Arctic | 1 - reg/Asia | 99 -- reg/Atlantic | 12 - reg/Australia | 23 - reg/Brazil | 4 - reg/Chile | 2 - reg/Europe | 64 - reg/Indian | 11 - reg/Mexico | 3 - reg/US | 12 - ...x.pkexec.ubl-settings-datetime.exec.policy | 2 +- source/CMakeLists.txt | 7 +- source/main.cc | 90 + source/ubl-settings-datetime.cc | 677 +++++++ source/ubl-settings-datetime.cpp | 684 ------- source/ubl-settings-datetime.h | 141 ++ style.css | 6 + ubl-settings-datetime.glade | 775 ++++---- ubl-settings-datetime_ru.po | 1565 +---------------- 27 files changed, 1555 insertions(+), 2989 deletions(-) create mode 100644 bg_top.png create mode 100644 messages.pot delete mode 100644 reg/Africa delete mode 100644 reg/America delete mode 100644 reg/Antarctica delete mode 100644 reg/Arctic delete mode 100644 reg/Asia delete mode 100644 reg/Atlantic delete mode 100644 reg/Australia delete mode 100644 reg/Brazil delete mode 100644 reg/Chile delete mode 100644 reg/Europe delete mode 100644 reg/Indian delete mode 100644 reg/Mexico delete mode 100644 reg/US create mode 100644 source/main.cc create mode 100644 source/ubl-settings-datetime.cc delete mode 100644 source/ubl-settings-datetime.cpp create mode 100644 source/ubl-settings-datetime.h create mode 100644 style.css diff --git a/.gitignore b/.gitignore index 33f5078..45460e9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,9 @@ main.cpp ubl-settings-datetime.glade~ test.cpp ubl-settings-datetime -a.out \ No newline at end of file +a.out +compile/ +source/**/ubl_settings_datetime +source/**/main.o +source/**/ubl_settings_datetime.o +reg/ \ No newline at end of file diff --git a/Makefile b/Makefile index 1c75de6..e1f25a0 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,19 @@ #!/usr/bin/make -f +#!/usr/bin/make -f +#SHELL := /bin/bash MAKEFILE_FILEPATH := $(abspath $(lastword $(MAKEFILE_LIST))) MAKEFILE_DIR := $(notdir $(patsubst %/,%,$(dir $(MAKEFILE_FILEPATH)))) MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH)) CMAKE_COMMAND = cmake +#CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source +#CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile CMAKE_SOURCE_DIR = ./source CMAKE_BUILD_DIR = ./compile DEPENDS = cmake - -PKGNAME = $(MAKEFILE_DIR) -#PKGNAME = ubl-settings-datetime +#PKGNAME = $(MAKEFILE_DIR) +PKGNAME = ubl-settings-datetime default_target: all all: init build @@ -55,7 +58,6 @@ build: depend prepare @echo "Build ..."; \ make --directory=${CMAKE_BUILD_DIR}; \ echo "Build: OK" -# g++ -O2 -std=c++20 -lstdc++ -o ubl-settings-datetime ubl-settings-datetime.cpp `pkg-config --cflags --libs gtkmm-3.0` -Wl,-export-dynamic -g uninstall: @echo "Uninstall ..." @@ -102,11 +104,12 @@ install: check uninstall @install -Dm755 -t /usr/bin/ ${CMAKE_BUILD_DIR}/${PKGNAME} @install -Dm644 -t /usr/share/applications/ ${PKGNAME}.desktop @install -Dm644 -t /usr/share/polkit-1/actions/ ru.ublinux.pkexec.${PKGNAME}.exec.policy - @install -dm755 /usr/share/${PKGNAME}/{ui,images,reg} + @install -dm755 /usr/share/${PKGNAME}/{ui,images,css} @install -Dm644 -t /usr/share/${PKGNAME}/ui/ ${PKGNAME}.glade + @install -Dm644 -t /usr/share/${PKGNAME}/css/ style.css @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.svg @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.png - @cp -afr reg/* /usr/share/${PKGNAME}/reg/ + @install -Dm644 -t /usr/share/${PKGNAME}/images/ bg_top.png @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ @update-desktop-database --quiet 2>/dev/null @touch /usr/share/applications @@ -130,4 +133,4 @@ help: @echo "... compile" @echo "... install" @echo "... uninstall" - @echo "... clean" + @echo "... clean" \ No newline at end of file diff --git a/README.md b/README.md index 145e396..b5c8c4d 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,4 @@ # ubl-settings-datetime - +# Настройки даты и времени ![alt text](screenshot/screenshot.png) -- [ ] Локализация -- [x] Makefile -- [ ] Парсинг TimeZone C++ - diff --git a/bg_top.png b/bg_top.png new file mode 100644 index 0000000000000000000000000000000000000000..d673a36f2602b94f7541bf9d6b9b846fb3cbeccd GIT binary patch literal 45513 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 T)U!vG00000NkvXXu0mjfBYct@ literal 0 HcmV?d00001 diff --git a/messages.pot b/messages.pot new file mode 100644 index 0000000..df07366 --- /dev/null +++ b/messages.pot @@ -0,0 +1,123 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-25 12:51+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ubl-settings-datetime.glade:7 +msgid "Внимание!" +msgstr "" + +#: ubl-settings-datetime.glade:45 +msgid "Введите DHCP !" +msgstr "" + +#: ubl-settings-datetime.glade:62 +msgid "OK" +msgstr "" + +#. Date and Time Settings +#: ubl-settings-datetime.glade:84 +msgctxt "Settings the date and time" +msgid "Настройки даты и времени" +msgstr "" + +#. Setting the date and time +#: ubl-settings-datetime.glade:125 ubl-settings-datetime.glade:531 +msgctxt "Setting the date and time" +msgid "Настройка даты и времени" +msgstr "" + +#. Time +#: ubl-settings-datetime.glade:204 +msgctxt "Time" +msgid "Время" +msgstr "" + +#: ubl-settings-datetime.glade:238 +msgid ":" +msgstr "" + +#. Date +#: ubl-settings-datetime.glade:287 +msgctxt "Date" +msgid "Дата" +msgstr "" + +#. Date of +#. Format: DD.MM.YYYY +#: ubl-settings-datetime.glade:302 +msgctxt "" +"Date of\n" +"Format: DD.MM.YYYY" +msgid "" +"Дата\n" +"Формат: ДД.ММ.ГГГГ" +msgstr "" + +#. Interactive date picker +#: ubl-settings-datetime.glade:321 +msgctxt "Interactive date picker" +msgid "Интерактивный выбор даты" +msgstr "" + +#. time zone +#: ubl-settings-datetime.glade:364 +msgctxt "time zone" +msgid "Часовой пояс" +msgstr "" + +#. Region +#: ubl-settings-datetime.glade:389 ubl-settings-datetime.glade:396 +#: ubl-settings-datetime.glade:687 +msgctxt "Region" +msgid "Регион" +msgstr "" + +#. Zone +#: ubl-settings-datetime.glade:426 ubl-settings-datetime.glade:433 +#: ubl-settings-datetime.glade:721 +msgctxt "Zone" +msgid "Зона" +msgstr "" + +#: ubl-settings-datetime.glade:501 +msgid "Синхронизировать" +msgstr "" + +#. Automatic time synchronization +#: ubl-settings-datetime.glade:580 +msgctxt "Automatic time synchronization" +msgid "Автоматическая синхронизация времени" +msgstr "" + +#. Synchronize via NTP +#: ubl-settings-datetime.glade:591 +msgctxt "Synchronize via NTP" +msgid "Синхронизировать через NTP" +msgstr "" + +#. Time zone +#: ubl-settings-datetime.glade:655 +msgctxt "Time zone" +msgid "Часовой пояс" +msgstr "" + +#. Setting date and time in global configuration +#: ubl-settings-datetime.glade:776 +msgctxt "Setting date and time in global configuration" +msgid "Настройка даты и времени в глобальной конфигурации" +msgstr "" diff --git a/reg/Africa b/reg/Africa deleted file mode 100644 index 6afdb1c..0000000 --- a/reg/Africa +++ /dev/null @@ -1,54 +0,0 @@ -(UTC +00) Lome -(UTC +00) Bissau -(UTC +00) Sao_Tome -(UTC +00) Abidjan -(UTC +00) Accra -(UTC +00) Banjul -(UTC +00) Conakry -(UTC +00) Ouagadougou -(UTC +00) Nouakchott -(UTC +00) Timbuktu -(UTC +00) Dakar -(UTC +00) Monrovia -(UTC +00) Freetown -(UTC +00) Bamako -(UTC +01) El_Aaiun -(UTC +01) Lagos -(UTC +01) Porto-Novo -(UTC +01) Algiers -(UTC +01) Douala -(UTC +01) Brazzaville -(UTC +01) Libreville -(UTC +01) Casablanca -(UTC +01) Niamey -(UTC +01) Tunis -(UTC +01) Luanda -(UTC +01) Malabo -(UTC +01) Ceuta -(UTC +01) Kinshasa -(UTC +01) Bangui -(UTC +01) Ndjamena -(UTC +02) Juba -(UTC +02) Maseru -(UTC +02) Khartoum -(UTC +02) Lubumbashi -(UTC +02) Tripoli -(UTC +02) Mbabane -(UTC +02) Kigali -(UTC +02) Gaborone -(UTC +02) Windhoek -(UTC +02) Maputo -(UTC +02) Cairo -(UTC +02) Johannesburg -(UTC +02) Bujumbura -(UTC +02) Lusaka -(UTC +02) Harare -(UTC +02) Blantyre -(UTC +03) Djibouti -(UTC +03) Dar_es_Salaam -(UTC +03) Kampala -(UTC +03) Addis_Ababa -(UTC +03) Mogadishu -(UTC +03) Asmera -(UTC +03) Asmara -(UTC +03) Nairobi diff --git a/reg/America b/reg/America deleted file mode 100644 index 4eac7b5..0000000 --- a/reg/America +++ /dev/null @@ -1,147 +0,0 @@ -(UTC -10) Atka -(UTC -10) Adak -(UTC -09) Anchorage -(UTC -09) Metlakatla -(UTC -09) Juneau -(UTC -09) Sitka -(UTC -09) Nome -(UTC -09) Yakutat -(UTC -08) Tijuana -(UTC -08) Santa_Isabel -(UTC -08) Vancouver -(UTC -08) Ensenada -(UTC -08) Los_Angeles -(UTC -07) Ciudad_Juarez -(UTC -07) Dawson -(UTC -07) Hermosillo -(UTC -07) Phoenix -(UTC -07) Whitehorse -(UTC -07) Edmonton -(UTC -07) Creston -(UTC -07) Inuvik -(UTC -07) Mazatlan -(UTC -07) Shiprock -(UTC -07) Yellowknife -(UTC -07) Fort_Nelson -(UTC -07) Denver -(UTC -07) Boise -(UTC -07) Dawson_Creek -(UTC -07) Cambridge_Bay -(UTC -06) North_Dakota -(UTC -06) Knox_IN -(UTC -06) Costa_Rica -(UTC -06) Menominee -(UTC -06) El_Salvador -(UTC -06) Regina -(UTC -06) Guatemala -(UTC -06) Resolute -(UTC -06) Monterrey -(UTC -06) Chicago -(UTC -06) Winnipeg -(UTC -06) Indiana -(UTC -06) Rankin_Inlet -(UTC -06) Merida -(UTC -06) Tegucigalpa -(UTC -06) Managua -(UTC -06) Belize -(UTC -06) Rainy_River -(UTC -06) Bahia_Banderas -(UTC -06) Ojinaga -(UTC -06) Chihuahua -(UTC -06) Swift_Current -(UTC -06) Mexico_City -(UTC -06) Matamoros -(UTC -05) Jamaica -(UTC -05) Montreal -(UTC -05) Havana -(UTC -05) Grand_Turk -(UTC -05) Iqaluit -(UTC -05) Louisville -(UTC -05) Guayaquil -(UTC -05) Lima -(UTC -05) Coral_Harbour -(UTC -05) Detroit -(UTC -05) Port-au-Prince -(UTC -05) Fort_Wayne -(UTC -05) Eirunepe -(UTC -05) Indianapolis -(UTC -05) Rio_Branco -(UTC -05) Cancun -(UTC -05) Nipigon -(UTC -05) Toronto -(UTC -05) Panama -(UTC -05) Indiana -(UTC -05) New_York -(UTC -05) Kentucky -(UTC -05) Pangnirtung -(UTC -05) Thunder_Bay -(UTC -05) Bogota -(UTC -05) Cayman -(UTC -05) Atikokan -(UTC -05) Porto_Acre -(UTC -05) Nassau -(UTC -04) Anguilla -(UTC -04) Guadeloupe -(UTC -04) Puerto_Rico -(UTC -04) Porto_Velho -(UTC -04) Guyana -(UTC -04) Lower_Princes -(UTC -04) St_Lucia -(UTC -04) Port_of_Spain -(UTC -04) Dominica -(UTC -04) Manaus -(UTC -04) Thule -(UTC -04) St_Vincent -(UTC -04) St_Barthelemy -(UTC -04) Grenada -(UTC -04) Marigot -(UTC -04) Goose_Bay -(UTC -04) Martinique -(UTC -04) La_Paz -(UTC -04) Cuiaba -(UTC -04) Tortola -(UTC -04) Virgin -(UTC -04) Santo_Domingo -(UTC -04) Antigua -(UTC -04) Curacao -(UTC -04) Barbados -(UTC -04) Blanc-Sablon -(UTC -04) Aruba -(UTC -04) Kralendijk -(UTC -04) Montserrat -(UTC -04) Campo_Grande -(UTC -04) Caracas -(UTC -04) St_Thomas -(UTC -04) Glace_Bay -(UTC -04) St_Kitts -(UTC -04) Moncton -(UTC -04) Boa_Vista -(UTC -04) Halifax -(UTC -03) Buenos_Aires -(UTC -03) Santarem -(UTC -03) Araguaina -(UTC -03) Belem -(UTC -03) St_Johns -(UTC -03) Nuuk -(UTC -03) Cordoba -(UTC -03) Catamarca -(UTC -03) Rosario -(UTC -03) Jujuy -(UTC -03) Montevideo -(UTC -03) Punta_Arenas -(UTC -03) Cayenne -(UTC -03) Sao_Paulo -(UTC -03) Santiago -(UTC -03) Paramaribo -(UTC -03) Miquelon -(UTC -03) Godthab -(UTC -03) Maceio -(UTC -03) Fortaleza -(UTC -03) Argentina -(UTC -03) Mendoza -(UTC -03) Recife -(UTC -03) Bahia -(UTC -03) Asuncion -(UTC -02) Noronha -(UTC -01) Scoresbysund -(UTC +00) Danmarkshavn diff --git a/reg/Antarctica b/reg/Antarctica deleted file mode 100644 index 2f99849..0000000 --- a/reg/Antarctica +++ /dev/null @@ -1,12 +0,0 @@ -(UTC -03) Rothera -(UTC -03) Palmer -(UTC +00) Troll -(UTC +03) Syowa -(UTC +05) Mawson -(UTC +06) Vostok -(UTC +07) Davis -(UTC +10) DumontDUrville -(UTC +11) Casey -(UTC +11) Macquarie -(UTC +13) McMurdo -(UTC +13) South_Pole diff --git a/reg/Arctic b/reg/Arctic deleted file mode 100644 index feba77b..0000000 --- a/reg/Arctic +++ /dev/null @@ -1 +0,0 @@ -(UTC +01) Longyearbyen diff --git a/reg/Asia b/reg/Asia deleted file mode 100644 index 57ce91b..0000000 --- a/reg/Asia +++ /dev/null @@ -1,99 +0,0 @@ -(UTC +02) Beirut -(UTC +02) Famagusta -(UTC +02) Nicosia -(UTC +02) Hebron -(UTC +02) Tel_Aviv -(UTC +02) Jerusalem -(UTC +02) Gaza -(UTC +03) Amman -(UTC +03) Bahrain -(UTC +03) Tehran -(UTC +03) Baghdad -(UTC +03) Istanbul -(UTC +03) Kuwait -(UTC +03) Riyadh -(UTC +03) Qatar -(UTC +03) Damascus -(UTC +03) Aden -(UTC +04) Yerevan -(UTC +04) Baku -(UTC +04) Dubai -(UTC +04) Kabul -(UTC +04) Muscat -(UTC +04) Tbilisi -(UTC +05) Kathmandu -(UTC +05) Samarkand -(UTC +05) Ashgabat -(UTC +05) Karachi -(UTC +05) Katmandu -(UTC +05) Calcutta -(UTC +05) Tashkent -(UTC +05) Yekaterinburg -(UTC +05) Oral -(UTC +05) Dushanbe -(UTC +05) Atyrau -(UTC +05) Aqtobe -(UTC +05) Aqtau -(UTC +05) Qyzylorda -(UTC +05) Ashkhabad -(UTC +05) Colombo -(UTC +05) Kolkata -(UTC +06) Dhaka -(UTC +06) Thimphu -(UTC +06) Rangoon -(UTC +06) Kashgar -(UTC +06) Qostanay -(UTC +06) Almaty -(UTC +06) Urumqi -(UTC +06) Yangon -(UTC +06) Dacca -(UTC +06) Thimbu -(UTC +06) Omsk -(UTC +06) Bishkek -(UTC +07) Ho_Chi_Minh -(UTC +07) Phnom_Penh -(UTC +07) Vientiane -(UTC +07) Bangkok -(UTC +07) Krasnoyarsk -(UTC +07) Novokuznetsk -(UTC +07) Barnaul -(UTC +07) Jakarta -(UTC +07) Saigon -(UTC +07) Hovd -(UTC +07) Novosibirsk -(UTC +07) Tomsk -(UTC +07) Pontianak -(UTC +08) Harbin -(UTC +08) Chungking -(UTC +08) Ulan_Bator -(UTC +08) Brunei -(UTC +08) Singapore -(UTC +08) Choibalsan -(UTC +08) Chongqing -(UTC +08) Macau -(UTC +08) Ujung_Pandang -(UTC +08) Manila -(UTC +08) Kuala_Lumpur -(UTC +08) Makassar -(UTC +08) Kuching -(UTC +08) Macao -(UTC +08) Shanghai -(UTC +08) Taipei -(UTC +08) Ulaanbaatar -(UTC +08) Irkutsk -(UTC +08) Hong_Kong -(UTC +09) Khandyga -(UTC +09) Seoul -(UTC +09) Jayapura -(UTC +09) Chita -(UTC +09) Pyongyang -(UTC +09) Yakutsk -(UTC +09) Tokyo -(UTC +09) Dili -(UTC +10) Vladivostok -(UTC +10) Ust-Nera -(UTC +11) Srednekolymsk -(UTC +11) Sakhalin -(UTC +11) Magadan -(UTC +12) Anadyr -(UTC +12) Kamchatka diff --git a/reg/Atlantic b/reg/Atlantic deleted file mode 100644 index 57a99bf..0000000 --- a/reg/Atlantic +++ /dev/null @@ -1,12 +0,0 @@ -(UTC -04) Bermuda -(UTC -03) Stanley -(UTC -02) South_Georgia -(UTC -01) Cape_Verde -(UTC -01) Azores -(UTC +00) Faeroe -(UTC +00) Faroe -(UTC +00) St_Helena -(UTC +00) Reykjavik -(UTC +00) Canary -(UTC +00) Madeira -(UTC +01) Jan_Mayen diff --git a/reg/Australia b/reg/Australia deleted file mode 100644 index d762891..0000000 --- a/reg/Australia +++ /dev/null @@ -1,23 +0,0 @@ -(UTC +08) Perth -(UTC +08) Eucla -(UTC +08) West -(UTC +09) Darwin -(UTC +09) North -(UTC +10) Yancowinna -(UTC +10) South -(UTC +10) Lindeman -(UTC +10) Broken_Hill -(UTC +10) Adelaide -(UTC +10) Queensland -(UTC +10) Brisbane -(UTC +11) Victoria -(UTC +11) Hobart -(UTC +11) ACT -(UTC +11) Tasmania -(UTC +11) LHI -(UTC +11) Currie -(UTC +11) Canberra -(UTC +11) Sydney -(UTC +11) Melbourne -(UTC +11) Lord_Howe -(UTC +11) NSW diff --git a/reg/Brazil b/reg/Brazil deleted file mode 100644 index 79213f9..0000000 --- a/reg/Brazil +++ /dev/null @@ -1,4 +0,0 @@ -(UTC -05) Acre -(UTC -04) West -(UTC -03) East -(UTC -02) DeNoronha diff --git a/reg/Chile b/reg/Chile deleted file mode 100644 index c72cae0..0000000 --- a/reg/Chile +++ /dev/null @@ -1,2 +0,0 @@ -(UTC -05) EasterIsland -(UTC -03) Continental diff --git a/reg/Europe b/reg/Europe deleted file mode 100644 index a6a7a52..0000000 --- a/reg/Europe +++ /dev/null @@ -1,64 +0,0 @@ -(UTC +00) Jersey -(UTC +00) Dublin -(UTC +00) Belfast -(UTC +00) Guernsey -(UTC +00) London -(UTC +00) Lisbon -(UTC +00) Isle_of_Man -(UTC +01) Ljubljana -(UTC +01) Stockholm -(UTC +01) Skopje -(UTC +01) Oslo -(UTC +01) Sarajevo -(UTC +01) Tirane -(UTC +01) Zagreb -(UTC +01) Vienna -(UTC +01) Andorra -(UTC +01) Madrid -(UTC +01) Podgorica -(UTC +01) Copenhagen -(UTC +01) Monaco -(UTC +01) Belgrade -(UTC +01) Budapest -(UTC +01) Brussels -(UTC +01) Amsterdam -(UTC +01) Berlin -(UTC +01) Zurich -(UTC +01) Bratislava -(UTC +01) Prague -(UTC +01) Malta -(UTC +01) Rome -(UTC +01) Luxembourg -(UTC +01) Vaduz -(UTC +01) Paris -(UTC +01) Warsaw -(UTC +01) Vatican -(UTC +01) Busingen -(UTC +01) Gibraltar -(UTC +01) San_Marino -(UTC +02) Sofia -(UTC +02) Vilnius -(UTC +02) Helsinki -(UTC +02) Mariehamn -(UTC +02) Riga -(UTC +02) Bucharest -(UTC +02) Kyiv -(UTC +02) Kiev -(UTC +02) Athens -(UTC +02) Zaporozhye -(UTC +02) Tallinn -(UTC +02) Kaliningrad -(UTC +02) Uzhgorod -(UTC +02) Chisinau -(UTC +02) Nicosia -(UTC +02) Tiraspol -(UTC +03) Simferopol -(UTC +03) Istanbul -(UTC +03) Moscow -(UTC +03) Kirov -(UTC +03) Minsk -(UTC +03) Volgograd -(UTC +04) Ulyanovsk -(UTC +04) Samara -(UTC +04) Astrakhan -(UTC +04) Saratov diff --git a/reg/Indian b/reg/Indian deleted file mode 100644 index cbb5827..0000000 --- a/reg/Indian +++ /dev/null @@ -1,11 +0,0 @@ -(UTC +03) Comoro -(UTC +03) Antananarivo -(UTC +03) Mayotte -(UTC +04) Mauritius -(UTC +04) Reunion -(UTC +04) Mahe -(UTC +05) Maldives -(UTC +05) Kerguelen -(UTC +06) Chagos -(UTC +06) Cocos -(UTC +07) Christmas diff --git a/reg/Mexico b/reg/Mexico deleted file mode 100644 index af4773f..0000000 --- a/reg/Mexico +++ /dev/null @@ -1,3 +0,0 @@ -(UTC -08) BajaNorte -(UTC -07) BajaSur -(UTC -06) General diff --git a/reg/US b/reg/US deleted file mode 100644 index 7c1cbd3..0000000 --- a/reg/US +++ /dev/null @@ -1,12 +0,0 @@ -(UTC -11) Samoa -(UTC -10) Aleutian -(UTC -10) Hawaii -(UTC -09) Alaska -(UTC -08) Pacific -(UTC -07) Mountain -(UTC -07) Arizona -(UTC -06) Indiana-Starke -(UTC -06) Central -(UTC -05) East-Indiana -(UTC -05) Michigan -(UTC -05) Eastern diff --git a/ru.ublinux.pkexec.ubl-settings-datetime.exec.policy b/ru.ublinux.pkexec.ubl-settings-datetime.exec.policy index f657711..bd85ed6 100644 --- a/ru.ublinux.pkexec.ubl-settings-datetime.exec.policy +++ b/ru.ublinux.pkexec.ubl-settings-datetime.exec.policy @@ -7,7 +7,7 @@ UBLinux https://ublinux.ru - + Run "Time date settings" as root Запуск настройки даты и времени" с правами root Authentication is required to run the time date settings diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index e4f8297..319a9c3 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -9,11 +9,12 @@ link_directories(${GTK_LIBRARY_DIRS}) add_definitions(${GTK_CFLAGS_OTHER}) #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a") -#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -fdiagnostics-color=always") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always") set(SOURCE_FILES - ubl-settings-datetime.cpp) + main.cc + ubl-settings-datetime.cc + ubl-settings-datetime.h) set(LIBRARIES ${GTK_LIBRARIES} diff --git a/source/main.cc b/source/main.cc new file mode 100644 index 0000000..46295a7 --- /dev/null +++ b/source/main.cc @@ -0,0 +1,90 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ubl-settings-datetime.h" +int main(int argc, char* argv[]) { + string str_argv=""; + string str_cmd_argv = ""; + for (int i=1; i1){ + str_argv = argv[1]; + } + if ((str_argv.find("--lock")!=std::string::npos || argc==1)){ + int len_argv = 1; + 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"); + builder->set_translation_domain(app_name); + for (int i=0; iget_widget_derived("window", wnd); + auto r = app->run(*wnd); + delete wnd; + return r; + } + else{ + auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example.plug"); + auto builder = Gtk::Builder::create_from_file(path_glade + "ubl-settings-datetime.glade"); + builder->set_translation_domain(app_name); + Glib::init(); + Glib::OptionContext context; + CmdArgParser parser{ + "Socket ID", + "Command line argument for socket ID communication.", + "No help available, sorry" + }; + context.set_main_group(parser); + context.parse(argc, argv); + ::Window socketID = parser.GetSocketID(); + SettingsPlug plug{socketID, builder}; + plug.show(); + app->run(plug); + return 0; + } +} \ No newline at end of file diff --git a/source/ubl-settings-datetime.cc b/source/ubl-settings-datetime.cc new file mode 100644 index 0000000..884751e --- /dev/null +++ b/source/ubl-settings-datetime.cc @@ -0,0 +1,677 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ubl-settings-datetime.h" +using namespace std; + +string path_app= "/usr/bin/"; +string path_glade= "/usr/share/ubl-settings-datetime/ui/"; +string app_name = "ubl-settings-datetime"; +string path_locale = "/usr/share/locale/"; +string path_css = "/usr/share/ubl-settings-datetime/css/style.css"; +bool flag_datetime = false; +bool flag_timezone = false; +bool flag_ntp = false; +bool flag_update = false; + +CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help) +: Glib::OptionGroup{p_name, p_description, p_help} +{ + Glib::OptionEntry socketIDArg; + socketIDArg.set_long_name("socket-id"); + socketIDArg.set_short_name('s'); + socketIDArg.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); + socketIDArg.set_description("Settings manager socket"); + add_entry(socketIDArg, m_socketID); +} + +::Window CmdArgParser::GetSocketID() const { + return m_socketID; +} + +MainWindow::MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) + : Gtk::ApplicationWindow(obj) + , builder{builder} { + this->settings(); +} + +MainWindow::MainWindow(Glib::RefPtr const& builder) { + this->builder = builder; + this->settings(); +} + +void MainWindow::settings(){ + year=0, month=0, day=0; + this->get_builder(); + this->lacalization(); + _numTimeHrs->set_range(0,23); + _numTimeMin->set_range(0,59); + _numTimeHrs->set_increments(1.0,1.0); + _numTimeMin->set_increments(1.0,1.0); + this->get_config(); + this->flag_block_gui(); + this->event(); + this->parse_text_date(); +} +void MainWindow::lacalization(){ + + _txtDate->set_tooltip_text(gettext("Date of\nFormat: DD.MM.YYYY")); + _lblSynchronizebChkGLob->set_text(gettext("Synchronize via NTP")); + _cbDhcp->append(gettext("DHCP")); + _cbDhcp->append(gettext("Manually")); + _lblDateTimeSetting->set_text(gettext("Local Configuration")); + _lblHead->set_text(gettext("Settings the date and time")); + _lblTime->set_text(gettext("Time")); + _lblData->set_text(gettext("Date")); + _lblTimeZone->set_text(gettext("Time zone")); + _lblReg->set_text(gettext("Region")); + _lblZone->set_text(gettext("Zone")); + _lblRegGlob->set_text(gettext("Region")); + _lblZone1Glob->set_text(gettext("Zone")); + _lblTimeZoneGlob->set_text(gettext("Time zone")); + _lblSynchronizeBtn->set_text(gettext("Apply local date and time settings")); + _lblDateTimeSettingGlob->set_text(gettext("Global customization")); + this->set_title(gettext("ubl-settings-datetime")); + _mess_dchp->set_title(gettext("Warning!")); + _lblTimeBios->set_text(gettext("Synchronize hardware time")); + _lblSynchronizebChk->set_text(gettext("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); + } + 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); + } + if (flag_ntp==true){ + _cbxSynchronizeNtpGlob->set_sensitive(false); + _cbDhcp->set_sensitive(false); + _txtNtpServer->set_sensitive(false); + _cbxSynchronizeNtp->set_sensitive(false); + } + if (flag_update==true){ + _lblDateTimeSettingGlob->set_sensitive(false); + _lblSynchronizebChkGLob->set_sensitive(false); + _cbxSynchronizeNtpGlob->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); + } +} + +void MainWindow::add_CSS(){ + Glib::RefPtr cssProvider = Gtk::CssProvider::create(); + cssProvider->load_from_path(path_css); + Glib::RefPtr styleContext = Gtk::StyleContext::create(); + Glib::RefPtr screen = Gdk::Screen::get_default();//get default screen + styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application + 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"); +} + +void MainWindow::get_builder(){ + builder->get_widget("boxColor", _boxColor); + builder->get_widget("btnUpdateDateTime", _btnUpdateDateTime); + builder->get_widget("btnChooseDate", _btnChooseDate); + builder->get_widget("btnMessClose", _btnMessClose); + builder->get_widget("cbxSynchronizeNtpGlob", _cbxSynchronizeNtpGlob); + builder->get_widget("popCalendar", _popCalendar); + builder->get_widget("numTimeHrs", _numTimeHrs); + builder->get_widget("numTimeMin", _numTimeMin); + 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); + builder->get_widget("lblMessage", _lblMessage); + builder->get_widget("lblDateTimeSetting",_lblDateTimeSetting); + builder->get_widget("lblHead",_lblHead); + builder->get_widget("lblTime",_lblTime); + builder->get_widget("lblData",_lblData); + 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); + builder->get_widget("lblDateTimeSettingGlob",_lblDateTimeSettingGlob); + builder->get_widget("lblTimeBios",_lblTimeBios); + builder->get_widget("btnHardwareTime",_btnHardwareTime); + builder->get_widget("cbxSynchronizeNtp",_cbxSynchronizeNtp); + + this->add_CSS(); +} + +void MainWindow::event(){ + _cbxSynchronizeNtp->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_ntp_toggle)); + _btnHardwareTime->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::hardware_clock)); + _btnMessClose->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::gui_mess_close)); + //_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)); + _btnUpdateDateTime->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::update_time_date)); + _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)); +} + +void MainWindow::set_ntp_toggle(){ + bool flag = _cbxSynchronizeNtp->get_active(); + if (flag_ntp==true){ + } + else { + _numTimeHrs->set_sensitive(!flag); + _numTimeMin->set_sensitive(!flag); + _btnChooseDate->set_sensitive(!flag); + _txtDate->set_sensitive(!flag); + _lblTimeBios->set_sensitive(!flag); + } + string cmd = ""; + if (flag==false){ + cmd="systemctl --now disable systemd-timesyncd.service ntpd.service"; + system(cmd.c_str()); + } + else { + cmd = "systemctl --now enable systemd-timesyncd.service"; + system(cmd.c_str()); + } +} + + +void MainWindow::hardware_clock(){ + string cmd = "hwclock --systohc"; + system(cmd.c_str()); +} + +void MainWindow::gui_mess_close(){ + _mess_dchp->hide(); +} + +bool MainWindow::focus_ntp(GdkEventFocus* event){ + if (event!=NULL){} + if (_txtNtpServer->get_text()=="" || _txtNtpServer->get_text()==" "){ + _lblMessage->set_text(gettext("Enter DHCP !")); + _mess_dchp->show(); + } + else{ + string cmd = ""; + cmd = "/usr/bin/ubconfig set network NTPSERVERS=" + _txtNtpServer->get_text(); + this->call(cmd.c_str()); + } + + return true; +} + +void MainWindow::event_entry_cbDhcp(){ + Glib::ustring str_dhcp = _cbDhcp->get_active_text(); + if (str_dhcp.length()!=0){ + if (str_dhcp=="DHCP"){ + string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; + system(cmd.c_str()); + _txtNtpServer->set_sensitive(false); + _cbDhcp->set_active(0); + _txtNtpServer->set_text(""); + } + else{ + string str_dhcp = this->call("/usr/bin/ubconfig get network NTPSERVERS"); + if ((str_dhcp!="") && (str_dhcp!="(null)") ){ + str_dhcp = str_dhcp.substr(str_dhcp.find("=")+1,str_dhcp.length()); + str_dhcp = str_dhcp.substr(0,str_dhcp.find("\n")); + if (str_dhcp!="dhcp"){ + _txtNtpServer->set_text(str_dhcp); + } + _txtNtpServer->set_sensitive(true); + _cbDhcp->set_active(1); + } + } + } + else{ + string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; + system(cmd.c_str()); + _cbDhcp->set_active(0); + } +} + +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::enry_dhcp_mess(){ + string str_dhcp = this->call("/usr/bin/ubconfig get network NTPSERVERS"); + if ((str_dhcp!="") && (str_dhcp!="(null)")){ + _cbxSynchronizeNtpGlob->set_active(1); + str_dhcp = str_dhcp.substr(str_dhcp.find("=")+1,str_dhcp.length()); + str_dhcp = str_dhcp.substr(0,str_dhcp.find("\n")); + if (str_dhcp=="dhcp"){ + _cbDhcp->set_active(0); + _txtNtpServer->set_sensitive(false); + } + else{ + if (str_dhcp==""){ + _lblMessage->set_text(gettext("Enter DHCP !")); + _mess_dchp->show(); + } + else{ + _cbDhcp->set_active(1); + _txtNtpServer->set_text(str_dhcp); + } + } + this->set_ntp_toggle_glob(); + } + else{ + _cbxSynchronizeNtpGlob->set_active(0); + _cbDhcp->set_sensitive(0); + _txtNtpServer->set_sensitive(0); + } +} + +void MainWindow::get_config(){ + this->read_file(); + this->update_hour_minute(); + this->update_calendar(); + this->enry_dhcp_mess(); + string str_ntp = this->call("systemctl status ntpd.service systemd-timesyncd.service | grep \"Active: active\""); + if (str_ntp.length()<50) { + _cbxSynchronizeNtp->set_active(false); + _numTimeHrs->set_sensitive(true); + _numTimeMin->set_sensitive(true); + _btnChooseDate->set_sensitive(true); + _txtDate->set_sensitive(true); + _lblTimeBios->set_sensitive(true); + } + else{ + _cbxSynchronizeNtp->set_active(true); + _numTimeHrs->set_sensitive(false); + _numTimeMin->set_sensitive(false); + _btnChooseDate->set_sensitive(false); + _txtDate->set_sensitive(false); + _lblTimeBios->set_sensitive(false); + } + string read_reg_zon_cfg = this->call("/usr/bin/ubconfig get clock ZONE"); + if ((read_reg_zon_cfg != "") && (read_reg_zon_cfg !="(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(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_zon = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("/")+1,read_reg_zon_cfg.length()); + str_filling_zon = str_filling_zon.substr(0,str_filling_zon.find("\n")); + string str_zone_check = ""; + this->append_region_zone(str_filling_reg,str_filling_zon); + } + else { + this->append_region_zone("Asia","Omsk"); + } +} + +void MainWindow::enter_zone(){ + Glib::ustring zone_text = _cbZone->get_active_text(); + Glib::ustring reg_text = _cbRegion->get_active_text(); + if(!(zone_text.empty()) && !(reg_text.empty())){ + str_zone=zone_text.substr(zone_text.find(") ")+2,zone_text.length()); + str_region=reg_text; + string cmd = "rm -f /etc/localtime"; + system(cmd.c_str()); + string cmd1 = "ln -s /usr/share/zoneinfo/" + str_region + "/" + str_zone+" /etc/localtime"; + system(cmd1.c_str()); + } + else{ + str_zone=""; + str_region=""; + } +} + +void MainWindow::parse_text_date(){ + string data = _txtDate->get_text(); + if (data.length()==10){ + string day = data.substr(0,2); + string month1 = data.substr(3,2); + string year = data.substr(6,data.length()); + } +} + +void MainWindow::enter_zone_glob(){ + Glib::ustring zone_text = _cbZoneGlob->get_active_text(); + Glib::ustring reg_text = _cbRegionGlob->get_active_text(); + if(!(zone_text.empty()) && !(reg_text.empty())){ + 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=" +str_region_glob +"/" + str_zoneGlob; + system(cmd.c_str()); + } + else{ + str_zoneGlob=""; + str_region_glob=""; + } +} + +void MainWindow::set_ntp_toggle_glob(){ + bool flag = _cbxSynchronizeNtp->get_active(); + if (flag==true){ + system("/usr/bin/ubconfig remove network NTPSERVERS") + } + else{ + + } + +} + +void MainWindow::append_region_zone(string region, string zone){ + int index = 0; + for ( const auto &text : time_reg_map ) { + _cbRegion->append(text.first); + _cbRegionGlob->append(text.first); + if (text.first == region){ + _cbRegionGlob->set_active(index); + _cbRegion->set_active(index); + } + index+=1; + } + index = 0; + string cheek_zone = ""; + for (const auto &_str_zone : time_reg_map.at(region)){ + _cbZone->append(_str_zone); + _cbZoneGlob->append(_str_zone); + if (_str_zone!=""){ + cheek_zone = _str_zone.substr(_str_zone.find(") ")+2,_str_zone.length()); + if (cheek_zone == zone){ + _cbZone->set_active(index); + _cbZoneGlob->set_active(index); + } + } + index+=1; + } + +} +string MainWindow::call(string cmd){ + FILE *fp; + int status; + char path[PATH_MAX]; + fp = popen(cmd.c_str(), "r"); + if (fp == NULL){ + exit(1); + } + while (fgets(path, PATH_MAX, fp) != NULL){ + printf("%s", path); + break; + } + status = pclose(fp); + if (status == -1) { + exit(1); + } + else { + } + return path; +} + +void MainWindow::append_zone(){ + Glib::ustring text = _cbRegion->get_active_text(); + _cbZone->remove_all(); + if(!(text.empty())){ + str_region = text; + for (const auto &_str_zone : time_reg_map.at(str_region)){ + _cbZone->append(_str_zone); + } + } +} + +void MainWindow::append_zone_glob(){ + Glib::ustring text = _cbRegionGlob->get_active_text(); + _cbZoneGlob->remove_all(); + if(!(text.empty())){ + str_region_glob = text; + for (const auto &_str_zone : time_reg_map.at(str_region_glob)){ + _cbZoneGlob->append(_str_zone); + } + } +} + +void MainWindow::update_time_date(){ + //this->enter_zone(); + bool flag = _cbxSynchronizeNtpGlob->get_active(); + string cmd = ""; + if ((year!=0) && (month !=0) && (day !=0)){ + string str_month = ""; + string str_day = ""; + month+=2; + if (month <10){ + str_month = "0"+to_string(month); + } + else{ + str_month = to_string(month); + } + if (day <10){ + str_day = "0"+to_string(day); + } + else{ + str_day = to_string(day); + } + string str_data = ""; + str_data = str_day+"." + str_month+"." + to_string(year); + string str_data_entry = _txtDate->get_text(); + if (str_data==str_data_entry){ + cmd = "date +%Y%m%d -s \"" + to_string(year)+ + str_month+str_day+"\""; + system(cmd.c_str()); + + _txtDate->set_text(str_data); + year=0; + month=0; + day=0; + } + else{ + this->post_entry_data(); + } + } + else{ + this->post_entry_data(); + } + if (flag==false){ + hour = _numTimeHrs->get_value_as_int(); + minute = _numTimeMin->get_value_as_int(); + time_t now = time(0); + tm *ltm = localtime(&now); + cmd = "date +%T -s \""+ + to_string(hour) + ":" + to_string(minute) + + ":" + to_string(ltm->tm_sec) +"\""; + system(cmd.c_str()); + } + cmd = "hwclock --systohc"; + system(cmd.c_str()); +} + +void MainWindow::post_entry_data(){ + string cmd = ""; + string data = _txtDate->get_text(); + if (data.length()==10){ + string str_day = data.substr(0,2); + string str_month = data.substr(3,2); + string str_year = data.substr(6,data.length()); + cmd = "date +%Y%m%d -s \"" + str_year+ + str_month+str_day+"\""; + string str_error_clock = this->call(cmd); + size_t index = str_error_clock.find("date: "); + if (index==std::string::npos){ + } + } + else{ + _lblMessage->set_text(gettext("Incorrect date format")); + _mess_dchp->show(); + } +} + +void MainWindow::update_hour_minute(){ + time_t now = time(0); + tm *ltm = localtime(&now); + _numTimeHrs->set_value(ltm->tm_hour); + _numTimeMin->set_value(ltm->tm_min); +} + +void MainWindow::update_calendar(){ + time_t now = time(0); + tm *ltm = localtime(&now); + int year1 = 1900 + (int)ltm->tm_year; + string str_month = ""; + string str_day = ""; + unsigned int month, day; + month=ltm->tm_mon+1; + day=ltm->tm_mday; + if (month <=10){ + str_month = "0"+to_string(month); + } + else{ + str_month = to_string(month); + } + if (day <10){ + str_day = "0"+to_string(day); + } + else{ + str_day = to_string(day); + } + string date = str_day + '.' + str_month + '.' + to_string(year1); + _txtDate->set_text(date); +} + +void MainWindow::read_file(){ + std::string line; + namespace fs = std::filesystem; + for (const auto & entry : fs::directory_iterator("/usr/share/zoneinfo/")){ + 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; + zone.push_back(""); + for (const auto & entry_zone : fs::directory_iterator(path_dir)){ + 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!=" "){ + zone.push_back(string(gettext(key_zone.c_str()))); + } + } + in1.close(); + } + + key_reg = string(gettext(key_reg.c_str())); + time_reg_map.insert({key_reg, zone}); + }}}} + } + } + in.close(); + } +} + +vector MainWindow::split(const std::string &s, char delim){ + std::stringstream ss(s); + std::string item; + std::vector elems; + while (std::getline(ss, item, delim)) { + elems.push_back(item); + } + return elems; +} + +SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr builder) +: Gtk::Plug{p_socketID} +{ + builder->get_widget("plugBox", plugBox); + plugBox->get_parent()->remove(*plugBox); + add(*plugBox); + show_all_children(); +} + +void help(){ + g_print("Usage: ubl-settings-datetime [--lock-timezone] [--lock-ntp] [--lock-datetime] [--lock-update]\n"); + g_print("Options:\n"); + g_print(" --lock-timezone Disable timezone field editing\n"); + g_print(" --lock-ntp Disable ntp field editing\n"); + g_print(" --lock-datetime Disable datetime field editing\n"); + g_print(" --lock-update Disable save changes\n"); + cout << "Параметры командной строки --lock-datetime\n --lock-timezone\n --lock-ntp\n --lock-update\n" << endl; +} \ No newline at end of file diff --git a/source/ubl-settings-datetime.cpp b/source/ubl-settings-datetime.cpp deleted file mode 100644 index 6c05d25..0000000 --- a/source/ubl-settings-datetime.cpp +++ /dev/null @@ -1,684 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace std; - -string path_app= "/usr/bin/"; -string path_glade= "/usr/share/ubl-settings-datetime/ui/"; -string app_name = "ubl-settings-datetime"; -bool flag_datetime = false; -bool flag_timezone = false; -bool flag_ntp = false; -bool flag_update = false; - - -class CmdArgParser : public Glib::OptionGroup -{ - -public: - - CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help) - : Glib::OptionGroup{p_name, p_description, p_help} - { - // Define the 'socket ID' argument options: - Glib::OptionEntry socketIDArg; - socketIDArg.set_long_name("socket-id"); - socketIDArg.set_short_name('s'); - socketIDArg.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); - socketIDArg.set_description("Settings manager socket"); - - // Register it in the parser. It value will be recorded in m_socketID for later usage. - add_entry(socketIDArg, m_socketID); - } - - // Override this to handle errors. I skipped it for simplicity. - // void on_error(Glib::OptionContext& context, const Glib::Error& error) override; - - ::Window GetSocketID() const - { - return m_socketID; - } - -private: - - int m_socketID = 0; - -}; - - - -class MainWindow : public Gtk::ApplicationWindow { -public: - MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) - : Gtk::ApplicationWindow(obj) - , builder{builder} - { - this->settings(); - - } - MainWindow(Glib::RefPtr const& builder) { - this->builder = builder; - this->settings(); - } - - virtual ~MainWindow() = default; - - void settings(){ - this->get_builder(); - _numTimeHrs->set_range(0,23); - _numTimeMin->set_range(0,59); - _numTimeHrs->set_increments(1.0,1.0); - _numTimeMin->set_increments(1.0,1.0); - _txtDate->set_sensitive(false); - this->get_config(); - this->flag_block_gui(); - this->event(); - } - - void flag_block_gui(){ - if (flag_datetime==true){ - _numTimeHrs->set_sensitive(false); - _numTimeMin->set_sensitive(false); - } - else if (flag_timezone==true){ - _cbRegion->set_sensitive(false); - _cbZone->set_sensitive(false); - _cbRegionGlob->set_sensitive(false); - _cbZoneGlob->set_sensitive(false); - _btnChooseDate->set_sensitive(false); - } - else if (flag_ntp==true){ - _cbxSynchronizeNtp->set_sensitive(false); - _cbDhcp->set_sensitive(false); - _txtNtpServer->set_sensitive(false); - } - else if (flag_update==true){ - _btnUpdateDateTime->set_sensitive(false); - } - } - void add_CSS(){ - Glib::RefPtr cssProvider = Gtk::CssProvider::create(); - cssProvider->load_from_path("style.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 context = _btnUpdateDateTime->get_style_context(); - context->add_class("myButton"); - } - - void get_builder(){ - builder->set_translation_domain(app_name); - - builder->get_widget("btnUpdateDateTime", _btnUpdateDateTime); - builder->get_widget("btnChooseDate", _btnChooseDate); - builder->get_widget("btnMessClose", _btnMessClose); - builder->get_widget("cbxSynchronizeNtp", _cbxSynchronizeNtp); - builder->get_widget("popCalendar", _popCalendar); - builder->get_widget("numTimeHrs", _numTimeHrs); - builder->get_widget("numTimeMin", _numTimeMin); - 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); - //this->add_CSS(); - } - void event(){ - _btnMessClose->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::gui_mess_close)); - _cldrDate->signal_day_selected().connect(sigc::mem_fun(*this, &MainWindow::get_calendar)); - _cbxSynchronizeNtp->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_ntp_toggle)); - _btnUpdateDateTime->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::update_time_date)); - _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)); - //_txtNtpServer->grab_focus(); - } - - void gui_mess_close(){ - _mess_dchp->hide(); - } - - bool focus_ntp(GdkEventFocus* event){ - if (_txtNtpServer->get_text()=="" || _txtNtpServer->get_text()==" "){ - _mess_dchp->show(); - } - else{ - string cmd = ""; - cmd = "/usr/bin/ubconfig set network NTPSERVERS=" + _txtNtpServer->get_text(); - this->call(cmd.c_str()); - } - - return true; - } - - - - - void event_entry_cbDhcp(){ - Glib::ustring str_dhcp = _cbDhcp->get_active_text(); - if (str_dhcp.length()!=0){ - if (str_dhcp=="DHCP"){ - string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; - system(cmd.c_str()); - _txtNtpServer->set_sensitive(false); - _cbDhcp->set_active(0); - _txtNtpServer->set_text(""); - } - else{ - string str_dhcp = this->call("/usr/bin/ubconfig get network NTPSERVERS"); - - if ((str_dhcp!="") && (str_dhcp!="(null)") ){ - str_dhcp = str_dhcp.substr(str_dhcp.find("=")+1,str_dhcp.length()); - str_dhcp = str_dhcp.substr(0,str_dhcp.find("\n")); - if (str_dhcp!="dhcp"){ - - - _txtNtpServer->set_text(str_dhcp); - } - _txtNtpServer->set_sensitive(true); - _cbDhcp->set_active(1); - } - } - } - else{ - string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; - system(cmd.c_str()); - //_txtNtpServer->set_sensitive(false); - _cbDhcp->set_active(0); - } - } - - void get_calendar(){ - _cldrDate->get_date(year, month, day); - string str_month = ""; - string str_day = ""; - month+=1; - if (month <10){ - str_month = "0"+to_string(month); - } - else{ - str_month = to_string(month); - } - 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); - } - - - void calendar_show(){ - 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); - _popCalendar->show(); - } - - void enry_dhcp_mess(){ - string str_dhcp = this->call("/usr/bin/ubconfig get network NTPSERVERS"); - if ((str_dhcp!="") && (str_dhcp!="(null)")){ - _cbxSynchronizeNtp->set_active(1); - str_dhcp = str_dhcp.substr(str_dhcp.find("=")+1,str_dhcp.length()); - str_dhcp = str_dhcp.substr(0,str_dhcp.find("\n")); - if (str_dhcp=="dhcp"){ - _cbDhcp->set_active(0); - _txtNtpServer->set_sensitive(false); - //_cbxSynchronizeNtp->set_sensitive(true); - } - else{ - if (str_dhcp==""){ - _mess_dchp->show(); - } - else{ - _cbDhcp->set_active(1); - //_txtNtpServer->set_sensitive(true); - //_cbxSynchronizeNtp->set_sensitive(false); - _txtNtpServer->set_text(str_dhcp); - } - } - - - //_cbxDhcp->set_active(true); - this->set_ntp_toggle(); - } - else{ - _cbxSynchronizeNtp->set_active(0); - _cbDhcp->set_sensitive(0); - _txtNtpServer->set_sensitive(0); - - } - } - void get_config(){ - this->read_file(); - this->update_hour_minute(); - this->update_calendar(); - //this->event_entry_cbDhcp(); - this->enry_dhcp_mess(); - - string str_ntp = this->call("systemctl status ntpd.service systemd-timesyncd.service | grep \"Active: active\""); - if (str_ntp.length()<50) { - _cbxSynchronizeNtp->set_active(false); - } - else{ - _cbxSynchronizeNtp->set_active(true); - } - - string read_reg_zon_cfg = this->call("/usr/bin/ubconfig get clock ZONE"); - if ((read_reg_zon_cfg != "") && (read_reg_zon_cfg !="(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(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_zon = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("/")+1,read_reg_zon_cfg.length()); - str_filling_zon = str_filling_zon.substr(0,str_filling_zon.find("\n")); - string str_zone_check = ""; - this->append_region_zone(str_filling_reg,str_filling_zon); - } - else { - this->append_region_zone("Asia","Omsk"); - - } - - } - - void enter_zone(){ - Glib::ustring zone_text = _cbZone->get_active_text(); - Glib::ustring reg_text = _cbRegion->get_active_text(); - if(!(zone_text.empty()) && !(reg_text.empty())){ - str_zone=zone_text.substr(zone_text.find(") ")+2,zone_text.length()); - str_region=reg_text; - string cmd = "timedatectl set-timezone '" + str_region +"/" + str_zone+"'"; - system(cmd.c_str()); - } - else{ - str_zone=""; - str_region=""; - } - } - - void enter_zone_glob(){ - Glib::ustring zone_text = _cbZoneGlob->get_active_text(); - Glib::ustring reg_text = _cbRegionGlob->get_active_text(); - if(!(zone_text.empty()) && !(reg_text.empty())){ - 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=" +str_region_glob +"/" + str_zoneGlob; - system(cmd.c_str()); - } - else{ - str_zoneGlob=""; - str_region_glob=""; - } - } - - void set_ntp_toggle(){ - bool flag = _cbxSynchronizeNtp->get_active(); - if (flag_datetime==true){ - - } - else { - _numTimeHrs->set_sensitive(!flag); - _numTimeMin->set_sensitive(!flag); - _btnChooseDate->set_sensitive(!flag); - } - - //_txtDate->set_sensitive(!flag); - - //_btnUpdateDateTime->set_sensitive(!flag); - if (flag==false){ - system("systemctl --now disable systemd-timesyncd.service ntpd.service"); - } - else { - system("systemctl --now enable systemd-timesyncd.service"); - } - - } - - void append_region_zone(string region, string zone){ - int index = 0; - for ( const auto &text : time_reg_map ) { - _cbRegion->append(text.first); - _cbRegionGlob->append(text.first); - if (text.first == region){ - _cbRegionGlob->set_active(index); - _cbRegion->set_active(index); - - } - index+=1; - } - index = 0; - string cheek_zone = ""; - for (const auto &_str_zone : time_reg_map.at(region)){ - _cbZone->append(_str_zone); - _cbZoneGlob->append(_str_zone); - if (_str_zone!=""){ - cheek_zone = _str_zone.substr(_str_zone.find(") ")+2,_str_zone.length()); - if (cheek_zone == zone){ - _cbZone->set_active(index); - _cbZoneGlob->set_active(index); - } - } - index+=1; - } - } - string call(string cmd){ - FILE *fp; - int status; - char path[PATH_MAX]; - fp = popen(cmd.c_str(), "r"); - if (fp == NULL){ - //return ""; - } - - while (fgets(path, PATH_MAX, fp) != NULL){ - printf("%s", path); - break; - - } - - status = pclose(fp); - if (status == -1) { - //return ""; - } - else { - //return ""; - } - return path; - } - - void append_zone(){ - Glib::ustring text = _cbRegion->get_active_text(); - _cbZone->remove_all(); - - if(!(text.empty())){ - str_region = text; - for (const auto &_str_zone : time_reg_map.at(str_region)){ - _cbZone->append(_str_zone); - } - } - - } - - void append_zone_glob(){ - Glib::ustring text = _cbRegionGlob->get_active_text(); - _cbZoneGlob->remove_all(); - if(!(text.empty())){ - str_region_glob = text; - for (const auto &_str_zone : time_reg_map.at(str_region_glob)){ - _cbZoneGlob->append(_str_zone); - } - } - - } - void update_time_date(){ - this->enter_zone(); - bool flag = _cbxSynchronizeNtp->get_active(); - if (flag==false){ - hour = _numTimeHrs->get_value_as_int(); - minute = _numTimeMin->get_value_as_int(); - time_t now = time(0); - tm *ltm = localtime(&now); - string cmd = "timedatectl set-time \""+ - to_string(hour) + ":" + to_string(minute) - + ":" + to_string(ltm->tm_sec) +"\""; - system(cmd.c_str()); - if ((year==0) && (month == 0) && (day == 0)){ - time_t now = time(0); - tm *ltm = localtime(&now); - year=1900+ ltm->tm_year; - month=ltm->tm_mon; - day=ltm->tm_mday; - } - string str_month = ""; - string str_day = ""; - if (month <10){ - str_month = "0"+to_string(month+1); - } - else{ - str_month = to_string(month); - } - if (day <10){ - str_day = "0"+to_string(day); - } - else{ - str_day = to_string(day); - } - string cmd1 = "date --set=\"" +to_string(year)+ - str_month+str_day + " " +to_string(hour) + ":" + - to_string(minute)+"\""; - system(cmd1.c_str()); - } - - - } - void update_hour_minute(){ - time_t now = time(0); - tm *ltm = localtime(&now); - _numTimeHrs->set_value(ltm->tm_hour); - _numTimeMin->set_value(ltm->tm_min); - } - - void update_calendar(){ - time_t now = time(0); - tm *ltm = localtime(&now); - int year = 1900 + (int)ltm->tm_year; - string str_month = ""; - string str_day = ""; - unsigned int month, day; - month=ltm->tm_mon+1; - day=ltm->tm_mday; - if (month <=10){ - str_month = "0"+to_string(month); - } - else{ - str_month = to_string(month); - } - 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); - } - void read_file(){ - std::string line; - namespace fs = std::filesystem; - for (const auto & entry : fs::directory_iterator("/usr/share/ubl-settings-datetime/reg/")){ - std::ifstream in(entry.path()); // окрываем файл для чтения - if (in.is_open()) - { - vector zone; - zone.push_back(""); - while (getline(in, line)) - { - zone.push_back(string(gettext(line.c_str()))); - } - string key_reg = entry.path().filename().string(); - key_reg = string(gettext(key_reg.c_str())); - time_reg_map.insert({key_reg, zone}); - } - in.close(); - } - } - -private: - Glib::RefPtr builder; - Gtk::Button *_btnUpdateDateTime; - Gtk::Button *_btnChooseDate; - Gtk::Button *_btnMessClose; - Gtk::ComboBoxText *_cbDhcp; - Gtk::SpinButton *_numTimeHrs; - Gtk::SpinButton *_numTimeMin; - Gtk::CheckButton *_cbxSynchronizeNtp; - - Gtk::Entry *_txtDate; - Gtk::ComboBoxText *_cbRegion; - Gtk::ComboBoxText *_cbRegionGlob; - Gtk::ComboBoxText *_cbZone; - Gtk::ComboBoxText *_cbZoneGlob; - Gtk::Entry *_txtNtpServer; - Gtk::MessageDialog *_mess_dchp; - Gtk::Popover *_popCalendar; - Gtk::Calendar *_cldrDate; - unsigned int year, month, day; - int hour; - int minute; - string str_region=""; - string str_region_glob=""; - string str_txtDate; - string str_txtNtpServer; - string str_zone=""; - string str_zoneGlob; - std::map > time_reg_map; - -}; - -class SettingsPlug : public Gtk::Plug -{ - -public: - Gtk::Window *window; - SettingsPlug(::Window p_socketID, Glib::RefPtr builder) - : Gtk::Plug{p_socketID} - { - - //MainWindow* wnd = nullptr; - //builder->get_widget_derived("window", wnd); - builder->get_widget("plugBox", plugBox); - plugBox->get_parent()->remove(*plugBox); - add(*plugBox); - - show_all_children(); - } - -private: - - Gtk::Widget *plugBox; - Gtk::Widget *parent; -}; - -void help(){ - g_print("Usage: ubl-settings-datetime [--lock-timezone] [--lock-ntp] [--lock-datetime] [--lock-update]\n"); - g_print("Options:\n"); - g_print(" --lock-timezone Disable timezone field editing\n"); - g_print(" --lock-ntp Disable ntp field editing\n"); - g_print(" --lock-datetime Disable datetime field editing\n"); - g_print(" --lock-update Disable save changes\n"); - cout << "Параметры командной строки --lock-datetime\n --lock-timezone\n --lock-ntp\n --lock-update\n" << endl; -} - - -int main(int argc, char* argv[]) { - - //path_app=filesystem::current_path(); - //path_app+="/"; - //cout << *argv[0] << endl; - //app_name=to_string(*argv[0]); - //app_name=app_name.substr(1, app_name.length()); - string str_cmd_argv = ""; - for (int i=1; iget_widget_derived("window", wnd); - auto r = app->run(*wnd); - - delete wnd; - return r; - } - else{ - Glib::init(); - setlocale(LC_ALL, ""); - Glib::OptionContext context; - - CmdArgParser parser{ - "Socket ID", - "Command line argument for socket ID communication.", - "No help available, sorry" - }; - - context.set_main_group(parser); - context.parse(argc, argv); - - ::Window socketID = parser.GetSocketID(); - - // Handle plug: - SettingsPlug plug{socketID, builder}; - plug.show(); - - app->run(plug); - - } - - -} \ No newline at end of file diff --git a/source/ubl-settings-datetime.h b/source/ubl-settings-datetime.h new file mode 100644 index 0000000..4dd0cc9 --- /dev/null +++ b/source/ubl-settings-datetime.h @@ -0,0 +1,141 @@ +#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 +using namespace std; + +extern string path_app; +extern string path_glade; +extern string app_name; +extern string path_locale; +extern string path_css; +extern bool flag_datetime; +extern bool flag_timezone; +extern bool flag_ntp; +extern bool flag_update; + +class CmdArgParser : public Glib::OptionGroup +{ +public: + CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help); + ::Window GetSocketID() const; +private: + int m_socketID = 0; +}; + +class MainWindow : public Gtk::ApplicationWindow { + public: + MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); + MainWindow(Glib::RefPtr const& builder); + virtual ~MainWindow() = default; + void post_entry_data(); + void lacalization(); + void settings(); + void flag_block_gui(); + void add_CSS(); + void get_builder(); + void event(); + void gui_mess_close(); + bool focus_ntp(GdkEventFocus* event); + void event_entry_cbDhcp(); + void get_calendar(); + void calendar_show(); + void enry_dhcp_mess(); + void get_config(); + void enter_zone(); + void enter_zone_glob(); + void set_ntp_toggle(); + void append_region_zone(string region, string zone); + string call(string cmd); + void append_zone(); + void append_zone_glob(); + void update_time_date(); + void update_hour_minute(); + void update_calendar(); + void read_file(); + void parse_text_date(); + void hardware_clock(); + void set_ntp_toggle_glob(); + vector split(const std::string &s, char delim); + private: + Glib::RefPtr builder; + Gtk::Button *_btnUpdateDateTime; + Gtk::Button *_btnChooseDate; + Gtk::Button *_btnMessClose; + Gtk::ComboBoxText *_cbDhcp; + Gtk::SpinButton *_numTimeHrs; + Gtk::SpinButton *_numTimeMin; + Gtk::CheckButton *_cbxSynchronizeNtpGlob; + Gtk::Box *_boxColor; + Gtk::Entry *_txtDate; + Gtk::ComboBoxText *_cbRegion; + Gtk::ComboBoxText *_cbRegionGlob; + Gtk::ComboBoxText *_cbZone; + Gtk::ComboBoxText *_cbZoneGlob; + Gtk::Entry *_txtNtpServer; + Gtk::Window *_mess_dchp; + Gtk::Popover *_popCalendar; + Gtk::Calendar *_cldrDate; + Gtk::Label *_lblMessage; + Gtk::Label *_lblDateTimeSetting; + Gtk::Label *_lblHead; + Gtk::Label *_lblTime; + Gtk::Label *_lblData; + 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; + Gtk::Label *_lblDateTimeSettingGlob; + Gtk::Label *_lblTimeBios; + Gtk::Button *_btnHardwareTime; + Gtk::CheckButton *_cbxSynchronizeNtp; + std::map > time_reg_map; + unsigned int year=0; + unsigned int month=0; + unsigned int day=0; + int hour; + int minute; + string str_region=""; + string str_region_glob=""; + string str_txtDate; + string str_txtNtpServer; + string str_zone=""; + string str_zoneGlob; + +}; + +class SettingsPlug : public Gtk::Plug +{ +public: + Gtk::Window *window; + SettingsPlug(::Window p_socketID, Glib::RefPtr builder); +private: + Gtk::Widget *plugBox; + Gtk::Widget *parent; +}; +void help(); +#endif diff --git a/style.css b/style.css new file mode 100644 index 0000000..8c5d210 --- /dev/null +++ b/style.css @@ -0,0 +1,6 @@ +.cssboxColor1{ + background: url("/usr/share/ubl-settings-datetime/images/bg_top.png") no-repeat; +} +.textHead{ + text-shadow: 1px 1px #ffffff; +} \ No newline at end of file diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index 6087d6f..ff8fc94 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -2,49 +2,14 @@ - + False + Внимание! - - - - - False - dialog - + True False vertical - 2 - - - False - True - end - - - - btnMessClose - True - True - True - - - True - True - 0 - - - - - - - - False - False - 0 - - True @@ -53,23 +18,34 @@ True False + 5 + 5 + 5 + 5 + 6 + 6 50 gtk-dialog-warning - False + True True 0 - + + 160 True False - Введите DHCP + start + center + 6 + 6 + Введите DHCP ! - False + True True 1 @@ -78,7 +54,26 @@ False True - 2 + 1 + + + + + OK + True + True + True + 5 + 5 + 5 + 5 + 3 + 3 + + + False + True + 1 @@ -87,14 +82,13 @@ False Настройки даты и времени - /usr/share/ubl-settings-datetime/images/ubl-settings-datetime.png True False vertical - + True False @@ -108,7 +102,8 @@ 5 6 6 - /usr/share/ubl-settings-datetime/images/ubl-settings-datetime.png + 69 + ubl-settings-datetime False @@ -117,44 +112,68 @@ - - 145 + True False - Изменить параметр NTPSERVERS - 5 - 5 - 5 - 5 - 3 - 6 - Настройка даты и времени - True - 28 - 0 + + + True + False + + + True + False + vertical + + + 255 + True + False + Настройки даты и времени + + + + + + + + True + True + 0 + + + + + False + True + 0 + + + + + True + True + 0 + + + + + True + False + + + False + True + 1 + + - False + True True 1 - - - 100 - True - False - 15 - 5 - 15 - 5 - - - False - True - 2 - - False @@ -166,13 +185,12 @@ True False - 10 vertical True False - 5 + 6 5 5 5 @@ -182,9 +200,42 @@ True False - 5 + 6 5 + 5 vertical + + + True + True + False + 5 + 5 + 5 + 6 + 6 + True + + + 145 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Синхронизировать через NTP + + + + + False + True + 0 + + True @@ -194,7 +245,6 @@ 145 True False - 5 5 5 5 @@ -214,7 +264,6 @@ True True - Часы 5 5 5 @@ -247,7 +296,6 @@ True True - Минуты 5 5 5 @@ -275,11 +323,10 @@ True False - + 145 True False - 5 5 5 5 @@ -297,12 +344,13 @@ - 221 + 191 True True Дата Формат: ДД.ММ.ГГГГ 5 + 5 5 5 6 @@ -351,28 +399,6 @@ True False - - - 145 - True - False - Изменить параметр зоны - 5 - 5 - 5 - 5 - 6 - 6 - Временная зона - True - 0 - - - False - True - 0 - - True @@ -385,18 +411,9 @@ - + True False - Регион - 5 - 5 - 5 - 5 - 6 - 6 - Регион - 0 False @@ -405,123 +422,225 @@ - + True - False - 5 + True + True 5 5 5 - 6 - 6 + + + True + False + center + center + Синхронизировать аппаратное время + + - False + True True 3 + + + False + True + 3 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 0.019999999552965164 + in - + True False - Зона - 5 - 5 + 6 5 - 5 - 6 - 6 - Зона - 0 + + + True + False + + + False + True + 1 + + + + + True + False + Регион + 5 + 5 + 5 + 5 + 8 + Регион + 0 + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 8 + + + False + True + 3 + + + + + True + False + Зона + 5 + 5 + 5 + 5 + 8 + Зона + 0 + + + False + True + 4 + + + + + True + False + 5 + 5 + 5 + 5 + 8 + + + False + True + 5 + + + + + 5 + True + False + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + - - False - True - 4 - - - + + True False - 5 - 5 - 5 - 5 - 6 - 6 + Часовой пояс - - False - True - 5 - + + + False + True + 5 + + + + + True + True + True + 5 + 5 + 5 + 6 - - 5 + True False - - - False - True - 6 - - - - - True - True - True - end - 5 - 5 - 6 - 6 + center + center - + True False - - - True - False - media-playlist-repeat - - - False - True - 0 - - - - - True - False - Синхронизировать - - - False - True - 1 - - + 5 + 5 + 5 + 5 + media-playlist-repeat + + False + True + 0 + + + + + True + False + center + center + Применить локальную настройку даты и времени + + + False + True + 1 + - - False - True - 7 - - True + False True - 3 + 6 @@ -530,7 +649,7 @@ True False - Настройка даты и времени + Локальная настройка @@ -551,7 +670,6 @@ True False - 10 vertical @@ -567,27 +685,32 @@ True False - 5 + 6 5 + 5 vertical True False - - Синхронизировать через NTP + True True False Автоматическая синхронизация времени 5 - 5 5 5 6 - 6 True + + + True + False + Синхронизировать через NTP + + False @@ -599,13 +722,7 @@ True False - Способ синхронизации 6 - 6 - - DHCP - Вручную - False @@ -618,15 +735,12 @@ -1 True True - Ввод сервера для синхронизации даты и времени: -Локальный (DHCP) или произвольный center 5 5 5 5 6 - 6 True @@ -642,134 +756,127 @@ - + True False + 5 + 5 + 5 + 5 + 6 + 0.019999999552965164 + in - - 145 - True - False - Изменить параметр зоны - 5 - 5 - 5 - 5 - 6 - 6 - Временная зона - True - 28 - 0 - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - False - Регион - 5 - 5 - 5 - 5 - 6 - 6 - Регион - 0 - - - False - True - 2 - - - - + True False - 5 - 5 - 5 - 5 - 6 - 6 - - - False - True - 3 - - - - - True - False - Зона - 5 - 5 - 5 - 5 - Зона - 0 - - - False - True - 4 - - - - - True - False - 5 - 5 - 5 - 5 - 6 - 6 + + + True + False + + + False + True + 1 + + + + + True + False + 5 + 5 + 5 + 5 + 8 + Регион + 0 + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 8 + + + False + True + 3 + + + + + True + False + 5 + 5 + 5 + 5 + 8 + Зона + 0 + + + False + True + 4 + + + + + True + False + 5 + 5 + 5 + 5 + 8 + + + False + True + 5 + + + + + 5 + True + False + 15 + 5 + 15 + 5 + + + False + True + 6 + + - - False - True - 5 - - - - 5 + + True False - 15 - 5 - 15 - 5 + Часовой пояс - - False - True - 6 - - True + False True 1 @@ -777,10 +884,10 @@ - + True False - Настройка даты и времени в глобальной конфигурации + Глобальная настройка diff --git a/ubl-settings-datetime_ru.po b/ubl-settings-datetime_ru.po index 902df90..8f78b7a 100644 --- a/ubl-settings-datetime_ru.po +++ b/ubl-settings-datetime_ru.po @@ -1,1540 +1,85 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# Russian translations for PACKAGE package. +# Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# Automatically generated, 2023. # -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-14 18:29+0600\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -#. Ok -#: ubconfig_date_time.glade:26 -msgctxt "Ok" -msgid "Oк" -msgstr "" - -#. Enter DHCP -#: ubconfig_date_time.glade:68 -msgctxt "Enter DHCP" -msgid "Введите DHCP" -msgstr "" - -#. Date and time settings -#: ubconfig_date_time.glade:88 -msgctxt "Date and time settings" -msgid "Настройки даты и времени" -msgstr "" - -#: ubconfig_date_time.glade:123 -msgid "Изменить параметр NTPSERVERS" -msgstr "" - -#. Setting the date and time -#: ubconfig_date_time.glade:130 ubconfig_date_time.glade:553 -msgctxt "Setting the date and time" -msgid "Настройка даты и времени" -msgstr "" - -#. Time -#: ubconfig_date_time.glade:204 -msgctxt "Time" -msgid "Время" -msgstr "" - -#. Clock -#: ubconfig_date_time.glade:218 -msgctxt "Clock" -msgid "Часы" -msgstr "" - -#: ubconfig_date_time.glade:239 -msgid ":" -msgstr "" - -#. Minutes -#: ubconfig_date_time.glade:251 -msgctxt "Minutes" -msgid "Минуты" -msgstr "" - -#. Date -#: ubconfig_date_time.glade:289 -msgctxt "Date" -msgid "Дата" -msgstr "" - -#. Date of -#. Format: DD.MM.YYYY -#: ubconfig_date_time.glade:304 -msgctxt "" -"Date of\n" -"Format: DD.MM.YYYY" -msgid "" -"Дата\n" -"Формат: ДД.ММ.ГГГГ" -msgstr "" - -#. Interactive date picker -#: ubconfig_date_time.glade:323 -msgctxt "Interactive date picker" -msgid "Интерактивный выбор даты" -msgstr "" - -#. Change zone setting -#: ubconfig_date_time.glade:360 ubconfig_date_time.glade:679 -msgctxt "Change zone setting" -msgid "Изменить параметр зоны" -msgstr "" - -#. time zone -#: ubconfig_date_time.glade:367 -msgctxt "time zone" -msgid "Временная зона" -msgstr "" - -#. Region -#: ubconfig_date_time.glade:393 ubconfig_date_time.glade:400 -#: ubconfig_date_time.glade:712 ubconfig_date_time.glade:719 -msgctxt "Region" -msgid "Регион" -msgstr "" - -#. Zone -#: ubconfig_date_time.glade:430 ubconfig_date_time.glade:437 -#: ubconfig_date_time.glade:749 ubconfig_date_time.glade:756 -msgctxt "Zone" -msgid "Зона" -msgstr "" - -#. Update date and time -#: ubconfig_date_time.glade:516 ubconfig_date_time.glade:523 -msgctxt "Update date and time" -msgid "Обновить дату и время" -msgstr "" - -#. Synchronize via NTP -#: ubconfig_date_time.glade:601 -msgctxt "Synchronize via NTP" -msgid "Синхронизировать через NTP" -msgstr "" - -#. Automatic time synchronization -#: ubconfig_date_time.glade:605 -msgctxt "Automatic time synchronization" -msgid "Автоматическая синхронизация времени" -msgstr "" - -#. Synchronization method -#: ubconfig_date_time.glade:625 -msgctxt "Synchronization method" -msgid "Способ синхронизации" -msgstr "" - -#. DHCP -#: ubconfig_date_time.glade:633 -msgctxt "DHCP" -msgid "DHCP" -msgstr "" - -#. Manually -#: ubconfig_date_time.glade:634 -msgctxt "Manually" -msgid "Вручную" -msgstr "" - -#. Server input for date and time synchronization: -#. Local (DHCP) or arbitrary -#: ubconfig_date_time.glade:647 -msgctxt "" -"Server input for date and time synchronization:\n" -"Local (DHCP) or arbitrary" -msgid "" -"Ввод сервера для синхронизации даты и времени:\n" -"Локальный (DHCP) или произвольный" -msgstr "" - -#. Time zone -#: ubconfig_date_time.glade:686 -msgctxt "Time zone" -msgid "Временная зона" -msgstr "" - -#. Setting date and time in global configuration -#: ubconfig_date_time.glade:811 -msgctxt "Setting date and time in global configuration" -msgid "Настройка даты и времени в глобальной конфигурации" -msgstr "" - -msgid "Mexico" -msgstr "Мексика" - -msgid "BajaNorte" -msgstr "" - -msgid "BajaSur" -msgstr "Южная Нижняя Калифорния" - -msgid "General" -msgstr "" - -msgid "Arctic" -msgstr "" - -msgid "Longyearbyen" -msgstr "" - -msgid "Indian" -msgstr "" - -msgid "Comoro" -msgstr "" - -msgid "Antananarivo" -msgstr "" - -msgid "Mayotte" -msgstr "" - -msgid "Mauritius" -msgstr "" - -msgid "Reunion" -msgstr "" - -msgid "Mahe" -msgstr "" - -msgid "Maldives" -msgstr "" - -msgid "Kerguelen" -msgstr "" - -msgid "Chagos" -msgstr "" - -msgid "Cocos" -msgstr "" - -msgid "Christmas" -msgstr "" - -msgid "Europe" -msgstr "" - -msgid "Jersey" -msgstr "" - -msgid "Dublin" -msgstr "" - -msgid "Belfast" -msgstr "" - -msgid "Guernsey" -msgstr "" - -msgid "London" -msgstr "" - -msgid "Lisbon" -msgstr "" - -msgid "Isle_of_Man" -msgstr "" - -msgid "Ljubljana" -msgstr "" - -msgid "Stockholm" -msgstr "" - -msgid "Skopje" -msgstr "" - -msgid "Oslo" -msgstr "" - -msgid "Sarajevo" -msgstr "" - -msgid "Tirane" -msgstr "" - -msgid "Zagreb" -msgstr "" - -msgid "Vienna" -msgstr "" - -msgid "Andorra" -msgstr "" - -msgid "Madrid" -msgstr "" - -msgid "Podgorica" -msgstr "" - -msgid "Copenhagen" -msgstr "" - -msgid "Monaco" -msgstr "" - -msgid "Belgrade" -msgstr "" - -msgid "Budapest" -msgstr "" - -msgid "Brussels" -msgstr "" - -msgid "Amsterdam" -msgstr "" - -msgid "Berlin" -msgstr "" - -msgid "Zurich" -msgstr "" - -msgid "Bratislava" -msgstr "" - -msgid "Prague" -msgstr "" - -msgid "Malta" -msgstr "" - -msgid "Rome" -msgstr "" - -msgid "Luxembourg" -msgstr "" - -msgid "Vaduz" -msgstr "" - -msgid "Paris" -msgstr "" - -msgid "Warsaw" -msgstr "" - -msgid "Vatican" -msgstr "" - -msgid "Busingen" -msgstr "" - -msgid "Gibraltar" -msgstr "" - -msgid "San_Marino" -msgstr "" - -msgid "Sofia" -msgstr "" - -msgid "Vilnius" -msgstr "" - -msgid "Helsinki" -msgstr "" - -msgid "Mariehamn" -msgstr "" - -msgid "Riga" -msgstr "" - -msgid "Bucharest" -msgstr "" - -msgid "Kyiv" -msgstr "" - -msgid "Kiev" -msgstr "" - -msgid "Athens" -msgstr "" - -msgid "Zaporozhye" -msgstr "" - -msgid "Tallinn" -msgstr "" - -msgid "Kaliningrad" -msgstr "" - -msgid "Uzhgorod" -msgstr "" - -msgid "Chisinau" -msgstr "" - -msgid "Nicosia" -msgstr "" - -msgid "Tiraspol" -msgstr "" - -msgid "Simferopol" -msgstr "" - -msgid "Istanbul" -msgstr "" - -msgid "Moscow" -msgstr "" - -msgid "Kirov" -msgstr "" - -msgid "Minsk" -msgstr "" - -msgid "Volgograd" -msgstr "" - -msgid "Ulyanovsk" -msgstr "" - -msgid "Samara" -msgstr "" - -msgid "Astrakhan" -msgstr "" - -msgid "Saratov" -msgstr "" - -msgid "Africa" -msgstr "" - -msgid "Lome" -msgstr "" - -msgid "Bissau" -msgstr "" - -msgid "Sao_Tome" -msgstr "" - -msgid "Abidjan" -msgstr "" - -msgid "Accra" -msgstr "" - -msgid "Banjul" -msgstr "" - -msgid "Conakry" -msgstr "" - -msgid "Ouagadougou" -msgstr "" - -msgid "Nouakchott" -msgstr "" - -msgid "Timbuktu" -msgstr "" - -msgid "Dakar" -msgstr "" - -msgid "Monrovia" -msgstr "" - -msgid "Freetown" -msgstr "" - -msgid "Bamako" -msgstr "" - -msgid "El_Aaiun" -msgstr "" - -msgid "Lagos" -msgstr "" - -msgid "Porto-Novo" -msgstr "" - -msgid "Algiers" -msgstr "" - -msgid "Douala" -msgstr "" - -msgid "Brazzaville" -msgstr "" - -msgid "Libreville" -msgstr "" - -msgid "Casablanca" -msgstr "" - -msgid "Niamey" -msgstr "" - -msgid "Tunis" -msgstr "" - -msgid "Luanda" -msgstr "" - -msgid "Malabo" -msgstr "" - -msgid "Ceuta" -msgstr "" - -msgid "Kinshasa" -msgstr "" - -msgid "Bangui" -msgstr "" - -msgid "Ndjamena" -msgstr "" - -msgid "Juba" -msgstr "" - -msgid "Maseru" -msgstr "" - -msgid "Khartoum" -msgstr "" - -msgid "Lubumbashi" -msgstr "" - -msgid "Tripoli" -msgstr "" - -msgid "Mbabane" -msgstr "" - -msgid "Kigali" -msgstr "" - -msgid "Gaborone" -msgstr "" - -msgid "Windhoek" -msgstr "" - -msgid "Maputo" -msgstr "" - -msgid "Cairo" -msgstr "" - -msgid "Johannesburg" -msgstr "" - -msgid "Bujumbura" -msgstr "" - -msgid "Lusaka" -msgstr "" - -msgid "Harare" -msgstr "" - -msgid "Blantyre" -msgstr "" - -msgid "Djibouti" -msgstr "" - -msgid "Dar_es_Salaam" -msgstr "" - -msgid "Kampala" -msgstr "" - -msgid "Addis_Ababa" -msgstr "" - -msgid "Mogadishu" -msgstr "" - -msgid "Asmera" -msgstr "" - -msgid "Asmara" -msgstr "" - -msgid "Nairobi" -msgstr "" - -msgid "Antarctica" -msgstr "" - -msgid "Rothera" -msgstr "" - -msgid "Palmer" -msgstr "" - -msgid "Troll" -msgstr "" - -msgid "Syowa" -msgstr "" - -msgid "Mawson" -msgstr "" - -msgid "Vostok" -msgstr "" - -msgid "Davis" -msgstr "" - -msgid "DumontDUrville" -msgstr "" - -msgid "Casey" -msgstr "" - -msgid "Macquarie" -msgstr "" - -msgid "McMurdo" -msgstr "" - -msgid "South_Pole" -msgstr "" - -msgid "locali" -msgstr "" - -msgid "America" -msgstr "" - -msgid "Atka" -msgstr "" - -msgid "Adak" -msgstr "" - -msgid "Anchorage" -msgstr "" - -msgid "Metlakatla" -msgstr "" - -msgid "Juneau" -msgstr "" - -msgid "Sitka" -msgstr "" - -msgid "Nome" -msgstr "" - -msgid "Yakutat" -msgstr "" - -msgid "Tijuana" -msgstr "" - -msgid "Santa_Isabel" -msgstr "" - -msgid "Vancouver" -msgstr "" - -msgid "Ensenada" -msgstr "" - -msgid "Los_Angeles" -msgstr "" - -msgid "Ciudad_Juarez" -msgstr "" - -msgid "Dawson" -msgstr "" - -msgid "Hermosillo" -msgstr "" - -msgid "Phoenix" -msgstr "" - -msgid "Whitehorse" -msgstr "" - -msgid "Edmonton" -msgstr "" - -msgid "Creston" -msgstr "" - -msgid "Inuvik" -msgstr "" - -msgid "Mazatlan" -msgstr "" - -msgid "Shiprock" -msgstr "" - -msgid "Yellowknife" -msgstr "" - -msgid "Fort_Nelson" -msgstr "" - -msgid "Denver" -msgstr "" - -msgid "Boise" -msgstr "" - -msgid "Dawson_Creek" -msgstr "" - -msgid "Cambridge_Bay" -msgstr "" - -msgid "North_Dakota" -msgstr "" - -msgid "Knox_IN" -msgstr "" - -msgid "Costa_Rica" -msgstr "" - -msgid "Menominee" -msgstr "" - -msgid "El_Salvador" -msgstr "" - -msgid "Regina" -msgstr "" - -msgid "Guatemala" -msgstr "" - -msgid "Resolute" -msgstr "" - -msgid "Monterrey" -msgstr "" - -msgid "Chicago" -msgstr "" - -msgid "Winnipeg" -msgstr "" - -msgid "Indiana" -msgstr "" - -msgid "Rankin_Inlet" -msgstr "" - -msgid "Merida" -msgstr "" - -msgid "Tegucigalpa" -msgstr "" - -msgid "Managua" -msgstr "" - -msgid "Belize" -msgstr "" - -msgid "Rainy_River" -msgstr "" - -msgid "Bahia_Banderas" -msgstr "" - -msgid "Ojinaga" -msgstr "" - -msgid "Chihuahua" -msgstr "" - -msgid "Swift_Current" -msgstr "" - -msgid "Mexico_City" -msgstr "" - -msgid "Matamoros" -msgstr "" - -msgid "Jamaica" -msgstr "" - -msgid "Montreal" -msgstr "" - -msgid "Havana" -msgstr "" - -msgid "Grand_Turk" -msgstr "" - -msgid "Iqaluit" -msgstr "" - -msgid "Louisville" -msgstr "" - -msgid "Guayaquil" -msgstr "" - -msgid "Lima" -msgstr "" - -msgid "Coral_Harbour" -msgstr "" - -msgid "Detroit" -msgstr "" - -msgid "Port-au-Prince" -msgstr "" - -msgid "Fort_Wayne" -msgstr "" - -msgid "Eirunepe" -msgstr "" - -msgid "Indianapolis" -msgstr "" - -msgid "Rio_Branco" -msgstr "" - -msgid "Cancun" -msgstr "" - -msgid "Nipigon" -msgstr "" - -msgid "Toronto" -msgstr "" - -msgid "Panama" -msgstr "" - -msgid "New_York" -msgstr "" - -msgid "Kentucky" -msgstr "" - -msgid "Pangnirtung" -msgstr "" - -msgid "Thunder_Bay" -msgstr "" - -msgid "Bogota" -msgstr "" - -msgid "Cayman" -msgstr "" - -msgid "Atikokan" -msgstr "" - -msgid "Porto_Acre" -msgstr "" - -msgid "Nassau" -msgstr "" - -msgid "Anguilla" -msgstr "" - -msgid "Guadeloupe" -msgstr "" - -msgid "Puerto_Rico" -msgstr "" - -msgid "Porto_Velho" -msgstr "" - -msgid "Guyana" -msgstr "" - -msgid "Lower_Princes" -msgstr "" - -msgid "St_Lucia" -msgstr "" - -msgid "Port_of_Spain" -msgstr "" - -msgid "Dominica" -msgstr "" - -msgid "Manaus" -msgstr "" - -msgid "Thule" -msgstr "" - -msgid "St_Vincent" -msgstr "" - -msgid "St_Barthelemy" -msgstr "" - -msgid "Grenada" -msgstr "" - -msgid "Marigot" -msgstr "" - -msgid "Goose_Bay" -msgstr "" - -msgid "Martinique" -msgstr "" - -msgid "La_Paz" -msgstr "" - -msgid "Cuiaba" -msgstr "" - -msgid "Tortola" -msgstr "" - -msgid "Virgin" -msgstr "" - -msgid "Santo_Domingo" -msgstr "" - -msgid "Antigua" -msgstr "" - -msgid "Curacao" -msgstr "" - -msgid "Barbados" -msgstr "" - -msgid "Blanc-Sablon" -msgstr "" - -msgid "Aruba" -msgstr "" - -msgid "Kralendijk" -msgstr "" - -msgid "Montserrat" -msgstr "" - -msgid "Campo_Grande" -msgstr "" - -msgid "Caracas" -msgstr "" - -msgid "St_Thomas" -msgstr "" - -msgid "Glace_Bay" -msgstr "" - -msgid "St_Kitts" -msgstr "" - -msgid "Moncton" -msgstr "" - -msgid "Boa_Vista" -msgstr "" - -msgid "Halifax" -msgstr "" - -msgid "Buenos_Aires" -msgstr "" - -msgid "Santarem" -msgstr "" - -msgid "Araguaina" -msgstr "" - -msgid "Belem" -msgstr "" - -msgid "St_Johns" -msgstr "" - -msgid "Nuuk" -msgstr "" - -msgid "Cordoba" -msgstr "" - -msgid "Catamarca" -msgstr "" - -msgid "Rosario" -msgstr "" - -msgid "Jujuy" -msgstr "" - -msgid "Montevideo" -msgstr "" - -msgid "Punta_Arenas" -msgstr "" - -msgid "Cayenne" -msgstr "" - -msgid "Sao_Paulo" -msgstr "" - -msgid "Santiago" -msgstr "" - -msgid "Paramaribo" -msgstr "" - -msgid "Miquelon" -msgstr "" - -msgid "Godthab" -msgstr "" - -msgid "Maceio" -msgstr "" - -msgid "Fortaleza" -msgstr "" - -msgid "Argentina" -msgstr "" - -msgid "Mendoza" -msgstr "" - -msgid "Recife" -msgstr "" - -msgid "Bahia" -msgstr "" - -msgid "Asuncion" -msgstr "" - -msgid "Noronha" -msgstr "" - -msgid "Scoresbysund" -msgstr "" - -msgid "Danmarkshavn" -msgstr "" - -msgid "Chile" -msgstr "" - -msgid "EasterIsland" -msgstr "" - -msgid "Continental" -msgstr "" - -msgid "Australia" -msgstr "" - -msgid "Perth" -msgstr "" - -msgid "Eucla" -msgstr "" - -msgid "West" -msgstr "" - -msgid "Darwin" -msgstr "" - -msgid "North" -msgstr "" - -msgid "Yancowinna" -msgstr "" - -msgid "South" -msgstr "" - -msgid "Lindeman" -msgstr "" - -msgid "Broken_Hill" -msgstr "" - -msgid "Adelaide" -msgstr "" - -msgid "Queensland" -msgstr "" - -msgid "Brisbane" -msgstr "" +msgid "Manually" +msgstr "Вручную" -msgid "Victoria" -msgstr "" - -msgid "Hobart" -msgstr "" - -msgid "ACT" -msgstr "" - -msgid "Tasmania" -msgstr "" - -msgid "LHI" -msgstr "" - -msgid "Currie" -msgstr "" - -msgid "Canberra" -msgstr "" - -msgid "Sydney" -msgstr "" - -msgid "Melbourne" -msgstr "" - -msgid "Lord_Howe" -msgstr "" - -msgid "NSW" -msgstr "" - -msgid "Asia" -msgstr "" - -msgid "Beirut" -msgstr "" - -msgid "Famagusta" -msgstr "" - -msgid "Hebron" -msgstr "" - -msgid "Tel_Aviv" -msgstr "" - -msgid "Jerusalem" -msgstr "" - -msgid "Gaza" -msgstr "" - -msgid "Amman" -msgstr "" - -msgid "Bahrain" -msgstr "" - -msgid "Tehran" -msgstr "" - -msgid "Baghdad" -msgstr "" - -msgid "Kuwait" -msgstr "" - -msgid "Riyadh" -msgstr "" - -msgid "Qatar" -msgstr "" - -msgid "Damascus" -msgstr "" - -msgid "Aden" -msgstr "" - -msgid "Yerevan" -msgstr "" - -msgid "Baku" -msgstr "" - -msgid "Dubai" -msgstr "" - -msgid "Kabul" -msgstr "" - -msgid "Muscat" -msgstr "" - -msgid "Tbilisi" -msgstr "" - -msgid "Kathmandu" -msgstr "" - -msgid "Samarkand" -msgstr "" - -msgid "Ashgabat" -msgstr "" - -msgid "Karachi" -msgstr "" - -msgid "Katmandu" -msgstr "" - -msgid "Calcutta" -msgstr "" - -msgid "Tashkent" -msgstr "" - -msgid "Yekaterinburg" -msgstr "" - -msgid "Oral" -msgstr "" - -msgid "Dushanbe" -msgstr "" - -msgid "Atyrau" -msgstr "" - -msgid "Aqtobe" -msgstr "" - -msgid "Aqtau" -msgstr "" - -msgid "Qyzylorda" -msgstr "" - -msgid "Ashkhabad" -msgstr "" - -msgid "Colombo" -msgstr "" - -msgid "Kolkata" -msgstr "" - -msgid "Dhaka" -msgstr "" - -msgid "Thimphu" -msgstr "" - -msgid "Rangoon" -msgstr "" - -msgid "Kashgar" -msgstr "" - -msgid "Qostanay" -msgstr "" - -msgid "Almaty" -msgstr "" - -msgid "Urumqi" -msgstr "" - -msgid "Yangon" -msgstr "" - -msgid "Dacca" -msgstr "" - -msgid "Thimbu" -msgstr "" - -msgid "Omsk" -msgstr "" - -msgid "Bishkek" -msgstr "" - -msgid "Ho_Chi_Minh" -msgstr "" - -msgid "Phnom_Penh" -msgstr "" - -msgid "Vientiane" -msgstr "" - -msgid "Bangkok" -msgstr "" - -msgid "Krasnoyarsk" -msgstr "" - -msgid "Novokuznetsk" -msgstr "" - -msgid "Barnaul" -msgstr "" - -msgid "Jakarta" -msgstr "" - -msgid "Saigon" -msgstr "" - -msgid "Hovd" -msgstr "" - -msgid "Novosibirsk" -msgstr "" - -msgid "Tomsk" -msgstr "" - -msgid "Pontianak" -msgstr "" - -msgid "Harbin" -msgstr "" - -msgid "Chungking" -msgstr "" - -msgid "Ulan_Bator" -msgstr "" - -msgid "Brunei" -msgstr "" - -msgid "Singapore" -msgstr "" - -msgid "Choibalsan" -msgstr "" - -msgid "Chongqing" -msgstr "" - -msgid "Macau" -msgstr "" - -msgid "Ujung_Pandang" -msgstr "" - -msgid "Manila" -msgstr "" - -msgid "Kuala_Lumpur" -msgstr "" - -msgid "Makassar" -msgstr "" - -msgid "Kuching" -msgstr "" - -msgid "Macao" -msgstr "" - -msgid "Shanghai" -msgstr "" - -msgid "Taipei" -msgstr "" - -msgid "Ulaanbaatar" -msgstr "" - -msgid "Irkutsk" -msgstr "" - -msgid "Hong_Kong" -msgstr "" - -msgid "Khandyga" -msgstr "" - -msgid "Seoul" -msgstr "" - -msgid "Jayapura" -msgstr "" - -msgid "Chita" -msgstr "" - -msgid "Pyongyang" -msgstr "" - -msgid "Yakutsk" -msgstr "" - -msgid "Tokyo" -msgstr "" - -msgid "Dili" -msgstr "" - -msgid "Vladivostok" -msgstr "" - -msgid "Ust-Nera" -msgstr "" - -msgid "Srednekolymsk" -msgstr "" - -msgid "Sakhalin" -msgstr "" - -msgid "Magadan" -msgstr "" - -msgid "Anadyr" -msgstr "" - -msgid "Kamchatka" -msgstr "" - -msgid "US" -msgstr "" - -msgid "Samoa" -msgstr "" - -msgid "Aleutian" -msgstr "" - -msgid "Hawaii" -msgstr "" - -msgid "Alaska" -msgstr "" - -msgid "Pacific" -msgstr "" - -msgid "Mountain" -msgstr "" - -msgid "Arizona" -msgstr "" +msgid "Enter DHCP!" +msgstr "Введите DHCP!" -msgid "Indiana-Starke" -msgstr "" +msgid "OK" +msgstr "OK" -msgid "Central" -msgstr "" +msgid "Settings the date and time" +msgstr "Настройки даты и времени" -msgid "East-Indiana" -msgstr "" +msgid "Local Configuration" +msgstr "Локальная настройка" -msgid "Michigan" -msgstr "" +msgid "Global customization" +msgstr "Глобальная настройка" -msgid "Eastern" -msgstr "" +msgid "Change the NTPSERVERS parameter" +msgstr "Изменить параметр NTPSERVERS" -msgid "Atlantic" -msgstr "" +msgid "ubl-settings-datetime" +msgstr "Настройки даты и времени" -msgid "Bermuda" -msgstr "" +msgid "Time" +msgstr "Время" -msgid "Stanley" -msgstr "" +msgid "Clock" +msgstr "Часы" -msgid "South_Georgia" -msgstr "" +msgid ":" +msgstr ":" -msgid "Cape_Verde" -msgstr "" +msgid "Minutes" +msgstr "Минуты" -msgid "Azores" -msgstr "" +msgid "Date" +msgstr "Дата" -msgid "Faeroe" -msgstr "" +msgid "Date of\nFormat: DD.MM.YYYY" +msgstr "Дата\nФормат: ДД.ММ.ГГГГ" -msgid "Faroe" -msgstr "" +msgid "Interactive date picker" +msgstr "Интерактивный выбор даты" -msgid "St_Helena" -msgstr "" +msgid "Change zone setting" +msgstr "Изменить параметр зоны" -msgid "Reykjavik" -msgstr "" +msgid "Region" +msgstr "Регион" -msgid "Canary" -msgstr "" +msgid "Zone" +msgstr "Зона" -msgid "Madeira" -msgstr "" +msgid "Apply local date and time settings" +msgstr "Применить локальную настройку даты и времени" -msgid "Jan_Mayen" -msgstr "" +msgid "Automatic time synchronization" +msgstr "Автоматическая синхронизация времени" -msgid "Brazil" -msgstr "" +msgid "Synchronize via NTP" +msgstr "Синхронизировать через NTP" -msgid "Acre" -msgstr "" +msgid "Time zone" +msgstr "Часовой пояс" -msgid "East" -msgstr "" +msgid "Setting date and time in global configuration" +msgstr "Настройка даты и времени в глобальной конфигурации" -msgid "DeNoronha" -msgstr "" +msgid "Incorrect date format" +msgstr "Не верный формат даты" +msgid "Synchronize hardware time" +msgstr "Синхронизировать аппаратное время" +msgid "Warning!" +msgstr "Внимание!"