From dc93c33ec0f9eb8557945ae02844e60cc7911d33 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 14 Apr 2025 18:06:21 +0600 Subject: [PATCH 1/7] Added new icons --- ...settingsui-gtk3.changes-allow-symbolic.svg | 122 +++++++++++++++++ ...ttingsui-gtk3.changes-prevent-symbolic.svg | 123 ++++++++++++++++++ ...bublsettingsui-gtk3.move-away-symbolic.svg | 81 ++++++++++++ ...libublsettingsui-gtk3.move-in-symbolic.svg | 80 ++++++++++++ 4 files changed, 406 insertions(+) create mode 100644 icons/actions/com.ublinux.libublsettingsui-gtk3.changes-allow-symbolic.svg create mode 100644 icons/actions/com.ublinux.libublsettingsui-gtk3.changes-prevent-symbolic.svg create mode 100644 icons/actions/com.ublinux.libublsettingsui-gtk3.move-away-symbolic.svg create mode 100644 icons/actions/com.ublinux.libublsettingsui-gtk3.move-in-symbolic.svg diff --git a/icons/actions/com.ublinux.libublsettingsui-gtk3.changes-allow-symbolic.svg b/icons/actions/com.ublinux.libublsettingsui-gtk3.changes-allow-symbolic.svg new file mode 100644 index 0000000..fbaec81 --- /dev/null +++ b/icons/actions/com.ublinux.libublsettingsui-gtk3.changes-allow-symbolic.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/icons/actions/com.ublinux.libublsettingsui-gtk3.changes-prevent-symbolic.svg b/icons/actions/com.ublinux.libublsettingsui-gtk3.changes-prevent-symbolic.svg new file mode 100644 index 0000000..a65a872 --- /dev/null +++ b/icons/actions/com.ublinux.libublsettingsui-gtk3.changes-prevent-symbolic.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/icons/actions/com.ublinux.libublsettingsui-gtk3.move-away-symbolic.svg b/icons/actions/com.ublinux.libublsettingsui-gtk3.move-away-symbolic.svg new file mode 100644 index 0000000..2ccaffe --- /dev/null +++ b/icons/actions/com.ublinux.libublsettingsui-gtk3.move-away-symbolic.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + diff --git a/icons/actions/com.ublinux.libublsettingsui-gtk3.move-in-symbolic.svg b/icons/actions/com.ublinux.libublsettingsui-gtk3.move-in-symbolic.svg new file mode 100644 index 0000000..d668810 --- /dev/null +++ b/icons/actions/com.ublinux.libublsettingsui-gtk3.move-in-symbolic.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + -- 2.35.1 From 5c2408db5a4a9a93b5d12ef48298636857a66af6 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 15 Apr 2025 16:15:26 +0600 Subject: [PATCH 2/7] Added service window --- gresource.xml | 1 + .../com.ublinux.libublsettingsui-gtk3.svg | 4957 +++++++++++++++++ ....libublsettingsui-gtk3.active-symbolic.svg | 38 + ...ibublsettingsui-gtk3.inactive-symbolic.svg | 38 + libublsettingsui-gtk3-service-control.glade | 416 ++ libublsettingsui-gtk3.pot | 206 +- libublsettingsui-gtk3_ru.po | 205 +- source/CMakeLists.txt | 2 + source/libublsettingsui-gtk3-service.c | 182 + source/libublsettingsui-gtk3.h | 57 + 10 files changed, 5958 insertions(+), 144 deletions(-) create mode 100644 icons/apps/com.ublinux.libublsettingsui-gtk3.svg create mode 100644 icons/status/com.ublinux.libublsettingsui-gtk3.active-symbolic.svg create mode 100644 icons/status/com.ublinux.libublsettingsui-gtk3.inactive-symbolic.svg create mode 100644 libublsettingsui-gtk3-service-control.glade create mode 100644 source/libublsettingsui-gtk3-service.c diff --git a/gresource.xml b/gresource.xml index 9af9d5d..c8eccd6 100644 --- a/gresource.xml +++ b/gresource.xml @@ -8,6 +8,7 @@ libublsettingsui-gtk3-debugger.glade libublsettingsui-gtk3-filechooser.glade libublsettingsui-gtk3-config-window.glade + libublsettingsui-gtk3-service-control.glade libublsettingsui-gtk3.css diff --git a/icons/apps/com.ublinux.libublsettingsui-gtk3.svg b/icons/apps/com.ublinux.libublsettingsui-gtk3.svg new file mode 100644 index 0000000..f636c26 --- /dev/null +++ b/icons/apps/com.ublinux.libublsettingsui-gtk3.svg @@ -0,0 +1,4957 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/status/com.ublinux.libublsettingsui-gtk3.active-symbolic.svg b/icons/status/com.ublinux.libublsettingsui-gtk3.active-symbolic.svg new file mode 100644 index 0000000..43524f8 --- /dev/null +++ b/icons/status/com.ublinux.libublsettingsui-gtk3.active-symbolic.svg @@ -0,0 +1,38 @@ + + + + + + + diff --git a/icons/status/com.ublinux.libublsettingsui-gtk3.inactive-symbolic.svg b/icons/status/com.ublinux.libublsettingsui-gtk3.inactive-symbolic.svg new file mode 100644 index 0000000..6d2d0cc --- /dev/null +++ b/icons/status/com.ublinux.libublsettingsui-gtk3.inactive-symbolic.svg @@ -0,0 +1,38 @@ + + + + + + + diff --git a/libublsettingsui-gtk3-service-control.glade b/libublsettingsui-gtk3-service-control.glade new file mode 100644 index 0000000..fc2eb74 --- /dev/null +++ b/libublsettingsui-gtk3-service-control.glade @@ -0,0 +1,416 @@ + + + + + + + True + False + com.ublinux.libublsettingsui-gtk3.play-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.stop-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.reset-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.important-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.flag-empy-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.flag-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.sync-symbolic + + + 450 + 225 + False + True + com.ublinux.ubl-settings-video + + + True + False + vertical + + + True + False + vertical + + + + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + 25 + + + True + False + 20 + 20 + 20 + 20 + 20 + 20 + 75 + dialog-information-symbolic + + + False + True + 0 + + + + + True + False + center + vertical + 5 + + + True + False + 5 + + + True + False + ".service" service: + 0 + + + False + True + 0 + + + + + True + True + True + image7 + + + + False + True + end + 1 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + com.ublinux.ubl-settings-audit.inactive-symbolic + + + False + True + 0 + + + + + True + False + Active: + + + False + True + 1 + + + + + True + False + Inactive + + + False + True + 2 + + + + + True + True + True + image4 + + + + False + True + end + 3 + + + + + False + True + 1 + + + + + True + False + 5 + + + True + False + com.ublinux.ubl-settings-audit.active-symbolic + + + False + True + 0 + + + + + True + False + Enabled: + + + False + True + 1 + + + + + True + False + Disabled + + + False + True + 2 + + + + + False + True + 2 + + + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + 5 + + + Disable + True + True + True + image5 + + + False + True + end + 0 + + + + + Enable + True + True + True + image6 + + + False + True + end + 1 + + + + + True + False + + + False + True + end + 2 + + + + + Restart + True + True + True + image3 + + + + False + True + end + 3 + + + + + Stop + True + True + True + image2 + + + False + True + end + 5 + + + + + Start + True + True + True + image1 + + + False + True + end + 6 + + + + + False + True + end + 1 + + + + + True + True + 1 + + + + + + + True + False + True + + + True + False + ".service" service configuration + + + + + + + + True + False + 32 + com.ublinux.libublsettingsui-gtk3 + + + + + + diff --git a/libublsettingsui-gtk3.pot b/libublsettingsui-gtk3.pot index 59bda21..f9bfecc 100644 --- a/libublsettingsui-gtk3.pot +++ b/libublsettingsui-gtk3.pot @@ -17,296 +17,358 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: source/libublsettingsui-gtk3.h:301 +#: source/libublsettingsui-gtk3.h:340 msgid "Version:" msgstr "" -#: source/libublsettingsui-gtk3.h:302 +#: source/libublsettingsui-gtk3.h:341 msgid " version:" msgstr "" -#: source/libublsettingsui-gtk3.h:303 +#: source/libublsettingsui-gtk3.h:342 msgid "Usage:" msgstr "" -#: source/libublsettingsui-gtk3.h:303 +#: source/libublsettingsui-gtk3.h:342 msgid "[OPTIONS]" msgstr "" -#: source/libublsettingsui-gtk3.h:304 +#: source/libublsettingsui-gtk3.h:343 msgid "Options:" msgstr "" -#: source/libublsettingsui-gtk3.h:305 +#: source/libublsettingsui-gtk3.h:344 msgid "Show this help" msgstr "" -#: source/libublsettingsui-gtk3.h:306 +#: source/libublsettingsui-gtk3.h:345 msgid "Show package version" msgstr "" -#: source/libublsettingsui-gtk3.h:307 +#: source/libublsettingsui-gtk3.h:346 msgid "Lock this help menu" msgstr "" -#: source/libublsettingsui-gtk3.h:308 +#: source/libublsettingsui-gtk3.h:347 msgid "Lock configuration saving" msgstr "" -#: source/libublsettingsui-gtk3.h:309 +#: source/libublsettingsui-gtk3.h:348 msgid "Lock local configration saving" msgstr "" -#: source/libublsettingsui-gtk3.h:310 +#: source/libublsettingsui-gtk3.h:349 msgid "Lock global configration saving" msgstr "" -#: source/libublsettingsui-gtk3.h:311 +#: source/libublsettingsui-gtk3.h:350 msgid "Lock global configration loading" msgstr "" -#: source/libublsettingsui-gtk3.h:312 +#: source/libublsettingsui-gtk3.h:351 msgid "Reset application settings" msgstr "" -#: source/libublsettingsui-gtk3.h:318 source/libublsettingsui-gtk3.h:326 +#: source/libublsettingsui-gtk3.h:357 source/libublsettingsui-gtk3.h:365 msgid "About" msgstr "" -#: source/libublsettingsui-gtk3.h:320 +#: source/libublsettingsui-gtk3.h:359 msgid "Operation succeeded" msgstr "" -#: source/libublsettingsui-gtk3.h:321 +#: source/libublsettingsui-gtk3.h:360 msgid "Operation failed" msgstr "" -#: source/libublsettingsui-gtk3.h:322 +#: source/libublsettingsui-gtk3.h:361 msgid "" "Warning! Application was launched without root - root-dependent actions are " "locked" msgstr "" -#: source/libublsettingsui-gtk3.h:324 source/libublsettingsui-gtk3.h:325 +#: source/libublsettingsui-gtk3.h:363 source/libublsettingsui-gtk3.h:364 msgid "Default" msgstr "" -#: source/libublsettingsui-gtk3.h:327 +#: source/libublsettingsui-gtk3.h:366 msgid "Documentation" msgstr "" -#: source/libublsettingsui-gtk3.h:329 +#: source/libublsettingsui-gtk3.h:368 msgid "Save to specific file" msgstr "" -#: source/libublsettingsui-gtk3.h:330 +#: source/libublsettingsui-gtk3.h:369 msgid "Save to local configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:331 +#: source/libublsettingsui-gtk3.h:370 msgid "Save to global configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:332 +#: source/libublsettingsui-gtk3.h:371 msgid "Save configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:333 +#: source/libublsettingsui-gtk3.h:372 msgid "Save" msgstr "" -#: source/libublsettingsui-gtk3.h:334 +#: source/libublsettingsui-gtk3.h:373 msgid "Saving..." msgstr "" -#: source/libublsettingsui-gtk3.h:336 +#: source/libublsettingsui-gtk3.h:375 msgid "Load from specific file" msgstr "" -#: source/libublsettingsui-gtk3.h:337 +#: source/libublsettingsui-gtk3.h:376 msgid "Load local configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:338 +#: source/libublsettingsui-gtk3.h:377 msgid "Load global configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:339 +#: source/libublsettingsui-gtk3.h:378 msgid "Load" msgstr "" -#: source/libublsettingsui-gtk3.h:340 +#: source/libublsettingsui-gtk3.h:379 msgid "Load file" msgstr "" -#: source/libublsettingsui-gtk3.h:342 +#: source/libublsettingsui-gtk3.h:381 msgid "Cancel" msgstr "" -#: source/libublsettingsui-gtk3.h:343 +#: source/libublsettingsui-gtk3.h:382 msgid "Accept" msgstr "" -#: source/libublsettingsui-gtk3.h:344 +#: source/libublsettingsui-gtk3.h:383 msgid "Open" msgstr "" -#: source/libublsettingsui-gtk3.h:345 +#: source/libublsettingsui-gtk3.h:384 msgid "Create directory" msgstr "" -#: source/libublsettingsui-gtk3.h:346 +#: source/libublsettingsui-gtk3.h:385 msgid "Select directory" msgstr "" -#: source/libublsettingsui-gtk3.h:348 +#: source/libublsettingsui-gtk3.h:387 msgid "Would you like to read documentation in the Web?" msgstr "" -#: source/libublsettingsui-gtk3.h:349 +#: source/libublsettingsui-gtk3.h:388 msgid "" "You will be redirected to documentation website where documentation is\n" "translated and supported by community." msgstr "" -#: source/libublsettingsui-gtk3.h:350 +#: source/libublsettingsui-gtk3.h:389 msgid "Always redirect to online documentation" msgstr "" -#: source/libublsettingsui-gtk3.h:351 +#: source/libublsettingsui-gtk3.h:390 msgid "Open documentation" msgstr "" -#: source/libublsettingsui-gtk3.h:352 +#: source/libublsettingsui-gtk3.h:391 msgid "Project Home Page" msgstr "" -#: source/libublsettingsui-gtk3.h:353 +#: source/libublsettingsui-gtk3.h:392 msgid "Nothing were chosen" msgstr "" -#: source/libublsettingsui-gtk3.h:354 +#: source/libublsettingsui-gtk3.h:393 msgid "Copyright © 2022 - 2023, UBSoft LLC" msgstr "" -#: source/libublsettingsui-gtk3.h:357 +#: source/libublsettingsui-gtk3.h:396 msgid "Global configuration loading succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:358 +#: source/libublsettingsui-gtk3.h:397 msgid "Local configuration loading succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:359 +#: source/libublsettingsui-gtk3.h:398 msgid "Config loading failed" msgstr "" -#: source/libublsettingsui-gtk3.h:361 +#: source/libublsettingsui-gtk3.h:400 msgid "Local and global configuration saving succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:362 +#: source/libublsettingsui-gtk3.h:401 msgid "Global configuration saving succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:363 +#: source/libublsettingsui-gtk3.h:402 msgid "Local configuration saving succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:364 +#: source/libublsettingsui-gtk3.h:403 msgid "Configuration saving succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:366 +#: source/libublsettingsui-gtk3.h:405 msgid "Parameter" msgstr "" -#: source/libublsettingsui-gtk3.h:367 +#: source/libublsettingsui-gtk3.h:406 msgid "Old value" msgstr "" -#: source/libublsettingsui-gtk3.h:368 +#: source/libublsettingsui-gtk3.h:407 msgid "New value" msgstr "" -#: source/libublsettingsui-gtk3.h:369 +#: source/libublsettingsui-gtk3.h:408 msgid "" "Value\n" "(Old/New)" msgstr "" -#: source/libublsettingsui-gtk3.h:371 +#: source/libublsettingsui-gtk3.h:410 msgid "Nothing to save" msgstr "" -#: source/libublsettingsui-gtk3.h:372 +#: source/libublsettingsui-gtk3.h:411 msgid "Saving into local configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:373 +#: source/libublsettingsui-gtk3.h:412 msgid "Saving into global configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:374 +#: source/libublsettingsui-gtk3.h:413 msgid "Saving into global and local configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:375 +#: source/libublsettingsui-gtk3.h:414 msgid "Saving into custom configuration at" msgstr "" -#: source/libublsettingsui-gtk3.h:380 +#: source/libublsettingsui-gtk3.h:419 msgid "Full saving mode" msgstr "" -#: source/libublsettingsui-gtk3.h:381 +#: source/libublsettingsui-gtk3.h:420 msgid "Saving into module" msgstr "" -#: source/libublsettingsui-gtk3.h:382 +#: source/libublsettingsui-gtk3.h:421 msgid "Sandbox mode" msgstr "" -#: source/libublsettingsui-gtk3.h:383 +#: source/libublsettingsui-gtk3.h:422 msgid "Sandbox with profile saving" msgstr "" -#: source/libublsettingsui-gtk3.h:384 +#: source/libublsettingsui-gtk3.h:423 msgid "HDD sandbox" msgstr "" -#: source/libublsettingsui-gtk3.h:385 +#: source/libublsettingsui-gtk3.h:424 msgid "HDD sandbox with profile saving" msgstr "" -#: source/libublsettingsui-gtk3.h:386 +#: source/libublsettingsui-gtk3.h:425 msgid "New configuration file creation failed" msgstr "" -#: source/libublsettingsui-gtk3.h:387 +#: source/libublsettingsui-gtk3.h:426 msgid "Upgrade to root" msgstr "" -#: source/libublsettingsui-gtk3.h:388 +#: source/libublsettingsui-gtk3.h:427 msgid "Settings" msgstr "" -#: source/libublsettingsui-gtk3.h:390 +#: source/libublsettingsui-gtk3.h:429 msgid "Application settigs" msgstr "" -#: source/libublsettingsui-gtk3.h:392 +#: source/libublsettingsui-gtk3.h:431 msgid "Invalid email adress" msgstr "" -#: source/libublsettingsui-gtk3.h:393 +#: source/libublsettingsui-gtk3.h:432 msgid "Invalid path" msgstr "" -#: source/libublsettingsui-gtk3.h:395 +#: source/libublsettingsui-gtk3.h:434 msgid "Choose path" msgstr "" -#: source/libublsettingsui-gtk3.h:398 +#: source/libublsettingsui-gtk3.h:437 msgid "Choose directory instead of file" msgstr "" + +#: source/libublsettingsui-gtk3.h:439 +msgid "Enabled" +msgstr "" + +#: source/libublsettingsui-gtk3.h:440 +msgid "Disabled" +msgstr "" + +#: source/libublsettingsui-gtk3.h:441 +msgid "Active" +msgstr "" + +#: source/libublsettingsui-gtk3.h:442 +msgid "Inactive" +msgstr "" + +#: source/libublsettingsui-gtk3.h:444 +msgid "Active:" +msgstr "" + +#: source/libublsettingsui-gtk3.h:445 +msgid "Enabled:" +msgstr "" + +#: source/libublsettingsui-gtk3.h:446 +msgid "Start" +msgstr "" + +#: source/libublsettingsui-gtk3.h:447 +msgid "Stop" +msgstr "" + +#: source/libublsettingsui-gtk3.h:448 +msgid "Restart" +msgstr "" + +#: source/libublsettingsui-gtk3.h:449 +msgid "Enable" +msgstr "" + +#: source/libublsettingsui-gtk3.h:450 +msgid "Disable" +msgstr "" + +#: source/libublsettingsui-gtk3.h:452 +#, c-format +msgid "\"%s\" service configuration" +msgstr "" + +#: source/libublsettingsui-gtk3.h:453 +#, c-format +msgid "\"%s\" service:" +msgstr "" + +#: source/libublsettingsui-gtk3.h:454 +msgid "service is active" +msgstr "" + +#: source/libublsettingsui-gtk3.h:455 +msgid "service is inactive" +msgstr "" diff --git a/libublsettingsui-gtk3_ru.po b/libublsettingsui-gtk3_ru.po index b290f3b..28eb3fd 100644 --- a/libublsettingsui-gtk3_ru.po +++ b/libublsettingsui-gtk3_ru.po @@ -17,71 +17,71 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: source/libublsettingsui-gtk3.h:301 +#: source/libublsettingsui-gtk3.h:340 msgid "Version:" msgstr "Версия:" -#: source/libublsettingsui-gtk3.h:302 +#: source/libublsettingsui-gtk3.h:341 msgid " version:" msgstr " версия:" -#: source/libublsettingsui-gtk3.h:303 +#: source/libublsettingsui-gtk3.h:342 msgid "Usage:" msgstr "Использование:" -#: source/libublsettingsui-gtk3.h:303 +#: source/libublsettingsui-gtk3.h:342 msgid "[OPTIONS]" msgstr "[АРГУМЕНТЫ]" -#: source/libublsettingsui-gtk3.h:304 +#: source/libublsettingsui-gtk3.h:343 msgid "Options:" msgstr "Аргументы:" -#: source/libublsettingsui-gtk3.h:305 +#: source/libublsettingsui-gtk3.h:344 msgid "Show this help" msgstr "Показать эту подсказку" -#: source/libublsettingsui-gtk3.h:306 +#: source/libublsettingsui-gtk3.h:345 msgid "Show package version" msgstr "Показать версию пакета" -#: source/libublsettingsui-gtk3.h:307 +#: source/libublsettingsui-gtk3.h:346 msgid "Lock this help menu" msgstr "Заблокировать это меню помощи" -#: source/libublsettingsui-gtk3.h:308 +#: source/libublsettingsui-gtk3.h:347 msgid "Lock configuration saving" msgstr "Успешно записана локальная конфигурация" -#: source/libublsettingsui-gtk3.h:309 +#: source/libublsettingsui-gtk3.h:348 msgid "Lock local configration saving" msgstr "Заблокировать сохранение локальной конфигурации" -#: source/libublsettingsui-gtk3.h:310 +#: source/libublsettingsui-gtk3.h:349 msgid "Lock global configration saving" msgstr "Заблокировать сохранение глобальной конфигурации" -#: source/libublsettingsui-gtk3.h:311 +#: source/libublsettingsui-gtk3.h:350 msgid "Lock global configration loading" msgstr "Заблокировать загрузку глобальную конфигурацию" -#: source/libublsettingsui-gtk3.h:312 +#: source/libublsettingsui-gtk3.h:351 msgid "Reset application settings" msgstr "Сбросить настройки программы" -#: source/libublsettingsui-gtk3.h:318 source/libublsettingsui-gtk3.h:326 +#: source/libublsettingsui-gtk3.h:357 source/libublsettingsui-gtk3.h:365 msgid "About" msgstr "О программе" -#: source/libublsettingsui-gtk3.h:320 +#: source/libublsettingsui-gtk3.h:359 msgid "Operation succeeded" msgstr "Операция завершена" -#: source/libublsettingsui-gtk3.h:321 +#: source/libublsettingsui-gtk3.h:360 msgid "Operation failed" msgstr "Операция завершена с ошибкой" -#: source/libublsettingsui-gtk3.h:322 +#: source/libublsettingsui-gtk3.h:361 msgid "" "Warning! Application was launched without root - root-dependent actions are " "locked" @@ -89,83 +89,83 @@ msgstr "" "Внимание! Приложение было запущено без прав суперпользователя - действия, " "требующие их наличия заблокированы" -#: source/libublsettingsui-gtk3.h:324 source/libublsettingsui-gtk3.h:325 +#: source/libublsettingsui-gtk3.h:363 source/libublsettingsui-gtk3.h:364 msgid "Default" msgstr "По умолчанию" -#: source/libublsettingsui-gtk3.h:327 +#: source/libublsettingsui-gtk3.h:366 msgid "Documentation" msgstr "Справка" -#: source/libublsettingsui-gtk3.h:329 +#: source/libublsettingsui-gtk3.h:368 msgid "Save to specific file" msgstr "Сохранить в файл" -#: source/libublsettingsui-gtk3.h:330 +#: source/libublsettingsui-gtk3.h:369 msgid "Save to local configuration" msgstr "Сохранить в локальную конфигурацию" -#: source/libublsettingsui-gtk3.h:331 +#: source/libublsettingsui-gtk3.h:370 msgid "Save to global configuration" msgstr "Сохранить в глобальную конфигурацию" -#: source/libublsettingsui-gtk3.h:332 +#: source/libublsettingsui-gtk3.h:371 msgid "Save configuration" msgstr "Сохранить конфигурацию" -#: source/libublsettingsui-gtk3.h:333 +#: source/libublsettingsui-gtk3.h:372 msgid "Save" msgstr "Сохранить" -#: source/libublsettingsui-gtk3.h:334 +#: source/libublsettingsui-gtk3.h:373 msgid "Saving..." msgstr "Сохранение..." -#: source/libublsettingsui-gtk3.h:336 +#: source/libublsettingsui-gtk3.h:375 msgid "Load from specific file" msgstr "Загрузить из файла" -#: source/libublsettingsui-gtk3.h:337 +#: source/libublsettingsui-gtk3.h:376 msgid "Load local configuration" msgstr "Загрузить локальную конфигурацию" -#: source/libublsettingsui-gtk3.h:338 +#: source/libublsettingsui-gtk3.h:377 msgid "Load global configuration" msgstr "Загрузить глобальную конфигурацию" -#: source/libublsettingsui-gtk3.h:339 +#: source/libublsettingsui-gtk3.h:378 msgid "Load" msgstr "Загрузить" -#: source/libublsettingsui-gtk3.h:340 +#: source/libublsettingsui-gtk3.h:379 msgid "Load file" msgstr "Загрузить файл" -#: source/libublsettingsui-gtk3.h:342 +#: source/libublsettingsui-gtk3.h:381 msgid "Cancel" msgstr "Отмена" -#: source/libublsettingsui-gtk3.h:343 +#: source/libublsettingsui-gtk3.h:382 msgid "Accept" msgstr "Принять" -#: source/libublsettingsui-gtk3.h:344 +#: source/libublsettingsui-gtk3.h:383 msgid "Open" msgstr "Открыть" -#: source/libublsettingsui-gtk3.h:345 +#: source/libublsettingsui-gtk3.h:384 msgid "Create directory" msgstr "Создать файл" -#: source/libublsettingsui-gtk3.h:346 +#: source/libublsettingsui-gtk3.h:385 msgid "Select directory" msgstr "Выбрать папку" -#: source/libublsettingsui-gtk3.h:348 +#: source/libublsettingsui-gtk3.h:387 msgid "Would you like to read documentation in the Web?" msgstr "Вы хотите прочитать справку в Сети?" -#: source/libublsettingsui-gtk3.h:349 +#: source/libublsettingsui-gtk3.h:388 msgid "" "You will be redirected to documentation website where documentation is\n" "translated and supported by community." @@ -173,67 +173,67 @@ msgstr "" "Вы будете перенаправлены на сайт с документацией, где страницы помощи\n" "переводятся и поддерживаются сообществом." -#: source/libublsettingsui-gtk3.h:350 +#: source/libublsettingsui-gtk3.h:389 msgid "Always redirect to online documentation" msgstr "Всегда перенаправлять" -#: source/libublsettingsui-gtk3.h:351 +#: source/libublsettingsui-gtk3.h:390 msgid "Open documentation" msgstr "Прочитать справку" -#: source/libublsettingsui-gtk3.h:352 +#: source/libublsettingsui-gtk3.h:391 msgid "Project Home Page" msgstr "Домашняя страница проекта" -#: source/libublsettingsui-gtk3.h:353 +#: source/libublsettingsui-gtk3.h:392 msgid "Nothing were chosen" msgstr "Ничего не было выбрано" -#: source/libublsettingsui-gtk3.h:354 +#: source/libublsettingsui-gtk3.h:393 msgid "Copyright © 2022 - 2023, UBSoft LLC" msgstr "Copyright © 2022 - 2023, ООО «Юбисофт»" -#: source/libublsettingsui-gtk3.h:357 +#: source/libublsettingsui-gtk3.h:396 msgid "Global configuration loading succeeded." msgstr "Успешно загружена глобальная конфигурация" -#: source/libublsettingsui-gtk3.h:358 +#: source/libublsettingsui-gtk3.h:397 msgid "Local configuration loading succeeded." msgstr "Успешно загружена локальная конфигурация" -#: source/libublsettingsui-gtk3.h:359 +#: source/libublsettingsui-gtk3.h:398 msgid "Config loading failed" msgstr "Ошибка загрузки конфига" -#: source/libublsettingsui-gtk3.h:361 +#: source/libublsettingsui-gtk3.h:400 msgid "Local and global configuration saving succeeded." msgstr "Успешно записаны локальная и глобальная конфигурация" -#: source/libublsettingsui-gtk3.h:362 +#: source/libublsettingsui-gtk3.h:401 msgid "Global configuration saving succeeded." msgstr "Успешно записана глобальная конфигурация" -#: source/libublsettingsui-gtk3.h:363 +#: source/libublsettingsui-gtk3.h:402 msgid "Local configuration saving succeeded." msgstr "Успешно записана локальная конфигурация" -#: source/libublsettingsui-gtk3.h:364 +#: source/libublsettingsui-gtk3.h:403 msgid "Configuration saving succeeded." msgstr "Успешно записана конфигурация" -#: source/libublsettingsui-gtk3.h:366 +#: source/libublsettingsui-gtk3.h:405 msgid "Parameter" msgstr "Параметр" -#: source/libublsettingsui-gtk3.h:367 +#: source/libublsettingsui-gtk3.h:406 msgid "Old value" msgstr "Старое значение" -#: source/libublsettingsui-gtk3.h:368 +#: source/libublsettingsui-gtk3.h:407 msgid "New value" msgstr "Новое значение" -#: source/libublsettingsui-gtk3.h:369 +#: source/libublsettingsui-gtk3.h:408 msgid "" "Value\n" "(Old/New)" @@ -241,78 +241,139 @@ msgstr "" "Значение\n" "(Старое/Новое)" -#: source/libublsettingsui-gtk3.h:371 +#: source/libublsettingsui-gtk3.h:410 msgid "Nothing to save" msgstr "Нечего сохранять" -#: source/libublsettingsui-gtk3.h:372 +#: source/libublsettingsui-gtk3.h:411 msgid "Saving into local configuration" msgstr "Сохранение в локальный конфигурационный файл" -#: source/libublsettingsui-gtk3.h:373 +#: source/libublsettingsui-gtk3.h:412 msgid "Saving into global configuration" msgstr "Сохранение в глобальный конфигурационный файл" -#: source/libublsettingsui-gtk3.h:374 +#: source/libublsettingsui-gtk3.h:413 msgid "Saving into global and local configuration" msgstr "Сохранение в глобальный и локальный конфигурационный файл" -#: source/libublsettingsui-gtk3.h:375 +#: source/libublsettingsui-gtk3.h:414 msgid "Saving into custom configuration at" msgstr "Сохранение в конфигурационный файл по пути" -#: source/libublsettingsui-gtk3.h:380 +#: source/libublsettingsui-gtk3.h:419 msgid "Full saving mode" msgstr "Полное сохранение" -#: source/libublsettingsui-gtk3.h:381 +#: source/libublsettingsui-gtk3.h:420 msgid "Saving into module" msgstr "Сохранение в модуль" -#: source/libublsettingsui-gtk3.h:382 +#: source/libublsettingsui-gtk3.h:421 msgid "Sandbox mode" msgstr "Полная песочница в ОЗУ" -#: source/libublsettingsui-gtk3.h:383 +#: source/libublsettingsui-gtk3.h:422 msgid "Sandbox with profile saving" msgstr "Песочница с сохранением профиля пользователя" -#: source/libublsettingsui-gtk3.h:384 +#: source/libublsettingsui-gtk3.h:423 msgid "HDD sandbox" msgstr "Полная песочница на HDD" -#: source/libublsettingsui-gtk3.h:385 +#: source/libublsettingsui-gtk3.h:424 msgid "HDD sandbox with profile saving" msgstr "Полная песочница на HDD с сохранением профиля пользователя" -#: source/libublsettingsui-gtk3.h:386 +#: source/libublsettingsui-gtk3.h:425 msgid "New configuration file creation failed" msgstr "Ошибка создания нового файла конфигурации" -#: source/libublsettingsui-gtk3.h:387 +#: source/libublsettingsui-gtk3.h:426 msgid "Upgrade to root" msgstr "Повысить права до root" -#: source/libublsettingsui-gtk3.h:388 +#: source/libublsettingsui-gtk3.h:427 msgid "Settings" msgstr "" -#: source/libublsettingsui-gtk3.h:390 +#: source/libublsettingsui-gtk3.h:429 msgid "Application settigs" msgstr "Настройки" -#: source/libublsettingsui-gtk3.h:392 +#: source/libublsettingsui-gtk3.h:431 msgid "Invalid email adress" msgstr "Неверный email-адрес" -#: source/libublsettingsui-gtk3.h:393 +#: source/libublsettingsui-gtk3.h:432 msgid "Invalid path" msgstr "Неправильный путь" -#: source/libublsettingsui-gtk3.h:395 +#: source/libublsettingsui-gtk3.h:434 msgid "Choose path" msgstr "Выбор пути" -#: source/libublsettingsui-gtk3.h:398 +#: source/libublsettingsui-gtk3.h:437 msgid "Choose directory instead of file" msgstr "Выбрать папку вместо вайла" + +#: source/libublsettingsui-gtk3.h:439 +msgid "Enabled" +msgstr "Включен" + +#: source/libublsettingsui-gtk3.h:440 +msgid "Disabled" +msgstr "Выключен" + +#: source/libublsettingsui-gtk3.h:441 +msgid "Active" +msgstr "Активен" + +#: source/libublsettingsui-gtk3.h:442 +msgid "Inactive" +msgstr "Неактивен" + +#: source/libublsettingsui-gtk3.h:444 +msgid "Active:" +msgstr "Активен:" + +#: source/libublsettingsui-gtk3.h:445 +msgid "Enabled:" +msgstr "Автозапуск:" + +#: source/libublsettingsui-gtk3.h:446 +msgid "Start" +msgstr "Запустить" + +#: source/libublsettingsui-gtk3.h:447 +msgid "Stop" +msgstr "Остановить" + +#: source/libublsettingsui-gtk3.h:448 +msgid "Restart" +msgstr "Перезапустить" + +#: source/libublsettingsui-gtk3.h:449 +msgid "Enable" +msgstr "Включить автозапуск" + +#: source/libublsettingsui-gtk3.h:450 +msgid "Disable" +msgstr "Выключить автозапуск" + +#: source/libublsettingsui-gtk3.h:452 +msgid "\"%s\" service configuration" +msgstr "Конфигурация сервиса \"%s\"" + +#: source/libublsettingsui-gtk3.h:453 +#, fuzzy, c-format +msgid "\"%s\" service:" +msgstr "Cлужба \"%s\":" + +#: source/libublsettingsui-gtk3.h:454 +msgid "service is active" +msgstr "служба активна" + +#: source/libublsettingsui-gtk3.h:455 +msgid "service is inactive" +msgstr "служба неактивна" diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 5bce0e2..90da64b 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -44,6 +44,7 @@ set(DEPENDFILES ../libublsettingsui-gtk3-filechooser.glade ../libublsettingsui-gtk3-debugger.glade ../libublsettingsui-gtk3-config-window.glade + ../libublsettingsui-gtk3-service-control.glade ../gresource.xml ../libublsettingsui-gtk3-banner.png ../libublsettingsui-gtk3.css @@ -81,6 +82,7 @@ add_library(${PROJECT_NAME} SHARED libublsettingsui-gtk3-save.c libublsettingsui-gtk3-config-window.c libublsettingsui-gtk3-filechooser.c + libublsettingsui-gtk3-service.c libublsettingsui-gtk3.h ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}) diff --git a/source/libublsettingsui-gtk3-service.c b/source/libublsettingsui-gtk3-service.c new file mode 100644 index 0000000..6c8669a --- /dev/null +++ b/source/libublsettingsui-gtk3-service.c @@ -0,0 +1,182 @@ +#include "libublsettingsui-gtk3.h" + +#define service_start_icon_name "com.ublinux.libublsettingsui-gtk3.play-symbolic" +#define service_stop_icon_name "com.ublinux.libublsettingsui-gtk3.stop-symbolic" + +#define service_start_status_icon_name "com.ublinux.libublsettingsui-gtk3.active-symbolic" +#define service_stop_status_icon_name "com.ublinux.libublsettingsui-gtk3.inactive-symbolic" + +void __on_closed(GtkWidget *, service_window *window){ + free(window->name); + free(window->start_command); + free(window->stop_command); + free(window->enable_command); + free(window->disable_command); + free(window->info_command); + free(window->check_active_command); + free(window->check_enable_command); + free(window); + gtk_main_quit(); +} + +void __on_service_update_clicked(GtkWidget *, service_window *window); + +void __on_service_start_clicked(GtkWidget *, service_window *window){ + if (system(window->start_command)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_SUCCESS_TYPE); + return; + }; + __on_service_update_clicked(NULL,window); + +} + +void __on_service_stop_clicked(GtkWidget *, service_window *window){ + if (system(window->stop_command)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_SUCCESS_TYPE); + return; + }; + __on_service_update_clicked(NULL,window); + +} + +void __on_service_enable_clicked(GtkWidget *, service_window *window){ + + + if (system(window->enable_command)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_SUCCESS_TYPE); + return; + }; + __on_service_update_clicked(NULL,window); + +} + +void __on_service_disable_clicked(GtkWidget *, service_window *window){ + + if (system(window->disable_command)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_SUCCESS_TYPE); + return; + }; + __on_service_update_clicked(NULL,window); +} + +void __on_service_restart_clicked(GtkWidget *, service_window *window){ + + + if (system(window->stop_command)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_SUCCESS_TYPE); + return; + }; + if (system(window->start_command)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_SUCCESS_TYPE); + return; + }; + __on_service_update_clicked(NULL,window); + +} + +void __on_service_status_clicked(GtkWidget *, service_window *window){ + char *success_string = _SERVICE_ACTIVE_STATUS_LABEL(window->name); + char *fail_string = _SERVICE_INACTIVE_STATUS_LABEL(window->name); + + yon_terminal_window_update_button_launch(GTK_WINDOW(window->MainWindow),window->info_command,success_string,fail_string); + +} + +void __on_service_update_clicked(GtkWidget *, service_window *window){ + if (!system(window->check_enable_command)){ + gtk_label_set_text(GTK_LABEL(window->EnableLabel),yon_char_get_localised_from_lib(_SERVICE_ENABLE_LABEL)); + gtk_image_set_from_icon_name(GTK_IMAGE(window->EnableImage),service_start_status_icon_name,GTK_ICON_SIZE_BUTTON); + } else { + gtk_label_set_text(GTK_LABEL(window->EnableLabel),yon_char_get_localised_from_lib(_SERVICE_DISABLE_LABEL)); + gtk_image_set_from_icon_name(GTK_IMAGE(window->EnableImage),service_stop_status_icon_name,GTK_ICON_SIZE_BUTTON); + + } + if (!system(window->check_active_command)){ + gtk_label_set_text(GTK_LABEL(window->ActiveLabel),yon_char_get_localised_from_lib(_SERVICE_ACTIVE_LABEL)); + gtk_image_set_from_icon_name(GTK_IMAGE(window->ActiveImage),service_start_status_icon_name,GTK_ICON_SIZE_BUTTON); + + } else { + gtk_label_set_text(GTK_LABEL(window->ActiveLabel),yon_char_get_localised_from_lib(_SERVICE_INACTIVE_LABEL)); + gtk_image_set_from_icon_name(GTK_IMAGE(window->ActiveImage),service_stop_status_icon_name,GTK_ICON_SIZE_BUTTON); + + } + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(SUCCESS_LABEL),5,BACKGROUND_IMAGE_SUCCESS_TYPE); +} + +service_window *yon_service_window_new(char *name, char *start_command, + char *stop_command, char *enable_command, + char *disable_command, char *info_command, + char *check_active_command, char *check_enable_command){ + service_window *window = new(service_window); + GtkBuilder *builder = gtk_builder_new_from_resource(ui_glade_path_service); + window->MainWindow = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->TitleLabel = yon_gtk_builder_get_widget(builder,"TitleLabel"); + + window->UpdateButton = yon_gtk_builder_get_widget(builder,"UpdateButton"); + window->StatusButton = yon_gtk_builder_get_widget(builder,"StatusButton"); + + window->ActiveLabel = yon_gtk_builder_get_widget(builder,"ActiveLabel"); + window->ActiveImage = yon_gtk_builder_get_widget(builder,"ActiveImage"); + window->EnableLabel = yon_gtk_builder_get_widget(builder,"EnableLabel"); + window->EnableImage = yon_gtk_builder_get_widget(builder,"EnableImage"); + + window->RestartButton = yon_gtk_builder_get_widget(builder,"RestartButton"); + window->StartButton = yon_gtk_builder_get_widget(builder,"StartButton"); + window->StopButton = yon_gtk_builder_get_widget(builder,"StopButton"); + window->EnableButton = yon_gtk_builder_get_widget(builder,"EnableButton"); + window->DisableButton = yon_gtk_builder_get_widget(builder,"DisableButton"); + + window->name = yon_char_new(name); + window->start_command = yon_char_new(start_command); + window->stop_command = yon_char_new(stop_command); + window->enable_command = yon_char_new(enable_command); + window->disable_command = yon_char_new(disable_command); + window->info_command = yon_char_new(info_command); + window->check_active_command = yon_char_new(check_active_command); + window->check_enable_command = yon_char_new(check_enable_command); + + char *head_label = (_SERVICE_HEAD_LABEL(window->name)); + char *title_label = (_SERVICE_TITLE_LABEL(window->name)); + gtk_label_set_text(GTK_LABEL(window->HeadLabel),head_label); + gtk_label_set_text(GTK_LABEL(window->TitleLabel),title_label); + + yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),NULL,_SERVICE_HEAD_LABEL(window->name),yon_dull_icon_path,NULL); + + g_signal_connect(G_OBJECT(window->MainWindow),"destroy",G_CALLBACK(__on_closed),window); + g_signal_connect(G_OBJECT(window->StartButton),"clicked",G_CALLBACK(__on_service_start_clicked),window); + g_signal_connect(G_OBJECT(window->StopButton),"clicked",G_CALLBACK(__on_service_stop_clicked),window); + g_signal_connect(G_OBJECT(window->RestartButton),"clicked",G_CALLBACK(__on_service_restart_clicked),window); + g_signal_connect(G_OBJECT(window->StatusButton),"clicked",G_CALLBACK(__on_service_status_clicked),window); + g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(__on_service_update_clicked),window); + g_signal_connect(G_OBJECT(window->EnableButton),"clicked",G_CALLBACK(__on_service_enable_clicked),window); + g_signal_connect(G_OBJECT(window->DisableButton),"clicked",G_CALLBACK(__on_service_disable_clicked),window); + + + if (!system(window->check_enable_command)){ + gtk_label_set_text(GTK_LABEL(window->EnableLabel),yon_char_get_localised_from_lib(_SERVICE_ENABLE_LABEL)); + gtk_image_set_from_icon_name(GTK_IMAGE(window->EnableImage),service_start_status_icon_name,GTK_ICON_SIZE_BUTTON); + } else { + gtk_label_set_text(GTK_LABEL(window->EnableLabel),yon_char_get_localised_from_lib(_SERVICE_DISABLE_LABEL)); + gtk_image_set_from_icon_name(GTK_IMAGE(window->EnableImage),service_stop_status_icon_name,GTK_ICON_SIZE_BUTTON); + + } + if (!system(window->check_active_command)){ + gtk_label_set_text(GTK_LABEL(window->ActiveLabel),yon_char_get_localised_from_lib(_SERVICE_ACTIVE_LABEL)); + gtk_image_set_from_icon_name(GTK_IMAGE(window->ActiveImage),service_start_status_icon_name,GTK_ICON_SIZE_BUTTON); + + } else { + gtk_label_set_text(GTK_LABEL(window->ActiveLabel),yon_char_get_localised_from_lib(_SERVICE_INACTIVE_LABEL)); + gtk_image_set_from_icon_name(GTK_IMAGE(window->ActiveImage),service_stop_status_icon_name,GTK_ICON_SIZE_BUTTON); + + } + return window; +} + +void yon_service_window_run(service_window *window){ + if (window){ + gtk_widget_show(window->MainWindow); + gtk_main(); + } +} \ No newline at end of file diff --git a/source/libublsettingsui-gtk3.h b/source/libublsettingsui-gtk3.h index 208bcc4..cb961e0 100644 --- a/source/libublsettingsui-gtk3.h +++ b/source/libublsettingsui-gtk3.h @@ -19,12 +19,14 @@ #define _(String) gettext(String) +#define yon_dull_icon_path "com.ublinux.libublsettingsui-gtk3" #define ui_glade_path "/com/ublinux/ui/libublsettingsui-gtk3.glade" #define ui_glade_path_documentation "/com/ublinux/ui/libublsettingsui-gtk3-documentation.glade" #define ui_glade_path_about "/com/ublinux/ui/libublsettingsui-gtk3-about.glade" #define ui_glade_path_saving "/com/ublinux/ui/libublsettingsui-gtk3-saving.glade" #define ui_glade_path_filechooser "/com/ublinux/ui/libublsettingsui-gtk3-filechooser.glade" #define ui_glade_path_debug "/com/ublinux/ui/libublsettingsui-gtk3-debugger.glade" +#define ui_glade_path_service "/com/ublinux/ui/libublsettingsui-gtk3-service-control.glade" #define ui_banner_path "/com/ublinux/images/libublsettingsui-gtk3-banner.png" #define ui_CssPath "/com/ublinux/css/libublsettingsui-gtk3.css" #define ui_config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",template_app_information.app_tech_name,"/",template_app_information.app_tech_name,".conf",NULL) @@ -127,6 +129,7 @@ extern _template_config *template_config; \ GtkWidget *InterfaceBox;\ //} + typedef struct { template_window_fields } template_main_window; @@ -298,6 +301,42 @@ typedef struct { char *yon_settings_configuration_get(char *id); char *yon_custom_config_init(); +typedef struct { + GtkWidget *MainWindow; + GtkWidget *StatusBox; + GtkWidget *HeadLabel; + GtkWidget *TitleLabel; + + GtkWidget *UpdateButton; + GtkWidget *StatusButton; + + GtkWidget *ActiveLabel; + GtkWidget *EnableLabel; + GtkWidget *ActiveImage; + GtkWidget *EnableImage; + + GtkWidget *RestartButton; + GtkWidget *StartButton; + GtkWidget *StopButton; + GtkWidget *EnableButton; + GtkWidget *DisableButton; + + char *name; + char *start_command; + char *stop_command; + char *enable_command; + char *disable_command; + char *info_command; + char *check_active_command; + char *check_enable_command; +} service_window; + +service_window *yon_service_window_new(char *name, char *start_command, + char *stop_command, char *enable_command, + char *disable_command, char *info_command, + char *check_active_command, char *check_enable_command); +void yon_service_window_run(service_window *window); + #define VERSION_LABEL yon_char_unite(_("Version:")," ",!yon_char_is_empty(template_app_information.app_version)?template_app_information.app_version:"","\n",NULL) #define HELP_LABEL(rest) yon_char_unite(template_app_information.app_tech_name,_(" version:")," ", !yon_char_is_empty(template_app_information.app_version)?template_app_information.app_version:"","\n",\ template_app_information.app_title,"\n",_("Usage:"), " ",template_app_information.app_tech_name," ",_("[OPTIONS]"),"\n",\ @@ -397,4 +436,22 @@ char *yon_custom_config_init(); #define FILE_CHOOSER_CHOOSE_FILDER_LABEL _("Choose directory instead of file") + #define _SERVICE_ENABLE_LABEL _("Enabled") + #define _SERVICE_DISABLE_LABEL _("Disabled") + #define _SERVICE_ACTIVE_LABEL _("Active") + #define _SERVICE_INACTIVE_LABEL _("Inactive") + + #define _SERVICE_ACTIVE_TEXT_LABEL _("Active:") + #define _SERVICE_ENABLED_TEXT_LABEL _("Enabled:") + #define _SERVICE_START_BUTTON_LABEL _("Start") + #define _SERVICE_STOP_BUTTON_LABEL _("Stop") + #define _SERVICE_RESTART_BUTTON_LABEL _("Restart") + #define _SERVICE_ENABLE_BUTTON_LABEL _("Enable") + #define _SERVICE_DISABLE_BUTTON_LABEL _("Disable") + + #define _SERVICE_HEAD_LABEL(target) g_strdup_printf(yon_char_get_localised_from_lib(_("\"%s\" service configuration")), target) + #define _SERVICE_TITLE_LABEL(target) g_strdup_printf(yon_char_get_localised_from_lib(_("\"%s\" service:")), target) + #define _SERVICE_ACTIVE_STATUS_LABEL(target) yon_char_unite("\"",target,"\" ", yon_char_get_localised_from_lib(_("service is active")),NULL) + #define _SERVICE_INACTIVE_STATUS_LABEL(target) yon_char_unite("\"",target,"\" ",yon_char_get_localised_from_lib(_("service is inactive")),NULL) + #endif \ No newline at end of file -- 2.35.1 From a52f8ecc16084612995450ff50244bd4105df2c6 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 15 Apr 2025 18:05:10 +0600 Subject: [PATCH 3/7] WIP app chooser window --- source/libublsettingsui-gtk3-app-chooser.c | 140 +++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 source/libublsettingsui-gtk3-app-chooser.c diff --git a/source/libublsettingsui-gtk3-app-chooser.c b/source/libublsettingsui-gtk3-app-chooser.c new file mode 100644 index 0000000..6d3a9e3 --- /dev/null +++ b/source/libublsettingsui-gtk3-app-chooser.c @@ -0,0 +1,140 @@ +#include "libublsettingsui-gtk3.h" + +typedef struct { + GtkWidget *MainWindow; + GtkWidget *StatusBox; + GtkWidget *HeadLabel; + GtkWidget *WindowImage; + + GtkWidget *CancelButton; + GtkWidget *AcceptButton; + + GtkWidget *MainTree; + GtkCellRenderer *SelectionCell; + GtkTreeStore *treestore; + + GtkWidget *MainIconView; + GtkListStore *liststore; + + int apps_size; + config_str apps; + + dictionary *apps_convert; + + int multiple; +} yon_app_chooser_window; + +struct application { + char *name; + char *path; + char *description; + char *tags; + char *execute; + char *icon; + config_str other; + int other_size; + +}; + +config_str yon_apps_get_from_file(char *file,int *final_size){ + (*final_size)=0; + config_str final = NULL; + int size; + config_str parsed = yon_dir_get_contents(file,&size); + for (int i=0;iapps = NULL; + window->apps_size=0; + int merged_size; + config_str merged = NULL; + + // int temp_size; + // config_str temp = yon_apps_get_from_file("/usr/shared/applications",&temp_size); + + // int local_size; + // config_str local = yon_apps_get_from_file("/usr/local/shared/applications",&temp_size); + + window->apps = yon_apps_get_from_file("/usr/shared/applications",&window->apps_size); + return window->apps_size; +} + +int yon_app_chooser_convert_apps(yon_app_chooser_window *window){ + GKeyFile *file = g_key_file_new(); + window->apps_convert = NULL; + for (int i=0;iapps_size;i++){ + if (g_key_file_load_from_file(file,window->apps[i],G_KEY_FILE_KEEP_TRANSLATIONS,NULL)){ + struct application *app = new(struct application); + app->name = g_key_file_get_string(file,"[Desktop Entry]","Name",NULL); + app->description = g_key_file_get_string(file,"[Desktop Entry]","Comment",NULL); + app->tags = g_key_file_get_string(file,"[Desktop Entry]","Categories",NULL); + app->execute = g_key_file_get_string(file,"[Desktop Entry]","Exec",NULL); + app->icon = g_key_file_get_string(file,"[Desktop Entry]","Icon",NULL); + app->path = yon_char_new(window->apps[i]); + yon_dictionary_add_or_create_if_exists_with_data(window->apps_convert,app->name,app); + } + } + if (window->apps_convert) return 1; else return 0; +} + +int yon_tree_store_setup_apps(yon_app_chooser_window *window){ + GtkTreeIter iter,itar; + GtkTreeModel *model = GTK_TREE_MODEL(window->treestore); + for_iter (model,&iter){ + char *tags; + gtk_tree_model_get(model,&iter,3,&tags,-1); + int required_size; + config_str required_tags = yon_char_parse(tags,&required_size,";"); + + dictionary *dict; + for_dictionaries(dict,window->apps_convert){ + int parsed_size; + struct application *cur_app = (struct application*)dict->data; + config_str parsed_tags = yon_char_parse(cur_app->tags,&parsed_size,";"); + if (yon_char_parsed_includes_char_parsed(required_tags,parsed_tags,required_size,parsed_size)){ + gtk_tree_store_append(window->treestore,&itar,&iter); + gtk_tree_store_set(window->treestore,&itar,0,0,1,cur_app->name,2,cur_app->description,3,cur_app->tags,4,0,5,cur_app->icon,6,cur_app->execute,-1); + } + } + } +} + +yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise){ + yon_app_chooser_window *window = new(yon_app_chooser_window); + GtkBuilder *builder = gtk_builder_new_from_resource(ui_glade_path_app_chooser); + window->MainWindow = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->WindowImage = yon_gtk_builder_get_widget(builder,"WindowImage"); + + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); + + window->MainTree = yon_gtk_builder_get_widget(builder,"MainTree"); + window->SelectionCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"MainWindow")); + window->treestore = GTK_TREE_STORE(gtk_builder_get_object(builder,"MainWindow")); + + window->MainIconView = yon_gtk_builder_get_widget(builder,"MainIconView"); + window->liststore = GTK_LIST_STORE(gtk_builder_get_object(builder,"MainWindow")); + + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_app_chooser_accept),window); + g_signal_connect(G_OBJECT(window->SelectionCell),"toggled",G_CALLBACK(on_app_selection_toggled),window); + + window->multiple = multiple_choise; + + if (!yon_apps_get(window)) return NULL; + if (!yon_app_chooser_convert_apps(window)) return NULL; + + + + +} \ No newline at end of file -- 2.35.1 From a444724495714b9e79f73d7a558e14506fb47359 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 16 Apr 2025 18:27:09 +0600 Subject: [PATCH 4/7] Library updates WIP --- gresource.xml | 1 + libublsettingsui-gtk3-app-chooser.glade | 223 ++++++++++++++++++ libublsettingsui-gtk3-saving.glade | 1 + source/CMakeLists.txt | 2 + source/libublsettingsui-gtk3-app-chooser.c | 159 +++++++++---- ...libublsettingsui-gtk3-standard-callbacks.c | 57 +++++ source/libublsettingsui-gtk3.h | 31 +++ 7 files changed, 422 insertions(+), 52 deletions(-) create mode 100644 libublsettingsui-gtk3-app-chooser.glade create mode 100644 source/libublsettingsui-gtk3-standard-callbacks.c diff --git a/gresource.xml b/gresource.xml index c8eccd6..6f92e06 100644 --- a/gresource.xml +++ b/gresource.xml @@ -9,6 +9,7 @@ libublsettingsui-gtk3-filechooser.glade libublsettingsui-gtk3-config-window.glade libublsettingsui-gtk3-service-control.glade + libublsettingsui-gtk3-app-chooser.glade libublsettingsui-gtk3.css diff --git a/libublsettingsui-gtk3-app-chooser.glade b/libublsettingsui-gtk3-app-chooser.glade new file mode 100644 index 0000000..db0a67c --- /dev/null +++ b/libublsettingsui-gtk3-app-chooser.glade @@ -0,0 +1,223 @@ + + + + + + True + False + com.ublinux.libublsettingsui-gtk3.accept-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic + + + + + + + + + + + + + + + + + + + + + + 225 + 450 + False + True + com.ublinux.ubl-settings-video + + + True + False + vertical + 5 + + + True + False + vertical + + + + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + vertical + 5 + + + checkbutton + True + False + True + + + False + True + 0 + + + + + True + False + + + True + True + in + + + True + True + treestore1 + False + 1 + 2 + True + + + + + + + + + 0 + + + + + 4 + + + 5 + + + + + + 1 + + + + + + + + + True + True + 0 + + + + + True + in + + + True + True + 6 + liststore1 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + + + True + False + True + + + True + False + Choose application + + + + + + + + True + False + 32 + com.ublinux.libublsettingsui-gtk3 + + + + + Cancel + True + True + True + image2 + + + 1 + + + + + Accept + True + True + True + image1 + + + end + 2 + + + + + + diff --git a/libublsettingsui-gtk3-saving.glade b/libublsettingsui-gtk3-saving.glade index a8d5098..24def50 100644 --- a/libublsettingsui-gtk3-saving.glade +++ b/libublsettingsui-gtk3-saving.glade @@ -63,6 +63,7 @@ True False + 5 vertical diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 90da64b..b933e92 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -45,6 +45,7 @@ set(DEPENDFILES ../libublsettingsui-gtk3-debugger.glade ../libublsettingsui-gtk3-config-window.glade ../libublsettingsui-gtk3-service-control.glade + ../libublsettingsui-gtk3-app-chooser.glade ../gresource.xml ../libublsettingsui-gtk3-banner.png ../libublsettingsui-gtk3.css @@ -83,6 +84,7 @@ add_library(${PROJECT_NAME} SHARED libublsettingsui-gtk3-config-window.c libublsettingsui-gtk3-filechooser.c libublsettingsui-gtk3-service.c + libublsettingsui-gtk3-app-chooser.c libublsettingsui-gtk3.h ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}) diff --git a/source/libublsettingsui-gtk3-app-chooser.c b/source/libublsettingsui-gtk3-app-chooser.c index 6d3a9e3..edf7789 100644 --- a/source/libublsettingsui-gtk3-app-chooser.c +++ b/source/libublsettingsui-gtk3-app-chooser.c @@ -1,28 +1,9 @@ #include "libublsettingsui-gtk3.h" -typedef struct { - GtkWidget *MainWindow; - GtkWidget *StatusBox; - GtkWidget *HeadLabel; - GtkWidget *WindowImage; - - GtkWidget *CancelButton; - GtkWidget *AcceptButton; - - GtkWidget *MainTree; - GtkCellRenderer *SelectionCell; - GtkTreeStore *treestore; - - GtkWidget *MainIconView; - GtkListStore *liststore; - - int apps_size; - config_str apps; - - dictionary *apps_convert; - - int multiple; -} yon_app_chooser_window; +struct return_struct { + config_str chosen_apps; + int size; +}; struct application { char *name; @@ -43,8 +24,8 @@ config_str yon_apps_get_from_file(char *file,int *final_size){ config_str parsed = yon_dir_get_contents(file,&size); for (int i=0;iapps = yon_apps_get_from_file("/usr/shared/applications",&window->apps_size); + window->apps = yon_apps_get_from_file("/usr/share/applications",&window->apps_size); return window->apps_size; } +void yon_block_visibility_if_unallowed(GtkWidget *self, GParamSpec* pspec,yon_app_chooser_window *window){ + if (gtk_widget_get_visible(window->MainWindow)){ + if (!window->visible_allowed) + gtk_widget_set_visible(window->MainWindow,0); + else g_signal_handlers_block_by_func(G_OBJECT(window->MainWindow),yon_block_visibility_if_unallowed,window); + } +} + int yon_app_chooser_convert_apps(yon_app_chooser_window *window){ GKeyFile *file = g_key_file_new(); window->apps_convert = NULL; for (int i=0;iapps_size;i++){ if (g_key_file_load_from_file(file,window->apps[i],G_KEY_FILE_KEEP_TRANSLATIONS,NULL)){ struct application *app = new(struct application); - app->name = g_key_file_get_string(file,"[Desktop Entry]","Name",NULL); - app->description = g_key_file_get_string(file,"[Desktop Entry]","Comment",NULL); - app->tags = g_key_file_get_string(file,"[Desktop Entry]","Categories",NULL); - app->execute = g_key_file_get_string(file,"[Desktop Entry]","Exec",NULL); - app->icon = g_key_file_get_string(file,"[Desktop Entry]","Icon",NULL); + memset(app,0,sizeof(struct application)); + app->name = g_key_file_get_locale_string(file,"Desktop Entry","Name",setlocale(LC_ALL,NULL),NULL); + app->description = g_key_file_get_locale_string(file,"[Desktop Entry","Comment",setlocale(LC_ALL,NULL),NULL); + app->tags = g_key_file_get_string(file,"Desktop Entry","Categories",NULL); + app->execute = g_key_file_get_string(file,"Desktop Entry","Exec",NULL); + app->icon = g_key_file_get_string(file,"Desktop Entry","Icon",NULL); app->path = yon_char_new(window->apps[i]); yon_dictionary_add_or_create_if_exists_with_data(window->apps_convert,app->name,app); } @@ -85,26 +75,81 @@ int yon_app_chooser_convert_apps(yon_app_chooser_window *window){ if (window->apps_convert) return 1; else return 0; } +// int yon_tree_store_setup_apps(yon_app_chooser_window *window){ +// GtkTreeIter iter,itar; +// GtkTreeModel *model = GTK_TREE_MODEL(window->treestore); +// for_iter (model,&iter){ +// char *tags; +// gtk_tree_model_get(model,&iter,3,&tags,-1); +// int required_size; +// config_str required_tags = yon_char_parse(tags,&required_size,";"); + +// dictionary *dict; +// for_dictionaries(dict,window->apps_convert){ +// int parsed_size; +// struct application *cur_app = (struct application*)dict->data; +// config_str parsed_tags = yon_char_parse(cur_app->tags,&parsed_size,";"); +// if (yon_char_parsed_includes_char_parsed(required_tags,parsed_tags,required_size,parsed_size)){ +// gtk_tree_store_append(window->treestore,&itar,&iter); +// gtk_tree_store_set(window->treestore,&itar,0,0,1,cur_app->name,2,cur_app->description,3,cur_app->tags,4,0,5,cur_app->icon,6,cur_app->execute,-1); +// } +// } +// } +// } + int yon_tree_store_setup_apps(yon_app_chooser_window *window){ - GtkTreeIter iter,itar; + GtkTreeIter iter; + dictionary *dict; + for_dictionaries(dict,window->apps_convert){ + int parsed_size; + struct application *cur_app = (struct application*)dict->data; + gtk_tree_store_append(window->treestore,&iter,NULL); + gtk_tree_store_set(window->treestore,&iter,0,0,1,cur_app->name,2,cur_app->description,3,cur_app->tags,4,0,5,cur_app->icon,6,cur_app->execute,-1); + + } +} + +config_str yon_app_chooser_window_run(yon_app_chooser_window *window, int *size){ + gtk_widget_show(window->MainWindow); + gtk_main(); + config_str final = window->final->chosen_apps; + (*size)=window->final->size; + free(window); + return final; +} + +void on_app_selection_toggled(GtkWidget *, char *path, yon_app_chooser_window *window){ + GtkTreeIter iter; + int status; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->treestore),&iter,path); + gtk_tree_model_get(GTK_TREE_MODEL(window->treestore),&iter,0,&status,-1); + gtk_tree_store_set(window->treestore,&iter,0,!status,-1); +} + +void on_app_chooser_window_closed(GtkWidget *, yon_app_chooser_window *window){ + gtk_main_quit(); +} + +void on_app_chooser_accept(GtkWidget *, yon_app_chooser_window *window){ + GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(window->treestore); - for_iter (model,&iter){ - char *tags; - gtk_tree_model_get(model,&iter,3,&tags,-1); - int required_size; - config_str required_tags = yon_char_parse(tags,&required_size,";"); - - dictionary *dict; - for_dictionaries(dict,window->apps_convert){ - int parsed_size; - struct application *cur_app = (struct application*)dict->data; - config_str parsed_tags = yon_char_parse(cur_app->tags,&parsed_size,";"); - if (yon_char_parsed_includes_char_parsed(required_tags,parsed_tags,required_size,parsed_size)){ - gtk_tree_store_append(window->treestore,&itar,&iter); - gtk_tree_store_set(window->treestore,&itar,0,0,1,cur_app->name,2,cur_app->description,3,cur_app->tags,4,0,5,cur_app->icon,6,cur_app->execute,-1); + if (window->multiple){ + for_iter(model,&iter){ + int status; + char *name; + gtk_tree_model_get(GTK_TREE_MODEL(window->treestore),&iter,0,&status,1,&name,-1); + if (status){ + yon_char_parsed_add_or_create_if_exists(window->final->chosen_apps,&window->final->size,name); } } + } else { + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(GTK_TREE_MODEL(window->treestore),&iter,1,&name,-1); + yon_char_parsed_add_or_create_if_exists(window->final->chosen_apps,&window->final->size,name); + } } + gtk_widget_destroy(window->MainWindow); } yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise){ @@ -119,22 +164,32 @@ yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise){ window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); window->MainTree = yon_gtk_builder_get_widget(builder,"MainTree"); - window->SelectionCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"MainWindow")); - window->treestore = GTK_TREE_STORE(gtk_builder_get_object(builder,"MainWindow")); + window->SelectionCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"SelectionCell")); + window->treestore = GTK_TREE_STORE(gtk_builder_get_object(builder,"treestore1")); window->MainIconView = yon_gtk_builder_get_widget(builder,"MainIconView"); - window->liststore = GTK_LIST_STORE(gtk_builder_get_object(builder,"MainWindow")); + window->liststore = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); + window->visible_allowed=0; + window->final = new(struct return_struct); + + memset(window->final,0,sizeof(struct return_struct)); + + g_signal_connect(G_OBJECT(window->MainWindow),"notify::visibile",G_CALLBACK(yon_block_visibility_if_unallowed),window); + g_signal_connect(G_OBJECT(window->MainWindow),"destroy",G_CALLBACK(on_app_chooser_window_closed),window); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_app_chooser_accept),window); g_signal_connect(G_OBJECT(window->SelectionCell),"toggled",G_CALLBACK(on_app_selection_toggled),window); + + if (!window->multiple){ + gtk_cell_renderer_set_visible(GTK_CELL_RENDERER(window->SelectionCell),0); + } window->multiple = multiple_choise; if (!yon_apps_get(window)) return NULL; if (!yon_app_chooser_convert_apps(window)) return NULL; + yon_tree_store_setup_apps(window); - - - + return window; } \ No newline at end of file diff --git a/source/libublsettingsui-gtk3-standard-callbacks.c b/source/libublsettingsui-gtk3-standard-callbacks.c new file mode 100644 index 0000000..f687004 --- /dev/null +++ b/source/libublsettingsui-gtk3-standard-callbacks.c @@ -0,0 +1,57 @@ +#include "libublsettingsui-gtk3.h" + +char *config_get_default_command = NULL; +char *config_get_global_command = NULL; +char *config_get_local_command = NULL; + +void yon_load_proceed(YON_CONFIG_TYPE type){ + yon_config_clean(); + if (!yon_char_is_empty(config_get_default_command)) + yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); + if (type==YON_CONFIG_GLOBAL){ + yon_config_load_config(type,config_get_global_command,NULL); + } else if (type==YON_CONFIG_LOCAL){ + yon_config_load_config(type,config_get_local_command,NULL); + } else if (type==YON_CONFIG_CUSTOM){ + char *path=""; + GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE, + yon_char_get_localised_from_lib(CANCEL_LABEL),GTK_RESPONSE_CANCEL, + yon_char_get_localised_from_lib(OPEN_LABEL),GTK_RESPONSE_ACCEPT,NULL); + yon_gtk_window_setup(GTK_WINDOW(dialog),NULL,template_app_information.app_title,yon_char_append("com.ublinux.",template_app_information.app_tech_name),"FileChooserWindow"); + gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-video"); + gtk_window_set_title(GTK_WINDOW(dialog),template_app_information.app_title); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.ini"); + gtk_file_filter_set_name(filter, "*.ini"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); + gtk_widget_show(dialog); + int response = gtk_dialog_run(GTK_DIALOG(dialog)); + if (response == GTK_RESPONSE_ACCEPT){ + char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if (!yon_char_is_empty(file)){ + path=yon_char_unite("'",file,"'",NULL); + free(file); + } + gtk_widget_destroy(dialog); + } else { + gtk_widget_destroy(dialog); + } + yon_config_load_config(type,yon_config_get_custom_command(path),NULL); + } +} + +void on_config_local_load(){ + yon_load_proceed(YON_CONFIG_LOCAL); +} + +void on_config_global_load(){ + yon_load_proceed(YON_CONFIG_GLOBAL); +} + +void on_config_custom_load(){ + yon_load_proceed(YON_CONFIG_CUSTOM); +} + +void on_config_global_local_save(){ + yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); +} \ No newline at end of file diff --git a/source/libublsettingsui-gtk3.h b/source/libublsettingsui-gtk3.h index cb961e0..2c71354 100644 --- a/source/libublsettingsui-gtk3.h +++ b/source/libublsettingsui-gtk3.h @@ -27,6 +27,7 @@ #define ui_glade_path_filechooser "/com/ublinux/ui/libublsettingsui-gtk3-filechooser.glade" #define ui_glade_path_debug "/com/ublinux/ui/libublsettingsui-gtk3-debugger.glade" #define ui_glade_path_service "/com/ublinux/ui/libublsettingsui-gtk3-service-control.glade" +#define ui_glade_path_app_chooser "/com/ublinux/ui/libublsettingsui-gtk3-app-chooser.glade" #define ui_banner_path "/com/ublinux/images/libublsettingsui-gtk3-banner.png" #define ui_CssPath "/com/ublinux/css/libublsettingsui-gtk3.css" #define ui_config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",template_app_information.app_tech_name,"/",template_app_information.app_tech_name,".conf",NULL) @@ -331,12 +332,42 @@ typedef struct { char *check_enable_command; } service_window; +typedef struct { + GtkWidget *MainWindow; + GtkWidget *StatusBox; + GtkWidget *HeadLabel; + GtkWidget *WindowImage; + + GtkWidget *CancelButton; + GtkWidget *AcceptButton; + + GtkWidget *MainTree; + GtkCellRenderer *SelectionCell; + GtkTreeStore *treestore; + + GtkWidget *MainIconView; + GtkListStore *liststore; + + int apps_size; + config_str apps; + + dictionary *apps_convert; + + struct return_struct *final; + + int multiple; + int visible_allowed; +} yon_app_chooser_window; + service_window *yon_service_window_new(char *name, char *start_command, char *stop_command, char *enable_command, char *disable_command, char *info_command, char *check_active_command, char *check_enable_command); void yon_service_window_run(service_window *window); +config_str yon_app_chooser_window_run(yon_app_chooser_window *window, int *size); +yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise); + #define VERSION_LABEL yon_char_unite(_("Version:")," ",!yon_char_is_empty(template_app_information.app_version)?template_app_information.app_version:"","\n",NULL) #define HELP_LABEL(rest) yon_char_unite(template_app_information.app_tech_name,_(" version:")," ", !yon_char_is_empty(template_app_information.app_version)?template_app_information.app_version:"","\n",\ template_app_information.app_title,"\n",_("Usage:"), " ",template_app_information.app_tech_name," ",_("[OPTIONS]"),"\n",\ -- 2.35.1 From fbe59572258c243dfd342880a962f8862703c4cb Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 25 Apr 2025 12:02:35 +0600 Subject: [PATCH 5/7] Fixes --- libublsettingsui-gtk3-about.glade | 2 +- libublsettingsui-gtk3-app-chooser.glade | 8 +- libublsettingsui-gtk3.pot | 180 ++++++++-------- libublsettingsui-gtk3_ru.po | 200 +++++++++--------- source/CMakeLists.txt | 1 + source/libublsettingsui-gtk3-app-chooser.c | 3 +- source/libublsettingsui-gtk3-service.c | 2 +- ...libublsettingsui-gtk3-standard-callbacks.c | 74 +++++-- source/libublsettingsui-gtk3.c | 18 +- source/libublsettingsui-gtk3.h | 7 +- 10 files changed, 288 insertions(+), 207 deletions(-) diff --git a/libublsettingsui-gtk3-about.glade b/libublsettingsui-gtk3-about.glade index b2e2765..6c1156f 100644 --- a/libublsettingsui-gtk3-about.glade +++ b/libublsettingsui-gtk3-about.glade @@ -12,7 +12,7 @@ True libublsettingsui-gtk3 1.1 - Copyright © 2022 - 2023, UBSoft LLC + Copyright © 2022 - 2025, UBSoft LLC TEMPLATE Manager https://ublinux.ru/ Project Home Page diff --git a/libublsettingsui-gtk3-app-chooser.glade b/libublsettingsui-gtk3-app-chooser.glade index db0a67c..bf8e48b 100644 --- a/libublsettingsui-gtk3-app-chooser.glade +++ b/libublsettingsui-gtk3-app-chooser.glade @@ -1,7 +1,8 @@ - - + + + True False @@ -179,9 +180,6 @@ True False Choose application - - - diff --git a/libublsettingsui-gtk3.pot b/libublsettingsui-gtk3.pot index f9bfecc..d4e06d4 100644 --- a/libublsettingsui-gtk3.pot +++ b/libublsettingsui-gtk3.pot @@ -17,358 +17,362 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: source/libublsettingsui-gtk3.h:340 +#: source/libublsettingsui-gtk3.h:376 msgid "Version:" msgstr "" -#: source/libublsettingsui-gtk3.h:341 +#: source/libublsettingsui-gtk3.h:377 msgid " version:" msgstr "" -#: source/libublsettingsui-gtk3.h:342 +#: source/libublsettingsui-gtk3.h:378 msgid "Usage:" msgstr "" -#: source/libublsettingsui-gtk3.h:342 +#: source/libublsettingsui-gtk3.h:378 msgid "[OPTIONS]" msgstr "" -#: source/libublsettingsui-gtk3.h:343 +#: source/libublsettingsui-gtk3.h:379 msgid "Options:" msgstr "" -#: source/libublsettingsui-gtk3.h:344 +#: source/libublsettingsui-gtk3.h:380 msgid "Show this help" msgstr "" -#: source/libublsettingsui-gtk3.h:345 +#: source/libublsettingsui-gtk3.h:381 msgid "Show package version" msgstr "" -#: source/libublsettingsui-gtk3.h:346 +#: source/libublsettingsui-gtk3.h:382 msgid "Lock this help menu" msgstr "" -#: source/libublsettingsui-gtk3.h:347 +#: source/libublsettingsui-gtk3.h:383 msgid "Lock configuration saving" msgstr "" -#: source/libublsettingsui-gtk3.h:348 +#: source/libublsettingsui-gtk3.h:384 msgid "Lock local configration saving" msgstr "" -#: source/libublsettingsui-gtk3.h:349 +#: source/libublsettingsui-gtk3.h:385 msgid "Lock global configration saving" msgstr "" -#: source/libublsettingsui-gtk3.h:350 +#: source/libublsettingsui-gtk3.h:386 msgid "Lock global configration loading" msgstr "" -#: source/libublsettingsui-gtk3.h:351 +#: source/libublsettingsui-gtk3.h:387 msgid "Reset application settings" msgstr "" -#: source/libublsettingsui-gtk3.h:357 source/libublsettingsui-gtk3.h:365 +#: source/libublsettingsui-gtk3.h:393 source/libublsettingsui-gtk3.h:401 msgid "About" msgstr "" -#: source/libublsettingsui-gtk3.h:359 +#: source/libublsettingsui-gtk3.h:395 msgid "Operation succeeded" msgstr "" -#: source/libublsettingsui-gtk3.h:360 +#: source/libublsettingsui-gtk3.h:396 msgid "Operation failed" msgstr "" -#: source/libublsettingsui-gtk3.h:361 +#: source/libublsettingsui-gtk3.h:397 msgid "" "Warning! Application was launched without root - root-dependent actions are " "locked" msgstr "" -#: source/libublsettingsui-gtk3.h:363 source/libublsettingsui-gtk3.h:364 +#: source/libublsettingsui-gtk3.h:399 source/libublsettingsui-gtk3.h:400 msgid "Default" msgstr "" -#: source/libublsettingsui-gtk3.h:366 +#: source/libublsettingsui-gtk3.h:402 msgid "Documentation" msgstr "" -#: source/libublsettingsui-gtk3.h:368 +#: source/libublsettingsui-gtk3.h:404 msgid "Save to specific file" msgstr "" -#: source/libublsettingsui-gtk3.h:369 +#: source/libublsettingsui-gtk3.h:405 msgid "Save to local configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:370 +#: source/libublsettingsui-gtk3.h:406 msgid "Save to global configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:371 +#: source/libublsettingsui-gtk3.h:407 msgid "Save configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:372 +#: source/libublsettingsui-gtk3.h:408 msgid "Save" msgstr "" -#: source/libublsettingsui-gtk3.h:373 +#: source/libublsettingsui-gtk3.h:409 msgid "Saving..." msgstr "" -#: source/libublsettingsui-gtk3.h:375 +#: source/libublsettingsui-gtk3.h:411 msgid "Load from specific file" msgstr "" -#: source/libublsettingsui-gtk3.h:376 +#: source/libublsettingsui-gtk3.h:412 msgid "Load local configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:377 +#: source/libublsettingsui-gtk3.h:413 msgid "Load global configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:378 +#: source/libublsettingsui-gtk3.h:414 msgid "Load" msgstr "" -#: source/libublsettingsui-gtk3.h:379 +#: source/libublsettingsui-gtk3.h:415 msgid "Load file" msgstr "" -#: source/libublsettingsui-gtk3.h:381 +#: source/libublsettingsui-gtk3.h:417 msgid "Cancel" msgstr "" -#: source/libublsettingsui-gtk3.h:382 +#: source/libublsettingsui-gtk3.h:418 msgid "Accept" msgstr "" -#: source/libublsettingsui-gtk3.h:383 +#: source/libublsettingsui-gtk3.h:419 msgid "Open" msgstr "" -#: source/libublsettingsui-gtk3.h:384 +#: source/libublsettingsui-gtk3.h:420 msgid "Create directory" msgstr "" -#: source/libublsettingsui-gtk3.h:385 +#: source/libublsettingsui-gtk3.h:421 msgid "Select directory" msgstr "" -#: source/libublsettingsui-gtk3.h:387 +#: source/libublsettingsui-gtk3.h:423 msgid "Would you like to read documentation in the Web?" msgstr "" -#: source/libublsettingsui-gtk3.h:388 +#: source/libublsettingsui-gtk3.h:424 msgid "" "You will be redirected to documentation website where documentation is\n" "translated and supported by community." msgstr "" -#: source/libublsettingsui-gtk3.h:389 +#: source/libublsettingsui-gtk3.h:425 msgid "Always redirect to online documentation" msgstr "" -#: source/libublsettingsui-gtk3.h:390 +#: source/libublsettingsui-gtk3.h:426 msgid "Open documentation" msgstr "" -#: source/libublsettingsui-gtk3.h:391 +#: source/libublsettingsui-gtk3.h:427 msgid "Project Home Page" msgstr "" -#: source/libublsettingsui-gtk3.h:392 +#: source/libublsettingsui-gtk3.h:428 msgid "Nothing were chosen" msgstr "" -#: source/libublsettingsui-gtk3.h:393 -msgid "Copyright © 2022 - 2023, UBSoft LLC" +#: source/libublsettingsui-gtk3.h:429 +msgid "Copyright © 2022 - 2025, UBSoft LLC" msgstr "" -#: source/libublsettingsui-gtk3.h:396 +#: source/libublsettingsui-gtk3.h:432 msgid "Global configuration loading succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:397 +#: source/libublsettingsui-gtk3.h:433 msgid "Local configuration loading succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:398 +#: source/libublsettingsui-gtk3.h:434 msgid "Config loading failed" msgstr "" -#: source/libublsettingsui-gtk3.h:400 +#: source/libublsettingsui-gtk3.h:436 msgid "Local and global configuration saving succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:401 +#: source/libublsettingsui-gtk3.h:437 msgid "Global configuration saving succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:402 +#: source/libublsettingsui-gtk3.h:438 msgid "Local configuration saving succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:403 +#: source/libublsettingsui-gtk3.h:439 msgid "Configuration saving succeeded." msgstr "" -#: source/libublsettingsui-gtk3.h:405 +#: source/libublsettingsui-gtk3.h:441 msgid "Parameter" msgstr "" -#: source/libublsettingsui-gtk3.h:406 +#: source/libublsettingsui-gtk3.h:442 msgid "Old value" msgstr "" -#: source/libublsettingsui-gtk3.h:407 +#: source/libublsettingsui-gtk3.h:443 msgid "New value" msgstr "" -#: source/libublsettingsui-gtk3.h:408 +#: source/libublsettingsui-gtk3.h:444 msgid "" "Value\n" "(Old/New)" msgstr "" -#: source/libublsettingsui-gtk3.h:410 +#: source/libublsettingsui-gtk3.h:446 msgid "Nothing to save" msgstr "" -#: source/libublsettingsui-gtk3.h:411 +#: source/libublsettingsui-gtk3.h:447 msgid "Saving into local configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:412 +#: source/libublsettingsui-gtk3.h:448 msgid "Saving into global configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:413 +#: source/libublsettingsui-gtk3.h:449 msgid "Saving into global and local configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:414 +#: source/libublsettingsui-gtk3.h:450 msgid "Saving into custom configuration at" msgstr "" -#: source/libublsettingsui-gtk3.h:419 +#: source/libublsettingsui-gtk3.h:455 msgid "Full saving mode" msgstr "" -#: source/libublsettingsui-gtk3.h:420 +#: source/libublsettingsui-gtk3.h:456 msgid "Saving into module" msgstr "" -#: source/libublsettingsui-gtk3.h:421 +#: source/libublsettingsui-gtk3.h:457 msgid "Sandbox mode" msgstr "" -#: source/libublsettingsui-gtk3.h:422 +#: source/libublsettingsui-gtk3.h:458 msgid "Sandbox with profile saving" msgstr "" -#: source/libublsettingsui-gtk3.h:423 +#: source/libublsettingsui-gtk3.h:459 msgid "HDD sandbox" msgstr "" -#: source/libublsettingsui-gtk3.h:424 +#: source/libublsettingsui-gtk3.h:460 msgid "HDD sandbox with profile saving" msgstr "" -#: source/libublsettingsui-gtk3.h:425 +#: source/libublsettingsui-gtk3.h:461 msgid "New configuration file creation failed" msgstr "" -#: source/libublsettingsui-gtk3.h:426 +#: source/libublsettingsui-gtk3.h:462 msgid "Upgrade to root" msgstr "" -#: source/libublsettingsui-gtk3.h:427 +#: source/libublsettingsui-gtk3.h:463 msgid "Settings" msgstr "" -#: source/libublsettingsui-gtk3.h:429 +#: source/libublsettingsui-gtk3.h:465 msgid "Application settigs" msgstr "" -#: source/libublsettingsui-gtk3.h:431 +#: source/libublsettingsui-gtk3.h:467 msgid "Invalid email adress" msgstr "" -#: source/libublsettingsui-gtk3.h:432 +#: source/libublsettingsui-gtk3.h:468 msgid "Invalid path" msgstr "" -#: source/libublsettingsui-gtk3.h:434 +#: source/libublsettingsui-gtk3.h:470 msgid "Choose path" msgstr "" -#: source/libublsettingsui-gtk3.h:437 +#: source/libublsettingsui-gtk3.h:471 +msgid "Choose application" +msgstr "" + +#: source/libublsettingsui-gtk3.h:474 msgid "Choose directory instead of file" msgstr "" -#: source/libublsettingsui-gtk3.h:439 +#: source/libublsettingsui-gtk3.h:476 msgid "Enabled" msgstr "" -#: source/libublsettingsui-gtk3.h:440 +#: source/libublsettingsui-gtk3.h:477 msgid "Disabled" msgstr "" -#: source/libublsettingsui-gtk3.h:441 +#: source/libublsettingsui-gtk3.h:478 msgid "Active" msgstr "" -#: source/libublsettingsui-gtk3.h:442 +#: source/libublsettingsui-gtk3.h:479 msgid "Inactive" msgstr "" -#: source/libublsettingsui-gtk3.h:444 +#: source/libublsettingsui-gtk3.h:481 msgid "Active:" msgstr "" -#: source/libublsettingsui-gtk3.h:445 +#: source/libublsettingsui-gtk3.h:482 msgid "Enabled:" msgstr "" -#: source/libublsettingsui-gtk3.h:446 +#: source/libublsettingsui-gtk3.h:483 msgid "Start" msgstr "" -#: source/libublsettingsui-gtk3.h:447 +#: source/libublsettingsui-gtk3.h:484 msgid "Stop" msgstr "" -#: source/libublsettingsui-gtk3.h:448 +#: source/libublsettingsui-gtk3.h:485 msgid "Restart" msgstr "" -#: source/libublsettingsui-gtk3.h:449 +#: source/libublsettingsui-gtk3.h:486 msgid "Enable" msgstr "" -#: source/libublsettingsui-gtk3.h:450 +#: source/libublsettingsui-gtk3.h:487 msgid "Disable" msgstr "" -#: source/libublsettingsui-gtk3.h:452 +#: source/libublsettingsui-gtk3.h:489 #, c-format msgid "\"%s\" service configuration" msgstr "" -#: source/libublsettingsui-gtk3.h:453 +#: source/libublsettingsui-gtk3.h:490 #, c-format msgid "\"%s\" service:" msgstr "" -#: source/libublsettingsui-gtk3.h:454 +#: source/libublsettingsui-gtk3.h:491 msgid "service is active" msgstr "" -#: source/libublsettingsui-gtk3.h:455 +#: source/libublsettingsui-gtk3.h:492 msgid "service is inactive" msgstr "" diff --git a/libublsettingsui-gtk3_ru.po b/libublsettingsui-gtk3_ru.po index 28eb3fd..67811f7 100644 --- a/libublsettingsui-gtk3_ru.po +++ b/libublsettingsui-gtk3_ru.po @@ -17,71 +17,71 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: source/libublsettingsui-gtk3.h:340 +#: source/libublsettingsui-gtk3.h:376 msgid "Version:" msgstr "Версия:" -#: source/libublsettingsui-gtk3.h:341 +#: source/libublsettingsui-gtk3.h:377 msgid " version:" msgstr " версия:" -#: source/libublsettingsui-gtk3.h:342 +#: source/libublsettingsui-gtk3.h:378 msgid "Usage:" msgstr "Использование:" -#: source/libublsettingsui-gtk3.h:342 +#: source/libublsettingsui-gtk3.h:378 msgid "[OPTIONS]" msgstr "[АРГУМЕНТЫ]" -#: source/libublsettingsui-gtk3.h:343 +#: source/libublsettingsui-gtk3.h:379 msgid "Options:" msgstr "Аргументы:" -#: source/libublsettingsui-gtk3.h:344 +#: source/libublsettingsui-gtk3.h:380 msgid "Show this help" msgstr "Показать эту подсказку" -#: source/libublsettingsui-gtk3.h:345 +#: source/libublsettingsui-gtk3.h:381 msgid "Show package version" msgstr "Показать версию пакета" -#: source/libublsettingsui-gtk3.h:346 +#: source/libublsettingsui-gtk3.h:382 msgid "Lock this help menu" msgstr "Заблокировать это меню помощи" -#: source/libublsettingsui-gtk3.h:347 +#: source/libublsettingsui-gtk3.h:383 msgid "Lock configuration saving" msgstr "Успешно записана локальная конфигурация" -#: source/libublsettingsui-gtk3.h:348 +#: source/libublsettingsui-gtk3.h:384 msgid "Lock local configration saving" msgstr "Заблокировать сохранение локальной конфигурации" -#: source/libublsettingsui-gtk3.h:349 +#: source/libublsettingsui-gtk3.h:385 msgid "Lock global configration saving" msgstr "Заблокировать сохранение глобальной конфигурации" -#: source/libublsettingsui-gtk3.h:350 +#: source/libublsettingsui-gtk3.h:386 msgid "Lock global configration loading" msgstr "Заблокировать загрузку глобальную конфигурацию" -#: source/libublsettingsui-gtk3.h:351 +#: source/libublsettingsui-gtk3.h:387 msgid "Reset application settings" msgstr "Сбросить настройки программы" -#: source/libublsettingsui-gtk3.h:357 source/libublsettingsui-gtk3.h:365 +#: source/libublsettingsui-gtk3.h:393 source/libublsettingsui-gtk3.h:401 msgid "About" msgstr "О программе" -#: source/libublsettingsui-gtk3.h:359 +#: source/libublsettingsui-gtk3.h:395 msgid "Operation succeeded" msgstr "Операция завершена" -#: source/libublsettingsui-gtk3.h:360 +#: source/libublsettingsui-gtk3.h:396 msgid "Operation failed" msgstr "Операция завершена с ошибкой" -#: source/libublsettingsui-gtk3.h:361 +#: source/libublsettingsui-gtk3.h:397 msgid "" "Warning! Application was launched without root - root-dependent actions are " "locked" @@ -89,83 +89,83 @@ msgstr "" "Внимание! Приложение было запущено без прав суперпользователя - действия, " "требующие их наличия заблокированы" -#: source/libublsettingsui-gtk3.h:363 source/libublsettingsui-gtk3.h:364 +#: source/libublsettingsui-gtk3.h:399 source/libublsettingsui-gtk3.h:400 msgid "Default" msgstr "По умолчанию" -#: source/libublsettingsui-gtk3.h:366 +#: source/libublsettingsui-gtk3.h:402 msgid "Documentation" msgstr "Справка" -#: source/libublsettingsui-gtk3.h:368 +#: source/libublsettingsui-gtk3.h:404 msgid "Save to specific file" msgstr "Сохранить в файл" -#: source/libublsettingsui-gtk3.h:369 +#: source/libublsettingsui-gtk3.h:405 msgid "Save to local configuration" msgstr "Сохранить в локальную конфигурацию" -#: source/libublsettingsui-gtk3.h:370 +#: source/libublsettingsui-gtk3.h:406 msgid "Save to global configuration" msgstr "Сохранить в глобальную конфигурацию" -#: source/libublsettingsui-gtk3.h:371 +#: source/libublsettingsui-gtk3.h:407 msgid "Save configuration" msgstr "Сохранить конфигурацию" -#: source/libublsettingsui-gtk3.h:372 +#: source/libublsettingsui-gtk3.h:408 msgid "Save" msgstr "Сохранить" -#: source/libublsettingsui-gtk3.h:373 +#: source/libublsettingsui-gtk3.h:409 msgid "Saving..." msgstr "Сохранение..." -#: source/libublsettingsui-gtk3.h:375 +#: source/libublsettingsui-gtk3.h:411 msgid "Load from specific file" msgstr "Загрузить из файла" -#: source/libublsettingsui-gtk3.h:376 +#: source/libublsettingsui-gtk3.h:412 msgid "Load local configuration" msgstr "Загрузить локальную конфигурацию" -#: source/libublsettingsui-gtk3.h:377 +#: source/libublsettingsui-gtk3.h:413 msgid "Load global configuration" msgstr "Загрузить глобальную конфигурацию" -#: source/libublsettingsui-gtk3.h:378 +#: source/libublsettingsui-gtk3.h:414 msgid "Load" msgstr "Загрузить" -#: source/libublsettingsui-gtk3.h:379 +#: source/libublsettingsui-gtk3.h:415 msgid "Load file" msgstr "Загрузить файл" -#: source/libublsettingsui-gtk3.h:381 +#: source/libublsettingsui-gtk3.h:417 msgid "Cancel" msgstr "Отмена" -#: source/libublsettingsui-gtk3.h:382 +#: source/libublsettingsui-gtk3.h:418 msgid "Accept" msgstr "Принять" -#: source/libublsettingsui-gtk3.h:383 +#: source/libublsettingsui-gtk3.h:419 msgid "Open" msgstr "Открыть" -#: source/libublsettingsui-gtk3.h:384 +#: source/libublsettingsui-gtk3.h:420 msgid "Create directory" msgstr "Создать файл" -#: source/libublsettingsui-gtk3.h:385 +#: source/libublsettingsui-gtk3.h:421 msgid "Select directory" msgstr "Выбрать папку" -#: source/libublsettingsui-gtk3.h:387 +#: source/libublsettingsui-gtk3.h:423 msgid "Would you like to read documentation in the Web?" msgstr "Вы хотите прочитать справку в Сети?" -#: source/libublsettingsui-gtk3.h:388 +#: source/libublsettingsui-gtk3.h:424 msgid "" "You will be redirected to documentation website where documentation is\n" "translated and supported by community." @@ -173,67 +173,68 @@ msgstr "" "Вы будете перенаправлены на сайт с документацией, где страницы помощи\n" "переводятся и поддерживаются сообществом." -#: source/libublsettingsui-gtk3.h:389 +#: source/libublsettingsui-gtk3.h:425 msgid "Always redirect to online documentation" msgstr "Всегда перенаправлять" -#: source/libublsettingsui-gtk3.h:390 +#: source/libublsettingsui-gtk3.h:426 msgid "Open documentation" msgstr "Прочитать справку" -#: source/libublsettingsui-gtk3.h:391 +#: source/libublsettingsui-gtk3.h:427 msgid "Project Home Page" msgstr "Домашняя страница проекта" -#: source/libublsettingsui-gtk3.h:392 +#: source/libublsettingsui-gtk3.h:428 msgid "Nothing were chosen" msgstr "Ничего не было выбрано" -#: source/libublsettingsui-gtk3.h:393 -msgid "Copyright © 2022 - 2023, UBSoft LLC" -msgstr "Copyright © 2022 - 2023, ООО «Юбисофт»" +#: source/libublsettingsui-gtk3.h:429 +#, fuzzy +msgid "Copyright © 2022 - 2025, UBSoft LLC" +msgstr "Copyright © 2022 - 2025, ООО «Юбисофт»" -#: source/libublsettingsui-gtk3.h:396 +#: source/libublsettingsui-gtk3.h:432 msgid "Global configuration loading succeeded." msgstr "Успешно загружена глобальная конфигурация" -#: source/libublsettingsui-gtk3.h:397 +#: source/libublsettingsui-gtk3.h:433 msgid "Local configuration loading succeeded." msgstr "Успешно загружена локальная конфигурация" -#: source/libublsettingsui-gtk3.h:398 +#: source/libublsettingsui-gtk3.h:434 msgid "Config loading failed" msgstr "Ошибка загрузки конфига" -#: source/libublsettingsui-gtk3.h:400 +#: source/libublsettingsui-gtk3.h:436 msgid "Local and global configuration saving succeeded." msgstr "Успешно записаны локальная и глобальная конфигурация" -#: source/libublsettingsui-gtk3.h:401 +#: source/libublsettingsui-gtk3.h:437 msgid "Global configuration saving succeeded." msgstr "Успешно записана глобальная конфигурация" -#: source/libublsettingsui-gtk3.h:402 +#: source/libublsettingsui-gtk3.h:438 msgid "Local configuration saving succeeded." msgstr "Успешно записана локальная конфигурация" -#: source/libublsettingsui-gtk3.h:403 +#: source/libublsettingsui-gtk3.h:439 msgid "Configuration saving succeeded." msgstr "Успешно записана конфигурация" -#: source/libublsettingsui-gtk3.h:405 +#: source/libublsettingsui-gtk3.h:441 msgid "Parameter" msgstr "Параметр" -#: source/libublsettingsui-gtk3.h:406 +#: source/libublsettingsui-gtk3.h:442 msgid "Old value" msgstr "Старое значение" -#: source/libublsettingsui-gtk3.h:407 +#: source/libublsettingsui-gtk3.h:443 msgid "New value" msgstr "Новое значение" -#: source/libublsettingsui-gtk3.h:408 +#: source/libublsettingsui-gtk3.h:444 msgid "" "Value\n" "(Old/New)" @@ -241,139 +242,144 @@ msgstr "" "Значение\n" "(Старое/Новое)" -#: source/libublsettingsui-gtk3.h:410 +#: source/libublsettingsui-gtk3.h:446 msgid "Nothing to save" msgstr "Нечего сохранять" -#: source/libublsettingsui-gtk3.h:411 +#: source/libublsettingsui-gtk3.h:447 msgid "Saving into local configuration" msgstr "Сохранение в локальный конфигурационный файл" -#: source/libublsettingsui-gtk3.h:412 +#: source/libublsettingsui-gtk3.h:448 msgid "Saving into global configuration" msgstr "Сохранение в глобальный конфигурационный файл" -#: source/libublsettingsui-gtk3.h:413 +#: source/libublsettingsui-gtk3.h:449 msgid "Saving into global and local configuration" msgstr "Сохранение в глобальный и локальный конфигурационный файл" -#: source/libublsettingsui-gtk3.h:414 +#: source/libublsettingsui-gtk3.h:450 msgid "Saving into custom configuration at" msgstr "Сохранение в конфигурационный файл по пути" -#: source/libublsettingsui-gtk3.h:419 +#: source/libublsettingsui-gtk3.h:455 msgid "Full saving mode" msgstr "Полное сохранение" -#: source/libublsettingsui-gtk3.h:420 +#: source/libublsettingsui-gtk3.h:456 msgid "Saving into module" msgstr "Сохранение в модуль" -#: source/libublsettingsui-gtk3.h:421 +#: source/libublsettingsui-gtk3.h:457 msgid "Sandbox mode" msgstr "Полная песочница в ОЗУ" -#: source/libublsettingsui-gtk3.h:422 +#: source/libublsettingsui-gtk3.h:458 msgid "Sandbox with profile saving" msgstr "Песочница с сохранением профиля пользователя" -#: source/libublsettingsui-gtk3.h:423 +#: source/libublsettingsui-gtk3.h:459 msgid "HDD sandbox" msgstr "Полная песочница на HDD" -#: source/libublsettingsui-gtk3.h:424 +#: source/libublsettingsui-gtk3.h:460 msgid "HDD sandbox with profile saving" msgstr "Полная песочница на HDD с сохранением профиля пользователя" -#: source/libublsettingsui-gtk3.h:425 +#: source/libublsettingsui-gtk3.h:461 msgid "New configuration file creation failed" msgstr "Ошибка создания нового файла конфигурации" -#: source/libublsettingsui-gtk3.h:426 +#: source/libublsettingsui-gtk3.h:462 msgid "Upgrade to root" msgstr "Повысить права до root" -#: source/libublsettingsui-gtk3.h:427 +#: source/libublsettingsui-gtk3.h:463 msgid "Settings" -msgstr "" +msgstr "Настройки" -#: source/libublsettingsui-gtk3.h:429 +#: source/libublsettingsui-gtk3.h:465 msgid "Application settigs" -msgstr "Настройки" +msgstr "Настройки приложеия" -#: source/libublsettingsui-gtk3.h:431 +#: source/libublsettingsui-gtk3.h:467 msgid "Invalid email adress" msgstr "Неверный email-адрес" -#: source/libublsettingsui-gtk3.h:432 +#: source/libublsettingsui-gtk3.h:468 msgid "Invalid path" msgstr "Неправильный путь" -#: source/libublsettingsui-gtk3.h:434 +#: source/libublsettingsui-gtk3.h:470 msgid "Choose path" msgstr "Выбор пути" -#: source/libublsettingsui-gtk3.h:437 +#: source/libublsettingsui-gtk3.h:471 +msgid "Choose application" +msgstr "Выбор приложений" + +#: source/libublsettingsui-gtk3.h:474 msgid "Choose directory instead of file" msgstr "Выбрать папку вместо вайла" -#: source/libublsettingsui-gtk3.h:439 +#: source/libublsettingsui-gtk3.h:476 msgid "Enabled" msgstr "Включен" -#: source/libublsettingsui-gtk3.h:440 +#: source/libublsettingsui-gtk3.h:477 msgid "Disabled" msgstr "Выключен" -#: source/libublsettingsui-gtk3.h:441 +#: source/libublsettingsui-gtk3.h:478 msgid "Active" -msgstr "Активен" +msgstr "Запущен" -#: source/libublsettingsui-gtk3.h:442 +#: source/libublsettingsui-gtk3.h:479 msgid "Inactive" -msgstr "Неактивен" +msgstr "Не запущен" -#: source/libublsettingsui-gtk3.h:444 +#: source/libublsettingsui-gtk3.h:481 msgid "Active:" -msgstr "Активен:" +msgstr "Статус:" -#: source/libublsettingsui-gtk3.h:445 +#: source/libublsettingsui-gtk3.h:482 msgid "Enabled:" msgstr "Автозапуск:" -#: source/libublsettingsui-gtk3.h:446 +#: source/libublsettingsui-gtk3.h:483 msgid "Start" msgstr "Запустить" -#: source/libublsettingsui-gtk3.h:447 +#: source/libublsettingsui-gtk3.h:484 msgid "Stop" msgstr "Остановить" -#: source/libublsettingsui-gtk3.h:448 +#: source/libublsettingsui-gtk3.h:485 msgid "Restart" msgstr "Перезапустить" -#: source/libublsettingsui-gtk3.h:449 +#: source/libublsettingsui-gtk3.h:486 msgid "Enable" msgstr "Включить автозапуск" -#: source/libublsettingsui-gtk3.h:450 +#: source/libublsettingsui-gtk3.h:487 msgid "Disable" -msgstr "Выключить автозапуск" +msgstr "Отключить" -#: source/libublsettingsui-gtk3.h:452 +#: source/libublsettingsui-gtk3.h:489 +#, c-format msgid "\"%s\" service configuration" -msgstr "Конфигурация сервиса \"%s\"" +msgstr "Управление сервисом \"%s\"" -#: source/libublsettingsui-gtk3.h:453 -#, fuzzy, c-format +#: source/libublsettingsui-gtk3.h:490 +#, c-format msgid "\"%s\" service:" msgstr "Cлужба \"%s\":" -#: source/libublsettingsui-gtk3.h:454 +#: source/libublsettingsui-gtk3.h:491 msgid "service is active" msgstr "служба активна" -#: source/libublsettingsui-gtk3.h:455 +#: source/libublsettingsui-gtk3.h:492 msgid "service is inactive" msgstr "служба неактивна" diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index b933e92..0b2b0e7 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -85,6 +85,7 @@ add_library(${PROJECT_NAME} SHARED libublsettingsui-gtk3-filechooser.c libublsettingsui-gtk3-service.c libublsettingsui-gtk3-app-chooser.c + libublsettingsui-gtk3-standard-callbacks.c libublsettingsui-gtk3.h ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}) diff --git a/source/libublsettingsui-gtk3-app-chooser.c b/source/libublsettingsui-gtk3-app-chooser.c index edf7789..a005eae 100644 --- a/source/libublsettingsui-gtk3-app-chooser.c +++ b/source/libublsettingsui-gtk3-app-chooser.c @@ -181,11 +181,12 @@ yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise){ g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_app_chooser_accept),window); g_signal_connect(G_OBJECT(window->SelectionCell),"toggled",G_CALLBACK(on_app_selection_toggled),window); + window->multiple = multiple_choise; + if (!window->multiple){ gtk_cell_renderer_set_visible(GTK_CELL_RENDERER(window->SelectionCell),0); } - window->multiple = multiple_choise; if (!yon_apps_get(window)) return NULL; if (!yon_app_chooser_convert_apps(window)) return NULL; diff --git a/source/libublsettingsui-gtk3-service.c b/source/libublsettingsui-gtk3-service.c index 6c8669a..cf9417c 100644 --- a/source/libublsettingsui-gtk3-service.c +++ b/source/libublsettingsui-gtk3-service.c @@ -22,7 +22,7 @@ void __on_closed(GtkWidget *, service_window *window){ void __on_service_update_clicked(GtkWidget *, service_window *window); void __on_service_start_clicked(GtkWidget *, service_window *window){ - if (system(window->start_command)){ + if (system(yon_debug_output("%s\n",window->start_command))){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_SUCCESS_TYPE); return; }; diff --git a/source/libublsettingsui-gtk3-standard-callbacks.c b/source/libublsettingsui-gtk3-standard-callbacks.c index f687004..8a9eb17 100644 --- a/source/libublsettingsui-gtk3-standard-callbacks.c +++ b/source/libublsettingsui-gtk3-standard-callbacks.c @@ -3,6 +3,14 @@ char *config_get_default_command = NULL; char *config_get_global_command = NULL; char *config_get_local_command = NULL; +char *config_get_custom_command = NULL; +char *config_get_global_only_command = NULL; +char *config_get_local_only_command = NULL; + +char *config_set_global_local_command = NULL; +char *config_set_global_command = NULL; +char *config_set_local_command = NULL; +char *config_set_custom_command = NULL; void yon_load_proceed(YON_CONFIG_TYPE type){ yon_config_clean(); @@ -14,11 +22,8 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ yon_config_load_config(type,config_get_local_command,NULL); } else if (type==YON_CONFIG_CUSTOM){ char *path=""; - GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE, - yon_char_get_localised_from_lib(CANCEL_LABEL),GTK_RESPONSE_CANCEL, - yon_char_get_localised_from_lib(OPEN_LABEL),GTK_RESPONSE_ACCEPT,NULL); - yon_gtk_window_setup(GTK_WINDOW(dialog),NULL,template_app_information.app_title,yon_char_append("com.ublinux.",template_app_information.app_tech_name),"FileChooserWindow"); - gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-video"); + GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); + gtk_window_set_icon_name(GTK_WINDOW(dialog),yon_char_append("com.ublinux.",template_app_information.app_tech_name)); gtk_window_set_title(GTK_WINDOW(dialog),template_app_information.app_title); GtkFileFilter *filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter,"*.ini"); @@ -29,29 +34,74 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ if (response == GTK_RESPONSE_ACCEPT){ char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); if (!yon_char_is_empty(file)){ - path=yon_char_unite("'",file,"'",NULL); - free(file); + path=file; } gtk_widget_destroy(dialog); } else { gtk_widget_destroy(dialog); } - yon_config_load_config(type,yon_config_get_custom_command(path),NULL); + char *command = yon_config_parameter_prepare_command(config_get_custom_command,path,NULL,NULL); + yon_config_load_config(type,command,NULL); } } -void on_config_local_load(){ +void on_config_local_load(GtkWidget *){ yon_load_proceed(YON_CONFIG_LOCAL); + template_config->load_mode=1; } -void on_config_global_load(){ - yon_load_proceed(YON_CONFIG_GLOBAL); +void on_config_global_load(GtkWidget *){ + yon_load_proceed(YON_CONFIG_GLOBAL); + template_config->load_mode=0; + } -void on_config_custom_load(){ +void on_config_custom_load(GtkWidget *){ yon_load_proceed(YON_CONFIG_CUSTOM); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + template_config->load_mode=3; } void on_config_global_local_save(){ yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); +} + +void on_config_global_save(){ + yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); +} + +void on_config_local_save(){ + yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_global_command,NULL); +} + +void on_config_custom_save(){ + yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_custom_command,NULL); +} + +void yon_ubl_settings_window_set_standard_callbacks(template_main_window *widgets, char *get_global_command, char *get_local_command,char *get_custom_command, char *get_default_command, char *get_global_only_command, char *get_local_only_command){ + if (!yon_char_is_empty(get_global_command)){ + g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),NULL); + g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),NULL); + config_get_global_command = yon_char_new(get_global_command); + config_set_global_command = yon_char_replace_single(get_global_command,"get","set"); + } + if (!yon_char_is_empty(get_global_command)){ + g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),NULL); + g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL); + config_get_local_command = yon_char_new(get_local_command); + config_set_local_command = yon_char_replace_single(get_local_command,"get","set"); + } + if (!yon_char_is_empty(get_global_command)){ + g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),NULL); + g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),NULL); + config_get_custom_command = yon_char_new(get_custom_command); + config_set_custom_command = yon_char_replace_single(get_custom_command,"get","set"); + } + if (!yon_char_is_empty(get_default_command)) config_get_default_command = yon_char_new(get_default_command); + if (!yon_char_is_empty(get_global_only_command)) config_get_global_only_command = yon_char_new(get_global_only_command); + if (!yon_char_is_empty(get_local_only_command)) config_get_local_only_command = yon_char_new(get_local_only_command); +} + +int yon_ubl_settings_window_remove_standard_callbacks(template_main_window *window){ + } \ No newline at end of file diff --git a/source/libublsettingsui-gtk3.c b/source/libublsettingsui-gtk3.c index 4cd3315..94c26ee 100644 --- a/source/libublsettingsui-gtk3.c +++ b/source/libublsettingsui-gtk3.c @@ -5,6 +5,9 @@ template_app_info template_app_information; static char *__yon_config_mode=NULL; + +void config_init(); + char *yon_char_get_localised_from_lib(char *string){ textdomain(template_ui_LocaleName); char *ret = _(string); @@ -218,6 +221,7 @@ int yon_ubl_connect_config(_template_config *config){ else replaces=1; template_config = config; + config_init(); return replaces; } @@ -505,10 +509,22 @@ void yon_root_button_setup(template_main_window *widgets, config_str args, int a textdomain(template_app_information.app_locale); } +void config_init(){ + template_config->always_open_documentation=0; + template_config->socket_id=-1; + template_config->save_socket_id=-1; + template_config->load_socket_id=-1; + template_config->lock_help=0; + template_config->lock_help=0; + template_config->lock_load_global=0; + template_config->lock_save_global=0; + template_config->lock_save_local=0; + template_config->load_mode=1; +} + template_main_window *yon_ubl_window_setup(){ textdomain (template_ui_LocaleName); setlocale(LC_ALL,""); - template_main_window *widgets = setup_window(); yon_ubl_header_setup_resource(widgets->HeadOverlay,widgets->HeadBox,widgets->HeadImage,ui_banner_path); textdomain(template_ui_LocaleName); diff --git a/source/libublsettingsui-gtk3.h b/source/libublsettingsui-gtk3.h index 2c71354..0dcbb0e 100644 --- a/source/libublsettingsui-gtk3.h +++ b/source/libublsettingsui-gtk3.h @@ -96,6 +96,8 @@ typedef struct { template_config_fields } _template_config; +extern _template_config *template_config; + [[maybe_unused]] extern _template_config *template_config; @@ -246,6 +248,8 @@ void yon_gtk_scrolled_window_set_horizontal_at_desired_size(GtkWidget *window, G template_app_info yon_ubl_get_app_info(); +void yon_ubl_settings_window_set_standard_callbacks(template_main_window *widgets, char *get_global_command, char *get_local_command,char *get_custom_command, char *get_default_command, char *get_global_only_command, char *get_local_only_command); + typedef struct { GtkWidget *Window; @@ -421,7 +425,7 @@ yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise); #define OPEN_HELP_LABEL _("Open documentation") #define PROJECT_HOME_LABEL _("Project Home Page") #define NOTHING_CHOSEN_LABEL _("Nothing were chosen") - #define AUTHORS_LABEL _(L"Copyright © 2022 - 2023, UBSoft LLC") + #define AUTHORS_LABEL _(L"Copyright © 2022 - 2025, UBSoft LLC") #define GLOBAL_LOAD_SUCCESS_LABEL _("Global configuration loading succeeded.") @@ -463,6 +467,7 @@ yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise); #define PATH_INVALID_LABEL _("Invalid path") #define CHOOSE_FILE_LABEL _("Choose path") + #define CHOOSE_APP_LABEL _("Choose application") #define FILE_CHOOSER_CHOOSE_FILDER_LABEL _("Choose directory instead of file") -- 2.35.1 From 12711de434801eb3a42b0b7ed07daf3de02b57d1 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 29 Apr 2025 10:33:07 +0600 Subject: [PATCH 6/7] Fixes --- ...libublsettingsui-gtk3-standard-callbacks.c | 66 +++++++++++-------- source/libublsettingsui-gtk3.c | 18 +++-- source/libublsettingsui-gtk3.h | 4 ++ 3 files changed, 56 insertions(+), 32 deletions(-) diff --git a/source/libublsettingsui-gtk3-standard-callbacks.c b/source/libublsettingsui-gtk3-standard-callbacks.c index 8a9eb17..75bda32 100644 --- a/source/libublsettingsui-gtk3-standard-callbacks.c +++ b/source/libublsettingsui-gtk3-standard-callbacks.c @@ -12,88 +12,100 @@ char *config_set_global_command = NULL; char *config_set_local_command = NULL; char *config_set_custom_command = NULL; -void yon_load_proceed(YON_CONFIG_TYPE type){ - yon_config_clean(); +int __yon_load_proceed(YON_CONFIG_TYPE type){ + if (type!=YON_CONFIG_CUSTOM){ + yon_config_clean(); + } if (!yon_char_is_empty(config_get_default_command)) yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); if (type==YON_CONFIG_GLOBAL){ - yon_config_load_config(type,config_get_global_command,NULL); - } else if (type==YON_CONFIG_LOCAL){ - yon_config_load_config(type,config_get_local_command,NULL); + if (yon_config_load_config(type,config_get_global_command,NULL)){ + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + } + else if (type==YON_CONFIG_LOCAL){ + if (yon_config_load_config(type,config_get_local_command,NULL)){ + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } } else if (type==YON_CONFIG_CUSTOM){ - char *path=""; + char *path; + textdomain(template_ui_LocaleName); GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); gtk_window_set_icon_name(GTK_WINDOW(dialog),yon_char_append("com.ublinux.",template_app_information.app_tech_name)); gtk_window_set_title(GTK_WINDOW(dialog),template_app_information.app_title); GtkFileFilter *filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter,"*.ini"); - gtk_file_filter_set_name(filter, "*.ini"); + gtk_file_filter_set_name(filter,"*.ini"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); gtk_widget_show(dialog); int response = gtk_dialog_run(GTK_DIALOG(dialog)); if (response == GTK_RESPONSE_ACCEPT){ char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); if (!yon_char_is_empty(file)){ - path=file; + path=yon_char_unite("'",file,"'",NULL); + } + yon_config_clean(); + char *final_command = yon_config_parameter_prepare_command(config_get_custom_command,file,NULL,NULL); + if (yon_config_load_config(type,final_command,NULL)){ + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } gtk_widget_destroy(dialog); } else { gtk_widget_destroy(dialog); + return 0; } - char *command = yon_config_parameter_prepare_command(config_get_custom_command,path,NULL,NULL); - yon_config_load_config(type,command,NULL); } + return 1; } -void on_config_local_load(GtkWidget *){ - yon_load_proceed(YON_CONFIG_LOCAL); +void __on_config_local_load(GtkWidget *){ + __yon_load_proceed(YON_CONFIG_LOCAL); template_config->load_mode=1; } -void on_config_global_load(GtkWidget *){ - yon_load_proceed(YON_CONFIG_GLOBAL); +void __on_config_global_load(GtkWidget *){ + __yon_load_proceed(YON_CONFIG_GLOBAL); template_config->load_mode=0; } -void on_config_custom_load(GtkWidget *){ - yon_load_proceed(YON_CONFIG_CUSTOM); - yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); +void __on_config_custom_load(GtkWidget *){ + __yon_load_proceed(YON_CONFIG_CUSTOM); template_config->load_mode=3; } -void on_config_global_local_save(){ +void __on_config_global_local_save(){ yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); } -void on_config_global_save(){ +void __on_config_global_save(){ yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); } -void on_config_local_save(){ +void __on_config_local_save(){ yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_global_command,NULL); } -void on_config_custom_save(){ +void __on_config_custom_save(){ yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_custom_command,NULL); } void yon_ubl_settings_window_set_standard_callbacks(template_main_window *widgets, char *get_global_command, char *get_local_command,char *get_custom_command, char *get_default_command, char *get_global_only_command, char *get_local_only_command){ if (!yon_char_is_empty(get_global_command)){ - g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),NULL); - g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),NULL); + g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(__on_config_global_load),NULL); + g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(__on_config_global_load),NULL); config_get_global_command = yon_char_new(get_global_command); config_set_global_command = yon_char_replace_single(get_global_command,"get","set"); } if (!yon_char_is_empty(get_global_command)){ - g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),NULL); - g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL); + g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(__on_config_local_load),NULL); + g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(__on_config_local_save),NULL); config_get_local_command = yon_char_new(get_local_command); config_set_local_command = yon_char_replace_single(get_local_command,"get","set"); } if (!yon_char_is_empty(get_global_command)){ - g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),NULL); - g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),NULL); + g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(__on_config_custom_load),NULL); + g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(__on_config_custom_load),NULL); config_get_custom_command = yon_char_new(get_custom_command); config_set_custom_command = yon_char_replace_single(get_custom_command,"get","set"); } diff --git a/source/libublsettingsui-gtk3.c b/source/libublsettingsui-gtk3.c index 94c26ee..43e1a0d 100644 --- a/source/libublsettingsui-gtk3.c +++ b/source/libublsettingsui-gtk3.c @@ -6,7 +6,7 @@ template_app_info template_app_information; static char *__yon_config_mode=NULL; -void config_init(); +void __yon_config_init(); char *yon_char_get_localised_from_lib(char *string){ textdomain(template_ui_LocaleName); @@ -131,7 +131,6 @@ void on_about(GtkWidget *self, char *version_application){ //functions - int yon_confirmation_dialog_call(GtkWidget *self,dialog_confirmation_data *data){ textdomain(template_ui_LocaleName); GtkWidget *dialog = gtk_dialog_new_with_buttons(template_app_information.app_title,GTK_WINDOW(gtk_widget_get_toplevel(self)),GTK_DIALOG_USE_HEADER_BAR,CANCEL_LABEL,GTK_RESPONSE_CANCEL,ACCEPT_LABEL,GTK_RESPONSE_ACCEPT,NULL); @@ -149,7 +148,7 @@ int yon_confirmation_dialog_call(GtkWidget *self,dialog_confirmation_data *data) gtk_style_context_add_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(list,1)),"marginright"); g_list_free(list); - GtkWidget *header_label = gtk_label_new(template_app_information.app_title); + GtkWidget *header_label = gtk_label_new(yon_char_is_empty(data->title)?template_app_information.app_title:data->title); gtk_widget_show(header_label); PangoAttrList *attributes = pango_attr_list_new(); PangoAttribute *boldAttr = pango_attr_weight_new(PANGO_WEIGHT_BOLD); @@ -192,6 +191,15 @@ int yon_confirmation_dialog_call(GtkWidget *self,dialog_confirmation_data *data) return resp; } +dialog_confirmation_data *yon_confirmation_dialog_data_new(){ + dialog_confirmation_data *data = new(dialog_confirmation_data); + data->action_text=NULL; + data->data=NULL; + data->function=NULL; + data->title=NULL; + return data; +} + char* yon_debug_output(char *pattern,char*text){ if (template_config->debug_mode){ printf(pattern,text); @@ -221,7 +229,7 @@ int yon_ubl_connect_config(_template_config *config){ else replaces=1; template_config = config; - config_init(); + __yon_config_init(); return replaces; } @@ -509,7 +517,7 @@ void yon_root_button_setup(template_main_window *widgets, config_str args, int a textdomain(template_app_information.app_locale); } -void config_init(){ +void __yon_config_init(){ template_config->always_open_documentation=0; template_config->socket_id=-1; template_config->save_socket_id=-1; diff --git a/source/libublsettingsui-gtk3.h b/source/libublsettingsui-gtk3.h index 0dcbb0e..d98dc80 100644 --- a/source/libublsettingsui-gtk3.h +++ b/source/libublsettingsui-gtk3.h @@ -160,6 +160,7 @@ typedef struct { void (*function)(void*,void*); void *data; char *action_text; + char *title; } dialog_confirmation_data; typedef struct { @@ -178,6 +179,9 @@ filechooser_window *yon_file_chooser_window_new(GtkFileChooserAction action); GtkResponseType yon_file_chooser_start(filechooser_window *window); void yon_file_chooser_set_button_label(char *label); + +dialog_confirmation_data *yon_confirmation_dialog_data_new(); + int yon_confirmation_dialog_call(GtkWidget *self,dialog_confirmation_data *data); /**yon_open_browser(GtkWidget *self, char *link) -- 2.35.1 From 4e1bd0ccb9669fba55ef1723a73e6578f8011e19 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 30 Apr 2025 18:03:38 +0600 Subject: [PATCH 7/7] Added enumerator --- source/libublsettingsui-gtk3.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/libublsettingsui-gtk3.h b/source/libublsettingsui-gtk3.h index d98dc80..822bf0b 100644 --- a/source/libublsettingsui-gtk3.h +++ b/source/libublsettingsui-gtk3.h @@ -281,6 +281,17 @@ void yon_save_window_set_postsave_failure_function(void *function, void *data); char *yon_get_default_label_with_parameter(char *command); +enum YON_SAVE_COLUMNS { + YON_SAVE_CHECKED, + YON_SAVE_PARAMETER, + YON_SAVE_OLD, + YON_SAVE_NEW, + YON_SAVE_COMPARE, + YON_SAVE_COLOR, + YON_SAVE_VISIBLE, + YON_SAVE_SECTION +}; + template_saving_window *yon_save_proceed(char *path,YON_CONFIG_TYPE type, ...); void yon_on_space_first_changed(GtkEntry *editable); -- 2.35.1