Написал формат строк ос

pull/18/head
Igor Belitskiy 3 years ago
parent 268ffcabf1
commit 6a9b72896c

@ -31,6 +31,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin
-fstack-clash-protection -fcf-protection")
set(SOURCE_FILES
menu_os.h
menu_os.cc
ubl-settings-bootloader-cm.h
ubl-settings-bootloader.h
ubl-settings-bootloader.cc

@ -1,26 +1,87 @@
#include "menu_os.h"
menu_os::menu_os(/* args */)
Menu_os::Menu_os(/* args */)
{
}
menu_os::~menu_os()
Menu_os::~Menu_os()
{
}
void menu_os::init() {
this->m_box(Gtk::ORIENTATION_VERTICAL);
for (auto& [key, value]: map_list_os) {
Gtk::Button *button = new Gtk::button();
Gtk::Revealer *revealer = new Gtk::Revealer();
std::map<std::string, Gtk::struct_menu_os_button_v_2> map_buttons_level_2;
void Menu_os::set_builder(Glib::RefPtr<Gtk::Builder> const& builder) {
this->builder = builder;
builder->get_widget("popoverMenuOS", popoverMenuOS);
builder->get_widget("revealerL1", revealerL1);
builder->get_widget("revealerL2", revealerL2);
builder->get_widget("boxALLL3", boxALLL3);
}
void Menu_os::set_map(std::map <string, vector<string>> &map_list_os) {
this->map_list_os = map_list_os;
}
map_buttons_level_1[key] = struct_menu_os_button{button, revealer}
void Menu_os::init() {
Gtk::Box *box_L1 = new Gtk::Box();
vector<stuct_all_reviler> vec_stuct_all_reviler;
for (auto& [key, value]: map_list_os) {
size_t len_data = value.size();
struct map_reviler_L1 obj_map_reviler_L1;
struct map_reviler_L3 obj_map_reviler_L3;
vector<Gtk::Button*> vec_buttons;
vector<Gtk::Label*> vec_labels;
vector<string> vec_names;
Gtk::Revealer* revealerL3;
Gtk::Box *box_L3 = new Gtk::Box();
builder->get_widget("boxL1", obj_map_reviler_L1.boxL1);
builder->get_widget("lblRevL1", obj_map_reviler_L1.lblRevL1);
builder->get_widget("btnToL2AndLv3", obj_map_reviler_L1.btnToL2AndLv3);
builder->get_widget("revealerL3", revealerL3);
box_L1->pack_start(*obj_map_reviler_L1.btnToL2AndLv3, Gtk::PACK_SHRINK);
obj_map_reviler_L1.lblRevL1->set_text(key);
this->event_template(obj_map_reviler_L1.btnToL2AndLv3, obj_map_reviler_L1.lblRevL1, name_level_1);
// Todo : open level 3
for (string& str_level_2: value) {
Gtk::Button* btn1;
Gtk::Label* lbl1;
builder->get_widget("btnToL3", btn1);
builder->get_widget("lblToL3", lbl1);
this->event_template(btn1, lbl1, name_level_3);
box_L3->pack_start(*btn1, Gtk::PACK_SHRINK);
lbl1->set_text(str_level_2);
vec_buttons.push_back(btn1);
vec_labels.push_back(lbl1);
vec_names.push_back(str_level_2);
}
boxALLL3->pack_start(*box_L3, Gtk::PACK_SHRINK);
revealerL3->set_reveal_child(true);
obj_map_reviler_L3.revealerL3 = revealerL3;
obj_map_reviler_L3.vec_buttons = vec_buttons;
obj_map_reviler_L3.vec_labels = vec_labels;
obj_map_reviler_L3.len_data = len_data;
obj_map_reviler_L3.box_L3 = box_L3;
obj_stuct_all_reviler.obj_map_reviler_L1 = obj_map_reviler_L1;
obj_stuct_all_reviler.obj_map_reviler_L3 = obj_map_reviler_L3;
vec_stuct_all_reviler.push_back(obj_stuct_all_reviler);
GtkWidget* rev_widget = GTK_WIDGET(revealerL1->gobj());
gtk_container_add(GTK_CONTAINER(rev_widget), GTK_WIDGET(box_L1->gobj()));
}
}
void Menu_os::show() {
popoverMenuOS->show_all();
}
void Menu_os::event() {
btnToLev1->signal_clicked().connect(sigc::mem_fun(*this, &Menu_os::to_l1));
}
void menu_os::crete_menu_level_2(string key, std::map<std::string, Gtk::struct_menu_os_button_v_2> &map_buttons_level_2) {
map_buttons_level_2[key] =
void Menu_os::event_template(Gtk::Button* button, Gtk::Label* label, string& name_level) {
button->signal_clicked().connect([&]() {name_level = label->get_label();});
}
void Menu_os::to_l1() {
revealerL1->set_reveal_child(true);
revealerL2->set_reveal_child(false);
}

@ -1,27 +1,51 @@
#ifndef Menu_os_H
#define Menu_os_H
#include <gtkmm.h>
#include <map>
#include <vector>
using namespace std;
class menu_os
class Menu_os
{
private:
struct struct_menu_os_button_v_2{
Gtk::Button* button;
struct map_reviler_L1 {
Gtk::Box *boxL1;
Gtk::Label *lblRevL1;
Gtk::Button *btnToL2AndLv3;
};
struct struct_menu_os_button{
Gtk::Button* button;
Gtk::Revealer* revealer;
std::map<std::string, Gtk::struct_menu_os_button_v_2> map_buttons_level_2;
struct map_reviler_L3 {
Gtk::Revealer *revealerL3;
Gtk::Box *box_L3;
vector<Gtk::Button*> vec_buttons;
vector<Gtk::Label*> vec_labels;
vector<string> vec_names;
size_t len_data;
};
struct stuct_all_reviler {
struct map_reviler_L1 obj_map_reviler_L1;
struct map_reviler_L3 obj_map_reviler_L3;
};
std::map<std::string, Gtk::struct_menu_os_button> map_buttons_level_1;
std::map <string, vector> map_list_os;
Gtk::Box m_box;
Gtk::Revealer* level_1;
struct stuct_all_reviler obj_stuct_all_reviler;
vector<map_reviler_L1> vec_map_reviler_L1;
Glib::RefPtr<Gtk::Builder> builder;
std::map <string, vector<string>> map_list_os;
Gtk::Box *boxALLL3;
Gtk::Popover *popoverMenuOS;
Gtk::Revealer *revealerL1;
Gtk::Revealer *revealerL2;
Gtk::Button *btnToLev1;
string name_level_1 = "";
string name_level_3 = "";
public:
menu_os(/* args */);
void set_popover(Gtk::Popover *popover);
void set_map(std::map <string, vector> map_list_os);
void crete_menu_level_2(string key, std::map<std::string, Gtk::struct_menu_os_button_v_2> &map_buttons_level_2);
Menu_os(/* args */);
void set_builder(Glib::RefPtr<Gtk::Builder> const& builder);
void set_map(std::map <string, vector<string>> &map_list_os);
void init();
~menu_os();
void show();
void event_template(Gtk::Button* button, Gtk::Label* label, string& name_level);
void event();
void to_l1();
~Menu_os();
};
#endif

@ -99,6 +99,10 @@ void MainWindow::settings(){
this->str_last_launched_os = this->pars_last_launched_os();
vector<string> os_control_list;
this->pars_os(os_control_list);
std::map<string, vector<string>> map_list_os = format_os_list(os_control_list);
obj_menu_os.set_builder(builder);
obj_menu_os.set_map(map_list_os);
obj_menu_os.show();
this->write_list_entry_os(os_control_list);
this->download_local_cfg();
this->download_globl_cfg();
@ -116,6 +120,38 @@ void MainWindow::settings(){
this->event();
}
map<string, vector<string>> MainWindow::format_os_list(vector<string> &os_control_list) {
std::map<string, vector<string>> map_list_os;
set<string> set_key;
for (string& name_os : os_control_list) {
if (name_os.find(">") != string::npos) {
set_key.insert(name_os.substr(0,name_os.find(">")+1));
}
else {
vector<string> vec_os;
vec_os.push_back(" ");
map_list_os[name_os] = vec_os;
}
}
set<string>::iterator it = set_key.begin();
for (int index = 1; it != set_key.end(); index++, it++) {
bool flag = false;
string name_os_buff = "";
vector<string> vec_os_values;
for (string& name_os : os_control_list) {
if (name_os.find(*it) != string::npos) {
flag = true;
vec_os_values.push_back(name_os.substr(name_os.find(">")+1, name_os.length() - 1));
name_os_buff = name_os;
}
}
if (flag) {
map_list_os[name_os_buff] = vec_os_values;
}
}
return map_list_os;
}
vector<string> MainWindow::pars_os(vector<string> &os_control_list) {
string str_list_os = obj_process_call.call_all_sections(cmd_pars_list_os);
os_control_list = Utils::split(str_list_os, '\n');

@ -18,6 +18,7 @@
#include "load.h"
#include <dlfcn.h>
#include "ubl-settings-bootloader-cm.h"
#include "menu_os.h"
#ifdef WEBKIT_FOUND
#include <webkit2/webkit2.h>
#endif
@ -225,6 +226,7 @@ class MainWindow : public Gtk::ApplicationWindow {
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();
@ -270,6 +272,7 @@ class MainWindow : public Gtk::ApplicationWindow {
void fn_event_intelMax4();
void synopsis_show();
void set_data_cfg();
std::map<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);

@ -104,4 +104,5 @@ std::vector<std::string> split(std::string text, char delim) {
}
return vec;
}
}

@ -22,6 +22,7 @@
#include <stdio.h>
#include <map>
#include <pwd.h>
#include <set>
using namespace std;

@ -7,160 +7,7 @@
<property name="ignore-hidden">True</property>
</object>
<object class="GtkSizeGroup"/>
<object class="GtkPopover">
<property name="can-focus">False</property>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
</child>
</object>
<object class="GtkSizeGroup"/>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkMenuButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="focus-on-click">False</property>
<property name="receives-default">True</property>
<property name="direction">right</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkPopover">
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkRevealer">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="transition-type">none</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkRevealer">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="transition-type">none</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label111</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkRevealer">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="transition-type">none</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label2222</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRevealer">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="transition-type">none</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label333</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkPopoverMenu">
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
</object>
<object class="GtkAboutDialog" id="aboutWindows">
<property name="can-focus">False</property>
<property name="resizable">False</property>
@ -278,6 +125,52 @@ specified priority</property>
</packing>
</child>
</object>
<object class="GtkBox" id="boxL1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel" id="lblRevL1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">****</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnToL2AndLv3">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkImage" id="btnToLev2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-missing-image</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<object class="GtkButton" id="btnToL3">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkLabel" id="lblToL3">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
</object>
<object class="GtkMenu" id="list_os">
<property name="visible">True</property>
<property name="can-focus">False</property>
@ -373,6 +266,159 @@ specified priority</property>
</object>
</child>
</object>
<object class="GtkWindow" id="mess_sudo">
<property name="can-focus">False</property>
<property name="title" translatable="yes">Внимание!</property>
<property name="window-position">center</property>
<property name="type-hint">dialog</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="pixel-size">50</property>
<property name="icon-name">gtk-dialog-warning</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lblMessageSudo">
<property name="width-request">160</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="label" translatable="yes">Warning!</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnMessCloseSudo">
<property name="label" translatable="yes">OK</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">3</property>
<property name="margin-bottom">3</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkPopover" id="popoverMenuOS">
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkRevealer" id="revealerL1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="transition-type">none</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealerL2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="transition-type">none</property>
<property name="reveal-child">True</property>
<child>
<object class="GtkBox" id="boxALLL3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkButton" id="btnToLev1">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-missing-image</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="window">
<property name="width-request">750</property>
<property name="height-request">550</property>
@ -606,8 +652,19 @@ specified priority</property>
<property name="can-focus">True</property>
<property name="focus-on-click">False</property>
<property name="receives-default">True</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="align-widget">popoverMenuOS</property>
<child>
<placeholder/>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">open-menu-symbolic</property>
</object>
</child>
</object>
<packing>
@ -1375,91 +1432,12 @@ specified priority</property>
<widget name="chbPasswordProtecc"/>
</widgets>
</object>
<object class="GtkWindow" id="mess_sudo">
<object class="GtkRevealer" id="revealerL3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="title" translatable="yes">Внимание!</property>
<property name="window-position">center</property>
<property name="type-hint">dialog</property>
<property name="transition-type">none</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="pixel-size">50</property>
<property name="icon-name">gtk-dialog-warning</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lblMessageSudo">
<property name="width-request">160</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="label" translatable="yes">Warning!</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnMessCloseSudo">
<property name="label" translatable="yes">OK</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">3</property>
<property name="margin-bottom">3</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<placeholder/>
</child>
</object>
<object class="GtkApplicationWindow" id="wndShowWeb">

Loading…
Cancel
Save