/soc/2015/igor.gajowiak/chatlog: 33fd88ed5f84: Implement a gener...
Igor Gajowiak <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: 33fd88ed5f84dfc2f7e9c82ddf2223cae3537c48 Author: Igor Gajowiak <[email protected]> Date: 2015-07-22 02:24 +0200 Branch: default URL: https://hg.pidgin.im/soc/2015/igor.gajowiak/chatlog/rev/33fd88ed5f84 Description: Implement a generic log UI stub. diffstat: pidgin/Makefile.am | 2 + pidgin/gtkgenericlog.c | 465 +++++++++++++++++++++++++++++++++++++++++++++++++ pidgin/gtkgenericlog.h | 79 ++++++++ pidgin/gtklog.c | 4 + 4 files changed, 550 insertions(+), 0 deletions(-) diffs (truncated from 594 to 300 lines): diff --git a/pidgin/Makefile.am b/pidgin/Makefile.am --- a/pidgin/Makefile.am +++ b/pidgin/Makefile.am @@ -60,6 +60,7 @@ libpidgin_la_SOURCES = \ gtkicon-theme-loader.c \ gtkidle.c \ gtklog.c \ + gtkgenericlog.c \ gtkmedia.c \ gtkmenutray.c \ gtknotify.c \ @@ -108,6 +109,7 @@ libpidgin_la_headers = \ gtkicon-theme-loader.h \ gtkidle.h \ gtklog.h \ + gtkgenericlog.h \ gtkmedia.h \ gtkmenutray.h \ gtknickcolors.h \ diff --git a/pidgin/gtkgenericlog.c b/pidgin/gtkgenericlog.c new file mode 100644 --- /dev/null +++ b/pidgin/gtkgenericlog.c @@ -0,0 +1,465 @@ +/* pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "blistnodetypes.h" +#include "buddylist.h" +#include "gtkgenericlog.h" +#include "gtkutils.h" +#include "gtkwebview.h" + +static PidginGenericLogViewer *generic_log_viewer = NULL; + +/******************************************************************************/ +/* Menu */ +/******************************************************************************/ + +static void +on_search_item_clicked(GtkAction *action, gpointer data) +{ + printf("on_search_item_clicked\n"); +} + +static void +on_export_item_clicked(GtkAction *action, gpointer data) +{ + printf("on_export_item_clicked\n"); +} + +static void +on_import_item_clicked(GtkAction *action, gpointer data) +{ + printf("on_import_item_clicked\n"); +} + +static void +on_close_item_clicked(GtkAction *action, gpointer data) +{ + printf("on_close_item_clicked\n"); +} + +static void +on_print_item_clicked(GtkAction *action, gpointer data) +{ + printf("on_print_item_clicked\n"); +} + +static GtkWidget * +create_archive_menu_item(PidginGenericLogViewer *viewer) +{ + g_assert(viewer); + + GtkWidget *archive_item = gtk_menu_item_new_with_label("Archive"); + + GtkWidget *archive_menu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(archive_item), archive_menu); + + GtkWidget *search_item = gtk_menu_item_new_with_label("Search"); + GtkWidget *export_item = gtk_menu_item_new_with_label("Export"); + GtkWidget *import_item = gtk_menu_item_new_with_label("Import"); + GtkWidget *print_item = gtk_menu_item_new_with_label("Print"); + GtkWidget *close_item = gtk_menu_item_new_with_label("Close"); + + gtk_menu_shell_append(GTK_MENU_SHELL(archive_menu), search_item); + gtk_menu_shell_append(GTK_MENU_SHELL(archive_menu), export_item); + gtk_menu_shell_append(GTK_MENU_SHELL(archive_menu), import_item); + gtk_menu_shell_append(GTK_MENU_SHELL(archive_menu), print_item); + gtk_menu_shell_append(GTK_MENU_SHELL(archive_menu), close_item); + + g_signal_connect(G_OBJECT(search_item), "activate", + G_CALLBACK(on_search_item_clicked), viewer); + g_signal_connect(G_OBJECT(export_item), "activate", + G_CALLBACK(on_export_item_clicked), viewer); + g_signal_connect(G_OBJECT(import_item), "activate", + G_CALLBACK(on_import_item_clicked), viewer); + g_signal_connect(G_OBJECT(print_item), "activate", + G_CALLBACK(on_print_item_clicked), viewer); + g_signal_connect(G_OBJECT(close_item), "activate", + G_CALLBACK(on_close_item_clicked), viewer); + + return archive_item; +} + +static void +on_display_status_changes_item_clicked(GtkAction *action, gpointer data) +{ + printf("on_display_status_changes_item_clicked\n"); +} + +static void +on_display_inline_msgs_item_clicked(GtkAction *action, gpointer data) +{ + printf("on_display_inline_msgs_item_clicked\n"); +} + +static GtkWidget * +create_options_menu_item(PidginGenericLogViewer *viewer) +{ + g_assert(viewer); + + GtkWidget *options_item = gtk_menu_item_new_with_label("Options"); + + GtkWidget *options_menu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(options_item), options_menu); + + GtkWidget *display_status_changes_item = gtk_menu_item_new_with_label( + "Display status changes"); + GtkWidget *display_inline_msgs_item = gtk_menu_item_new_with_label( + "Display inline messages"); + + gtk_menu_shell_append(GTK_MENU_SHELL(options_menu), + display_status_changes_item); + gtk_menu_shell_append(GTK_MENU_SHELL(options_menu), + display_inline_msgs_item); + + g_signal_connect(G_OBJECT(display_status_changes_item), "activate", + G_CALLBACK(on_display_status_changes_item_clicked), viewer); + g_signal_connect(G_OBJECT(display_inline_msgs_item), "activate", + G_CALLBACK(on_display_inline_msgs_item_clicked), viewer); + + return options_item; +} + +static void +on_start_conversation_item_clicked(GtkAction *action, gpointer data) +{ + printf("on_start_conversation_item_clicked\n"); +} + +static void +on_wipe_log_for_buddy_item_clicked(GtkAction *action, gpointer data) +{ + printf("on_wipe_log_for_buddy_item_clicked\n"); +} + +static GtkWidget * +create_buddy_menu_item(PidginGenericLogViewer *viewer) +{ + g_assert(viewer); + + GtkWidget *buddy_item = gtk_menu_item_new_with_label("Buddy"); + + GtkWidget *buddy_menu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(buddy_item), buddy_menu); + + GtkWidget *start_conversation_item = gtk_menu_item_new_with_label( + "Start conversation"); + GtkWidget *wipe_log_for_buddy_item = gtk_menu_item_new_with_label( + "Wipe log for buddy"); + + gtk_menu_shell_append(GTK_MENU_SHELL(buddy_menu), + start_conversation_item); + gtk_menu_shell_append(GTK_MENU_SHELL(buddy_menu), + wipe_log_for_buddy_item); + + g_signal_connect(G_OBJECT(start_conversation_item), "activate", + G_CALLBACK(on_start_conversation_item_clicked), viewer); + g_signal_connect(G_OBJECT(wipe_log_for_buddy_item), "activate", + G_CALLBACK(on_wipe_log_for_buddy_item_clicked), viewer); + + return buddy_item; +} + +static GtkWidget * +create_menu_bar(PidginGenericLogViewer *viewer) +{ + g_assert(viewer); + + GtkWidget *menu_bar = gtk_menu_bar_new(); + + GtkWidget *archive_item = create_archive_menu_item(viewer); + gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), archive_item); + + GtkWidget *options_item = create_options_menu_item(viewer); + gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), options_item); + + GtkWidget *buddy_item = create_buddy_menu_item(viewer); + gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), buddy_item); + + return menu_bar; +} + +/******************************************************************************/ +/* Buddy list view */ +/******************************************************************************/ + +static void +on_buddylist_row_activated(GtkTreeView *tv, GtkTreePath *path, + GtkTreeViewColumn *col, gpointer data) +{ + printf("on_buddylist_row_activated\n"); +} + +static void +on_buddylist_row_changed(GtkTreeSelection *sel, gpointer data) +{ + printf("on_buddylist_row_changed\n"); +} + +static GtkTreeModel * +create_buddylist_model(void) +{ + // TODO: Fill the store with real values + + GtkTreeStore *store = gtk_tree_store_new(1, G_TYPE_STRING); + GtkTreeIter iter; + + gtk_tree_store_append(store, &iter, NULL); + gtk_tree_store_set(store, &iter, 0, "Entry 1", -1); + + gtk_tree_store_append(store, &iter, &iter); + gtk_tree_store_set(store, &iter, 0, "Entry 2", -1); + + gtk_tree_store_append(store, &iter, NULL); + gtk_tree_store_set(store, &iter, 0, "Entry 3", -1); + + GtkTreeModel *model = GTK_TREE_MODEL(store); + return model; +} + +static GtkWidget * +create_buddylist_view(GtkTreeModel *model, PidginGenericLogViewer *viewer) +{ + g_assert(model); + g_assert(viewer); + + GtkWidget *view = gtk_tree_view_new_with_model(model); + GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); + + gtk_tree_view_insert_column_with_attributes( + GTK_TREE_VIEW (view), -1, "BList", renderer, + "text", 0, NULL); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE); + + GtkTreeSelection *selection = gtk_tree_view_get_selection( + GTK_TREE_VIEW(view)); + + g_signal_connect (G_OBJECT(view), "row-activated", + G_CALLBACK(on_buddylist_row_activated), viewer); + + g_signal_connect(G_OBJECT(selection), "changed", + G_CALLBACK(on_buddylist_row_changed), viewer); + + return view; +} + +/******************************************************************************/ +/* Calendar view */ +/******************************************************************************/ + +static void +on_calendar_row_activated(GtkTreeView *tv, GtkTreePath *path, + GtkTreeViewColumn *col, gpointer data) +{ + printf("on_calendar_row_activated\n"); +} + +static void +on_calendar_row_changed(GtkTreeSelection *sel, gpointer data) +{ _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits