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-info/source/ubl-settings-info.c

171 lines
7.3 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 HeaderImagePath "/usr/share/icons/hicolor/scalable/apps/com.ublinux.ubl-settings-info.svg"
#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),_("Basic System Information"));
gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(About),_("System Information"));
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 ubl-settings-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"));
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){
int size=strlen(path)-strlen(line);
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 option_index=0;
int textsize=0;
int pointer=0;
static struct option long_options[] = {
{"socket-id", 1, 0, 0},
{"socket-ext-id", 1, 0, 2},
};
int socket_find;
for (int i=0;i<argc;i++){
socket_find=getopt_long(argc,argv,"s:t:",long_options,&option_index);
if (socket_find==0) if (optarg!=NULL) socket_id=atoi(optarg); else socket_id=-1;
else if (socket_find=='s') if (optarg!=NULL) socket_id=atoi(optarg); else socket_id=-1;
else if (socket_find==2) if (optarg!=NULL) socket_ext_id=atoi(optarg); else socket_ext_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();
}