#include "../config.h" #include #include #include #include #include #include "gasfahani.h" #include "gui.h" typedef struct { gchar *title; gchar *artist; gchar *album; gchar *length; gchar *genre; gint year; gchar *comment; gchar *volume; gchar *path; gchar *file; gint size; gchar *mode; gint kbit; gint khz; gchar *track; } Gui; enum { COLUMN_TITLE, COLUMN_ARTIST, COLUMN_ALBUM, COLUMN_LENGTH, COLUMN_GENRE, COLUMN_YEAR, COLUMN_COMMENT, COLUMN_VOLUME, COLUMN_PATH, COLUMN_FILE, COLUMN_SIZE, COLUMN_MODE, COLUMN_KBIT, COLUMN_KHZ, COLUMN_TRACK, NUM_COLUMNS }; void gui_init () { GtkWidget *window; GtkWidget *vbox; GtkWidget *menubar; /* GtkWidget *menuitem1; GtkWidget *menu1; GtkWidget *new1; GtkWidget *open1; GtkWidget *save1; GtkWidget *save_as1; GtkWidget *separatormenuitem1; GtkWidget *quit1; GtkWidget *menuitem2; GtkWidget *menu2; GtkWidget *cut1; GtkWidget *copy1; GtkWidget *paste1; GtkWidget *delete1; GtkWidget *menuitem3; GtkWidget *menu3; GtkWidget *menuitem4; GtkWidget *menu4; GtkWidget *about1; */ GtkWidget *toolbar; GtkWidget *scrolledwindow; GtkWidget *treeview; GtkWidget *statusbar; GtkTreeModel *model; GtkAccelGroup *accel_group; accel_group = gtk_accel_group_new (); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), g_strdup_printf ("%s %s", PACKAGE, VERSION)); gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); gtk_widget_set_usize (window, 400, 300); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), vbox); menubar = gtk_menu_bar_new (); /* gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0); menuitem1 = gtk_menu_item_new_with_mnemonic (_("_File")); gtk_widget_show (menuitem1); gtk_container_add (GTK_CONTAINER (menubar), menuitem1); menu1 = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menu1); new1 = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group); gtk_widget_show (new1); gtk_container_add (GTK_CONTAINER (menu1), new1); open1 = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group); gtk_widget_show (open1); gtk_container_add (GTK_CONTAINER (menu1), open1); save1 = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group); gtk_widget_show (save1); gtk_container_add (GTK_CONTAINER (menu1), save1); save_as1 = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group); gtk_widget_show (save_as1); gtk_container_add (GTK_CONTAINER (menu1), save_as1); separatormenuitem1 = gtk_separator_menu_item_new (); gtk_widget_show (separatormenuitem1); gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1); gtk_widget_set_sensitive (separatormenuitem1, FALSE); quit1 = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group); gtk_widget_show (quit1); gtk_container_add (GTK_CONTAINER (menu1), quit1); menuitem2 = gtk_menu_item_new_with_mnemonic (_("_Edit")); gtk_widget_show (menuitem2); gtk_container_add (GTK_CONTAINER (menubar), menuitem2); menu2 = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem2), menu2); cut1 = gtk_image_menu_item_new_from_stock ("gtk-cut", accel_group); gtk_widget_show (cut1); gtk_container_add (GTK_CONTAINER (menu2), cut1); copy1 = gtk_image_menu_item_new_from_stock ("gtk-copy", accel_group); gtk_widget_show (copy1); gtk_container_add (GTK_CONTAINER (menu2), copy1); paste1 = gtk_image_menu_item_new_from_stock ("gtk-paste", accel_group); gtk_widget_show (paste1); gtk_container_add (GTK_CONTAINER (menu2), paste1); delete1 = gtk_image_menu_item_new_from_stock ("gtk-delete", accel_group); gtk_widget_show (delete1); gtk_container_add (GTK_CONTAINER (menu2), delete1); menuitem3 = gtk_menu_item_new_with_mnemonic (_("_View")); gtk_widget_show (menuitem3); gtk_container_add (GTK_CONTAINER (menubar), menuitem3); menu3 = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem3), menu3); menuitem4 = gtk_menu_item_new_with_mnemonic (_("_Help")); gtk_widget_show (menuitem4); gtk_container_add (GTK_CONTAINER (menubar), menuitem4); menu4 = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menu4); about1 = gtk_menu_item_new_with_mnemonic (_("_About")); gtk_widget_show (about1); gtk_container_add (GTK_CONTAINER (menu4), about1); */ toolbar = gtk_toolbar_new (); gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0); gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_BOTH); scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); model = create_model (); treeview = gtk_tree_view_new_with_model (model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE); g_object_unref (G_OBJECT (model)); gtk_container_add (GTK_CONTAINER (scrolledwindow), treeview); add_columns (GTK_TREE_VIEW (treeview)); statusbar = gtk_statusbar_new (); gtk_box_pack_start (GTK_BOX (vbox), statusbar, FALSE, FALSE, 0); gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (treeview, "row_activated", G_CALLBACK (play_row), model); gtk_widget_show_all (window); } void play_row(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column) { GtkTreeIter iter; GtkTreeModel *model; gchar *file, *fpath; pid_t child; model = gtk_tree_view_get_model (tree_view); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, COLUMN_PATH, &fpath, -1); gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, COLUMN_FILE, &file, -1); child = fork(); if ( child == 0 ) { gchar *command[] = {g_strdup_printf("\"%s/%s\"", fpath, file ) , NULL }; execvp("xmms", command); g_free(command); } g_free(fpath); g_free(file); } GtkTreeModel * create_model () { gint x; GtkListStore *store; GtkTreeIter iter; MYSQL_ROW row; extern MYSQL_RES *res; x = mysql_num_rows (res); store = gtk_list_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_STRING); while ((row = mysql_fetch_row (res))) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, COLUMN_TITLE, row[ID_DB_TITLE], COLUMN_ARTIST, row[ID_DB_ARTIST], COLUMN_ALBUM, row[ID_DB_ALBUM], COLUMN_LENGTH, row[ID_DB_LENGTH], COLUMN_GENRE, row[ID_DB_GENRE], COLUMN_YEAR, row[ID_DB_YEAR], COLUMN_COMMENT, row[ID_DB_COMMENT], COLUMN_VOLUME, row[ID_DB_VOLUME], COLUMN_PATH, row[ID_DB_PATH], COLUMN_FILE, row[ID_DB_FNAME], COLUMN_SIZE, row[ID_DB_SIZE], COLUMN_MODE, row[ID_DB_BIT], COLUMN_KBIT, row[ID_DB_BIT], COLUMN_KHZ, row[ID_DB_SAMPLE], COLUMN_TRACK, row[ID_DB_TRACK], -1); } return GTK_TREE_MODEL (store); } void add_columns (GtkTreeView * treeview) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeModel *model; model = gtk_tree_view_get_model (treeview); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Title", renderer, "text", COLUMN_TITLE, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Artist", renderer, "text", COLUMN_ARTIST, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Album", renderer, "text", COLUMN_ALBUM, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Length", renderer, "text", COLUMN_LENGTH, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Genre", renderer, "text", COLUMN_GENRE, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Year", renderer, "text", COLUMN_YEAR, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Comment", renderer, "text", COLUMN_COMMENT, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Volume", renderer, "text", COLUMN_VOLUME, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Path", renderer, "text", COLUMN_PATH, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("File", renderer, "text", COLUMN_FILE, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Size", renderer, "text", COLUMN_SIZE, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Mode", renderer, "text", COLUMN_MODE, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Kbit/s", renderer, "text", COLUMN_KBIT, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("KHz", renderer, "text", COLUMN_KHZ, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Track", renderer, "text", COLUMN_TRACK, NULL); gtk_tree_view_append_column (treeview, column); }