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

Reviewed-on: #28
pull/35/head
Dmitry Razumov 3 years ago
commit 4a07be3769

@ -1,2 +1,2 @@
Option;Tone code
ubbeep;1 22 333 4444 5555
ubbeep;480 900 2 1000 2 800 2 400 2 600 3
1 Option Tone code
2 ubbeep 1 22 333 4444 5555 480 900 2 1000 2 800 2 400 2 600 3

@ -11,6 +11,14 @@ bool flag_load_global = false;
bool flag_lock_help = false;
string version_application = "1.0";
MainWindow* obj_main;
void wrapper_help_show(GtkWidget *self, char* link, gpointer user_data) {
if (self && user_data) {}
obj_main->global_lick_doc = link;
obj_main->aboutWindows->hide();
obj_main->temp_help_show();
}
CmdArgParser::CmdArgParser(const string& p_name, const string& p_description, const string& p_help)
: Glib::OptionGroup{p_name, p_description, p_help} {
Glib::OptionEntry socketIDArg;
@ -62,6 +70,7 @@ MainWindow::MainWindow(Glib::RefPtr<Gtk::Builder> const& builder) {
}
void MainWindow::settings() {
obj_main = this;
map_cmd_error[""] = "";
vec_param_names.push_back("GRUB_TIMEOUT");
vec_param_names.push_back("GRUB_CMDLINE_LINUX");
@ -182,7 +191,7 @@ void MainWindow::flag_block_gui() {
btnSaveLocalGlob->set_sensitive(false);
}
if (flag_lock_help == true) {
btnSynopsis->set_sensitive(false);
btnHelp->set_sensitive(false);
}
}
@ -223,10 +232,8 @@ void MainWindow::item_selected_kernel(const Gtk::TreeModel::Path&, const Gtk::Tr
treeViewMelody->get_selection()->unselect_all();
if (flag_blocked_tree_view == false) {
string str_flags = template_item_selected(size_kernel, list_store_kernel, "GRUB_CMDLINE_LINUX");
Utils::str_replace_all(str_flags, " \"", "\"");
Utils::str_replace_all(str_flags, "\"", "");
map_cmd_selection["GRUB_CMDLINE_LINUX"] = str_flags;
Utils::str_replace_all(str_flags, " ", ", ");
// Utils::str_replace_all(str_flags, " ", ", ");
entryKernel->set_text(str_flags);
}
}
@ -238,10 +245,8 @@ void MainWindow::item_selected_OTT(const Gtk::TreeModel::Path&, const Gtk::TreeM
treeViewMelody->get_selection()->unselect_all();
if (flag_blocked_tree_view == false) {
string str_flags = template_item_selected(size_OTT, list_store_OTT, "GRUB_TERMINAL_OUTPUT");
Utils::str_replace_all(str_flags, " \"", "\"");
Utils::str_replace_all(str_flags, "\"", "");
map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = str_flags;
Utils::str_replace_all(str_flags, " ", ", ");
// Utils::str_replace_all(str_flags, " ", ", ");
entryOTT->set_text(str_flags);
}
}
@ -253,10 +258,8 @@ void MainWindow::item_selected_IPT(const Gtk::TreeModel::Path&, const Gtk::TreeM
treeViewMelody->get_selection()->unselect_all();
if (flag_blocked_tree_view == false) {
string str_flags = template_item_selected(size_IPT, list_store_IPT, "GRUB_TERMINAL_INPUT");
Utils::str_replace_all(str_flags, " \"", "\"");
Utils::str_replace_all(str_flags, "\"", "");
map_cmd_selection["GRUB_TERMINAL_INPUT"] = str_flags;
Utils::str_replace_all(str_flags, " ", ", ");
// Utils::str_replace_all(str_flags, " ", ", ");
entryIPT->set_text(str_flags);
}
}
@ -315,27 +318,32 @@ void MainWindow::set_download_mode() {
}
string MainWindow::template_item_selected(int size, Glib::RefPtr<Gtk::ListStore> &list_store, string key) {
string cmds = map_cmd_selection[key];
Utils::str_replace_all(cmds, "\"", "");
string cmds_old = map_cmd_selection[key];
string cmds = "";
string param = "";
vector<string> vec_param = Utils::split(cmds_old, ' ');
for (int index = 0; index < size; index++) {
Gtk::TreeModel::Row row = list_store->children()[index];
if(row) {
string param = row[m_columns.name] + "";
if (row[m_columns.check_button] == true && cmds.find(param) == string::npos) {
cmds += " " + param + " ";
param = row[m_columns.name] + "";
if (row[m_columns.check_button] == true) {
cmds += param + " ";
}
for (size_t i = 0; i < vec_param.size(); i++) {
if (param == vec_param[i]) {
vec_param.erase(vec_param.begin() + i);
}
if (row[m_columns.check_button] == false && cmds.find(param) != string::npos) {
Utils::str_remove(cmds, param);
}
}
}
Utils::str_replace_all(cmds, " ", " ");
if (cmds.length() > 0) {
if (cmds[0] == ' ') {
cmds = cmds.substr(1, cmds.length() - 1);
for (size_t i = 0; i < vec_param.size(); i++) {
cmds += vec_param[i] + " ";
}
if (cmds.length() > 1) {
if (cmds[cmds.length()-1] == ' ') {
cmds = cmds.substr(0, cmds.length() - 1);
}
}
cmds = "\"" + cmds + "\"";
return cmds;
}
@ -386,7 +394,7 @@ void MainWindow::get_builder() {
builder->get_widget("boxColor", boxColor);
builder->get_widget("boxWidgetAll", boxWidgetAll);
builder->get_widget("aboutWindows", aboutWindows);
builder->get_widget("btnSynopsis", btnSynopsis);
builder->get_widget("btnHelp", btnHelp);
builder->get_widget("btnAbout", btnAbout);
builder->get_widget("btnLoadLocal", btnLoadLocal);
builder->get_widget("btnLoadGlob", btnLoadGlob);
@ -459,7 +467,7 @@ void MainWindow::localization() {
lblInfoInputTerminal->set_text(terminal_for_input);
lblInfoOutputTerminal->set_text(terminal_for_output);
chbLoadVariantSelectionTimer->set_label(boot_selection_menu_timer);
btnSynopsis->set_label(str_help);
btnHelp->set_label(str_help);
btnAbout->set_label(str_about_1);
lblHeadeWndWeb->set_text(name_app);
btnSaveLocalGlob->set_label(save_all);
@ -533,23 +541,20 @@ void MainWindow::set_entry_to_tree_view(Glib::RefPtr<Gtk::ListStore> &list_store
flag_blocked_tree_view = true;
vector<string> vec_params;
std::string text = entry.get_text();
Utils::str_replace_all(text, " ", "");
vec_params = Utils::split(text, ',');
// Utils::str_replace_all(text, " ", "");
vec_params = Utils::split(text, ' ');
for (auto &name: vec_Option) {
this->set_row(list_store, size, name, false);
}
for (auto &name: vec_params) {
this->set_row(list_store, size, name, true);
}
Utils::str_replace_all(text, ",", " ");
// Utils::str_replace_all(text, ",", " ");
if (text.length() > 0) {
if (text[0] == ' ') {
text = text.substr(1, text.length() - 1);
}
}
if (text.find("\"") == string::npos && text.length() != 0) {
text = "\"" + text + "\"";
}
map_cmd_selection[key] = text;
}
@ -592,6 +597,7 @@ void MainWindow::cmd_entry_all(Gtk::Entry &entry, string cmd_settings, string cm
}
void MainWindow::event() {
g_signal_connect(G_OBJECT(aboutWindows->gobj()), "activate-link", G_CALLBACK(wrapper_help_show), NULL);
btnRemoveUser->signal_clicked().connect([&]() {remove_user();});
btnRemoveMusic->signal_clicked().connect([&]() {remove_melody();});
btnAddUser->signal_clicked().connect([&]() {string name = "", passwd = "";
@ -602,7 +608,7 @@ void MainWindow::event() {
btnCancelHelp->signal_clicked().connect([&]() {wndShowWeb->hide();});
chkAlwaysOpenHelp->signal_toggled().connect([&]() {flag_open_browser = true;});
btnReadHelp->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::open_browser));
btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show));
btnHelp->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::open_help));
btnAbout->signal_activate().connect([&]() {aboutWindows->show();});
btnLoadLocal->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_local_cfg));
btnLoadGlob->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::download_globl_cfg));
@ -696,7 +702,7 @@ void MainWindow::set_init_data_user(std::map<string, string> &map_temp) {
}
}
Glib::RefPtr<Gtk::TreeModel> treeViewUserModel = treeViewUser->get_model();
treeViewUserModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::remove_line_user));
treeViewUserModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::select_line_user));
this->view_add_colums_user(*treeViewUser);
}
@ -758,6 +764,7 @@ void MainWindow::set_add_data_user(Gtk::TreeModel::Row &row, bool flag, string &
row[m_columns_user.check_button] = flag;
row[m_columns_user.name] = name;
row[m_columns_user.password] = password;
len_old_user += 1;
}
void MainWindow::set_init_data_melody(std::map<string, string> &map_temp) {
@ -776,7 +783,7 @@ void MainWindow::set_init_data_melody(std::map<string, string> &map_temp) {
this->set_add_data_melody(row_melody, flag, name, code);
}
Glib::RefPtr<Gtk::TreeModel> treeViewMelodyModel = treeViewMelody->get_model();
treeViewMelodyModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::remove_line_melody));
treeViewMelodyModel->signal_row_changed().connect(sigc::mem_fun(*this, &MainWindow::select_line_melody));
this->view_add_colums_melody(*treeViewMelody);
}
@ -785,6 +792,7 @@ void MainWindow::set_add_data_melody(Gtk::TreeModel::Row &row, bool flag, string
row[m_columns_melody.check_button] = flag;
row[m_columns_melody.title] = name;
row[m_columns_melody.melody_code] = code;
len_old_melody += 1;
}
void MainWindow::remove_user() {
@ -799,7 +807,7 @@ void MainWindow::remove_user() {
flag_validate_del_user = false;
info_status_app(info_box_ok_css);
imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU);
lblWarning->set_text("");
lblWarning->set_text(str_del_user);
}
flag_validate_del_user = false;
}
@ -810,12 +818,12 @@ void MainWindow::remove_melody() {
flag_validate_del_melody = false;
info_status_app(info_box_ok_css);
imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU);
lblWarning->set_text("");
lblWarning->set_text(str_del_melody);
}
flag_validate_del_melody = false;
}
void MainWindow::remove_line_user(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter) {
void MainWindow::select_line_user(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter) {
treeViewKernel->get_selection()->unselect_all();
treeViewOTT->get_selection()->unselect_all();
treeViewIPT->get_selection()->unselect_all();
@ -825,15 +833,17 @@ void MainWindow::remove_line_user(const Gtk::TreeModel::Path&, const Gtk::TreeMo
bool flag_error = false;
string name = "";
string password = "";
size_t len_new_user = 0;
Glib::RefPtr<Gtk::TreeModel> treeViewUser_model = treeViewUser->get_model();
Gtk::TreeModel::Children children = treeViewUser_model->children();
for(Gtk::TreeModel::iterator iter = children.begin(); iter != children.end(); ++iter) {
Gtk::TreeModel::Row row = *iter;
name = row[m_columns_user.name] + "";
password = row[m_columns_user.password] + "";
len_new_user += 1;
if (name.length() == 0 || password.length() == 0) {
flag_error = true;
break;
}
}
if (flag_error == true) {
@ -842,13 +852,16 @@ void MainWindow::remove_line_user(const Gtk::TreeModel::Path&, const Gtk::TreeMo
lblWarning->set_text(str_null_username);
}
else {
if ((len_old_user-1) != len_new_user) {
info_status_app(info_box_ok_css);
imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU);
lblWarning->set_text("");
lblWarning->set_text(str_add_user);
}
}
len_old_user = len_new_user;
}
void MainWindow::remove_line_melody(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter) {
void MainWindow::select_line_melody(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter) {
treeViewKernel->get_selection()->unselect_all();
treeViewOTT->get_selection()->unselect_all();
treeViewIPT->get_selection()->unselect_all();
@ -857,6 +870,7 @@ void MainWindow::remove_line_melody(const Gtk::TreeModel::Path&, const Gtk::Tree
flag_validate_del_melody = true;
string code_melodyes = "";
string melody_title = "";
size_t len_new_melody = 0;
bool flag_error = false;
Glib::RefPtr<Gtk::TreeModel> treeViewMelody_model = treeViewMelody->get_model();
Gtk::TreeModel::Children children = treeViewMelody_model->children();
@ -864,9 +878,9 @@ void MainWindow::remove_line_melody(const Gtk::TreeModel::Path&, const Gtk::Tree
Gtk::TreeModel::Row row = *iter;
code_melodyes = row[m_columns_melody.melody_code] + "";
melody_title = row[m_columns_melody.title] + "";
len_new_melody += 1;
if (code_melodyes.length() == 0 || melody_title.length() == 0) {
flag_error = true;
break;
}
}
if (flag_error == true) {
@ -875,12 +889,14 @@ void MainWindow::remove_line_melody(const Gtk::TreeModel::Path&, const Gtk::Tree
lblWarning->set_text(str_null_melody_name);
}
else {
if ((len_old_melody-1) != len_new_melody) {
info_status_app(info_box_ok_css);
imgInfo->set_from_icon_name(icon_checked, Gtk::ICON_SIZE_MENU);
lblWarning->set_text("");
lblWarning->set_text(str_add_melody);
}
}
this->validate_melody();
len_old_melody = len_new_melody;
}
void MainWindow::validate_melody() {
@ -1003,15 +1019,15 @@ void MainWindow::wrapper_save_local_cfg() {
void MainWindow::set_data_cfg() {
string str_flags = entryKernel->get_text();
Utils::str_remove(str_flags, ",");
// Utils::str_remove(str_flags, ",");
Utils::str_replace_all(str_flags, " \"", "\"");
map_cmd_selection["GRUB_CMDLINE_LINUX"] = str_flags;
str_flags = entryIPT->get_text();
Utils::str_remove(str_flags, ",");
// Utils::str_remove(str_flags, ",");
Utils::str_replace_all(str_flags, " \"", "\"");
map_cmd_selection["GRUB_TERMINAL_INPUT"] = str_flags;
str_flags = entryOTT->get_text();
Utils::str_remove(str_flags, ",");
// Utils::str_remove(str_flags, ",");
Utils::str_replace_all(str_flags, " \"", "\"");
map_cmd_selection["GRUB_TERMINAL_OUTPUT"] = str_flags;
if (chbLoadVariantSelectionTimer->get_active()) {
@ -1087,7 +1103,7 @@ void MainWindow::set_entry(Gtk::Entry* entry, std::map<string, string> &map_temp
if (map_temp.find(key) != map_temp.end()) {
string value = map_temp[key];
Utils::str_replace_all(value, "\"", "");
Utils::str_replace_all(value, " ", ", ");
// Utils::str_replace_all(value, " ", ", ");
entry->set_text(value);
}
else {
@ -1138,7 +1154,7 @@ void MainWindow::set_row(Glib::RefPtr<Gtk::ListStore> &list_store, int size, str
}
}
void MainWindow::synopsis_show() {
void MainWindow::temp_help_show() {
if (flag_open_browser == true) {
this->open_browser();
}
@ -1148,17 +1164,23 @@ void MainWindow::synopsis_show() {
}
void MainWindow::open_help() {
global_lick_doc = const_link_doc;
temp_help_show();
}
void MainWindow::open_browser() {
#ifdef WEBKIT_FOUND
webkit_web_view_load_uri(one, link_doc);
webkit_web_view_load_uri(one, _(global_lick_doc.c_str()));
wndWeb->show_all();
#else
this->template_open_browser();
this->template_open_browser(global_lick_doc);
#endif
wndShowWeb->hide();
}
void MainWindow::template_open_browser() {
string cmd = cmd_xdg + string(_(link_doc)) + " &";
void MainWindow::template_open_browser(string link_doc) {
string cmd = cmd_xdg + string(_(link_doc.c_str())) + " &";
string buf = "";
if (geteuid() == 0) {
string response_user = getlogin();
@ -1240,7 +1262,6 @@ void MainWindow::add_CSS() {
Glib::RefPtr<Gtk::StyleContext> styleContext = Gtk::StyleContext::create();
Glib::RefPtr<Gdk::Screen> screen = Gdk::Screen::get_default();//get default screen
styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application
Glib::RefPtr<Gtk::StyleContext> lblInfoHead_css = lblInfoHead->get_style_context();
Glib::RefPtr<Gtk::StyleContext> boxButton_css = boxButton->get_style_context();
Glib::RefPtr<Gtk::StyleContext> boxSave_css = boxSave->get_style_context();
boxInfo = boxInfoError->get_style_context();
@ -1249,7 +1270,6 @@ void MainWindow::add_CSS() {
boxButton_css->add_class("bkim_no_plug");
boxSave_css->add_class("bkim_no_plug");
}
lblInfoHead_css->add_class("textHead");
}
void help() {

@ -104,7 +104,7 @@ void me_thread(string cmd);
#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 code in the \"Boot Menu Users\" 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" \
@ -126,7 +126,7 @@ void me_thread(string cmd);
#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 link_doc "https://wiki.ublinux.com/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubl-settings-bootloader"
#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"
@ -145,6 +145,10 @@ void me_thread(string cmd);
#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")
class CmdArgParser : public Glib::OptionGroup
{
@ -229,7 +233,7 @@ public:
Gtk::Box *boxColor;
Gtk::AboutDialog *aboutWindows;
Gtk::MenuItem *btnAbout;
Gtk::MenuItem *btnSynopsis;
Gtk::MenuItem *btnHelp;
Gtk::MenuItem *btnSaveLocalGlob;
Gtk::MenuItem *btnSaveLocal;
Gtk::MenuItem *btnSaveGlob;
@ -311,6 +315,9 @@ public:
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;
Glib::RefPtr<Gtk::StyleContext> boxInfo;
string str_cmd_error = "";
template <typename Type>
@ -318,13 +325,14 @@ public:
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 remove_line_user(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter);
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);
@ -339,8 +347,9 @@ public:
void remove_user();
void remove_melody();
void settings();
void open_help();
void validate_melody();
void remove_line_melody(const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator& iter);
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);
@ -348,7 +357,7 @@ public:
vector<string> pars_os(vector<string> &os_control_list);
void fn_event_intelMax1();
void fn_event_intelMax4();
void synopsis_show();
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);
@ -366,7 +375,7 @@ public:
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();
void template_open_browser(string link_doc);
void download_globl_cfg();
void flag_block_gui();
void info_status_app(string stule);
@ -409,3 +418,4 @@ private:
};
void help();
void wrapper_help_show(GtkWidget *self, char* link, gpointer user_data);

@ -11,9 +11,6 @@
.bannerbackground {
background-color: #404040;
}
.textHead{
text-shadow: 1px 1px #ffffff;
}
.view_app {
background-color: @theme_bg_color;
}

@ -2,6 +2,7 @@
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-bootloader.css -->
<object class="GtkSizeGroup">
<property name="mode">both</property>
<property name="ignore-hidden">True</property>
@ -21,7 +22,7 @@
<property name="version">1.0</property>
<property name="copyright" translatable="yes">Copyright © 2022 - 2023, UBSoft LLC</property>
<property name="comments" translatable="yes">ubl-settings-bootloader</property>
<property name="website">https://ublinux.ru/</property>
<property name="website">https://wiki.ublinux.com/ruрограммное_обеспечениерограммы_и_утилиты/Все/</property>
<property name="website-label" translatable="yes">Project Home Page</property>
<property name="license" translatable="yes">Это приложение распространяется без каких-либо гарантий.
Подробнее в &lt;a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"&gt;GNU General Public License, версии 2 или позднее&lt;/a&gt;.</property>
@ -113,10 +114,12 @@
<property name="label" translatable="yes">Running applications as a user with a
specified priority</property>
<attributes>
<attribute name="font-desc" value="URW Gothic Semi-Bold 10"/>
<attribute name="foreground" value="#000023233232"/>
<attribute name="weight" value="bold"/>
<attribute name="size" value="15360"/>
</attributes>
<style>
<class name="textHead"/>
</style>
</object>
<packing>
<property name="expand">True</property>
@ -222,7 +225,7 @@ specified priority</property>
<property name="reserve-toggle-size">False</property>
<property name="rect-anchor-dy">4</property>
<child>
<object class="GtkMenuItem" id="btnSynopsis">
<object class="GtkMenuItem" id="btnHelp">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Help</property>

@ -17,11 +17,22 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "Melody added"
msgstr ""
msgid "User added"
msgstr ""
msgid "Melody deleted"
msgstr ""
msgid "User deleted"
msgstr ""
msgid "Enter the name and code of the tune in the \"Ringtone at startup\" field"
msgstr ""
msgid "Enter name and password code in the \"Boot Menu Users\" field"
msgid "Enter name and password in the \"Boot Menu Users\" field"
msgstr ""
msgid "Boot Menu Users"

@ -361,12 +361,24 @@ msgstr "Пользователь"
msgid "Enter the name and code of the tune in the \"Ringtone at startup\" field"
msgstr "Введите название и код мелодии в поле \"Мелодия при загрузке\""
msgid "Enter name and password code in the \"Boot Menu Users\" field"
msgstr "Введите имя и код пароль в поле \"Пользователи меню загрузчика\""
msgid "Enter name and password in the \"Boot Menu Users\" field"
msgstr "Введите имя и пароль в поле \"Пользователи меню загрузчика\""
msgid "Password"
msgstr "Пароль"
msgid "Melody added"
msgstr "Мелодия добавлена"
msgid "User added"
msgstr "Пользователь добавлен"
msgid "Melody deleted"
msgstr "Мелодия удалена"
msgid "User deleted"
msgstr "Пользователь удалён"
msgid "Administrator"
msgstr "Администратор"

Loading…
Cancel
Save