WIP ubl-settings-bootloader C rework

pull/83/head
parent fd5b9ce76b
commit 8dac902ceb

15
.gitignore vendored

@ -1,7 +1,12 @@
ubl-settings-bootloader.glade~
test.cpp
.vscode
.vscode/
ubl-settings-bootloader
ubl-settings-bootloader_ru.po~
*~
build/
compile/
*#
terminal-commands/
compile/
source/ubl-cmake.h
vgcore*
.BUILD.md
.updatebuild.sh
.install.sh

@ -3,20 +3,15 @@ project(ubl-settings-bootloader)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})
add_definitions(${GTK3_CFLAGS_OTHER})
pkg_check_modules(GTK REQUIRED gtk+-3.0)
include_directories(${GTK_INCLUDE_DIRS})
link_directories(${GTK_LIBRARY_DIRS})
add_definitions(${GTK_CFLAGS_OTHER})
pkg_check_modules(GTKMM30 REQUIRED gtkmm-3.0)
include_directories(${GTKMM30_INCLUDE_DIRS})
link_directories(${GTKMM30_LIBRARY_DIRS})
add_definitions(${GTKMM30_CFLAGS_OTHER})
#pkg_check_modules(VTE291 REQUIRED vte-2.91)
#include_directories(${VTE291_INCLUDE_DIRS})
#link_directories(${VTE291_LIBRARY_DIRS})
#add_definitions(${VTE291_CFLAGS_OTHER})
pkg_check_modules(VTE291 REQUIRED vte-2.91)
include_directories(${VTE291_INCLUDE_DIRS})
link_directories(${VTE291_LIBRARY_DIRS})
add_definitions(${VTE291_CFLAGS_OTHER})
find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
@ -29,10 +24,6 @@ if(WEBKIT_LIBRARIES_FOUND)
add_definitions(${WEBKIT_CFLAGS_OTHER})
endif()
configure_file(ubl-cmake.in ubl-cmake.h)
file(COPY ${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h DESTINATION ./)
set(GRESOURCE_C resources.c)
set(GRESOURCE_XML gresource.xml)
@ -66,41 +57,34 @@ add_custom_target(
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}
)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \
add_definitions(-DVTE_INCLUDE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \
-O2 -pipe -fno-plt -fexceptions \
-Wformat -Werror=format-security \
-fstack-clash-protection -fcf-protection")
string(FIND "${CMAKE_CXX_FLAGS}" "-D_FORTIFY_SOURCE" FORTIFY_FOUND)
string(FIND "${CMAKE_CXX_FLAGS}" "-D_FORTIFY_SOURCE" FORTIFY_FOUND)
if(FORTIFY_FOUND EQUAL -1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wp,-D_FORTIFY_SOURCE=2")
endif()
if(FORTIFY_FOUND EQUAL -1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wp,-D_FORTIFY_SOURCE=2")
endif()
set(SOURCE_FILES
menu_os.h
menu_os.cc
ubl-settings-bootloader.c
ubl-settings-bootloader.h
ubl-settings-bootloader.cc
save.h
save.cc
load.h
load.cc
my_process.h
my_process.cc
util.h
util.cc
ubl-util-standard.h
ubl-util-standard.c
main.cc
${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h)
ubl-strings.h
)
set(LIBRARIES
${GTK_LIBRARIES}
${GTKMM30_LIBRARIES}
${WEBKIT_LIBRARIES}
# ${VTE291_LIBRARIES}
pthread)
${UTILS_LIBRARIES}
${VTE291_LIBRARIES}
pthread
ublsettings
ublsettings-gtk3
ublsettingsui-gtk3)
add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C})
@ -111,5 +95,4 @@ set_source_files_properties(
PROPERTIES GENERATED TRUE
)
install(TARGETS ${PROJECT_NAME} DESTINATION bin)
add_dependencies(${PROJECT_NAME} dummy-resource)
add_dependencies(${PROJECT_NAME} dummy-resource)

@ -1,34 +0,0 @@
#include "load.h"
namespace Lib_Load{
void Load::set_count_error(int count_error) {
process.set_count_error(count_error);
}
string Load::get_cmd_error() {
return process.get_cmd_error();
}
map<string, string>& Load::get_load_data(std::map <string, string> &map_temp, string cmd) {
string response = "";
string key = "";
string value = "";
response = process.call_all_sections(cmd);
vector<string> vec_str_key_value = Utils::split(response, '\n');
for (const string &param: vec_str_key_value) {
if ((param.find("(null)") == std::string::npos) && (param.length() != 0 )) {
if (param.find("=") != std::string::npos) {
size_t index = param.find("=");
key = param.substr(0, index);
value = param.substr(index + 1, param.length());
Utils::str_replace_all(value, " \"","");
Utils::str_replace_all(value, "\"","");
map_temp[key] = value;
}
}
}
return map_temp;
}
int Load::get_count_error() {
return process.get_count_error();
}
}

@ -1,20 +0,0 @@
#ifndef LOAD_H
#define LOAD_H
#include "my_process.h"
namespace Lib_Load{
class Load {
private:
string sections;
My_Process::My_Process_call process = My_Process::My_Process_call();
public:
int get_count_error();
void set_count_error(int count_error);
string get_cmd_error();
map<string, string>& get_load_data(std::map <string, string> &map_temp, string str_flag_load);
};
}
#endif

@ -1,100 +0,0 @@
#include "ubl-settings-bootloader.h"
void pars_flag(int index_start, int argc, char* argv[]);
int main(int argc, char** argv) {
string str_argv= "";
string str_cmd_argv = "";
for (int i=1; i<argc; i++){
str_cmd_argv+= to_string(*argv[i]) + " ";
}
if (argc > 1){
str_argv = argv[1];
}
bindtextdomain("ubl-settings-bootloader", "/usr/share/locale/");
bind_textdomain_codeset("ubl-settings-bootloader", "UTF-8");
textdomain("ubl-settings-bootloader");
if (str_argv.find("--socket-id") != std::string::npos) {
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example.plug");
auto builder = Gtk::Builder::create_from_resource(path_glade);
Glib::init();
setlocale(LC_ALL, "");
Glib::OptionContext context;
CmdArgParser parser{
"Socket ID",
"Command line argument for socket ID communication.",
"No help available, sorry"
};
context.set_main_group(parser);
context.parse(argc, argv);
::Window socketID = parser.GetSocketID();
// Handle plug:
SettingsPlug plug{socketID, builder};
plug.show();
app->run(plug);
return 0;
}
else if (str_argv.find("-") != std::string::npos || argc == 1) {
int len_argv = 1;
auto app = Gtk::Application::create(len_argv, argv, "org.gtkmm.example.plug");
auto builder = Gtk::Builder::create_from_resource(path_glade);
pars_flag(1, argc, argv);
MainWindow* wnd = nullptr;
builder->get_widget_derived("window", wnd);
GObject *window_obj = G_OBJECT(wnd->gobj());
Utils::yon_window_config_setup(GTK_WINDOW(window_obj));
Utils::yon_window_config_load(ui_config_path);
wnd->settings();
wnd->event();
wnd->set_menu_os_to_button();
auto r = app->run(*wnd);
delete wnd;
return r;
}
}
void pars_flag(int index_start, int argc, char* argv[]) {
string str_argv = "";
for (int i = index_start; i<argc; i++){
str_argv = argv[i];
if (str_argv == "--help" || str_argv == "-h"){
help();
exit(1);
}
else if (str_argv == "--version" || str_argv == "-v"){
string version = string(str_version) + version_application + "\n";
cout << version.c_str();
exit(1);
}
else if (str_argv == "--lock-help") {
flag_lock_help = true;
}
else if (str_argv == "--lock-save") {
flag_save = true;
flag_save_local = true;
flag_save_global = true;
}
else if (str_argv == "--lock-save-local"){
flag_save_local = true;
}
else if (str_argv == "--lock-save-global"){
flag_save_global = true;
}
else if (str_argv == "--lock-load-global"){
flag_load_global = true;
}
else{
if (index_start == 1){
g_print(no_recognized);
}
}
}
}

