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.
179 lines
7.8 KiB
179 lines
7.8 KiB
#include <gtk/gtk.h>
|
|
#include <gtk/gtkx.h>
|
|
#include <getopt.h>
|
|
#include <libintl.h>
|
|
#include <locale.h>
|
|
#include "ubl-util-standard.c"
|
|
#define cssPath "/usr/share/ubl-settings-info/css/ubl-settings-info.css"
|
|
#define gladePath "/usr/share/ubl-settings-info/ui/ubl-settings-info.glade"
|
|
#define HeadBackgroundImagePath "/usr/share/ubl-settings-info/images/logo-background.png"
|
|
#define LogoImagePath "/usr/share/ubl-settings-info/images/ublinux-logo.svg"
|
|
#define LocaleName "ubl-settings-info"
|
|
#define LocalePath "/usr/share/locale"
|
|
|
|
typedef char* string;
|
|
string version_application = "1.3";
|
|
|
|
#define _(String) gettext(String)
|
|
|
|
|
|
char *yon_char_get_augumented(char *source, char *append){
|
|
int size=strlen(source)+strlen(append)+1;
|
|
char *final=malloc(size);
|
|
memset(final,0,size);
|
|
sprintf(final,"%s%s",source,append);
|
|
return final;
|
|
}
|
|
|
|
char *yon_cut(char *source, int size, int startpos){
|
|
char *cut=NULL;
|
|
cut=malloc(size+1);
|
|
memset(cut,0,size+1);
|
|
memcpy(cut,source+startpos,size);
|
|
return cut;
|
|
}
|
|
void on_about(GtkWidget *button){
|
|
GtkBuilder *builder = gtk_builder_new_from_file(gladePath);
|
|
GtkWidget *AboutButtons = GTK_WIDGET(gtk_builder_get_object(builder,"AboutButtons"));
|
|
GtkWidget *About = GTK_WIDGET(gtk_builder_get_object(builder, "About"));
|
|
GtkWidget *HeaderAboutTopic = GTK_WIDGET(gtk_builder_get_object(builder, "headerAboutTopic"));
|
|
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(About),version_application);
|
|
gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(About),_("System Information"));
|
|
gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(About),"ubl-settings-info");
|
|
gtk_widget_show(GTK_WIDGET(gtk_builder_get_object(builder,"About")));
|
|
gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(About),_("Project Home Page"));
|
|
gtk_label_set_text(GTK_LABEL(HeaderAboutTopic),_("About System info"));
|
|
gtk_widget_set_visible(AboutButtons,0);
|
|
}
|
|
|
|
void yon_on_window_close_dont_destroy(){
|
|
|
|
}
|
|
|
|
|
|
int main(int argc, char *argv[]){
|
|
int argsc=0;
|
|
char *arv="";
|
|
char **argsv=&arv;
|
|
GError *err=NULL;
|
|
gtk_init(&argsc, &argsv);
|
|
setlocale(LC_ALL, "");
|
|
bindtextdomain (LocaleName, LocalePath);
|
|
textdomain (LocaleName);
|
|
GtkBuilder *builder = gtk_builder_new_from_file(gladePath);
|
|
GtkWidget *plugBox = GTK_WIDGET(gtk_builder_get_object(builder, "plugBox"));
|
|
GtkWidget *labelInfo = GTK_WIDGET(gtk_builder_get_object(builder, "InfoLabel"));
|
|
GtkWidget *iconInfo = GTK_WIDGET(gtk_builder_get_object(builder, "InfoIcon"));
|
|
GtkWidget *headLabel = GTK_WIDGET(gtk_builder_get_object(builder, "headLabel"));
|
|
GtkWidget *HeaderTopic = GTK_WIDGET(gtk_builder_get_object(builder, "headerTopic"));
|
|
GtkWidget *AboutButton = GTK_WIDGET(gtk_builder_get_object(builder,"MenuItemAbout"));
|
|
GtkWidget *buttonSettings = GTK_WIDGET(gtk_builder_get_object(builder,"buttonSettings"));
|
|
GtkWidget *headBackgroundIcon = GTK_WIDGET(gtk_builder_get_object(builder,"HeadBackgroundImage"));
|
|
GtkWidget *headOverlay = GTK_WIDGET(gtk_builder_get_object(builder,"HeadOverlay"));
|
|
GtkWidget *headbox = GTK_WIDGET(gtk_builder_get_object(builder,"boxColor"));
|
|
gtk_image_set_from_file(GTK_IMAGE(headBackgroundIcon),HeadBackgroundImagePath);
|
|
gtk_overlay_add_overlay(GTK_OVERLAY(headOverlay),headbox);
|
|
gtk_label_set_text(GTK_LABEL(HeaderTopic),_("System Information"));
|
|
gtk_label_set_text(GTK_LABEL(headLabel),_("System Information"));
|
|
g_signal_connect(G_OBJECT(AboutButton), "activate", G_CALLBACK(on_about),NULL);
|
|
gtk_menu_item_set_label(GTK_MENU_ITEM(AboutButton),_("About"));
|
|
|
|
gtk_image_set_from_pixbuf(GTK_IMAGE(iconInfo),gdk_pixbuf_new_from_file_at_size(LogoImagePath,256,256,&err));
|
|
if (err){
|
|
printf("%s\n",err->message);
|
|
g_error_free(err);
|
|
}
|
|
GtkCssProvider *css=gtk_css_provider_new();
|
|
gtk_css_provider_load_from_path(css,cssPath,&err);
|
|
if (err){
|
|
printf("%s\n",err->message);
|
|
g_error_free(err);
|
|
}
|
|
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
|
|
GTK_STYLE_PROVIDER(css),
|
|
-1);
|
|
FILE *fp;
|
|
char path[1035];
|
|
char *loc=setlocale(LC_ALL,NULL);
|
|
if (strcmp(loc,"ru_RU.UTF-8")==0)
|
|
fp = popen("screenfetch -N -n | sed 's/OS:/Система:/' | sed 's/Kernel:/Ядро:/g' | sed 's/Uptime:/Время работы:/g' | \
|
|
sed 's/Packages:/Установлено пакетов:/g' | sed 's/Shell:/Оболочка:/g' | sed 's/Resolution:/Разрешение:/g' | sed 's/DE:/Среда рабочего стола:/g' | \
|
|
sed 's/WM:/Оконный менеджер:/g' | sed 's/WM Theme:/Тема оконного менеджера:/g' | sed 's/GTK Theme:/Тема GTK:/g' | sed 's/Icon Theme:/Тема значков:/g' | sed 's/Font:/Шрифт:/g' | \
|
|
sed 's/Disk:/Диск:/g' | sed 's/RAM:/Оперативная память:/g'", "r");
|
|
else fp = popen("screenfetch -n -w -N", "r");
|
|
if (fp == NULL) {
|
|
printf("Failed to run command\n" );
|
|
exit(1);
|
|
}
|
|
char *line=NULL;
|
|
line="";
|
|
char *prevline="";
|
|
char *pth;
|
|
char *preph="";
|
|
line="";
|
|
while (fgets(path, sizeof(path),fp)!=NULL){
|
|
|
|
line=strstr(path,": ");
|
|
if (line!=NULL){
|
|
line=yon_cut(line,strlen(line),1);
|
|
int size=strlen(path)-strlen(line)+1;
|
|
pth=yon_cut(path,size,0);
|
|
pth=yon_char_get_augumented("<span color='#1a5fb4'>",pth);
|
|
pth=yon_char_get_augumented(pth,"</span>");
|
|
line=yon_char_get_augumented(pth,line);
|
|
} else {
|
|
line=path;
|
|
pth="<span size=\"12pt\">\n";
|
|
line=yon_char_get_augumented(pth,line);
|
|
if (strlen(line)>40){
|
|
char *fnd=strstr(line," ");
|
|
*fnd='\n';
|
|
}
|
|
}
|
|
prevline=yon_char_get_augumented(prevline,line);
|
|
}
|
|
prevline=yon_char_get_augumented(prevline,"</span>");;
|
|
gtk_label_set_text(GTK_LABEL(labelInfo),prevline);
|
|
gtk_label_set_markup (GTK_LABEL(labelInfo),prevline);;
|
|
|
|
int socket_id=0;
|
|
int socket_ext_id=0;
|
|
int socket_trd_id=0;
|
|
int option_index=0;
|
|
int textsize=0;
|
|
int pointer=0;
|
|
static struct option long_options[] = {
|
|
{"socket-id", 1, 0, 's'},
|
|
{"socket-ext-id", 1, 0, 'e'},
|
|
{"socket-trd-id", 1, 0, 't'},
|
|
};
|
|
int socket_find;
|
|
for (int i=0;i<argc;i++){
|
|
socket_find=getopt_long(argc,argv,"s:t:e",long_options,&option_index);
|
|
if (socket_find=='s') if (optarg!=NULL) socket_id=atoi(optarg); else socket_id=-1;
|
|
else if (socket_find=='e') if (optarg!=NULL) socket_ext_id=atoi(optarg); else socket_ext_id=-1;
|
|
else if (socket_find=='t') if (optarg!=NULL) socket_trd_id=atoi(optarg); else socket_trd_id=-1;
|
|
}
|
|
printf("%d\n\n%d\n\n",socket_id,socket_ext_id);
|
|
if (socket_id<1){
|
|
printf("Solo mod\n");
|
|
GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder,"window"));
|
|
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit),NULL);
|
|
gtk_widget_show_all(window);
|
|
|
|
|
|
} else {
|
|
printf("Plug mod\n");
|
|
ubl_make_plugs(NULL,buttonSettings,0,socket_ext_id);
|
|
// GtkStyleContext *context = gtk_widget_get_style_context(gtk_widget_get_parent(buttonSettings));
|
|
// gtk_style_context_add_class(context,"primary-toolbar");
|
|
GtkWidget *plug=GTK_WIDGET(gtk_plug_new(socket_id));
|
|
g_signal_connect(G_OBJECT(plug), "destroy", G_CALLBACK(gtk_main_quit),NULL);
|
|
GtkWidget *parentWindow = gtk_widget_get_parent(plugBox);
|
|
gtk_container_remove(GTK_CONTAINER(parentWindow),plugBox);
|
|
gtk_container_add(GTK_CONTAINER(plug),plugBox);
|
|
gtk_widget_show_all(plug);
|
|
}
|
|
|
|
gtk_main();
|
|
} |