?? menu.c
字號:
/* * Copyright (C) 2006 Takeharu KATO * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <string.h>#include <stdio.h>#include <bonobo.h>#include <gnome.h>#include <glib.h>#include <libgnomevfs/gnome-vfs.h>#include <libgnomevfs/gnome-vfs-utils.h>#include <libgnomevfs/gnome-vfs-mime-handlers.h>#include <gdk/gdkx.h>#include "callbacks.h"#include "interface.h"#include "support.h"#include "common.h"#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ g_object_set_data (G_OBJECT (component), name, widget)#define GLADE_HOOKUP_OBJECT(component,widget,name) \ g_object_set_data_full (G_OBJECT (component), name, \ gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)static GList *monitor_wins=NULL;GStaticMutex monitor_win_mutex = G_STATIC_MUTEX_INIT;static void light_weight_flush (void){ GdkDisplay *display = gdk_display_get_default (); XFlush (GDK_DISPLAY_XDISPLAY (display));}GtkWidget *create_menu_item(const char *name,const char *label,gpointer data, void (*menu_item_callback_function) (gpointer user_data)){ GtkWidget *new_item; int index=(int)data; dbg_out("Create item with:%d\n",index); new_item=gtk_menu_item_new_with_label(label); if (menu_item_callback_function){ dbg_out("connect:data %x\n",(unsigned int)data); if (data) gtk_signal_connect_object( (gpointer)new_item, "activate", GTK_SIGNAL_FUNC(menu_item_callback_function), data); else gtk_signal_connect_object( (gpointer)new_item, "activate", GTK_SIGNAL_FUNC(menu_item_callback_function), (gpointer )new_item); } gtk_widget_show(new_item); return new_item;}static GtkWidget *create_stock_menu_item(const char *name,const gchar *stock_id,gpointer data, void (*menu_item_callback_function) (gpointer user_data)){ GtkWidget *new_item; new_item=gtk_image_menu_item_new_from_stock(stock_id,NULL); if (menu_item_callback_function) { if (data) gtk_signal_connect_object( GTK_OBJECT(new_item), "activate", GTK_SIGNAL_FUNC(menu_item_callback_function), data); else gtk_signal_connect_object( GTK_OBJECT(new_item), "activate", GTK_SIGNAL_FUNC(menu_item_callback_function), new_item); } gtk_widget_show(new_item); return new_item;}static GtkWidget *create_menu_separator(const char *name){ GtkWidget *new_item; new_item=gtk_separator_menu_item_new (); gtk_widget_show(new_item); return new_item;}static voidonDownloadMonitorSelectionChanged (GtkTreeSelection *sel, GtkListStore *liststore) { update_download_monitor_button(sel);}voidupdate_download_monitor_button(GtkTreeSelection *sel) { GtkTreeIter selected_row; GtkWidget *view; GtkWidget *remove_btn; view=GTK_WIDGET(gtk_tree_selection_get_tree_view(sel)); g_assert(view); remove_btn=lookup_widget(GTK_WIDGET(view),"deleteBtn"); g_assert(remove_btn); g_assert(gtk_tree_selection_get_mode(sel) == GTK_SELECTION_SINGLE); if (gtk_tree_selection_get_selected(sel, NULL, &selected_row)) { gtk_widget_set_sensitive(remove_btn, TRUE); } else { gtk_widget_set_sensitive(remove_btn, FALSE); }}voidsetup_download_window(GtkWidget *window){ GtkWidget *view; GtkListStore *liststore; GtkTreeViewColumn *col; GtkCellRenderer *renderer; GtkTreeSelection *sel; dbg_out("here\n"); g_assert(window); view=lookup_widget(GTK_WIDGET(window),"treeview5"); g_assert(view); dbg_out("Create new monitor\n"); liststore = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_INT); g_assert(liststore); gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(liststore)); g_object_unref(liststore); /* * タイトル設定 */ /* --- Column #1 --- */ col = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(col, _("FileNames")); /* pack tree view column into tree view */ gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); renderer = gtk_cell_renderer_text_new(); /* pack cell renderer into tree view column */ gtk_tree_view_column_pack_start(col, renderer, TRUE); /* connect 'text' property of the cell renderer to * model column that contains the first name */ gtk_tree_view_column_add_attribute(col, renderer, "text", 0); gtk_tree_view_column_set_resizable (col,TRUE); /* --- Column #2 --- */ col = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(col, _("Remains")); /* pack tree view column into tree view */ gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); renderer = gtk_cell_renderer_text_new(); /* pack cell renderer into tree view column */ gtk_tree_view_column_pack_start(col, renderer, TRUE); /* connect 'text' property of the cell renderer to * model column that contains the first name */ gtk_tree_view_column_add_attribute(col, renderer, "text", 1); gtk_tree_view_column_set_resizable (col,TRUE); /* --- Column #3 --- */ col = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(col, _("Receivers")); /* pack tree view column into tree view */ gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); renderer = gtk_cell_renderer_text_new(); /* pack cell renderer into tree view column */ gtk_tree_view_column_pack_start(col, renderer, TRUE); /* connect 'text' property of the cell renderer to * model column that contains the first name */ gtk_tree_view_column_add_attribute(col, renderer, "text", 2); gtk_tree_view_column_set_resizable (col,TRUE); sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE); g_signal_connect(sel, "changed", G_CALLBACK(onDownloadMonitorSelectionChanged), liststore);}voidon_create_download_monitor(void) { GtkWidget *window; dbg_out("here\n"); g_static_mutex_lock(&monitor_win_mutex); if (g_list_length(monitor_wins)>0) { GList *node; /* FIXME */ node=g_list_first (monitor_wins); g_assert(node->data); gtk_window_present (GTK_WINDOW(node->data)); g_static_mutex_unlock(&monitor_win_mutex); return; } window=create_downloadMonitor(); g_assert(window); setup_download_window(window); g_static_mutex_unlock(&monitor_win_mutex); download_monitor_add_waiter_window(window); gtk_widget_show(window);}voidon_mainmenu_new_message_item(gpointer menuitem){ dbg_out("here\n"); on_startBtn_clicked (NULL,NULL);}voidon_mainmenu_download_item(gpointer menuitem){ on_create_download_monitor();}voidon_mainmenu_preferences_item(gpointer menuitem){ dbg_out("here\n"); on_preferences1_activate(menuitem,NULL);}voidon_mainmenu_about_item(gpointer menuitem){ dbg_out("here\n"); ipmsg_show_about_dialog();}voidon_mainmenu_log_item(gpointer menuitem){ dbg_out("here\n"); show_ipmsg_log();}voidon_mainmenu_absent_item(gpointer menuitem){ dbg_out("here\n");}voidon_mainmenu_attend_item(gpointer menuitem){ dbg_out("here\n"); hostinfo_set_ipmsg_absent(FALSE); ipmsg_send_br_absence(udp_con,0);}voidon_mainmenu_foreground_win_item(gpointer menuitem){ dbg_out("here\n"); present_all_displayed_windows();}voidon_mainmenu_remove_win_item(gpointer menuitem){ dbg_out("here\n"); destroy_all_opened_windows();}voidon_mainmenu_quit_item (gpointer menuitem){ dbg_out("here\n"); on_initialWindow_destroy(GTK_OBJECT(menuitem),NULL);}voidon_fuzai_item_activate (gpointer user_data){ int max_index; int index; index=(int)user_data - 1; dbg_out("here:%x\n",index); if (hostinfo_refer_absent_length(&max_index)) { g_assert_not_reached(); } dbg_out("Max index:%d\n",max_index); if ( (index >= max_index) || (index < 0) ) return; hostinfo_set_absent_id(index); hostinfo_set_ipmsg_absent(TRUE); ipmsg_send_br_absence(udp_con,0); return;}voidon_fuzai_config_activate (gpointer menuitem){ GtkWidget *window; dbg_out("here:%x\n",(unsigned int)menuitem); window=internal_create_fuzai_editor(); gtk_widget_show(window);}static GtkWidget *create_fuzai_menu(void){ GtkWidget *menu; GtkWidget *new_item; GtkWidget *separator4_item; GtkWidget *config_item; gchar name[16]; gchar *title; int i,max_index=0; menu=gtk_menu_new(); if (hostinfo_refer_absent_length(&max_index)) { g_assert_not_reached(); } dbg_out("Max index:%d\n",max_index); for(i=0;i<max_index;++i) { snprintf(name,15,"fuzai%d",i); name[15]='\0'; title=NULL; hostinfo_get_absent_title(i,(const char **)&title); /* 埋め込みのindexは, NULLと區別するため, +1する */ if (title) { new_item=create_menu_item(name,title,(gpointer)(i+1),on_fuzai_item_activate); g_free(title); }else new_item=create_menu_item(name,name,(gpointer)(i+1),on_fuzai_item_activate); gtk_menu_append( GTK_MENU(menu), new_item); GLADE_HOOKUP_OBJECT(menu,new_item,name); } separator4_item=create_menu_separator("separator4"); config_item=create_stock_menu_item("fuzai_config_item",GTK_STOCK_PREFERENCES,NULL,on_fuzai_config_activate); gtk_menu_append( GTK_MENU(menu), separator4_item); gtk_menu_append( GTK_MENU(menu), config_item); GLADE_HOOKUP_OBJECT(menu,separator4_item,"separator4_item"); GLADE_HOOKUP_OBJECT(menu,config_item,"fuzai_config_item"); return menu;}GtkWidget *create_main_menu(void){ GtkWidget *menu; GtkWidget *new_message_item; GtkWidget *separator0_item; GtkWidget *download_item; GtkWidget *separator1_item; GtkWidget *remove_win_item; GtkWidget *foreground_win_item; GtkWidget *separator2_item; GtkWidget *preferences_item; GtkWidget *about_item;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -