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

144 lines
5.8 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 <gtk/gtk.h>
#include <gtk/gtkx.h>
#include <getopt.h>
#include <locale.h>
#include "ubl-standard-ui.c"
#define cssPath "/usr/share/ubl-settings-info/ubl-settings-info.css"
#define gladePath "/usr/share/ubl-settings-info/ubl-settings-info.glade"
#define HeaderImagePath "/usr/share/icons/hicolor/scalable/apps/ubl-settings-info.svg"
#define LogoImagePath "/usr/share/icons/hicolor/scalable/apps/ubl-settings-manager.svg"
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_resized(GtkWidget *window, GdkEventConfigure *event){
int x,y;
gtk_window_get_size(GTK_WINDOW(window),&x,&y);
printf("x - %d\ny - %d\n");
}
int main(int argc, char *argv[]){
int argsc=0;
char *arv="";
char **argsv=&arv;
GError *err=NULL;
gtk_init(&argsc, &argsv);
GtkBuilder *builder = gtk_builder_new_from_file(gladePath);
GtkWidget *plugBox = GTK_WIDGET(gtk_builder_get_object(builder, "plugBox"));
GtkWidget *button = GTK_WIDGET(gtk_builder_get_object(builder, "ButtonToHeader"));
GtkWidget *labelInfo = GTK_WIDGET(gtk_builder_get_object(builder, "InfoLabel"));
GtkWidget *iconInfo = GTK_WIDGET(gtk_builder_get_object(builder, "InfoIcon"));
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),
0);
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", 2, 0, 0},
{"socket-ext-id", 2, 0, 2},
{"size",2,0,1}
};
int socket_find;
for (int i=0;i<argc;i++){
socket_find=getopt_long(argc,argv,"s::",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 *mainui = NULL;
returnstruct *ret = ubl_get_standard_ui(HeaderImagePath, "Информация о системе",1,NULL,0);
mainui=ret->uiwindow;
gtk_box_pack_start(GTK_BOX(mainui),plugBox,1,1,0);
gtk_widget_show_all(plugBox);
} else {
GtkWidget *mainui = NULL;
returnstruct *ret = ubl_get_standard_ui(HeaderImagePath, "Информация о системе",0,NULL, 0);
mainui=ret->uiwindow;
gtk_box_pack_start(GTK_BOX(mainui),plugBox,1,1,0);
printf("Plug mod\n");
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();
}