stock.c
1 #include "stock.h" 2 #include <stdlib.h> 3 #include <string.h> 4 #include <gtk/gtk.h> 5 6 static char *id = "@(#) $Id$"; 7 8 #define UIFILE "gtk-lshw.ui" 9 10 GtkWidget *mainwindow = NULL; 11 GtkWidget *list1 = NULL; 12 GtkWidget *list2 = NULL; 13 GtkWidget *list3 = NULL; 14 GtkWidget *description = NULL; 15 GtkWidget *statusbar = NULL; 16 GMenuModel *menubar = NULL; 17 GHashTable *pixbufs = NULL; 18 19 static struct StockIcon 20 { 21 const char *name; 22 const char *filename; 23 24 } const stock_icons[] = 25 { 26 { LSHW_STOCK_AUDIO, "audio.svg" }, 27 { LSHW_STOCK_AMD, "amd.svg" }, 28 { LSHW_STOCK_BATTERY, "battery.svg" }, 29 { LSHW_STOCK_BLUETOOTH, "bluetooth.svg" }, 30 { LSHW_STOCK_BOARD, "board.svg" }, 31 { LSHW_STOCK_CHIP, "chip.svg" }, 32 { LSHW_STOCK_CPU, "cpu.svg" }, 33 { LSHW_STOCK_DESKTOPCOMPUTER, "desktopcomputer.svg" }, 34 { LSHW_STOCK_DISABLED, "disabled.svg" }, 35 { LSHW_STOCK_DISPLAY, "display.svg" }, 36 { LSHW_STOCK_CD, "cd.svg" }, 37 { LSHW_STOCK_DISC, "disc.svg" }, 38 { LSHW_STOCK_FIREWIRE, "firewire.svg" }, 39 { LSHW_STOCK_INTEL, "intel.svg" }, 40 { LSHW_STOCK_LAPTOP, "laptop.svg" }, 41 { LSHW_STOCK_LOGO, "logo.svg" }, 42 { LSHW_STOCK_MEMORY, "memory.svg" }, 43 { LSHW_STOCK_MINI, "mini.svg" }, 44 { LSHW_STOCK_MODEM, "modem.svg" }, 45 { LSHW_STOCK_MOTHERBOARD, "motherboard.svg" }, 46 { LSHW_STOCK_NETWORK, "network.svg" }, 47 { LSHW_STOCK_PARALLEL, "parallel.svg" }, 48 { LSHW_STOCK_POWERMAC, "powermac.svg" }, 49 { LSHW_STOCK_POWERMACG5, "powermacg5.svg" }, 50 { LSHW_STOCK_POWERPC, "powerpc.svg" }, 51 { LSHW_STOCK_PRINTER, "printer.svg" }, 52 { LSHW_STOCK_RADIO, "radio.svg" }, 53 { LSHW_STOCK_MD, "md.svg" }, 54 { LSHW_STOCK_SCSI, "scsi.svg" }, 55 { LSHW_STOCK_SERIAL, "serial.svg" }, 56 { LSHW_STOCK_TOWERCOMPUTER, "towercomputer.svg" }, 57 { LSHW_STOCK_USB, "usb.svg" }, 58 { LSHW_STOCK_WIFI, "wifi.svg" }, 59 }; 60 61 static gchar * 62 find_file(const char *base, const char *dir) 63 { 64 char *filename; 65 char *basedir; 66 67 if (base == NULL) 68 return NULL; 69 70 if((basedir = getenv("BASEDIR"))) 71 filename = g_build_filename(basedir, dir, base, NULL); 72 else 73 filename = g_build_filename(DATADIR, "lshw", dir, base, NULL); 74 75 if (!g_file_test(filename, G_FILE_TEST_EXISTS)) 76 { 77 g_free(filename); 78 return NULL; 79 } 80 else 81 return filename; 82 } 83 84 85 void 86 lshw_gtk_stock_init(void) 87 { 88 static int stock_initted = 0; 89 int i; 90 91 if (stock_initted) 92 return; 93 94 stock_initted = 1; 95 96 /* Setup the icons hash table. */ 97 pixbufs = g_hash_table_new(g_str_hash, g_str_equal); 98 99 for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) 100 { 101 GdkPixbuf *pixbuf; 102 gchar *filename; 103 104 filename = find_file(stock_icons[i].filename, "artwork"); 105 106 if (filename == NULL) 107 continue; 108 109 pixbuf = gdk_pixbuf_new_from_file_at_size(filename, LSHW_DEFAULT_ICON_SIZE, LSHW_DEFAULT_ICON_SIZE, NULL); 110 g_free(filename); 111 112 if(pixbuf) /* we managed to load something */ 113 { 114 g_hash_table_insert(pixbufs, (char*)stock_icons[i].name, pixbuf); 115 } 116 } 117 118 (void) &id; /* avoid "id defined but not used" warning */ 119 } 120 121 void lshw_ui_init(GtkApplication *app) 122 { 123 GError *error = NULL; 124 GtkBuilder *builder = NULL; 125 GdkPixbuf *icon = NULL; 126 gchar *uiname = NULL; 127 128 mainwindow = NULL; 129 130 builder = gtk_builder_new(); 131 uiname = find_file(UIFILE, "ui"); 132 if(!uiname) 133 { 134 g_critical( "Could not find UI file: %s", UIFILE ); 135 return; 136 } 137 if(!gtk_builder_add_from_file(builder, uiname, &error)) 138 { 139 g_critical( "Could not create UI: %s", error->message ); 140 g_free( error ); 141 g_object_unref( G_OBJECT( builder ) ); 142 return; 143 } 144 g_free(uiname); 145 146 mainwindow = GTK_WIDGET( gtk_builder_get_object( builder, "mainwindow" ) ); 147 list1 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview1")); 148 list2 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview2")); 149 list3 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview3")); 150 description = GTK_WIDGET(gtk_builder_get_object( builder, "description")); 151 statusbar = GTK_WIDGET(gtk_builder_get_object( builder, "statusbar")); 152 gtk_builder_connect_signals( builder, mainwindow ); 153 menubar = G_MENU_MODEL( gtk_builder_get_object( builder, "menubar")); 154 gtk_window_set_application( GTK_WINDOW( mainwindow ), app ); 155 gtk_application_set_menubar( app, menubar ); 156 g_object_unref( G_OBJECT( builder ) ); 157 158 icon = g_hash_table_lookup(pixbufs, LSHW_STOCK_LOGO); 159 if(GDK_IS_PIXBUF(icon)) 160 { 161 gtk_window_set_icon(GTK_WINDOW(mainwindow), icon); 162 gtk_window_set_default_icon(icon); 163 } 164 }