📄 dialogpeer.cpp
字号:
//// C++ Implementation: DialogPeer//// Description:////// Author: Jally <jallyx@163.com>, (C) 2008//// Copyright: See COPYING file that comes with this distribution////#include "DialogPeer.h"#include "SendFile.h"#include "AboutIptux.h"#include "MainWindow.h"#include "UdpData.h"#include "Control.h"#include "Command.h"#include "my_chooser.h"#include "baling.h"#include "support.h"#include "output.h"#include "utils.h" DialogPeer::DialogPeer(gpointer data):pal((Pal *) data),dialog(NULL), focus(NULL), scroll(NULL),accel(NULL){ extern Control ctr; infobuf = gtk_text_buffer_new(ctr.table); pal->dialog = this;}DialogPeer::~DialogPeer(){ extern Control ctr; GtkTextIter start, end; pal->dialog = NULL; g_object_unref(infobuf); g_object_unref(accel); if (FLAG_ISSET(ctr.flags, 3)) { gtk_text_buffer_get_bounds(pal->record, &start, &end); gtk_text_buffer_delete(pal->record, &start, &end); }}void DialogPeer::DialogEntry(gpointer data){ DialogPeer *peer; if (DialogPeer::CheckExist(data)) return; peer = new DialogPeer(data); peer->CreateDialog(); peer->CreateAllArea();}void DialogPeer::CreateDialog(){ GdkColor color = { 8, 39321, 41634, 65535 }; GtkTargetEntry target = { "text/plain", 0, 0 }; gchar *title; title = g_strdup_printf(_("Communicate with %s"), pal->name); dialog = create_window(title, 162, 111); g_free(title); gtk_widget_modify_bg(dialog, GTK_STATE_NORMAL, &color); gtk_drag_dest_set(dialog, GTK_DEST_DEFAULT_ALL, &target, 1, GDK_ACTION_MOVE); g_signal_connect_swapped(dialog, "drag-data-received", G_CALLBACK(DragDataReceived), pal); accel = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(dialog), accel); g_signal_connect_swapped(dialog, "destroy", G_CALLBACK(DialogDestroy), this);}void DialogPeer::CreateAllArea(){ extern Control ctr; GtkWidget *box; GtkWidget *hpaned, *vpaned; box = create_box(); gtk_container_add(GTK_CONTAINER(dialog), box); gtk_box_pack_start(GTK_BOX(box), CreateMenuBar(), FALSE, FALSE, 0); hpaned = create_paned(FALSE); gtk_paned_set_position(GTK_PANED(hpaned), GINT(ctr.pix * 107)); gtk_box_pack_end(GTK_BOX(box), hpaned, TRUE, TRUE, 0); CreateInfoArea(hpaned); vpaned = create_paned(); gtk_paned_set_position(GTK_PANED(vpaned), GINT(ctr.pix * 67)); gtk_paned_pack1(GTK_PANED(hpaned), vpaned, TRUE, TRUE); CreateRecordArea(vpaned); CreateInputArea(vpaned);}void DialogPeer::CreateInfoArea(GtkWidget * paned){ GdkColor color = { 8, 65535, 65535, 55000 }; GtkWidget *view, *frame, *sw; view = create_text_view(); gtk_text_view_set_buffer(GTK_TEXT_VIEW(view), infobuf); gtk_widget_modify_base(view, GTK_STATE_NORMAL, &color); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(view), FALSE); gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_NONE); FillPalInfoToBuffer(pal, infobuf); frame = create_frame(_("Pal's Infomation")); gtk_paned_pack2(GTK_PANED(paned), frame, FALSE, TRUE); sw = create_scrolled_window(); gtk_container_add(GTK_CONTAINER(frame), sw); gtk_container_add(GTK_CONTAINER(sw), view);}void DialogPeer::CreateRecordArea(GtkWidget * paned){ GtkWidget *frame, *sw; scroll = create_text_view(); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(scroll), FALSE); gtk_text_view_set_editable(GTK_TEXT_VIEW(scroll), FALSE); gtk_text_view_set_buffer(GTK_TEXT_VIEW(scroll), pal->record); frame = create_frame(_("Chat History")); gtk_paned_pack1(GTK_PANED(paned), frame, TRUE, TRUE); sw = create_scrolled_window(); gtk_container_add(GTK_CONTAINER(frame), sw); gtk_container_add(GTK_CONTAINER(sw), scroll); pal->ViewScroll();}void DialogPeer::CreateInputArea(GtkWidget * paned){ GtkWidget *frame, *sw; GtkWidget *vbox, *hbb, *button; frame = create_frame(_("Input Your Message")); gtk_paned_pack2(GTK_PANED(paned), frame, FALSE, TRUE); vbox = create_box(); gtk_container_add(GTK_CONTAINER(frame), vbox); focus = create_text_view(); g_signal_connect(focus, "drag-data-received", G_CALLBACK(DragPicReceived), gtk_text_view_get_buffer(GTK_TEXT_VIEW(focus))); sw = create_scrolled_window(); gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(sw), focus); hbb = create_button_box(FALSE); gtk_box_pack_start(GTK_BOX(vbox), hbb, FALSE, FALSE, 0); button = create_button(_("Close")); gtk_box_pack_end(GTK_BOX(hbb), button, FALSE, FALSE, 0); g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), dialog); button = create_button(_("Send")); gtk_box_pack_end(GTK_BOX(hbb), button, FALSE, FALSE, 0); g_signal_connect_swapped(button, "clicked", G_CALLBACK(SendMessage), this); gtk_widget_add_accelerator(button, "clicked", accel, GDK_Return, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_widget_grab_focus(focus);}GtkWidget *DialogPeer::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;}void DialogPeer::CreateFileMenu(GtkWidget * menu_bar){ GtkWidget *menu; GtkWidget *menu_item; menu_item = gtk_menu_item_new_with_mnemonic(_("_File")); gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item); gtk_widget_show(menu_item); menu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu); gtk_widget_show(menu); menu_item = gtk_menu_item_new_with_label(_("Send File")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(SendFile::SendRegular), pal); gtk_widget_show(menu_item); menu_item = gtk_menu_item_new_with_label(_("Send Folder")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(SendFile::SendFolder), pal); gtk_widget_show(menu_item); menu_item = gtk_menu_item_new_with_label(_("Ask For Shared Files")); g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(MainWindow::AskSharedFiles), pal); gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); menu_item = gtk_tearoff_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); gtk_widget_show(menu_item); menu_item = gtk_menu_item_new_with_label(_("Close")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(gtk_widget_destroy), dialog); gtk_widget_show(menu_item);}void DialogPeer::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_menu_item_new_with_label(_("Insert Picture")); g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(InsertPixbuf), this); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); gtk_widget_show(menu_item); menu_item = gtk_menu_item_new_with_label(_("Clear Buffer")); g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(ClearRecordBuffer), pal->record); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); gtk_widget_show(menu_item);}void DialogPeer::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);}bool DialogPeer::CheckExist(gpointer data){ extern UdpData udt; GList *tmp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -