⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwindow.cpp

📁 iptux是linux下面能实现类似windows里面飞鸽传书的功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//// C++ Implementation: MainWindow//// Description:////// Author: Jally <jallyx@163.com>, (C) 2008//// Copyright: See COPYING file that comes with this distribution////#include "MainWindow.h"#include "DetectPal.h"#include "Transport.h"#include "IptuxSetup.h"#include "ShareFile.h"#include "DialogGroup.h"#include "AboutIptux.h"#include "CoreThread.h"#include "UdpData.h"#include "Command.h"#include "DialogPeer.h"#include "RevisePal.h"#include "SendFile.h"#include "Control.h"#include "my_entry.h"#include "output.h"#include "support.h"#include "baling.h"#include "utils.h" MainWindow::MainWindow():window(NULL), client_paned(NULL), accel(NULL){}MainWindow::~MainWindow(){	gtk_widget_destroy(window);	g_object_unref(accel);}void MainWindow::CreateWindow(){	extern Control ctr;	extern struct interactive inter;	GdkGeometry geometry = { 50, 200, 2000, 2000, 0, 0, 1, 10, 0.0, 0.0,		GDK_GRAVITY_NORTH_WEST	};	GdkWindowHints hints =	    GdkWindowHints(GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE |			   GDK_HINT_BASE_SIZE | GDK_HINT_RESIZE_INC |			   GDK_HINT_WIN_GRAVITY | GDK_HINT_USER_POS |			   GDK_HINT_USER_SIZE);	GdkPixbuf *pixbuf;	inter.window = window = gtk_window_new(GTK_WINDOW_TOPLEVEL);	update_widget_bg(window, __BACK_DIR "/back.png");	gtk_window_set_title(GTK_WINDOW(window), _("iptux"));	pixbuf =	    gdk_pixbuf_new_from_file_at_size(__LOGO_DIR "/ip-tux.png", 25, 25,					     NULL);	if (pixbuf) {		gtk_window_set_default_icon(pixbuf);		g_object_unref(pixbuf);	} else		pwarning(Fail, "%s \"" __LOGO_DIR "/ip-tux.png\" %s",			 _("Icon file"), _("is lost!"));	gtk_window_set_geometry_hints(GTK_WINDOW(window), window, &geometry,				      hints);	gtk_window_set_default_size(GTK_WINDOW(window), GINT(ctr.pix * 70),				    GINT(ctr.pix * 170));	accel = gtk_accel_group_new();	gtk_window_add_accel_group(GTK_WINDOW(window), accel);	g_signal_connect_swapped(window, "delete-event",				 G_CALLBACK(SwitchWindowMode), NULL);	gtk_widget_show(window);}void MainWindow::CreateAllArea(){	extern struct interactive inter;	GtkWidget *menu_bar, *label;	GtkWidget *box, *sw, *paltree;	gchar *ptr;	client_paned = create_paned();	gtk_container_add(GTK_CONTAINER(window), client_paned);	box = create_box();	gtk_paned_pack1(GTK_PANED(client_paned), box, true, true);	menu_bar = CreateMenuBar();	gtk_box_pack_start(GTK_BOX(box), menu_bar, FALSE, FALSE, 0);	ptr = g_strdup_printf(_("pals online: %u"), 0);	inter.online = label = create_label(ptr);	g_free(ptr);	gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);	sw = create_scrolled_window();	gtk_container_set_border_width(GTK_CONTAINER(sw), 4);	gtk_box_pack_start(GTK_BOX(box), sw, TRUE, TRUE, 0);	paltree = CreatePalView();	gtk_container_add(GTK_CONTAINER(sw), paltree);}GtkWidget *MainWindow::CreateMenuBar(){	GtkWidget *menu_bar;	menu_bar = gtk_menu_bar_new();	update_widget_bg(menu_bar, __BACK_DIR "/title.png");	gtk_widget_show(menu_bar);	CreateFileMenu(menu_bar);	CreateToolMenu(menu_bar);	CreateHelpMenu(menu_bar);	return menu_bar;}GtkWidget *MainWindow::CreatePalView(){	extern UdpData udt;	GdkColor color = { 8, 65535, 65535, 55000 };	GtkTargetEntry target = { "text/plain", 0, 0 };	GtkTreeSelection *selection;	GtkTreeViewColumn *column;	GtkCellRenderer *renderer;	GtkWidget *view;	view = gtk_tree_view_new_with_model(udt.pal_model);	gtk_widget_modify_base(view, GTK_STATE_NORMAL, &color);	gtk_drag_dest_set(view, GTK_DEST_DEFAULT_ALL,			  &target, 1, GDK_ACTION_MOVE);	gtk_tree_view_set_level_indentation(GTK_TREE_VIEW(view), 10);	gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(view), FALSE);	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));	gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection),				    GTK_SELECTION_NONE);	gtk_widget_show(view);	column = gtk_tree_view_column_new();	gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);	renderer = gtk_cell_renderer_pixbuf_new();	//	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column), renderer,					FALSE);	g_object_set(renderer, "follow-state", TRUE, NULL);	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),					    renderer, "pixbuf", 0, NULL);	renderer = gtk_cell_renderer_text_new();	//	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column), renderer,					TRUE);	g_object_set(renderer, "xalign", 0.0, "wrap-mode", PANGO_WRAP_WORD,		     "foreground", "#52B838", NULL);	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),					    renderer, "text", 2, "font", 3,					    "visible", 4, NULL);	renderer = gtk_cell_renderer_text_new();	//	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column), renderer,					TRUE);	g_object_set(renderer, "xalign", 0.0, "wrap-mode", PANGO_WRAP_WORD,		     "foreground", "#52B838", NULL);	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),					    renderer, "markup", 5, "visible", 6,					    NULL);	g_object_set(view, "has-tooltip", TRUE, NULL);	g_signal_connect(view, "query-tooltip",			 G_CALLBACK(ViewQueryTooltip), udt.pal_model);	g_signal_connect(view, "row-activated",			 G_CALLBACK(ViewRowActivated), udt.pal_model);	g_signal_connect(view, "button-press-event",			 G_CALLBACK(PopupPalMenu), udt.pal_model);	g_signal_connect(view, "button-release-event",			 G_CALLBACK(ViewChangeStatus), udt.pal_model);	g_signal_connect(view, "drag-data-received",			 G_CALLBACK(DragDataReceived), udt.pal_model);	return view;}void MainWindow::CreateFileMenu(GtkWidget * menu_bar){	GtkWidget *image;	GtkWidget *menu;	GtkWidget *menu_item;	menu_item = gtk_menu_item_new_with_mnemonic(_("_File"));	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item);	menu = gtk_menu_new();	gtk_widget_show(menu);	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu);	menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Detect"));	image = gtk_image_new_from_file(__TIP_DIR "/detect.png");	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);	g_signal_connect(menu_item, "activate",			 G_CALLBACK(DetectPal::DetectEntry), NULL);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Find"));	image = gtk_image_new_from_file(__TIP_DIR "/find.png");	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);	g_signal_connect_swapped(menu_item, "activate",				 G_CALLBACK(FindSpecifyPal), this);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_separator_menu_item_new();	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Quit"));	image = gtk_image_new_from_file(__TIP_DIR "/out.png");	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);	g_signal_connect(menu_item, "activate", G_CALLBACK(iptux_gui_quit),			 NULL);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);}void MainWindow::CreateToolMenu(GtkWidget * menu_bar){	GtkWidget *image;	GtkWidget *menu;	GtkWidget *menu_item;	menu_item = gtk_menu_item_new_with_mnemonic(_("_Tools"));	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item);	menu = gtk_menu_new();	gtk_widget_show(menu);	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu);	menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Transport"));	image = gtk_image_new_from_file(__TIP_DIR "/trans.png");	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);	g_signal_connect(menu_item, "activate",			 G_CALLBACK(Transport::TransportEntry), NULL);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Setup"));	image = gtk_image_new_from_file(__TIP_DIR "/setup.png");	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);	g_signal_connect(menu_item, "activate",			 G_CALLBACK(IptuxSetup::SetupEntry), NULL);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Public"));	image = gtk_image_new_from_file(__TIP_DIR "/share.png");	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);	g_signal_connect(menu_item, "activate",			 G_CALLBACK(ShareFile::ShareEntry), NULL);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Group"));	image = gtk_image_new_from_file(__TIP_DIR "/net.png");	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);	g_signal_connect(menu_item, "activate",			 G_CALLBACK(DialogGroup::DialogEntry), NULL);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Update"));	image = gtk_image_new_from_file(__TIP_DIR "/fresh.png");	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);	g_signal_connect(menu_item, "activate", G_CALLBACK(UpdatePalList),			 NULL);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);}void MainWindow::CreateHelpMenu(GtkWidget * menu_bar){	GtkWidget *menu;	GtkWidget *menu_item;	menu_item = gtk_menu_item_new_with_mnemonic(_("_Help"));	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item);	menu = gtk_menu_new();	gtk_widget_show(menu);	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu);	menu_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, accel);	g_signal_connect(menu_item, "activate",			 G_CALLBACK(AboutIptux::AboutEntry), NULL);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);}void MainWindow::UpdateTips(){	extern struct interactive inter;	extern UdpData udt;	char buf[MAX_BUF];	uint32_t sum;	GSList *tmp;	pthread_mutex_lock(&udt.mutex);	sum = 0, tmp = udt.pallist;	while (tmp) {		if (FLAG_ISSET(((Pal *) tmp->data)->flags, 1))			sum++;		tmp = tmp->next;	}	pthread_mutex_unlock(&udt.mutex);	snprintf(buf, MAX_BUF, _("pals online: %u"), sum);	gtk_label_set_text(GTK_LABEL(inter.online), buf);}GtkWidget *MainWindow::CreatePopupMenu(gpointer data){	GtkWidget *menu, *menu_item;	menu = gtk_menu_new();	gtk_widget_show(menu);	menu_item = gtk_menu_item_new_with_label(_("Send Message"));	g_signal_connect_swapped(menu_item, "activate",				 G_CALLBACK(DialogPeer::DialogEntry), data);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_menu_item_new_with_label(_("Send File"));	g_signal_connect_swapped(menu_item, "activate",				 G_CALLBACK(SendFile::SendRegular), data);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_menu_item_new_with_label(_("Send Folder"));	g_signal_connect_swapped(menu_item, "activate",				 G_CALLBACK(SendFile::SendFolder), data);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_menu_item_new_with_label(_("Ask For Shared Files"));	g_signal_connect_swapped(menu_item, "activate",				 G_CALLBACK(AskSharedFiles), data);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_menu_item_new_with_label(_("Change Information"));	g_signal_connect_swapped(menu_item, "activate",				 G_CALLBACK(RevisePal::ReviseEntry), data);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	menu_item = gtk_menu_item_new_with_label(_("Delete Pal"));	g_signal_connect_swapped(menu_item, "activate",				 G_CALLBACK(DeletePal), data);	gtk_widget_show(menu_item);	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);	return menu;}//find_model 6,0 pixbuf,1 name,2 ipstr,3 user,4 host,5 palGtkTreeModel *MainWindow::CreateFindModel(){	GtkListStore *model;	model = gtk_list_store_new(6, GDK_TYPE_PIXBUF,				   G_TYPE_STRING, G_TYPE_STRING,				   G_TYPE_STRING, G_TYPE_STRING,				   G_TYPE_POINTER);	return GTK_TREE_MODEL(model);}GtkWidget *MainWindow::CreateFindView(){	GdkColor color = { 8, 65535, 65535, 55000 };	GtkTargetEntry target = { "text/plain", 0, 0 };	GtkWidget *view;	GtkTreeModel *model;	GtkTreeViewColumn *column;	GtkCellRenderer *renderer;	GtkTreeSelection *selection;	model = CreateFindModel();	view = gtk_tree_view_new_with_model(model);	gtk_widget_modify_base(view, GTK_STATE_NORMAL, &color);	gtk_drag_dest_set(view, GTK_DEST_DEFAULT_ALL,			  &target, 1, GDK_ACTION_MOVE);	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));	gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection),				    GTK_SELECTION_NONE);	gtk_widget_show(view);	column = gtk_tree_view_column_new();	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_column_set_title(column, _("nickname"));	renderer = gtk_cell_renderer_pixbuf_new();	g_object_set(renderer, "follow-state", TRUE, NULL);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -