You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ubl-settings-resourcequota/source/ubl-settings-resourcequota.c

383 lines
17 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "ubl-settings-resourcequota.h"
config main_config;
main_window *widgets;
/**on_close_subwindow(GtkWidget *self)
* [EN]
* Closes window in which [self] is contained.
* [RU]
* Закрывает окно, в котором расположен виджет [self].
*/
void on_close_subwindow(GtkWidget *self){
gtk_widget_destroy(gtk_widget_get_toplevel(self));
}
/**yon_open_browser(GtkWidget *self, char *link)
* [EN]
* Opens browser with [link] link.
* [RU]
* Открывает браузер с [link] ссылкой.
*/
void yon_open_browser(GtkWidget *self, char *link){
yon_ubl_browser_window_open(link,TITLE_LABEL);
}
/**on_open_documentation_confirmation(GtkWidget *self, char *link)
* [EN]
* Opens confirmation window for [link] link.
* [RU]
* Открывает окно подтверждение перехода по ссылке [link].
*/
void on_open_documentation_confirmation(GtkWidget *self, char *link){
if (main_config.always_open_documentation==0){
GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
documentation_confirmation_window *widgets = malloc(sizeof(documentation_confirmation_window));
widgets->Window = yon_gtk_builder_get_widget(builder,"helpConfirmationWindow");
widgets->AcceptButton = yon_gtk_builder_get_widget(builder,"ReadHelpButton");
widgets->CloseButton = yon_gtk_builder_get_widget(builder,"CancelHelpButton");
widgets->HatText = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel");
widgets->HeaderText = yon_gtk_builder_get_widget(builder,"helpHeader");
widgets->InfoText = yon_gtk_builder_get_widget(builder,"helpText");
widgets->AlwaysOpenCheck = yon_gtk_builder_get_widget(builder,"AlwaysOpenDocumentationCheckbox");
gtk_label_set_text(GTK_LABEL(widgets->HatText),TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(widgets->HeaderText),HELP_TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(widgets->InfoText),HELP_INFO_LABEL);
gtk_button_set_label(GTK_BUTTON(widgets->AcceptButton),OPEN_HELP_LABEL);
gtk_button_set_label(GTK_BUTTON(widgets->AlwaysOpenCheck),HELP_ALWAYS_OPEN_LABEL);
gtk_button_set_label(GTK_BUTTON(widgets->CloseButton),CANCEL_LABEL);
gtk_widget_show_all(widgets->Window);
g_signal_connect(G_OBJECT(widgets->CloseButton),"clicked",G_CALLBACK(on_close_subwindow),NULL);
g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(yon_open_browser),yon_char_new(link));
g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(on_close_subwindow),NULL);
} else {
yon_open_browser(self,link);
}
}
/**on_link(GtkWidget *self, char* uri, gpointer user_data)
* [EN]
* Signal for hadnling AboutDialog links.
* Connect to "activate-link" signal.
* [self] is AboutDialog window;
* [uri] is activated link;
* [user_data] is pointer for user data, hasn't used in standard handler;
* [RU]
* Функция для обработки сигнала нажатия на ссылку окна AboutDialog.
* Присоединять к сигналу "activate-link".
* [self] - окно AboutDialog;
* [uri] - ссылка, по которой совершается переход;
* [user_data] - указатель на любые другие данные, не используется в стандартном обработчике;
*/
void on_link(GtkWidget *self, char* uri, gpointer user_data){
gtk_widget_destroy(self);
on_open_documentation_confirmation(self,uri);
}
/**on_about()
* [EN]
* Function for setting up and showing AboutDialog.
* Connect it to "activate" signal of Documentation MenuItem.
* [RU]
* Функиця для настройки и показа окна AboutDialog.
* Присоединять к сигналу "activate" кнопки справки типа MenuItem.
*/
void on_about(){
GtkBuilder *builder=gtk_builder_new_from_file(glade_path);
GtkWidget *window=yon_gtk_builder_get_widget(builder,"AboutWindow");
GtkWidget *title=yon_gtk_builder_get_widget(builder,"headerAboutTopic");
GtkWidget *hideButtonBox=yon_gtk_builder_get_widget(builder,"buttonBoxHide");
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),version_application);
gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window),PROJECT_HOME_LABEL);
// gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(title),TITLE_LABEL);
g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),NULL);
gtk_widget_set_visible(hideButtonBox,0);
gtk_widget_destroy(hideButtonBox);
gtk_widget_show(window);
}
void config_init(){
main_config.always_open_documentation=0;
main_config.win_height=0;
main_config.win_width=0;
main_config.win_pos_x=0;
main_config.win_pos_y=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_window *setup_window(){
/* Widgets getting | Получение виджетов */
widgets = malloc(sizeof(main_window));
GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
widgets->Window = yon_gtk_builder_get_widget(builder,"MainWindow");
widgets->treeViewMain = yon_gtk_builder_get_widget(builder,"treeViewMain");
widgets->tvc0 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc0"));
widgets->tvc1 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc1"));
widgets->tvc2 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc2"));
widgets->tvc3 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc3"));
widgets->tvc4 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc4"));
widgets->tvc5 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc5"));
widgets->tvc6 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc6"));
widgets->tvc7 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc7"));
widgets->btnMainShowAllEmpty = yon_gtk_builder_get_widget(builder,"btnMainShowAllEmpty");
widgets->btnMainShowCoreStream = yon_gtk_builder_get_widget(builder,"btnMainShowCoreStream");
widgets->vteDispatcher = yon_gtk_builder_get_widget(builder,"vteDispatcher");
widgets->vteProcesses = yon_gtk_builder_get_widget(builder,"vteProcesses");
widgets->spinUpdateDispatcher = yon_gtk_builder_get_widget(builder,"spinUpdateDispatcher");
widgets->btnUpdateDispatcher = yon_gtk_builder_get_widget(builder,"btnUpdateDispatcher");
widgets->btnSaveCfg = yon_gtk_builder_get_widget(builder,"btnSaveCfg");
widgets->notebookMain = yon_gtk_builder_get_widget(builder,"notebookMain");
widgets->btnEdit = yon_gtk_builder_get_widget(builder,"btnEdit");
widgets->btnAdd = yon_gtk_builder_get_widget(builder,"btnAdd");
widgets->btnInfo = yon_gtk_builder_get_widget(builder,"btnInfo");
widgets->HatLabel = yon_gtk_builder_get_widget(builder,"headerTopic");
widgets->PlugBox = yon_gtk_builder_get_widget(builder,"plugBox");
widgets->HeadOverlay = yon_gtk_builder_get_widget(builder,"HeadOverlay");
widgets->HeadImage = yon_gtk_builder_get_widget(builder,"HeadBackgroundImage");
widgets->HeadBox = yon_gtk_builder_get_widget(builder,"HeaderBox");
widgets->HeadTitleLabel = yon_gtk_builder_get_widget(builder,"HeaderTitleLabel");
widgets->HeadInfoLabel = yon_gtk_builder_get_widget(builder,"HeaderInfoLabel");
widgets->StatusBox = yon_gtk_builder_get_widget(builder,"mainStatusBox");
widgets->StatusIcon = yon_gtk_builder_get_widget(builder,"mainStatusIcon");
widgets->StatusLabel = yon_gtk_builder_get_widget(builder,"mainStatusLabel");
widgets->SaveLabel = yon_gtk_builder_get_widget(builder,"headerSaveConfigLabel");
widgets->SaveMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalLocalConfigurationMenuItem");
widgets->SaveGlobalMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalConfigurationMenuItem");
widgets->SaveLocalMenuItem = yon_gtk_builder_get_widget(builder,"SaveLocalConfigurationMenuItem");
widgets->RightBox = yon_gtk_builder_get_widget(builder,"HeaderRightBox");
widgets->LoadLabel = yon_gtk_builder_get_widget(builder,"headerLoadConfigLabel");
widgets->LoadGlobalMenuItem = yon_gtk_builder_get_widget(builder,"LoadGlobalConfigurationMenuItem");
widgets->LoadLocalMenuItem = yon_gtk_builder_get_widget(builder,"LoadLocalConfigurationMenuItem");
widgets->LeftBox = yon_gtk_builder_get_widget(builder,"HeaderLeftBox");
widgets->DocumentationMenuItem = yon_gtk_builder_get_widget(builder,"DocumentationMenuItem");
widgets->AboutMenuItem = yon_gtk_builder_get_widget(builder,"AboutMenuItem");
widgets->btnShowFilters = yon_gtk_builder_get_widget(builder,"btnShowFilters");
if (main_config.lock_load_global == 1){
gtk_widget_set_sensitive(widgets->LoadGlobalMenuItem,0);
}
if (main_config.lock_save_global == 1){
gtk_widget_set_sensitive(widgets->SaveGlobalMenuItem,0);
gtk_widget_set_sensitive(widgets->SaveMenuItem,0);
}
if (main_config.lock_save_local == 1){
gtk_widget_set_sensitive(widgets->SaveLocalMenuItem,0);
gtk_widget_set_sensitive(widgets->SaveMenuItem,0);
}
if (main_config.lock_save_global == 1 && main_config.lock_save_local == 1) {
gtk_widget_set_sensitive(widgets->btnSaveCfg,0);
}
gtk_widget_show_all(widgets->Window);
return widgets;
}
void main_update_dispatcher() {
int second = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->spinUpdateDispatcher));
char* str_second = yon_char_from_int(second);
char *cmd = yon_char_get_augumented("systemd-cgtop -d ", str_second);
yon_terminal_integrated_launch(widgets->vteDispatcher, cmd, NULL, NULL);
free(str_second);
free(cmd);
}
void main_update_processes() {
char* cmd = NULL;
gboolean active_all_empty = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->btnMainShowAllEmpty));
gboolean active_core_stream = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->btnMainShowCoreStream));
if (active_core_stream == 1) {
cmd = "systemd-cgls --no-page --all";
}
else if (active_all_empty == 1) {
cmd = "systemd-cgls --no-page -k";
}
else if (active_all_empty == 1 && active_core_stream == 1) {
cmd = "systemd-cgls --no-page --all -k";
}
else {
cmd = "systemd-cgls --no-page";
}
yon_terminal_integrated_launch(widgets->vteProcesses, cmd, NULL, NULL);
}
void main_visible_columns(GtkWidget *self) {
gboolean *flags_filters = filters_get_flag();
gtk_tree_view_column_set_visible(widgets->tvc0, flags_filters[0]);
gtk_tree_view_column_set_visible(widgets->tvc1, flags_filters[1]);
gtk_tree_view_column_set_visible(widgets->tvc2, flags_filters[2]);
gtk_tree_view_column_set_visible(widgets->tvc3, flags_filters[3]);
gtk_tree_view_column_set_visible(widgets->tvc4, flags_filters[4]);
gtk_tree_view_column_set_visible(widgets->tvc5, flags_filters[5]);
gtk_tree_view_column_set_visible(widgets->tvc6, flags_filters[6]);
gtk_tree_view_column_set_visible(widgets->tvc7, flags_filters[7]);
filters_on_hide_subwindow(self);
}
void info_show(GtkWidget *self) {
gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->notebookMain), 3);
}
void event_all(main_window *widgets) {
}
void main_event(main_window *widgets) {
/* Signal connection | Присоединение сигналов */
g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK);
g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),NULL);
g_signal_connect(G_OBJECT(widgets->btnShowFilters),"clicked",G_CALLBACK(wrapper_filters_show), NULL);
g_signal_connect(G_OBJECT(widgets->btnAdd),"clicked",G_CALLBACK(add_show), glade_path);
g_signal_connect(G_OBJECT(widgets->btnEdit),"clicked",G_CALLBACK(edit_show), glade_path);
g_signal_connect(G_OBJECT(widgets->btnInfo),"clicked",G_CALLBACK(info_show), glade_path);
g_signal_connect(G_OBJECT(widgets->btnUpdateDispatcher),"clicked",G_CALLBACK(main_update_dispatcher), NULL);
g_signal_connect(G_OBJECT(widgets->btnMainShowAllEmpty), "toggled", G_CALLBACK(main_update_processes), NULL);
g_signal_connect(G_OBJECT(widgets->btnMainShowCoreStream), "toggled", G_CALLBACK(main_update_processes), NULL);
/*
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(),NULL);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(),NULL);
g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(),NULL);
g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(),NULL);
g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(),NULL);
*/
}
void wrapper_filters_show(GtkWidget *self) {
filters_show(self, glade_path);
g_signal_connect(G_OBJECT(get_widget_filters()->btnFiltersSave),"clicked",G_CALLBACK(main_visible_columns), NULL);
}
void main_localization(main_window *widgets) {
/* Localisation | Локализация */
gtk_label_set_text(GTK_LABEL(widgets->HatLabel),TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(widgets->SaveLabel),SAVE_LABEL);
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->SaveMenuItem),SAVE_CONFIGURATION_LABEL);
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->SaveGlobalMenuItem),SAVE_GLOBAL_LABEL);
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->SaveLocalMenuItem),SAVE_LOCAL_LABEL);
gtk_label_set_text(GTK_LABEL(widgets->LoadLabel),LOAD_LABEL);
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->LoadGlobalMenuItem),LOAD_GLOBAL_LABEL);
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->LoadLocalMenuItem),LOAD_LOCAL_LABEL);
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->DocumentationMenuItem),DOCUMENTATION_LABEL);
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->AboutMenuItem),ABOUT_LABEL);
}
int main(int argc, char *argv[]){
local=setlocale(LC_ALL, "");
textdomain (LocaleName);
config_init();
int option_index=0;
int show_help=0;
{
struct option long_options[] = {
{"help", 0, 0, 'h'},
{"version", 0, 0, 'V'},
{"lock-help", 0,0, 1},
{"lock-save", 0,0, 2},
{"lock-save-local", 0,0, 3},
{"lock-save-global", 0,0, 4},
{"lock-load-global", 0,0, 5},
{"socket-id", 1, 0, 's'},
{"socket-ext-id", 1,0, 'e'},
{"socket-trd-id", 1,0, 't'},
{ NULL, 0, NULL, 0 }
};
for (int i=0;i<argc;i++){
int argument=getopt_long(argc,argv,"hVvs:e:t:",long_options,&option_index);
switch(argument){
case 'h':
show_help=1;
break;
case 'v':
case 'V':
printf("%s\n",VERSION_LABEL);
exit(0);
break;
case 's':
if(optarg)
main_config.socket_id=atoi(optarg);
break;
case 'e':
if(optarg)
main_config.load_socket_id=atoi(optarg);
break;
case 't':
if(optarg)
main_config.save_socket_id=atoi(optarg);
break;
case 1:
main_config.lock_help=1;
break;
case 2:
main_config.lock_save_local=1;
main_config.lock_save_global=1;
break;
case 3:
main_config.lock_save_local=1;
break;
case 4:
main_config.lock_save_global=1;
break;
case 5:
main_config.lock_load_global=1;
break;
}
}
if (show_help==1&&main_config.lock_help!=1){
printf("%s\n",HELP_LABEL);
exit(0);
}
}
gtk_init(&argc,&argv);
main_window *widgets = setup_window();
filters_init_flag();
filters_setup_window(glade_path);
add_setup_window(glade_path);
edit_setup_window(glade_path);
main_localization(widgets);
event_all(widgets);
main_event(widgets);
yon_ubl_header_setup(widgets->HeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path);
if (yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel))
yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
yon_ubl_setup_sockets(widgets->PlugBox,widgets->LeftBox,widgets->RightBox,main_config.socket_id,main_config.load_socket_id,main_config.save_socket_id);
GtkCssProvider *css=gtk_css_provider_new();
gtk_css_provider_load_from_path(css,CssPath,NULL);
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
GTK_STYLE_PROVIDER(css),
-1);
gtk_main();
}