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

📄 mainwindow.cpp

📁 iptux是linux下面能实现类似windows里面飞鸽传书的功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	gtk_tree_view_column_pack_start(column, renderer, FALSE);	gtk_tree_view_column_set_attributes(column, renderer, "pixbuf", 0,					    NULL);	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_column_pack_start(column, renderer, FALSE);	gtk_tree_view_column_set_attributes(column, renderer, "text", 1, NULL);	gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);	column = gtk_tree_view_column_new();	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_column_set_title(column, _("IPv4"));	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_column_pack_start(column, renderer, FALSE);	gtk_tree_view_column_set_attributes(column, renderer, "text", 2, NULL);	gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);	column = gtk_tree_view_column_new();	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_column_set_title(column, _("user"));	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_column_pack_start(column, renderer, FALSE);	gtk_tree_view_column_set_attributes(column, renderer, "text", 3, NULL);	gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);	column = gtk_tree_view_column_new();	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_column_set_title(column, _("host"));	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_column_pack_start(column, renderer, FALSE);	gtk_tree_view_column_set_attributes(column, renderer, "text", 4, NULL);	gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);	g_signal_connect(view, "row-activated",			 G_CALLBACK(FindViewRowActivated), model);	g_signal_connect(view, "button-press-event",			 G_CALLBACK(FindPopupPalMenu), model);	g_signal_connect(view, "drag-data-received",			 G_CALLBACK(FindDragDataReceived), model);	return view;}void MainWindow::SwitchWindowMode(){	extern struct interactive inter;	GdkPixbuf *pixbuf;	if (GTK_WIDGET_VISIBLE(inter.window)) {		gtk_widget_hide(inter.window);		pixbuf =		    gdk_pixbuf_new_from_file_at_size(__LOGO_DIR						     "/ip-penguin.png", 20, 20,						     NULL);		if (pixbuf) {			gtk_status_icon_set_from_pixbuf(inter.status_icon,							pixbuf);			g_object_unref(pixbuf);		} else			pwarning(Fail,				 "%s \"" __LOGO_DIR "/ip-penguin.png\" %s",				 _("The notify icon"), _("is lost!"));	} else {		gtk_widget_show(inter.window);		pixbuf =		    gdk_pixbuf_new_from_file_at_size(__LOGO_DIR "/ip-tux.png",						     20, 20, NULL);		if (pixbuf) {			gtk_status_icon_set_from_pixbuf(inter.status_icon,							pixbuf);			g_object_unref(pixbuf);		} else			pwarning(Fail, "%s \"" __LOGO_DIR "/ip-tux.png\" %s",				 _("The notify icon"), _("is lost!"));	}}void MainWindow::AskSharedFiles(gpointer data){	extern struct interactive inter;	Command cmd;	cmd.SendAskShared(inter.udpsock, data);}void MainWindow::UpdatePalList(){	extern UdpData udt;	GtkTreeIter iter;	uint8_t count;	GSList *tmp;	pthread_mutex_lock(&udt.mutex);	tmp = udt.pallist;	while (tmp) {		FLAG_CLR(((Pal *) tmp->data)->flags, 1);		tmp = tmp->next;	}	g_queue_clear(udt.msgqueue);	pthread_mutex_unlock(&udt.mutex);	gtk_tree_store_clear(GTK_TREE_STORE(udt.pal_model));	udt.InitPalModel();	thread_create(ThreadFunc(CoreThread::NotifyAll), NULL, false);}void MainWindow::DeletePal(gpointer data){	extern UdpData udt;	GtkTreeIter iter, parent;	GList *tmp;	Pal *pal;	pal = (Pal *) data;	if (!udt.Ipv4GetPalPos(pal->ipv4))		return;	udt.Ipv4GetParent(pal->ipv4, &parent);	if (udt.PalGetModelIter(pal, &parent, &iter))		gtk_tree_store_remove(GTK_TREE_STORE(udt.pal_model), &iter);	tmp = (GList *) udt.PalGetMsgPos(pal);	if (tmp) {		pthread_mutex_lock(&udt.mutex);		g_queue_delete_link(udt.msgqueue, tmp);		pthread_mutex_unlock(&udt.mutex);	}	FLAG_CLR(pal->flags, 1);	FLAG_SET(pal->flags, 3);}gboolean MainWindow::ViewQueryTooltip(GtkWidget * view, gint x, gint y,				      gboolean key, GtkTooltip * tooltip,				      GtkTreeModel * model){	extern Control ctr;	GdkColor color = { 8, 65535, 65535, 55000 };	GtkWidget *text_view;	GtkTextBuffer *buffer;	GtkTreePath *path;	GtkTreeIter iter;	Pal *pal;	if (key || !gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),						  x, y, &path, NULL, NULL,						  NULL))		return FALSE;	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_path_free(path);	gtk_tree_model_get(model, &iter, 7, &pal, -1);	if (!pal)		return FALSE;	text_view = create_text_view();	gtk_widget_modify_base(text_view, GTK_STATE_NORMAL, &color);	gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text_view), FALSE);	gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE);	gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_NONE);	buffer = gtk_text_buffer_new(ctr.table);	DialogPeer::FillPalInfoToBuffer(pal, buffer, false);	gtk_text_view_set_buffer(GTK_TEXT_VIEW(text_view), buffer);	gtk_tooltip_set_custom(tooltip, text_view);	g_signal_connect_swapped(text_view, "destroy",				 G_CALLBACK(g_object_unref), buffer);	return TRUE;}void MainWindow::ViewRowActivated(GtkWidget * view, GtkTreePath * path,				  GtkTreeViewColumn * column,				  GtkTreeModel * model){	GtkTreeIter iter;	gpointer data;	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_model_get(model, &iter, 7, &data, -1);	if (data)		DialogPeer::DialogEntry(data);}gboolean MainWindow::PopupPalMenu(GtkWidget * view, GdkEventButton * event,				  GtkTreeModel * model){	GtkTreePath *path;	GtkTreeIter iter;	gpointer data;	if (event->button != 3	    || !gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),					      GINT(event->x), GINT(event->y),					      &path, NULL, NULL, NULL))		return FALSE;	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_path_free(path);	gtk_tree_model_get(model, &iter, 7, &data, -1);	if (!data)		return FALSE;	gtk_menu_popup(GTK_MENU(CreatePopupMenu(data)), NULL, NULL, NULL, NULL,		       event->button, event->time);	return TRUE;}gboolean MainWindow::ViewChangeStatus(GtkWidget * view, GdkEventButton * event,				      GtkTreeModel * model){	GtkTreePath *path;	GdkPixbuf *pixbuf;	GtkTreeIter iter;	gboolean expend;	if (event->button != 1	    || !gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),					      GINT(event->x), GINT(event->y),					      &path, NULL, NULL, NULL)	    || gtk_tree_path_get_depth(path) != 1)		return FALSE;	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_model_get(model, &iter, 1, &expend, -1);	if (expend) {		pixbuf = gdk_pixbuf_new_from_file(__TIP_DIR "/hide.png", NULL);		gtk_tree_store_set(GTK_TREE_STORE(model), &iter, 0, pixbuf, 1,				   FALSE, -1);		gtk_tree_view_collapse_row(GTK_TREE_VIEW(view), path);	} else {		pixbuf = gdk_pixbuf_new_from_file(__TIP_DIR "/show.png", NULL);		gtk_tree_store_set(GTK_TREE_STORE(model), &iter, 0, pixbuf, 1,				   TRUE, -1);		gtk_tree_view_expand_row(GTK_TREE_VIEW(view), path, FALSE);	}	if (pixbuf)		g_object_unref(pixbuf);	gtk_tree_path_free(path);}void MainWindow::DragDataReceived(GtkWidget * view, GdkDragContext * context,				  gint x, gint y, GtkSelectionData * select,				  guint info, guint time, GtkTreeModel * model){	GtkTreePath *path;	GtkTreeIter iter;	gpointer data;	if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),					   x, y, &path, NULL, NULL, NULL))		return;	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_path_free(path);	gtk_tree_model_get(model, &iter, 7, &data, -1);	if (data)		DialogPeer::DragDataReceived(data, context, x, y, select, info,					     time);}void MainWindow::FindSpecifyPal(gpointer data){	MainWindow *mw;	GtkWidget *sw, *view, *button, *image, *entry;	GtkWidget *box, *hbox;	mw = (MainWindow *) data;	if (gtk_paned_get_child2(GTK_PANED(mw->client_paned)))		return;	box = create_box();	gtk_paned_pack2(GTK_PANED(mw->client_paned), box, TRUE, TRUE);	sw = create_scrolled_window();	gtk_box_pack_start(GTK_BOX(box), sw, TRUE, TRUE, 0);	view = CreateFindView();	gtk_container_add(GTK_CONTAINER(sw), view);	hbox = create_box(FALSE);	gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);	button = gtk_button_new();	g_object_set(button, "relief", GTK_RELIEF_NONE, NULL);	image = gtk_image_new_from_file(__TIP_DIR "/cancel.png");	gtk_button_set_image(GTK_BUTTON(button), image);	gtk_widget_show(button);	g_signal_connect_swapped(button, "clicked", G_CALLBACK(g_object_unref),				 gtk_tree_view_get_model(GTK_TREE_VIEW(view)));	g_signal_connect_swapped(button, "clicked",				 G_CALLBACK(gtk_widget_destroy), box);	gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);	entry = my_entry::create_entry(NULL, _("search pals"));	gtk_widget_add_events(entry, GDK_KEY_PRESS_MASK);	g_signal_connect(entry, "key-press-event", G_CALLBACK(FindClearEntry),			 NULL);	g_signal_connect(entry, "changed", G_CALLBACK(FindEntryChanged), view);	gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);	FindEntryChanged(entry, view);	gtk_widget_grab_focus(entry);}gboolean MainWindow::FindClearEntry(GtkWidget * entry, GdkEventKey * event){	if (event->keyval != GDK_Escape)		return FALSE;	gtk_entry_set_text(GTK_ENTRY(entry), "");	return TRUE;}void MainWindow::FindEntryChanged(GtkWidget * entry, GtkWidget * view){	extern UdpData udt;	char ipstr[INET_ADDRSTRLEN];	const gchar *text;	GdkPixbuf *pixbuf;	GtkTreeModel *model;	GtkTreeIter iter;	GSList *tmp;	Pal *pal;	model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));	gtk_list_store_clear(GTK_LIST_STORE(model));	text = gtk_entry_get_text(GTK_ENTRY(entry));	pthread_mutex_lock(&udt.mutex);	tmp = udt.pallist;	while (tmp) {		pal = (Pal *) tmp->data;		tmp = tmp->next;		inet_ntop(AF_INET, &pal->ipv4, ipstr, INET_ADDRSTRLEN);		if (FLAG_ISSET(pal->flags, 1) && (*text == '\0'						  || strstr(pal->name, text)						  || strstr(ipstr, text)						  || strstr(pal->user, text)						  || strstr(pal->host, text))) {			pixbuf =			    gdk_pixbuf_new_from_file_at_size(pal->iconfile,							     MAX_ICONSIZE,							     MAX_ICONSIZE,							     NULL);			gtk_list_store_append(GTK_LIST_STORE(model), &iter);			gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0,					   pixbuf, 1, pal->name, 2, ipstr, 3,					   pal->user, 4, pal->host, 5, pal, -1);			if (pixbuf)				g_object_unref(pixbuf);		}	}	pthread_mutex_unlock(&udt.mutex);	gtk_tree_view_columns_autosize(GTK_TREE_VIEW(view));}void MainWindow::FindViewRowActivated(GtkWidget * view, GtkTreePath * path,				      GtkTreeViewColumn * column,				      GtkTreeModel * model){	GtkTreeIter iter;	gpointer data;	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_model_get(model, &iter, 5, &data, -1);	DialogPeer::DialogEntry(data);}gboolean MainWindow::FindPopupPalMenu(GtkWidget * view, GdkEventButton * event,				      GtkTreeModel * model){	GtkTreePath *path;	GtkTreeIter iter;	gpointer data;	if (event->button != 3	    || !gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),					      GINT(event->x), GINT(event->y),					      &path, NULL, NULL, NULL))		return FALSE;	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_path_free(path);	gtk_tree_model_get(model, &iter, 5, &data, -1);	gtk_menu_popup(GTK_MENU(CreatePopupMenu(data)), NULL, NULL, NULL, NULL,		       event->button, event->time);	return TRUE;}void MainWindow::FindDragDataReceived(GtkWidget * view,				      GdkDragContext * context, gint x, gint y,				      GtkSelectionData * select, guint info,				      guint time, GtkTreeModel * model){	GtkTreePath *path;	GtkTreeIter iter;	gpointer data;	if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view),					   x, y, &path, NULL, NULL, NULL))		return;	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_path_free(path);	gtk_tree_model_get(model, &iter, 5, &data, -1);	DialogPeer::DragDataReceived(data, context, x, y, select, info, time);}

⌨️ 快捷键说明

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