@ -1,185 +0,0 @@
#include "menu_os.h"
Menu_os::Menu_os(/* args */)
{
}
Menu_os::~Menu_os()
{
}
void Menu_os::set_last_launched_os(string str_last_launched_os) {
this->str_last_launched_os = str_last_launched_os;
}
void Menu_os::set_builder(Glib::RefPtr<Gtk::Builder>& builder, string path_glade) {
this->builder = builder;
this->path_glade = path_glade;
builder->get_widget("revealerL1", revealerL1);
builder->get_widget("revealerL2", revealerL2);
builder->get_widget("boxALLL3", boxALLL3);
builder->get_widget("boxLevel1", boxLevel1);
builder->get_widget("btnToLev1", btnToLev1);
revealerL1->set_reveal_child(true);
}
void Menu_os::set_btnOpenMenuOS(Gtk::Button *btnOpenMenuOS) {
this->btnOpenMenuOS = btnOpenMenuOS;
}
void Menu_os::set_map(vector<tuple<string, vector<string>>> &vec_list_os) {
this->vec_list_os = vec_list_os;
}
void Menu_os::init() {
revealerL1->set_reveal_child(true);
revealerL2->set_reveal_child(true);
size_t index_l1 = 0;
string key = "";
for (tuple<string, vector<string>> tuple_os: vec_list_os) {
key = get<0>(tuple_os);
vector<string> vec_value = get<1>(tuple_os);
map_menu_level_1[key] = new struct_menu_level1;
Glib::RefPtr<Gtk::Builder> builder_level_1 = Gtk::Builder::create_from_resource(path_glade);
builder_level_1->get_widget("lblRevL1", map_menu_level_1[key]->lblRevL1);
builder_level_1->get_widget("btnToL2AndLv3", map_menu_level_1[key]->btnToL2AndLv3);
builder_level_1->get_widget("boxMenuLevel1", map_menu_level_1[key]->boxMenuLevel1);
map_menu_level_1[key]->btnToL2AndLv3_css = map_menu_level_1[key]->btnToL2AndLv3->get_style_context();
map_menu_level_1[key]->btnToL2AndLv3_css->add_class("noborder");
map_menu_level_1[key]->builder = builder_level_1;
boxLevel1->pack_start(*(map_menu_level_1[key]->boxMenuLevel1));
map_menu_level_1[key]->name = key;
this->html_last_launched_os(key, map_menu_level_1[key]->lblRevL1);
map_menu_level_1[key]->btnToL2AndLv3->signal_clicked().connect(
sigc::bind<Gtk::Label*, string&, string&> (sigc::mem_fun( *this,
&Menu_os::event_template), map_menu_level_1[key]->lblRevL1,
name_level_1, map_menu_level_1[key]->name));
if (vec_value.size()!= 0) {
builder_level_1->get_widget("revealerL3", map_menu_level_1[key]->revealer);
builder_level_1->get_widget("boxLevel3", map_menu_level_1[key]->boxLevel3);
boxALLL3->pack_start(*(map_menu_level_1[key]->revealer));
}
else {
map_menu_level_1[key]->revealer = NULL;
map_menu_level_1[key]->boxLevel3 = NULL;
}
size_t index_l3 = 0;
if (vec_value.size() == 0) {
builder_level_1->get_widget("btnToL2AndLv3Image", map_menu_level_1[key]->btnToL2AndLv3Image);
map_menu_level_1[key]->btnToL2AndLv3Image->hide();
}
else {
builder_level_1->get_widget("btnToL2AndLv3Image", map_menu_level_1[key]->btnToL2AndLv3Image);
}
for (string& str_level_3: vec_value) {
auto builder_level_3 = Gtk::Builder::create_from_resource(path_glade);
map_menu_level_1[key]->vec_menu_level_3.push_back(new struct_menu_level_3);
builder_level_3->get_widget("btnToL3",
map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3);
builder_level_3->get_widget("lblToL3",
map_menu_level_1[key]->vec_menu_level_3[index_l3]->lblToL3);
map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3_css =
map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3->get_style_context();
map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3_css->add_class("noborder");
this->html_last_launched_os(str_level_3, map_menu_level_1[key]->vec_menu_level_3[index_l3]->lblToL3);
map_menu_level_1[key]->boxLevel3->pack_start(
*(map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3));
map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3->signal_clicked().connect(
sigc::bind<Gtk::Label*, string&, string&> (sigc::mem_fun(*this,
&Menu_os::event_template), map_menu_level_1[key]->vec_menu_level_3[index_l3]->lblToL3,
name_level_3, map_menu_level_1[key]->name));
map_menu_level_1[key]->vec_menu_level_3[index_l3]->builder_level_3 = builder_level_3;
index_l3 += 1;
}
index_l1 += 1;
}
}
void Menu_os::close_revealer() {
for (auto& [key, values]: map_menu_level_1) {
if (values->revealer != NULL) {
values->revealer->set_reveal_child(false);
}
}
}
void Menu_os::set_main_revealer(Gtk::Revealer *revealer) {
this->main_revealer = revealer;
}
void Menu_os::show() {
revealerL1->set_reveal_child(true);
revealerL2->set_reveal_child(false);
this->close_revealer();
main_revealer->set_reveal_child(true);
}
void Menu_os::event() {
btnToLev1->signal_clicked().connect(sigc::mem_fun(*this, &Menu_os::to_l1));
}
void Menu_os::set_entry(Gtk::Entry *entry) {
this->entry = entry;
}
void Menu_os::event_template(Gtk::Label* label, string& name_level, string& key) {
name_level = label->get_label();
key_global = key;
Utils::str_remove(name_level_1, "<b>");
Utils::str_remove(name_level_1, "</b>");
Utils::str_remove(name_level_3, "<b>");
Utils::str_remove(name_level_3, "</b>");
Gtk::Revealer *revealer = map_menu_level_1[key]->revealer;
if (&name_level == &name_level_1 && map_menu_level_1[key]->vec_menu_level_3.size() != 0) {
revealerL1->set_reveal_child(false);
revealerL2->set_reveal_child(true);
this->close_revealer();
revealer->set_reveal_child(true);
name_level_3 = "";
}
else if (map_menu_level_1[key]->vec_menu_level_3.size() == 0) {
entry->set_text(name_level_1);
name_level_3 = "";
main_revealer->set_reveal_child(false);
}
else {
main_revealer->set_reveal_child(false);
entry->set_text(name_level_1 + name_level_3);
}
}
void Menu_os::to_l1() {
revealerL1->set_reveal_child(true);
revealerL2->set_reveal_child(false);
map_menu_level_1[key_global]->revealer->set_reveal_child(false);
key_global = "";
}
void Menu_os::html_last_launched_os(string name_os, Gtk::Label *label) {
string margin_name_os = "";
size_t index_find = this->str_last_launched_os.find(">");
size_t len_last_launched_os = this->str_last_launched_os.length();
if (index_find != string::npos) {
string level_1 = this->str_last_launched_os.substr(0, index_find + 1);
string level_3 = this->str_last_launched_os.substr(index_find + 1, len_last_launched_os - 1);
if (name_os == level_1) {
margin_name_os = "<b>" + name_os + "</b>";
label->set_markup(margin_name_os);
}
else if (name_os == level_3) {
margin_name_os = "<b>" + name_os + "</b>";
label->set_markup(margin_name_os);
}
else {
label->set_text(name_os);
}
}
else {
if (this->str_last_launched_os == name_os) {
margin_name_os = "<b>" + name_os + "</b>";
label->set_markup(margin_name_os);
}
else {
label->set_text(name_os);
}
}
}

@ -1,71 +0,0 @@
#ifndef Menu_os_H
#define Menu_os_H
#include <gtkmm.h>
#include <map>
#include <iostream>
#include <vector>
#include "util.h"
using namespace std;
class Menu_os
{
private:
Glib::RefPtr<Gtk::Builder> builder;
vector<tuple<string, vector<string>>> vec_list_os;
Gtk::Revealer *revealerL1;
Gtk::Revealer *revealerL2;
Gtk::Button *btnToLev1;
Gtk::Revealer *main_revealer;
string str_last_launched_os = "";
private:
string name_level_1 = "";
string name_level_3 = "";
string key_global = "";
Gtk::Entry *entry;
string path_glade = "";
Gtk::Box *boxALLL3;
Gtk::Box *boxLevel1;
Gtk::Button *btnOpenMenuOS;
struct struct_menu_level_3 {
Gtk::Button *btnToL3;
Gtk::Label *lblToL3;
Glib::RefPtr<Gtk::Builder> builder_level_3;
Glib::RefPtr<Gtk::StyleContext> btnToL3_css;
};
struct struct_menu_level1 {
Gtk::Label *lblRevL1;
Gtk::Button *btnToL2AndLv3;
Gtk::MenuButton* btnToL2AndLv3Image;
Gtk::Revealer *revealer;
Gtk::Box *boxLevel3;
Gtk::Box *boxMenuLevel1;
string name;
Glib::RefPtr<Gtk::Builder> builder;
vector<struct struct_menu_level_3*> vec_menu_level_3;
Glib::RefPtr<Gtk::StyleContext> btnToL2AndLv3_css;
};
std::map<string, struct struct_menu_level1*> map_menu_level_1;
public:
Menu_os(/* args */);
void set_builder(Glib::RefPtr<Gtk::Builder>& builder, string path_glade);
void set_map(vector<tuple<string, vector<string>>> &vec_list_os);
void init();
void show();
void close_revealer();
void settings();
void html_last_launched_os(string name_os, Gtk::Label *label);
void set_last_launched_os(string str_last_launched_os);
void set_entry(Gtk::Entry *entry);
void event_template(Gtk::Label* label, string& name_level, string& key);
void event();
void set_main_revealer(Gtk::Revealer *revealer);
void set_btnOpenMenuOS(Gtk::Button *btnOpenMenuOS);
void to_l1();
~Menu_os();
};
#endif

@ -1,84 +0,0 @@
#include "my_process.h"
#include "util.h"
namespace My_Process {
#define debug false
struct Utils::Result<string> My_Process_call::call(string cmd) {
this->i_error_old = this->i_error;
struct Utils::Result<string> obj_result;
string response = Utils::call(cmd);
obj_result.response = response;
if ((response.find("(null)") == std::string::npos) && (response.length() != 0 )) {
if (response.find("=") != std::string::npos) {
if (response.find("\n") != std::string::npos) {
response = response.substr(response.find("=")+1,response.length());
response = response.substr(0,response.find("\n"));
obj_result.response = response;
obj_result.error = 0;
}
else {
obj_result.error = 1;
this->i_error += 1;
this->log_mess_error(cmd);
}
}
else {
obj_result.error = 2;
this->i_error += 1;
str_cmd_error = cmd;
this->log_mess_error(cmd);
}
}
else {
obj_result.error = 3;
this->i_error += 1;
str_cmd_error = cmd;
this->log_mess_error(cmd);
}
return obj_result;
}
int My_Process::get_count_error() {
return this->i_error;
}
void My_Process::set_back_count_error() {
this->i_error = this->i_error_old;
}
void My_Process_system::call(string cmd, string thread_str = "") {
string cmd_new = cmd + " " + thread_str;
int response_cmd = system(cmd_new.c_str());
if (response_cmd != 0) {
this->i_error += 1;
}
}
void My_Process::set_count_error(int count_error) {
this->i_error = count_error;
this->str_cmd_error = "";
}
void My_Process::log_mess_error(string) {
}
string My_Process::get_cmd_error() {
return this->str_cmd_error;
}
string My_Process_call::call_all_sections(string cmd) {
char buffer[PATH_MAX] = {0};
std::string result = "";
FILE* pipe = popen(cmd.c_str(), "r");
if (!pipe) throw std::runtime_error("popen() failed!");
try {
while (fgets(buffer, sizeof buffer, pipe) != NULL) {
result += buffer;
}
} catch (...) {
pclose(pipe);
throw;
}
pclose(pipe);
return result;
}
}

@ -1,32 +0,0 @@
#ifndef SAVE_H
#define SAVE_H
#include "util.h"
namespace My_Process{
class My_Process {
public:
int i_error = 0;
int i_error_old = 0;
string str_cmd_error = "";
int get_count_error();
void set_count_error(int count_error);
void set_back_count_error();
void log_mess_error(string);
string get_cmd_error();
};
class My_Process_call: public My_Process {
public:
struct Utils::Result<string> call(string cmd);
string call_all_sections(string cmd);
};
class My_Process_system: public My_Process {
public:
void call(string cmd, string thread_str);
};
}
#endif

@ -1,165 +0,0 @@
#include "save.h"
namespace Lib_save {
vector<string> Save::get_error() {
return this->vec_errors;
}
bool Save::get_state_save() {
return this->flag_no_save;
}
void Save::set_data_global(std::map <string, string> &map_global) {
this->map_global = &map_global;
}
void Save::set_data_local(std::map <string, string> &map_local) {
this->map_local = &map_local;
}
void Save::set_data_gui(std::map <string, string> &map_gui) {
this->map_gui = &map_gui;
}
bool Save::check_save(string flag_save, string key_name) {
std::map <string, string>:: iterator iter_map_data;
std::map <string, string>:: iterator iter_map_data_old;
std::map <string, string> *map_data_old=NULL;
if (flag_save == "system") {
map_data_old = map_local;
}
else if (flag_save == "global") {
map_data_old = map_global;
}
iter_map_data = (*map_gui).find(key_name);
iter_map_data_old = (*map_data_old).find(key_name);
if ((*map_local).find(key_name) != (*map_local).end() && (*map_global).find(key_name) != (*map_global).end()) {
if ((*map_local)[key_name] != (*map_global)[key_name]) {
return true;
}
}
if (iter_map_data_old == (*map_data_old).end() && iter_map_data != (*map_gui).end()) {
return true;
}
else if (iter_map_data->second != iter_map_data_old->second) {
return true;
}
else if (iter_map_data->second.length() == 0 && iter_map_data_old->second.length() == 0) {
return false;
}
else if (iter_map_data->second == iter_map_data_old->second) {
return false;
}
else {
return true;
}
return true;
}
bool Save::wrapper_check_save(string flag_save, string key_name) {
if (flag_save == "all") {
bool bool_flag_save = this->check_save("system", key_name);
if (bool_flag_save) {
return true;
}
return this->check_save("global", key_name);
}
else {
return this->check_save(flag_save, key_name);
}
}
int Save::get_count_error() {
return process.get_count_error();
}
string Save::get_cmd_error() {
return process.get_cmd_error();
}
void Save::set_count_error(int count_error) {
process.set_count_error(count_error);
}
void Save::set_vec_params(vector<string>& vec_param_names) {
this->vec_param_names = &vec_param_names;
}
void Save::save(string sections, string str_flag_save) {
string key = "";
string value = "";
string cmd = "";
string str_error = "";
this->flag_no_save = true;
for (const auto &key: *vec_param_names) {
if (map_gui->find(key) != map_gui->end()) {
value = (*map_gui)[key];
if (this->wrapper_check_save(str_flag_save, key)) {
if (value.length() != 0) {
cmd = "ubconfig --target " + str_flag_save + " set " + sections + " " +
key + "=\"" + value + "\"";
}
else if (value.length() == 0) {
cmd = "ubconfig --target " + str_flag_save + " remove " + sections + " " + key;
}
else {
cmd = "";
}
if (cmd.length() != 0) {
process.call(cmd, "");
this->flag_no_save = false;
str_error = process.get_cmd_error();
if (str_error.length() != 0) {
this->vec_errors.push_back(str_error);
str_error = "";
}
}
}
}
}
}
void Save::save_one_cmd(string cmd1, string cmd_remove, string str_flag_save) {
string key = "";
string value = "";
string cmd = "";
this->flag_no_save = true;
cmd = cmd1;
string remove = cmd_remove;
for (const auto &key: *vec_param_names) {
if (map_gui->find(key) != map_gui->end()) {
value = (*map_gui)[key];
if (this->wrapper_check_save(str_flag_save, key)) {
if (value.length() != 0) {
cmd = cmd + key + "=\"" + value + "\" ";
}
else if (value.length() == 0) {
remove = remove + key + " ";
}
}
}
}
if (cmd.length() != cmd1.length()) {
this->template_save(cmd);
}
if (cmd_remove.length() != remove.length()) {
this->template_save(remove);
}
}
void Save::template_save(string cmd) {
string str_error = "";
process.call(cmd, "");
this->flag_no_save = false;
str_error = process.get_cmd_error();
if (str_error.length() != 0) {
this->vec_errors.push_back(str_error);
str_error = "";
}
}
}

@ -1,33 +0,0 @@
#ifndef MY_PROCESS_H
#define MY_PROCESS_H
#include "my_process.h"
namespace Lib_save {
class Save {
private:
std::map <string, string> *map_global;
std::map <string, string> *map_local;
std::map <string, string> *map_gui;
vector<string> vec_errors;
vector<string>* vec_param_names;
My_Process::My_Process_system process = My_Process::My_Process_system();
bool flag_no_save;
void template_save(string cmd);
public:
void set_data_global(std::map <string, string> &map_global);
void set_data_local(std::map <string, string> &map_local);
void set_data_gui(std::map <string, string> &map_gui);
bool check_save(string flag_save, string key_name);
bool get_state_save();
bool wrapper_check_save(string flag_save, string key_name);
void save_one_cmd(string cmd1, string cmd_remove, string str_flag_save);
int get_count_error();
string get_cmd_error();
void set_count_error(int count_error);
void set_vec_params(vector<string>& vec_param_names);
void save(string sections, string str_flag_save) ;
vector<string> get_error();
};
}
#endif

@ -1 +0,0 @@
#cmakedefine WEBKIT_FOUND

@ -0,0 +1,166 @@
#include "ubl-settings-bootloader.h"
config main_config;
//functions
void on_save_done(main_window *, config_str output, int size){
char *final_output = yon_char_parsed_to_string(output,size,"");
if (final_output){
printf("%s\n",final_output);
free(final_output);
}
yon_char_parsed_free(output,size);
textdomain(template_ui_LocaleName);
switch (main_config.save_config){
case 0:
yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
break;
case 1:
yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
break;
case 2:
yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
break;
}
textdomain(LocaleName);
}
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="";
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);
textdomain(LocaleName);
gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services");
gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL);
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=file;
}
gtk_widget_destroy(dialog);
} else {
gtk_widget_destroy(dialog);
}
char *command = yon_config_get_custom_command(path);
yon_config_load_config(type,command,NULL);
}
}
void yon_interface_update(main_window *){
}
// standard functions
/**config_init()
* [EN]
*
* [RU]
* Функция инициализации всех параметров конфигурации
*/
void config_init(){
main_config.always_open_documentation=0;
main_config.socket_id=-1;
main_config.save_socket_id=-1;
main_config.load_socket_id=-1;
main_config.lock_help=0;
main_config.lock_help=0;
main_config.lock_load_global=0;
main_config.lock_save_global=0;
main_config.lock_save_local=0;
main_config.load_mode=1;
}
/**yon_main_window_complete(main_window *widgets)
* [EN]
*
* [RU]
* Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом.
*/
void yon_main_window_complete(main_window *widgets){
widgets = yon_remalloc(widgets,sizeof(main_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0);
// Custom widgets configuration
{
widgets->BootRingtoneAddButton = yon_gtk_builder_get_widget(builder,"BootRingtoneAddButton");
widgets->BootRingtoneEditButton = yon_gtk_builder_get_widget(builder,"BootRingtoneEditButton");
widgets->BootRingtoneRemoveButton = yon_gtk_builder_get_widget(builder,"BootRingtoneRemoveButton");
widgets->BootRingtoneTree = yon_gtk_builder_get_widget(builder,"BootRingtoneTree");
widgets->BootUsersAddButton = yon_gtk_builder_get_widget(builder,"BootUsersAddButton");
widgets->BootUsersEditButton = yon_gtk_builder_get_widget(builder,"BootUsersEditButton");
widgets->BootUsersRemoveButton = yon_gtk_builder_get_widget(builder,"BootUsersRemoveButton");
widgets->BootUsersTree = yon_gtk_builder_get_widget(builder,"BootUsersTree");
widgets->BoxMain = yon_gtk_builder_get_widget(builder,"BoxMain");
widgets->boxWidgetAll = yon_gtk_builder_get_widget(builder,"boxWidgetAll");
widgets->btnAbout = yon_gtk_builder_get_widget(builder,"btnAbout");
widgets->btnHelp = yon_gtk_builder_get_widget(builder,"btnHelp");
widgets->btnLoadGlob = yon_gtk_builder_get_widget(builder,"btnLoadGlob");
widgets->btnLoadLocal = yon_gtk_builder_get_widget(builder,"btnLoadLocal");
widgets->btnOpenMenuOS1 = yon_gtk_builder_get_widget(builder,"btnOpenMenuOS1");
widgets->btnSaveGlob = yon_gtk_builder_get_widget(builder,"btnSaveGlob");
widgets->btnSaveLocal = yon_gtk_builder_get_widget(builder,"btnSaveLocal");
widgets->btnSaveLocalGlob = yon_gtk_builder_get_widget(builder,"btnSaveLocalGlob");
widgets->chbLoadVariantSelectionTimer = yon_gtk_builder_get_widget(builder,"chbLoadVariantSelectionTimer");
widgets->cmbDownloadMode = yon_gtk_builder_get_widget(builder,"cmbDownloadMode");
widgets->CommandLineParametersEntry = yon_gtk_builder_get_widget(builder,"CommandLineParametersEntry");
widgets->entrListOS = yon_gtk_builder_get_widget(builder,"entrListOS");
widgets->InputTerminalEntry = yon_gtk_builder_get_widget(builder,"InputTerminalEntry");
widgets->InputTerminalTree = yon_gtk_builder_get_widget(builder,"InputTerminalTree");
widgets->KernelParametersTree = yon_gtk_builder_get_widget(builder,"KernelParametersTree");
widgets->lblInfoDefaultDonw = yon_gtk_builder_get_widget(builder,"lblInfoDefaultDonw");
widgets->lblInfoSeconds = yon_gtk_builder_get_widget(builder,"lblInfoSeconds");
widgets->list_os = yon_gtk_builder_get_widget(builder,"list_os");
widgets->menu = yon_gtk_builder_get_widget(builder,"menu");
widgets->menu1 = yon_gtk_builder_get_widget(builder,"menu1");
widgets->menu2 = yon_gtk_builder_get_widget(builder,"menu2");
widgets->OutputTerminalEntry = yon_gtk_builder_get_widget(builder,"OutputTerminalEntry");
widgets->OutputTerminalTree = yon_gtk_builder_get_widget(builder,"OutputTerminalTree");
widgets->overMenuOS = yon_gtk_builder_get_widget(builder,"overMenuOS");
widgets->spbSecond = yon_gtk_builder_get_widget(builder,"spbSecond");
}
yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size);
yon_save_window_set_postsave_function(on_save_done,widgets);
}
int main(int argc, char *argv[]){
local=setlocale(LC_ALL, "");
textdomain (LocaleName);
config_init();
yon_ubl_connect_config((_template_config*)&main_config);
yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK);
config_str unfound = NULL;
int size=0;
yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL);
gtk_init(&argc,&argv);
template_main_window *widgets = yon_ubl_window_setup();
yon_main_window_complete((main_window*)widgets);
char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
yon_window_config_load(path);
main_config.launch_arguments=yon_char_parsed_copy(argv,argc);
main_config.launch_size=argc;
if (getuid()!=0){
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
textdomain(LocaleName);
}
gtk_main();
return 0;
}

File diff suppressed because it is too large Load Diff

@ -1,497 +1,111 @@
#include <cstddef>
#include <iostream>
#include <gtkmm.h>
#include <string>
#include <vector>
#include <stdio.h>
#include <gtkmm/stock.h>
#include <gtkmm/window.h>
#include <gtkmm/plug.h>
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include <locale.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <libintl.h>
#include <glibmm/i18n.h>
#include <map>
#include "ubl-util-standard.c"
#include "util.h"
#include "save.h"
#include "load.h"
#include <dlfcn.h>
#include "../compile/ubl-cmake.h"
#include "menu_os.h"
#ifdef WEBKIT_FOUND
#include <webkit2/webkit2.h>
#endif
#include "my_process.h"
using namespace std;
extern int socket_ext_id_I;
extern int socket_trd_id_I;
extern string version_application;
extern bool flag_save;
extern bool flag_save_local;
extern bool flag_save_global;
extern bool flag_load_global;
extern bool flag_lock_help;
void me_thread(string cmd);
#define minimal_width 640
#define minimal_height 500
#define str_tooltip_add_user _("Add user")
#define str_tooltip_del_user _("Delete user")
#define str_tooltip_add_melody _("Add melody")
#define str_tooltip_del_melody _("Delete melody")
#define str_tooltip_boot_menu _("Selecting the loading mode option")
#define copyright _("Copyright © UBSoft LLC, 2022 - ")
#define name_app _("System boot")
#define website _("https://wiki.ublinux.com")
#define project_Home_page _("Project homepage")
#define configuring_system_boot _("Configuring system boot parameters")
#define system_boot _("System boot setup")
#define str_about _("About System boot")
#define command_line_parameters _("Command line parameters:")
#define load_default _("Load default:")
#define seconds _("seconds")
#define download_menu _("Download menu")
#define terminal_for_input _("Terminal for input")
#define terminal_for_output _("Terminal for output")
#define boot_selection_menu_timer _("Boot selection menu timer:")
#define str_help _("Help")
#define str_about_1 _("About")
#define str_save _("Save")
#define str_load _("Load")
#define str_edit _("Edit")
#define str_adding _("Adding")
#define save_all _("Save configuration")
#define save_local _("Save in local configuration")
#define save_global _("Save in global configuration")
#define load_global _("Load global configuration")
#define load_local _("Load local configuration")
#define read_online _("Read online")
#define str_cancel _("Cancel")
#define always_redirect _("Always redirect")
#define boot_screen_display_mode _("Boot screen display mode:")
#define no_loading_animation_800_600 _("No loading animation,\nfull log")
#define no_loading_animation _("No loading animation, full log")
#define boot_menu_user_name _("Boot menu user name:")
#define boot_menu_user_password _("Boot menu user password:")
#define last_successful_upload _("Last successful upload")
#define read_documentation_web _("Would you like to read documentation in the Web?")
#define redirected_documentation _("You will be redirected to documentation website where documentation is\n""translated and supported by community.")
#define user_name_configuration_editing_code _("User name to enter boot configuration editing mode")
#define user_password_configuration_edit_mode _("User password to enter boot configuration edit mode")
#define loading_animation_with _("Loading animation with log")
#define loading_animation_without _("Loading animation without log")
#define lack_loading_animation_800_600 _("Lack of loading animation with the\noutput of the abbreviated log")
#define lack_loading_animation _("Lack of loading animation with the output of the abbreviated log")
#define web_url _("https://wiki.ublinux.com")
#define enter_password _("Enter your password")
#define enter_login _("Enter login")
#define str_version _("ubl-settings-bootloader version: ")
#define local_read_error _("Local configuration reading error")
#define global_read_error _("Global configuration read error")
#define local_write_error _("Local configuration write error")
#define global_write_error _("Global configuration write error")
#define error_save_all _("Error saved local and global configuration")
#define local_load_ok _("Local configuration downloaded successfully")
#define global_load_ok _("Global configuration downloaded successfully")
#define local_ok_written _("Local configuration successfully written")
#define global_ok_written _("Global configuration successfully written")
#define successfully_save_all _("Successfully saved local and global configuration")
#define nothing_save _("Nothing to save!")
#define program_as_root _("The program must be run as root")
#define str_active _("Active")
#define str_option _("Option")
#define str_title _("Title")
#define str_user _("User")
#define str_password _("Password")
#define str_administrator _("Administrator")
#define str_select _("Select")
#define str_melody_code _("Melody code")
#define str_ringtone_at_startup _("Ringtone at startup")
#define str_description _("Description")
#define str_title_Boot_Menu_Users _("Boot Menu Users")
#define str_title_Ringtone_Startup _("Ringtone at startup")
#define str_null_melody_name _("Enter the name and code of the tune in the \"Ringtone at startup\" field")
#define str_null_username _("Enter name and password in the \"Boot Menu Users\" field")
#define str_help_h _("GTK settings bootloader for UBLinux\n" \
"\n" \
"Usage: ubl-settings-bootloader [OPTIONS...]\n" \
"Options:\n" \
" -h, --help\t Show this help\n" \
" -V, --version\t Show package version\n" \
" --lock-help Lock utility help\n" \
" --lock-save Lock saving local and global configuration\n" \
" --lock-save-local Lock save global configuration\n" \
" --lock-save-global Lock load global configuration\n" \
" --lock-load-global Lock load global configuration\n")
#define no_recognized _("Argument not recognized\n")
#define global_load "ubconfig --default --source global get boot"
#define system_load "ubconfig --default --source system get boot"
#define all_save "ubconfig set boot "
#define all_remove "ubconfig remove boot "
#define global_save "ubconfig --target global --noexecute set boot "
#define system_save "ubconfig --target system set boot "
#define global_remove "ubconfig --target global --noexecute remove boot "
#define system_remove "ubconfig --target system remove boot "
#define const_link_doc "https://wiki.ublinux.com/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubl-settings-bootloader"
#define cmd_xdg "xdg-open "
#define cmd_execute "su -l %s -c \" DISPLAY=$DISPLAY %s \""
#define icon_checked "com.ublinux.ubl-settings-bootloader.checked"
#define icon_warning "com.ublinux.ubl-settings-bootloader.warning"
#define kernel_csv "grub-cmdline-linux.csv"
#define melody_csv "grub-play.csv"
#define IPT_csv "grub-terminal-input.csv"
#define OTT_csv "grub-terminal-output.csv"
#define path_app "/usr/bin/"
#define path_glade "/com/ublinux/ui/ubl-settings-bootloader.glade"
#define path_css "/com/ublinux/css/ubl-settings-bootloader.css"
#define app_name "ubl-settings-bootloader"
#define path_resources "/usr/share/ubl-settings-bootloader"
#define path_img_head_background "/com/ublinux/images/ubl-settings-bootloader-banner.png"
#define ui_config_path Utils::yon_char_unite(Utils::yon_ubl_user_get_home_directory(),"/.config/",app_name,"/",app_name,".conf",NULL)
#define cmd_pars_list_os "/usr/lib/ublinux/scripts/grub-functions exec_get_all_menuentry"
#define cmd_last_launched_os "/usr/lib/ublinux/scripts/grub-functions exec_get_last_menuentry"
#define info_box_ok_css "boxInfoMessOK"
#define info_box_error_css "boxInfoMessError"
#define str_add_user _("User added")
#define str_add_melody _("Melody added")
#define str_del_user _("User deleted")
#define str_del_melody _("Melody deleted")
#define LAST_MODE_LABEL _("Last succeeded load mode")
class View_edit_add_table {
private:
Glib::RefPtr<Gtk::Builder> builder;
Gtk::Window* wndAddEditData;
Gtk::Button* btnCancel;
Gtk::Button* btnSaveEditSave;
Gtk::CheckButton* chkAddEdit;
Gtk::Entry* entryCol1;
Gtk::Entry* entryCol2;
Gtk::Label* lblAddEditCheckBox;
Gtk::Label* lblAddEditCol1;
Gtk::Label* lblAddEditCol2;
Gtk::Label* lblEditAddHead;
bool flag_save = false;
string mode_show = "";
public:
struct struct_data {
bool check;
string column1;
string column2;
};
struct struct_data old_data;
struct struct_data new_data;
public:
View_edit_add_table();
//~View_edit_add_table();
void settings();
void event();
void localization();
void cancel();
void save();
void check_space_entry();
void set_data(bool check, string column1, string column2);
struct struct_data get_data();
void show();
void show_melody_edit();
void show_melody_add();
void show_user_edit();
void show_user_add();
void get_builder();
};
class CmdArgParser : public Glib::OptionGroup
{
public:
CmdArgParser(const std::string &p_name, const std::string &p_description, const std::string &p_help);
::Window GetSocketID() const;
private:
int m_socketID = 0;
};
class MainWindow : public Gtk::ApplicationWindow
{
public:
class ModelColumns : public Gtk::TreeModel::ColumnRecord
{
public:
ModelColumns()
{
add(check_button), add(name);
add(description);
}
// Gtk::TreeModelColumn<Gtk::CheckButton> check_button;
Gtk::TreeModelColumn<bool> check_button;
Gtk::TreeModelColumn<Glib::ustring> name;
Gtk::TreeModelColumn<Glib::ustring> description;
};
class ModelColumnsUser : public Gtk::TreeModel::ColumnRecord
{
public:
ModelColumnsUser()
{
add(check_button), add(name);
add(password);
}
// Gtk::TreeModelColumn<Gtk::CheckButton> check_button;
Gtk::TreeModelColumn<bool> check_button;
Gtk::TreeModelColumn<Glib::ustring> name;
Gtk::TreeModelColumn<Glib::ustring> password;
};
class ModelColumnsMelody : public Gtk::TreeModel::ColumnRecord
{
public:
ModelColumnsMelody()
{
add(check_button), add(title);
add(melody_code);
}
// Gtk::TreeModelColumn<Gtk::CheckButton> check_button;
Gtk::TreeModelColumn<bool> check_button;
Gtk::TreeModelColumn<Glib::ustring> title;
Gtk::TreeModelColumn<Glib::ustring> melody_code;
};
ModelColumns m_columns;
ModelColumnsUser m_columns_user;
ModelColumnsMelody m_columns_melody;
Glib::RefPtr<Gtk::Builder> builder;
Gtk::Widget *plug = NULL;
Gtk::SpinButton *spbSecond;
Gtk::Label *lblBootMenuUsers;
Gtk::Label *lblRingtoneStartup;
Gtk::Label *lblInfoSeconds;
Gtk::Label *lblInfoDefaultDonw;
Gtk::Label *lblInfoCommand;
Gtk::Label *lblInfoCommand1;
Gtk::Label *lblHeaderAboutTopic;
Gtk::Label *lblInfoCommand2;
Gtk::Label *lblLoadMenu;
Gtk::Label *lblInfoInputTerminal;
Gtk::Label *lblInfoOutputTerminal;
Gtk::Label *lblHeaderName;
Gtk::Label *lblInfoHead;
Gtk::Button *btnAddUser;
Gtk::Button *btnRemoveUser;
Gtk::Button *btnAddMusic;
Gtk::Button *btnRemoveMusic;
Gtk::Button *btnEditUser;
Gtk::Button *btnEditMusic;
Gtk::CheckButton *chbVgaText;
Gtk::CheckButton *chbLoadVariantSelectionTimer;
Gtk::Entry *entryKernel;
Gtk::Entry *entryIPT;
Gtk::Entry *entryOTT;
Gtk::Box *boxColor;
Gtk::AboutDialog *aboutWindows;
Gtk::MenuItem *btnAbout;
Gtk::MenuItem *btnHelp;
Gtk::MenuItem *btnSaveLocalGlob;
Gtk::MenuItem *btnSaveLocal;
Gtk::MenuItem *btnSaveGlob;
Gtk::MenuItem *btnLoadGlob;
Gtk::MenuItem *btnLoadLocal;
Gtk::Button *btnLoad;
Gtk::Button *btnSave;
Gtk::Button *btnSettings;
Gtk::Widget *boxButton;
Gtk::Widget *boxSave;
Gtk::Box *boxInfoError;
Gtk::Box *boxWidgetAll;
Gtk::Label *lblWarning;
Gtk::Image *imgInfo;
Gtk::ButtonBox *btnBoxAboutDialog;
Gtk::TreeView *treeViewKernel;
Gtk::TreeView *treeViewIPT;
Gtk::TreeView *treeViewOTT;
Gtk::TreeView *treeViewUser;
Gtk::TreeView *treeViewMelody;
Gtk::Image *imgBG;
Gtk::Overlay *overHead;
Gtk::ComboBoxText *cmbDownloadMode;
Gtk::CheckButton *chbPasswordProtecc;
Gtk::Label *lblHeadeWndWeb;
Gtk::Label *lblwebHeaderName;
Gtk::Label *lblhelpText;
Gtk::Label *lblhelpHeader;
Gtk::CheckButton *chkAlwaysOpenHelp;
Gtk::Button *btnReadHelp;
Gtk::Button *btnCancelHelp;
Gtk::Window *wndShowWeb;
Gtk::Button *btnOpenMenuOS1;
Gtk::Entry *entrListOS;
Gtk::Overlay *overMenuOS;
Gtk::Revealer* revilerMenuOS;
std::vector<std::string> vec_Option_kernel;
std::vector<std::string> vec_Option_IPT;
std::vector<std::string> vec_Option_OTT;
Glib::RefPtr<Gtk::ListStore> list_store_kernel;
Glib::RefPtr<Gtk::ListStore> list_store_IPT;
Glib::RefPtr<Gtk::ListStore> list_store_OTT;
Glib::RefPtr<Gtk::ListStore> list_store_user;
Glib::RefPtr<Gtk::ListStore> list_store_melody;
#include <getopt.h>
#include <libintl.h>
#include <libublsettings.h>
#include <libublsettings-gtk3.h>
#include <libublsettingsui-gtk3.h>
#ifdef WEBKIT_FOUND
Gtk::Window *wndWeb;
Gtk::Widget *three;
WebKitWebView *my_web_kit = NULL;
#endif
Gtk::TreeModel::Row row_kernel;
Gtk::TreeModel::Row row_IPT;
Gtk::TreeModel::Row row_OTT;
Gtk::TreeModel::Row row_user;
Gtk::TreeModel::Row row_melody;
std::map<string, string> map_cmd_selection;
std::map<string, string> map_global_cmd_selection;
std::map<string, string> map_local_cmd_selection;
Gtk::TreeModel::iterator iter_user_del;
Gtk::TreeModel::iterator iter_melody_del;
bool flag_validate_del_user = false;
bool flag_validate_del_melody = false;
Gtk::Label *lblDownloadMode;
Lib_save::Save obj_save = Lib_save::Save();
Lib_Load::Load obj_load = Lib_Load::Load();
Menu_os obj_menu_os = Menu_os();
vector<string> vec_param_names;
My_Process::My_Process_system obj_process_system = My_Process::My_Process_system();
My_Process::My_Process_call obj_process_call = My_Process::My_Process_call();
View_edit_add_table obj_view_edit_add_table = View_edit_add_table();
bool flag_load = false;
bool flag_save_all = false;
bool flag_blocked_tree_view = false;
bool flag_save_block = false;
bool flag_open_browser = false;
string str_last_launched_os = "";
int index_error = 0;
string str_flag_load = "";
size_t size_kernel = 0;
size_t size_IPT = 0;
size_t size_OTT = 0;
size_t len_old_melody = 0;
size_t len_old_user = 0;
int old_height = 0;
int old_width = 0;
Glib::RefPtr<Gtk::StyleContext> boxInfo;
string str_cmd_error = "";
template <typename Type>
struct Result {
Type response;
int error;
};
public:
std::map<string, string> map_cmd_error;
string global_lick_doc = "";
MainWindow(BaseObjectType *obj, Glib::RefPtr<Gtk::Builder> const &builder);
MainWindow(Glib::RefPtr<Gtk::Builder> const &builder);
~MainWindow();
void open_browser();
void select_line_user(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter);
void set_entry_to_tree_view(Glib::RefPtr<Gtk::ListStore> &list_store, Gtk::Entry &entry, std::vector<std::string> &vec_Option, int size, string key);
void get_menu_boot(std::map<string, string> &map_temp);
void set_row_all(std::map<string, string> &map_cmd, Glib::RefPtr<Gtk::ListStore> &list_store, vector<string> &list_params, size_t size, string key);
void set_row(Glib::RefPtr<Gtk::ListStore> &list_store, int size, std::string name, bool flag_chbox);
void get_builder();
bool gui_exit(GdkEventAny *);
void init_dict(string flag_load);
void add_CSS();
void show_pass();
void localization();
void event();
void remove_user();
void remove_melody();
void settings();
void open_help();
void validate_melody();
void select_line_melody(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter);
void view_add_colums_user(Gtk::TreeView &treeView);
void view_add_colums_melody(Gtk::TreeView &treeView);
void set_bat_save(Gtk::Button *btnSave);
string pars_last_launched_os();
vector<string> pars_os(vector<string> &os_control_list);
void fn_event_intelMax1();
void fn_event_intelMax4();
void temp_help_show();
void set_data_cfg();
void set_data_csv_melody();
vector<tuple<string, vector<string>>> format_os_list(vector<string> &os_control_list);
void set_active_boot_second();
void get_download_mode(std::map<string, string> &map_temp);
void view_add_cell(Gtk::TreeModel::Row &row, Glib::RefPtr<Gtk::ListStore> list_store_m, std::array<std::vector<std::string>, 5> &arr_view, size_t index);
void wrapper_system(string cmd, string thread_str);
struct Result<string> wrapper_call(string cmd);
void log_mess_error(string &cmd);
void wrapper_save_all_cfg();
void wrapper_save_local_cfg();
void wrapper_save_global_cfg();
bool save_template(string cmd, string cmd_remove, string flag_save);
void view_add_colums(Gtk::TreeView &treeView);
vector<string> read_file_and_view(string file_name, Gtk::TreeModel::Row &row, Glib::RefPtr<Gtk::ListStore> list_store_m);
void download_local_cfg();
void set_tree_view_user();
void template_open_browser(string link_doc);
void download_globl_cfg();
void flag_block_gui();
void info_status_app(string stule);
bool check_save(string flag_save, string key_name);
void info_warning_error(int mess);
int check_root();
void focus_out_txt_kernel();
void focus_out_txt_IPT();
void focus_out_txt_OTT();
bool focus_in_txt_entry(GdkEventFocus*);
void fill_in_view();
bool focus_tree_view(GdkEventFocus *);
bool check_flag_save(string flag_save);
void set_download_mode();
void get_default_load(std::map<string, string> &map_temp);
void set_entry(Gtk::Entry *entry, std::map<string, string> &map_temp, string key);
void load_template(std::map<string, string> *map_temp, string cmd);
vector<string> get_setting_entry_all(string key, std::map<string, string> *map_temp);
void cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cmd_remove);
void item_selected_kernel(const Gtk::TreeModel::Path &, const Gtk::TreeModel::iterator &);
void item_selected_OTT(const Gtk::TreeModel::Path &, const Gtk::TreeModel::iterator &);
void item_selected_IPT(const Gtk::TreeModel::Path &, const Gtk::TreeModel::iterator &);
string template_item_selected(int size, Glib::RefPtr<Gtk::ListStore> &list_store, string key);
void set_add_data_melody(Gtk::TreeModel::Row &row, bool flag, string &name, string &code);
void set_init_data_melody(std::map<string, string> &map_temp);
void set_add_data_user(Gtk::TreeModel::Row &row, bool flag, string &name, string &password);
void set_init_data_user(std::map<string, string> &map_temp);
void set_init_data_superuser(std::map<string, string> &map_temp);
bool intel_idle_cstate_check(int size, Glib::RefPtr<Gtk::ListStore> &list_store, string key);
void wrapper_add_data_user();
void wrapper_add_data_melody();
void check_resize_window();
void set_plug(Gtk::Widget *plug);
void wrapper_edit_show_user();
void wrapper_edit_show_melody();
void wrapper_edit_melody(bool check, string column1, string column2);
void wrapper_edit_user(bool check, string column1, string column2);
void wrapper_set_add_data_melody(bool flag, string &name, string &code);
void wrapper_set_add_data_user(bool flag, string &name, string &password);
void set_menu_os_to_button();
};
class SettingsPlug : public Gtk::Plug
{
public:
Gtk::Window *window;
SettingsPlug(::Window p_socketID, Glib::RefPtr<Gtk::Builder> builder);
private:
Gtk::Widget *plugBox;
Gtk::Widget *parent;
};
void help();
void wrapper_help_show(GtkWidget *self, char* link, gpointer user_data);
#include <webkit2/webkit2.h>
#endif
#include "ubl-strings.h"
#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubl-settings-bootloader"
#define _(String) gettext(String)
#define glade_path "/com/ublinux/ui/ubl-settings-bootloader.glade"
#define banner_path "/com/ublinux/images/ubl-settings-bootloader-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-bootloader.css"
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
#define icon_path "com.ublinux.ubl-settings-bootloader"
#define LocaleName "ubl-settings-bootloader"
#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get system PARAMETERS",NULL)
#define config_get_local_command "ubconfig --source system get system PARAMETERS"
#define config_get_global_command "ubconfig --source global get system PARAMETERS"
#define config_get_default_command ""
#define config_get_global_only_parameters ""
#define config_get_local_only_parameters ""
typedef char* string;
string version_application;
char *local;
typedef struct {
template_config_fields
int save_config;
config_str launch_arguments;
int launch_size;
} config;
typedef struct {
template_window_fields
GtkWidget *BootRingtoneAddButton;
GtkWidget *BootRingtoneEditButton;
GtkWidget *BootRingtoneRemoveButton;
GtkWidget *BootRingtoneTree;
GtkWidget *BootUsersAddButton;
GtkWidget *BootUsersEditButton;
GtkWidget *BootUsersRemoveButton;
GtkWidget *BootUsersTree;
GtkWidget *BoxMain;
GtkWidget *boxWidgetAll;
GtkWidget *btnAbout;
GtkWidget *btnHelp;
GtkWidget *btnLoadGlob;
GtkWidget *btnLoadLocal;
GtkWidget *btnOpenMenuOS1;
GtkWidget *btnSaveGlob;
GtkWidget *btnSaveLocal;
GtkWidget *btnSaveLocalGlob;
GtkWidget *chbLoadVariantSelectionTimer;
GtkWidget *cmbDownloadMode;
GtkWidget *CommandLineParametersEntry;
GtkWidget *entrListOS;
GtkWidget *InputTerminalEntry;
GtkWidget *InputTerminalTree;
GtkWidget *KernelParametersTree;
GtkWidget *lblInfoDefaultDonw;
GtkWidget *lblInfoSeconds;
GtkWidget *list_os;
GtkWidget *menu;
GtkWidget *menu1;
GtkWidget *menu2;
GtkWidget *OutputTerminalEntry;
GtkWidget *OutputTerminalTree;
GtkWidget *overMenuOS;
GtkWidget *spbSecond;
} main_window;
typedef struct {
GtkWidget *Window;
GtkWidget *HeaderLabel;
GtkWidget *AlwaysOpenCheck;
GtkWidget *CloseButton;
GtkWidget *AcceptButton;
} documentation_confirmation_window;
void on_save_done(main_window *, config_str output, int size);
void yon_load_proceed(YON_CONFIG_TYPE type);
void yon_interface_update(main_window *);
void on_save_done(main_window *widgets, config_str output, int size);
void config_init();
void yon_main_window_complete(main_window *widgets);

@ -1 +0,0 @@
#cmakedefine WEBKIT_FOUND

@ -0,0 +1,3 @@
#define TITLE_LABEL _("ubl-settings-bootloader")
#define TITLE_INFO_LABEL _("TEMPLATE configuration")

@ -1,91 +0,0 @@
#include "ubl-util-standard.h"
#ifndef __cplusplus
#ifndef UBL_GET_STANDARD_UI
#define UBL_GET_STANDARD_UI
inline returnstruct *ubl_make_plugs(GtkWidget *LeftWidget, GtkWidget *RightWidget, int left_plug_id, int right_plug_id){
returnstruct *ret=(returnstruct*)malloc(sizeof(returnstruct*));
if (left_plug_id>0&&LeftWidget){
GtkWidget *plug=gtk_plug_new(left_plug_id);
GtkWidget *toplug=LeftWidget;
if (gtk_widget_get_parent(GTK_WIDGET(toplug))){
g_object_ref(G_OBJECT(toplug));
GtkWidget *parent=gtk_widget_get_parent(toplug);
gtk_container_remove(GTK_CONTAINER(parent),toplug);
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
} else
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
gtk_widget_show(GTK_WIDGET(plug));
ret->plugLeft=plug;
}
if (right_plug_id>0&&RightWidget){
GtkWidget *plug=gtk_plug_new(right_plug_id);
GtkWidget *toplug=RightWidget;
if (gtk_widget_get_parent(GTK_WIDGET(toplug))){
g_object_ref(G_OBJECT(toplug));
GtkWidget *parent=gtk_widget_get_parent(toplug);
gtk_container_remove(GTK_CONTAINER(parent),toplug);
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
} else
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
gtk_widget_show(GTK_WIDGET(plug));
ret->plugRight=plug;
}
return ret;
}
#endif
#else
inline void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, int left_plug_id, int right_plug_id){
if (left_plug_id>0&&LeftWidget){
GtkWidget *plug=gtk_plug_new(left_plug_id);
GtkWidget *toplug=GTK_WIDGET(LeftWidget->gobj());
{GdkScreen *screen = gtk_widget_get_screen(plug);
gtk_widget_set_app_paintable(plug,TRUE);
GdkVisual *colormap = gdk_screen_get_rgba_visual(screen);
gtk_widget_set_visual(plug, colormap);}
{GdkScreen *screen = gtk_widget_get_screen(toplug);
gtk_widget_set_app_paintable(toplug,TRUE);
GdkVisual *colormap = gdk_screen_get_rgba_visual(screen);
gtk_widget_set_visual(toplug, colormap);}
if (gtk_widget_get_parent(GTK_WIDGET(toplug))){
g_object_ref(G_OBJECT(toplug));
GtkWidget *parent=gtk_widget_get_parent(toplug);
gtk_container_remove(GTK_CONTAINER(parent),toplug);
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
} else
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
gtk_widget_show(GTK_WIDGET(plug));
gtk_style_context_add_class(gtk_widget_get_style_context(plug),"bkim");
gtk_style_context_add_class(gtk_widget_get_style_context(toplug),"bkim");
gtk_style_context_add_class(gtk_widget_get_style_context(plug),"primary-toolbar");
}
if (right_plug_id>0&&RightWidget){
GtkWidget *plug=gtk_plug_new(right_plug_id);
GtkWidget *toplug=GTK_WIDGET(RightWidget->gobj());
{GdkScreen *screen = gtk_widget_get_screen(plug);
gtk_widget_set_app_paintable(plug,TRUE);
GdkVisual *colormap = gdk_screen_get_rgba_visual(screen);
gtk_widget_set_visual(plug, colormap);}
{GdkScreen *screen = gtk_widget_get_screen(toplug);
gtk_widget_set_app_paintable(toplug,TRUE);
GdkVisual *colormap = gdk_screen_get_rgba_visual(screen);
gtk_widget_set_visual(toplug, colormap);}
if (gtk_widget_get_parent(GTK_WIDGET(toplug))){
g_object_ref(G_OBJECT(toplug));
GtkWidget *parent=gtk_widget_get_parent(toplug);
gtk_container_remove(GTK_CONTAINER(parent),toplug);
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
} else
gtk_container_add(GTK_CONTAINER(plug),GTK_WIDGET(toplug));
gtk_widget_show(GTK_WIDGET(plug));
gtk_style_context_add_class(gtk_widget_get_style_context(plug),"bkim");
gtk_style_context_add_class(gtk_widget_get_style_context(toplug),"bkim");
gtk_style_context_add_class(gtk_widget_get_style_context(plug),"primary-toolbar");
}
}
#endif

@ -1,20 +0,0 @@
#ifndef __cplusplus
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
typedef struct {
GtkWidget *plugLeft;
GtkWidget *plugRight;
} returnstruct;
static returnstruct *ubl_make_plugs(GtkWidget *LeftWidget, GtkWidget *RightWidget, int left_plug_id, int right_plug_id);
#else
#include <gtkmm.h>
#include <gtkmm/stock.h>
#include <gtkmm/window.h>
#include <gtkmm/plug.h>
static void ubl_make_plugs(Gtk::Widget *LeftWidget, Gtk::Widget *RightWidget, int left_plug_id, int right_plug_id);
#endif

@ -1,467 +0,0 @@
#include "util.h"
namespace Utils {
array<vector<string>, 5> read_csv(const string& filename) {
array<vector<string>, 5> array_vectors;
vector<string> vec_option;
vector<string> vec_opcision;
ifstream file(filename);
string line;
char delimiter = '|';
getline(file, line);
while (getline(file, line)) {
stringstream stream(line);
string option;
string opcision;
getline(stream, option, delimiter);
string line_local = stream.str();
if (line_local.find("\"") != string::npos) {
string str_delimiter = "\"";
vector<int> point = find_all(line_local, str_delimiter);
size_t len = point.size();
if (len >= 2) {
int index_start = point[len-2];
int index_end = point[len-1];
opcision = line_local.substr(index_start, index_end);
index_end = opcision.find("\"");
if (opcision.find("\"") != string::npos) {
opcision.replace(index_end, opcision.length(), "");
}
}
else {
opcision = "error";
}
}
else{
getline(stream, opcision, delimiter);
}
vec_option.push_back(option);
vec_opcision.push_back(opcision);
}
array_vectors[0] = vec_option;
array_vectors[1] = vec_opcision;
return array_vectors;
}
void write_file(string path_name, string data) {
ofstream fout(path_name, ios_base::out | ios_base::trunc);
if (fout.is_open()) {
fout << data;
fout.close();
}
}
vector<tuple<string, string>> read_csv_melody(const string& filename) {
vector<tuple<string, string>> vec_music;
ifstream file(filename);
string line;
char delimiter = '|';
getline(file, line);
while (getline(file, line)) {
stringstream stream(line);
string name;
string code;
getline(stream, name, delimiter);
getline(stream, code, delimiter);
tuple<string, string> tuple_music(name, code);
vec_music.push_back(tuple_music);
}
return vec_music;
}
string call(string cmd) {
FILE *fp;
int status;
char path[PATH_MAX] = {0};
fp = popen(cmd.c_str(), "r");
if (fp == NULL) {
exit(1);
}
while (fgets(path, PATH_MAX, fp) != NULL) {
break;
}
status = pclose(fp);
if (status == -1) {
exit(1);
}
return path;
}
vector<int> find_all(string &str_ntp, string substr) {
size_t index = 0;
vector<int> sub_index;
while ((index = str_ntp.find(substr, index)) != std::string::npos) {
index += substr.length();
sub_index.push_back(index);
}
return sub_index;
}
void str_remove(std::string& source, std::string to_remove) {
string::size_type n = to_remove.length();
for (string::size_type i = source.find(to_remove);
i != string::npos;
i = source.find(to_remove))
source.erase(i, n);
}
void str_replace_all(std::string& str_base, string str_find, string sReplacement)
{
size_t pos = 0, fpos;
while ((fpos = str_base.find(str_find, pos)) != std::string::npos)
{
str_base.replace(fpos, str_find.size(), sReplacement);
pos = fpos + sReplacement.size();
}
}
std::vector<std::string> split(std::string text, char delim) {
std::string line;
std::vector<std::string> vec;
std::stringstream ss(text);
while(std::getline(ss, line, delim)) {
vec.push_back(line);
}
return vec;
}
char *yon_char_new(char *chr)
{
if (chr){
char *newchar = (char*)malloc(strlen(chr) + 1);
memset(newchar, 0, strlen(chr) + 1);
memcpy(newchar, chr, strlen(chr));
return newchar;
} else
return NULL;
}
char *yon_char_append(char *source, char *append)
{
if (source && append)
{
int size = strlen(source) + strlen(append) + 1;
char *final = (char*)malloc(size);
memset(final, 0, size);
// if (strstr(source, "%%"))
// sprintf(final, source, append);
// else
sprintf(final, "%s%s", source, append);
return final;
}
else
return NULL;
}
char *yon_char_unite(char *source, ...){
va_list arglist;
char *new_char=NULL;
char *unite_char=NULL;
new_char=yon_char_new(source);
va_start(arglist,source);
unite_char = va_arg(arglist,char*);
while(unite_char){
new_char = yon_char_append(new_char,unite_char);
unite_char = va_arg(arglist,char*);
}
va_end(arglist);
return new_char;
}
char *yon_char_divide(char *source, int dividepos)
{
if (source&&(int)strlen(source)>=dividepos){
char *cut = (char*)malloc(dividepos + 1);
memset(cut, 0, dividepos + 1);
memcpy(cut, source, dividepos);
char *left = (char*)malloc(strlen(source) - strlen(cut));
memset(left, 0, strlen(source) - strlen(cut));
memcpy(left, source + dividepos + 1, (strlen(source) - dividepos));
memset(source, 0, strlen(source));
memcpy(source, left, strlen(left));
return cut;
}
return NULL;
}
char *yon_char_divide_search(char *source, char *dividepos, int delete_divider)
{
if (delete_divider){};
if (source&&dividepos){
char *cut = strstr(source, dividepos);
if (cut)
{
int leng = strlen(source) - strlen(cut);
cut = yon_char_divide(source, leng);
return cut;
}
}
return source;
}
char **yon_char_parse(char *parameters, int *size, char *divider){
*size=0;
if (parameters){
char **string=NULL;
char *paramline=yon_char_new(parameters);
char *param = strstr(paramline,divider);
for (;param;param=strstr(paramline,divider)){
string = (!string) ? (char **)malloc(sizeof(char*)*((*size)+1)) : (char **)realloc(string, sizeof(char*)*((*size)+1));
string[(*size)]=yon_char_divide(paramline,strlen(paramline)-strlen(param));
*size=(*size)+1;
}
string = (!string) ? (char **)malloc(sizeof(char*)*((*size)+1)) : (char **)realloc(string, sizeof(char*)*((*size)+1));
string[(*size)]=paramline;
(*size)+=1;
return string;
}
return NULL;
}
#define check_window_config_setup if(__yon_window_config_target_window)
typedef struct {
char *parameter_name;
enum YON_TYPE containing_type;
GtkWidget *track_widget;
char *property_name;
} __yon_listener_parameter;
typedef struct {
char *parameter_name;
char *section;
enum YON_TYPE containing_type;
void *property;
} __yon_custom_parameter;
struct {
int x;
int y;
int width;
int height;
int fullscreen;
dictionary *custom_listeners;
dictionary *custom_parameters;
dictionary *deleted_parameters;
} __yon_main_window_config;
static GtkWindow *__yon_window_config_target_window = NULL;
static GKeyFile *__yon_window_config_file = NULL;
static char *__yon_window_config_path = NULL;
void yon_window_config_save();
void yon_window_config_save(){
if (__yon_window_config_path){
g_key_file_set_integer(__yon_window_config_file,"window","WindowPosX",__yon_main_window_config.x);
g_key_file_set_integer(__yon_window_config_file,"window","WindowPosY",__yon_main_window_config.y);
g_key_file_set_integer(__yon_window_config_file,"window","WindowWidth",__yon_main_window_config.width);
g_key_file_set_integer(__yon_window_config_file,"window","WindowHeight",__yon_main_window_config.height);
g_key_file_set_integer(__yon_window_config_file,"window","fullscreen",__yon_main_window_config.fullscreen);
dictionary *dict=NULL;
if (__yon_main_window_config.deleted_parameters)
for_dictionaries(dict,__yon_main_window_config.deleted_parameters){
__yon_custom_parameter *param = yon_dictionary_get_data(dict,__yon_custom_parameter*);
g_key_file_remove_key(__yon_window_config_file,param->section,param->parameter_name,NULL);
}
if (__yon_main_window_config.custom_listeners)
for_dictionaries(dict,__yon_main_window_config.custom_listeners){
__yon_listener_parameter *param = yon_dictionary_get_data(dict,__yon_listener_parameter*);
GValue *val = (GValue*)g_malloc0(sizeof(GValue));
g_object_get_property(G_OBJECT(param->track_widget),param->property_name,val);
switch(param->containing_type){
case YON_TYPE_STRING:
g_key_file_set_string(__yon_window_config_file,"window",param->parameter_name, g_value_get_string(val));
break;
case YON_TYPE_INT:
g_key_file_set_integer(__yon_window_config_file,"window",param->parameter_name, g_value_get_int(val));
break;
case YON_TYPE_BOOLEAN:
g_key_file_set_boolean(__yon_window_config_file,"window",param->parameter_name, g_value_get_boolean(val));
break;
case YON_TYPE_STRING_LIST:break;
case YON_TYPE_OTHER:printf("\033[0;31mCannot save %s property with %s key\033[0m\n",param->property_name,param->parameter_name);break;
}
}
if (__yon_main_window_config.custom_parameters)
for_dictionaries(dict,__yon_main_window_config.custom_parameters){
__yon_custom_parameter *param = yon_dictionary_get_data(dict,__yon_custom_parameter*);
switch (param->containing_type){
case YON_TYPE_STRING:
g_key_file_set_string(__yon_window_config_file,param->section,param->parameter_name, (char*)param->property);
break;
case YON_TYPE_INT:
g_key_file_set_integer(__yon_window_config_file,param->section,param->parameter_name, *(int*)param->property);
break;
case YON_TYPE_BOOLEAN:
g_key_file_set_boolean(__yon_window_config_file,param->section,param->parameter_name, *(gboolean*)param->property);
break;
case YON_TYPE_STRING_LIST:break;
default:
break;
}
}
g_key_file_save_to_file(__yon_window_config_file,__yon_window_config_path,NULL);
}
}
void yon_get_is_fullscreen();
void yon_get_is_fullscreen(){
gtk_window_is_maximized(__yon_window_config_target_window);
__yon_main_window_config.fullscreen = gtk_window_is_maximized(__yon_window_config_target_window);
if (!__yon_main_window_config.fullscreen) gtk_window_get_position(__yon_window_config_target_window,&__yon_main_window_config.x,&__yon_main_window_config.y);
}
/**yon_on_configured_window_destroy(GtkWidget* self,GdkEvent* event)
* [EN]
*
* [RU]
* Сохраняет настройки основного окна. Вызывается когда основное окно уничтожается.
*/
void yon_on_configured_window_destroy(GtkWidget* self,GdkEvent* event);
void yon_on_configured_window_destroy(GtkWidget* self,GdkEvent* event){
if (self&&event){};
check_window_config_setup{
yon_get_is_fullscreen();
yon_window_config_save();
}
exit(0);
}
void __yon_window_config_on_resize();
void __yon_window_config_on_resize(){
int max=0;
max=gtk_window_is_maximized(__yon_window_config_target_window);
if(max==0){
gtk_window_get_size(__yon_window_config_target_window,&__yon_main_window_config.width,&__yon_main_window_config.height);
gtk_window_get_position(__yon_window_config_target_window,&__yon_main_window_config.x,&__yon_main_window_config.y);
}
}
void yon_window_config_setup(GtkWindow *window){
__yon_window_config_target_window = window;
g_signal_connect(G_OBJECT(window),"delete-event",G_CALLBACK(yon_on_configured_window_destroy),NULL);
g_signal_connect(G_OBJECT(window),"check-resize"/*"configure-event"*/,G_CALLBACK(__yon_window_config_on_resize),NULL);
}
void *_yon_maximize(void *data);
void *_yon_maximize(void *data){
if (data){};
g_usleep(G_USEC_PER_SEC/10);
if(__yon_main_window_config.fullscreen ==1) gtk_window_maximize(__yon_window_config_target_window);
return NULL;
}
int yon_window_config_load(char *path){
if(__yon_window_config_target_window){
if (!access(path,0)){
__yon_window_config_file = g_key_file_new();
__yon_window_config_path=yon_char_new(path);
if (!g_key_file_load_from_file(__yon_window_config_file,__yon_window_config_path,G_KEY_FILE_NONE,NULL)){
struct stat st;
int size;
config_str conf = yon_char_parse(yon_char_new(__yon_window_config_path),&size,(char*)"/");
char *path = yon_char_unite(conf[0],(char*)"/",conf[1],(char*)"/",conf[2],(char*)"/",conf[3],(char*)"/",conf[4],(char*)"/",NULL);
if (stat(path, &st) == -1) {
mkdir(path, 0777);
}
FILE *fp;
fp=fopen(__yon_window_config_path,"w");
chmod(__yon_window_config_path,0777);
fclose(fp);
g_key_file_load_from_file(__yon_window_config_file,__yon_window_config_path,G_KEY_FILE_NONE,NULL);
}
__yon_main_window_config.x = g_key_file_get_integer(__yon_window_config_file,"window","WindowPosX",NULL);
__yon_main_window_config.y = g_key_file_get_integer(__yon_window_config_file,"window","WindowPosY",NULL);
__yon_main_window_config.width = g_key_file_get_integer(__yon_window_config_file,"window","WindowWidth",NULL);
__yon_main_window_config.height = g_key_file_get_integer(__yon_window_config_file,"window","WindowHeight",NULL);
__yon_main_window_config.fullscreen = g_key_file_get_integer(__yon_window_config_file,"window","fullscreen",NULL);
dictionary *dict=NULL;
if (__yon_main_window_config.custom_listeners)
for_dictionaries(dict,__yon_main_window_config.custom_listeners){
__yon_listener_parameter *param = yon_dictionary_get_data(dict,__yon_listener_parameter*);
GValue *val = (GValue*)g_malloc0(sizeof(GValue));
g_object_get_property(G_OBJECT(param->track_widget),param->property_name,val);
gboolean res=0;
switch(param->containing_type){
case YON_TYPE_STRING:
g_value_set_string(val,g_key_file_get_string(__yon_window_config_file,"window",param->parameter_name, NULL));
break;
case YON_TYPE_INT:
g_value_set_int(val,g_key_file_get_integer(__yon_window_config_file,"window",param->parameter_name, NULL));
break;
case YON_TYPE_BOOLEAN:
res = g_key_file_get_boolean(__yon_window_config_file,"window",param->parameter_name, NULL);
g_value_set_boolean(val,res);
break;
case YON_TYPE_STRING_LIST:break;
case YON_TYPE_OTHER:break;
}
g_object_set_property(G_OBJECT(param->track_widget),param->property_name,val);
}
if (__yon_main_window_config.width==0) __yon_main_window_config.width=800;
if (__yon_main_window_config.height==0) __yon_main_window_config.height=600;
gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height);
gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y);
pthread_t tid;
pthread_create(&tid, NULL, (&_yon_maximize), NULL);
return 1;
}
}
return 0;
}
void yon_window_config_apply();
void yon_window_config_apply(){
gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y);
gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height);
}
config_str yon_window_config_get_section(char *section, gsize *size){
config_str key = g_key_file_get_keys(__yon_window_config_file,section,size,NULL);
return key;
}
char *yon_ubl_user_get_home_directory(){
FILE *path = popen(get_home_dir_command,"r");
char *ret = (char*)malloc(4096);
memset(ret,0,4096);
if (fgets(ret,4096,path)){
ret=yon_char_divide_search(ret,(char*)"\n",-1);
return ret;
} else return NULL;
}
char *yon_ubl_root_user_get(){
char *user=NULL;
if (yon_ubl_check_root()){
user=getenv("SUDO_USER");
if (user&&strcmp(user,"")!=0){
return user;
}else {
FILE *file = popen("getent passwd $PKEXEC_UID | cut -d: -f1","r");
user=(char*)malloc(4096);
memset(user,0,4096);
if (fgets(user,4096,file)){
user=yon_char_divide_search(user,(char*)"\n",-1);
if (user) return user;
} else return NULL;
}
}
return getlogin();
}
int yon_ubl_check_root(){
if (getuid()==0) return 1;
else return 0;
}
}

@ -1,139 +0,0 @@
#ifndef UTIL_H
#define UTIL_H
#include <stdio.h>
#include <tuple>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <array>
#include <vector>
#include <linux/limits.h>
#include <sys/types.h>
#include <pwd.h>
#include <unistd.h>
#include <iostream>
#include <map>
#include <string>
#include <array>
#include <vector>
#include <fstream>
#include <filesystem>
#include <stdio.h>
#include <map>
#include <pwd.h>
#include <set>
#include <gtkmm.h>
#include <gtk/gtk.h>
#include <sys/stat.h>
using namespace std;
namespace Utils {
#define get_home_dir_command yon_char_unite((char*)"getent passwd \"",yon_ubl_root_user_get(),(char*)"\" | cut -d: -f6",NULL)
template<typename Type>
struct Result{
Type response;
int error;
};
struct Passwd {
string user;
int uid;
};
std::array<std::vector<std::string>, 5> read_csv(const std::string& filename);
std::string call(std::string cmd);
vector<int> find_all(string &str_ntp, string substr);
void str_remove(std::string& source, std::string to_remove);
void str_replace_all(string &str_base, string str_find, string str_replace);
std::vector<std::string> split(std::string text, char delim);
vector<tuple<string, string>> read_csv_melody(const string& filename);
void write_file(string path_name, string data);
#define for_dictionaries(element, stack) for (element = stack->first; element != NULL; element = element->next)
#define yon_dictionary_get_data(dictionary, type) ((type)dictionary->data)
typedef enum
{
DICTIONARY_GTK_WIDGETS_TYPE,
DICTIONARY_OTHER_TYPE=0,
DICTIONARY_CHAR_TYPE,
DICTIONARY_INT_TYPE,
DICTIONARY_BOOL_TYPE,
} DICT_TYPE;
typedef struct dictionary
{
char *key;
void *data;
struct dictionary *next;
struct dictionary *prev;
struct dictionary *first;
DICT_TYPE data_type;
} dictionary;
typedef char** config_str;
char *yon_char_divide(char *source, int dividepos);
char *yon_char_divide_search(char *source, char *dividepos, int delete_divider);
char *yon_char_new(char *chr);
char *yon_char_append(char *source, char *append);
char *yon_char_unite(char *source, ...);
char **yon_char_parse(char *parameters, int *size, char *divider);
/**YON_TYPE
* [EN]
*
* [RU]
* Типы, поддерживаемые функциями сохранения/загрузки конфигурации утилиты
*/
enum YON_TYPE{
YON_TYPE_STRING,
YON_TYPE_STRING_LIST,
YON_TYPE_INT,
YON_TYPE_BOOLEAN,
YON_TYPE_OTHER};
/**yon_window_config_setup(GtkWindow *window)
* [EN]
*
* [RU]
* Устанавливает указатель на окно для отслеживания его положения и размера
*/
void yon_window_config_setup(GtkWindow *window);
/**yon_window_config_load(char *path)
* [EN]
*
* [RU]
* Загружает конфиг окна и инициализирует отслеживание его параметров
*/
int yon_window_config_load(char *path);
/**yon_window_config_get_section(char *section, gsize *size)
* [EN]
*
* [RU]
* Возвращает все параметры раздела [section] конфига утилиты и записывает в [size] количество считанных параметров.
*/
config_str yon_window_config_get_section(char *section, gsize *size);
char *yon_ubl_user_get_home_directory();
char *yon_ubl_root_user_get();
int yon_ubl_check_root();
}
#endif

@ -1,166 +1,139 @@
.textHead{
text-shadow: 2px 2px @theme_bg_color;
color: @theme_text_color;
}
.boxInfoMessError{
background-color: #ea9999;
}
.boxInfoMessOK{
background-color: #f3f0ac;
}
.bannerbackground {
background-color: #404040;
.thin {
margin:0px;
padding:0px;
}
.view_app {
background-color: @theme_bg_color;
.noborder {
border:none;
}
.view_app.view.cell:selected {
background-color:@theme_selected_bg_color;
color:@theme_selected_text_color;
transition: 10ms ease-out;
border-radius: 3px;
.nobackground {
background:transparent;
}
#GnomeIcon{
border-style:solid;
border-bottom-width: 1px;
border-image: linear-gradient(90deg, alpha(@theme_text_color,0.4) 55%, alpha(@theme_bg_color, 0) 100%);
border-image-slice: 1;
.nobackground:active {
background:transparent;
}
#SepIcon{
background-color: alpha(@theme_text_color, 0.6);
.textHead{
text-shadow: 2px 2px @theme_bg_color;
color: @theme_text_color;
}
#iconlabel {
font-size:14px;
font-weight: bold;
.inherited>* {
border:none;
background:inherit;
}
.roundborder * {
border-width:0px;
border-radius:5px;
}
.noborder {
border: none;
}
.menu:hover {
border-color:alpha(@theme_text_color, 0.01);
}
.menu {
border-color:alpha(@theme_text_color, 0.01);
}
.menu:hover >* {
border-color:alpha(@theme_text_color, 0.01);
.workingbg {
background:@theme_base_color;
}
.menuitembottom{
margin-top:0px;
margin-bottom:3px;
}
.menuitemmiddle{
margin-top:0px;
margin-bottom:0px;
}
margin-top:0px;
margin-bottom:3px;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemmiddle{
margin-top:0px;
margin-bottom:0px;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemtop{
margin-bottom:0px;
}
.menuitemtop *{
margin:2px 2px 0 2px;
padding: 5px 10px 3px 5px;
}
.menuitemmiddle *{
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
}
.menuitembottom *{
margin:0 2px 2px 2px;
padding: 3px 10px 5px 5px;
}
.menuitemtop:hover {
background:@theme_bg_color;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemmiddle:hover {
background:@theme_bg_color;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitembottom:hover {
background:@theme_bg_color;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemtop:hover* {
margin:2px 2px 0 2px;
padding: 5px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.menuitemmiddle:hover* {
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.menuitembottom:hover* {
margin:0 2px 2px 2px;
padding: 3px 10px 5px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
.menuitemtop{
margin-bottom:0px;
border-color:inherit;
border-top-width:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemtop >*{
margin:4px 2px 0 2px;
padding: 3px 10px 3px 5px;
border:transparent;
}
.menuitemmiddle >*{
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
border:transparent;
}
.menuitembottom >*{
margin:0 2px 2px 2px;
padding: 3px 10px 3px 5px;
}
.menuitemtop:hover {
background:@theme_bg_color;
border-color:inherit;
border-top-width:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemmiddle:hover {
background:@theme_bg_color;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitembottom:hover {
background:@theme_bg_color;
border-color:inherit;
border-bottom-width:0px;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemtop:hover>* {
margin:4px 2px 0 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.menuitemmiddle:hover>* {
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.menuitembottom:hover>* {
margin:0 2px 2px 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.boxInfoMessError{
background-color: #ea9999;
}
.workingbg, #workingbg {
background-color:@theme_base_color;
}
.workingbg.view.cell:selected {
background-color:@theme_selected_bg_color;
}
.workingbg.view.cell:hover {
background-color:darker(@theme_selected_bg_color);
color:@theme_selected_text_color;
border-radius:3px;
}
.bkim {
transition: 200ms ease-out;
background-image: none;
.boxInfoMessOK{
background-color: #f3f0ac;
}
.noborder{
border:none;
.errorBox {
border-width: 2px;
border-color: #ea9999;
border-style:solid;
}
.bkim{
opacity:0.99;
border:none;
.chosenOutline{
transition: 0ms;
border-width: 1px;
border-color: #f3f0ac;
border-style:solid;
}
.bkim_no_plug{
background-color: transparent;
opacity:0.99;
}
.thin{
margin:0px;
padding: 0px;
}
.nobg{
background: none;
}
.addbg * {
background-color: @theme_bg_color;
.separatorTop{
border-color: darker (@theme_bg_color);
border-top-width:1px;
border-style:solid;
}
.addbg_revealer * {
background-color: @theme_base_color;
.separatorBottom{
border-color: darker (@theme_bg_color);
border-bottom-width:1px;
border-style:solid;
}
.offset_revealer{
border-width: 1px;
border-style: solid;
border-color: @theme_text_color;
.marginright image{
margin-right: 2px;
}
.bultar {
border:none;
}
treeview row:nth-child(odd) { background-color: #000000; }
treeview row:nth-child(even) { background-color: #ffffff; }

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save