📄 abookcontactview.c
字号:
/* addressbook - Address book *abookcontactview.c - * *Authors: YE Nan <nan.ye@orange-ftgroup.com> * ZHAO Liangjing <liangjing.zhao@orange-ftgroup.com> * *This software and associated documentation files (the "Software") *are copyright (C) 2005 LiPS Linux Phone Standards Forum [FranceTelecom] *All Rights Reserved. * *A copyright license is hereby granted for redistribution and use of *the Software in source and binary forms, with or without modification, *provided that the following conditions are met: *- Redistributions of source code must retain the above copyright notice, *this copyright license and the following disclaimer. *- Redistributions in binary form must reproduce the above copyright *notice, this copyright license and the following disclaimer in the *documentation and/or other materials provided with the distribution. *- Neither the name of LiPS nor the names of its Members may be used *to endorse or promote products derived from the Software without *specific prior written permission. * *A patent license for any Necessary Claims owned by Members of LiPS Forum *to make, have made, use, import, offer to sell, lease and sell or otherwise *distribute any implementation compliant with the any specification adopted *by the LiPS Forumcan be obtained from the respective Members on reasonable *and non-discriminatory terms and conditions and under reciprocity, as *regulated in more detail in the Internal Policy of the LiPS Forum. * *THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER, ITS MEMBERS AND CONTRIBUTORS *"AS IS", AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, *THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE *AND NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER, *ITS MEMBERS 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. */#include <libintl.h>#include <ctype.h>#include <gtk/gtk.h>#include <gdk/gdkkeysyms.h>#include "abookcontactview.h"#include "abookenv.h"#include "abookpicture.h"#define _(x) gettext(x)static void abook_contact_view_class_init (ABookContactViewClass *klass);static void abook_contact_view_init (ABookContactView *view);static void abook_contact_view_destroy (GtkObject *object);static GtkAutoScrolledWindowClass *parent_class = NULL;GTypeabook_contact_view_get_type (void){ static GType view_type = 0; if (!view_type) { static const GTypeInfo view_info = { sizeof (ABookContactViewClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) abook_contact_view_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (ABookContactView), 0, /* n_preallocs */ (GInstanceInitFunc) abook_contact_view_init, NULL, }; view_type = g_type_register_static (GTK_TYPE_AUTO_SCROLLED_WINDOW, "ABookContactView", &view_info, 0); } return view_type;}static voidabook_contact_view_class_init (ABookContactViewClass *klass){ GtkObjectClass *object_class; object_class = (GtkObjectClass *) klass; parent_class = g_type_class_peek_parent (klass); object_class->destroy = abook_contact_view_destroy; return;}static voidabook_contact_view_destroy (GtkObject *object){ ABookContactView *view = ABOOK_CONTACT_VIEW (object); if (view->uuid) { g_free (view->uuid); view->uuid = NULL; } (*GTK_OBJECT_CLASS (parent_class)->destroy) (object); return;}static gbooleanentry_focus_in_cb (GtkWidget *widget, GdkEventFocus *event, ABookContactView *view){ gtk_entry_set_has_frame (GTK_ENTRY (widget), TRUE); gtk_editable_select_region (GTK_EDITABLE (widget), 0, 0); gtk_editable_set_position (GTK_EDITABLE (widget), -1); return FALSE;}static gbooleanentry_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, ABookContactView *view){ gtk_entry_set_has_frame (GTK_ENTRY (widget), FALSE); gtk_editable_select_region (GTK_EDITABLE (widget), 0, 0); if (widget == view->entries[CNT_VIEW_PICTURE]) { GdkPixbuf *pixbuf = NULL; gchar *picpath = NULL; picpath = g_build_filename (abook_env_get_picpath (), gtk_entry_get_text (GTK_ENTRY (widget)), NULL); g_print ("%s(): path = %s\n", __FUNCTION__, picpath); abook_pictures_load (picpath, PIC_LARGE); pixbuf = abook_pictures_find (picpath, PIC_LARGE); gtk_image_set_from_pixbuf (GTK_IMAGE (view->image), pixbuf);// g_object_unref(pixbuf); g_free (picpath); } return FALSE;}static voidabook_contact_view_show_cb (GtkWidget *widget, gpointer user_data){ ABookContactView *view = ABOOK_CONTACT_VIEW (widget); g_print ("%s(): entering\n", __FUNCTION__);/* if (view->editable && view->entries[CNT_VIEW_MOBILENUM]) { gtk_widget_grab_focus(view->entries[CNT_VIEW_MOBILENUM]); } else if (view->labels[CNT_VIEW_NAME]) { gtk_widget_grab_focus(view->labels[CNT_VIEW_NAME]); }*/ g_print ("%s(): focused_item = %d\n", __FUNCTION__, view->focused_item); if (view->editable) { gtk_widget_grab_focus (view->entries[view->focused_item]); } else { gtk_widget_grab_focus (view->labels[view->focused_item]); } if (view->editable == FALSE) { gtk_widget_hide (view->cat_image); } return;}static voidabook_contact_view_hide_cb (GtkWidget *widget, gpointer user_data){ ABookContactView *view = ABOOK_CONTACT_VIEW (widget); gint i; g_print ("%s(): entering\n", __FUNCTION__); for (i = 0; i < NUM_CNT_VIEW_ITEMS; i++) { gtk_entry_set_text (GTK_ENTRY (view->entries[i]), ""); } gtk_entry_set_text (GTK_ENTRY (view->cat_entry), ""); gtk_image_set_from_file (GTK_IMAGE (view->image), NULL); abook_contact_view_set_uid (view, NULL); return;}static gbooleanabook_contact_view_category_entry_key_press_cb (GtkWidget *widget, GdkEventKey *event, ABookContactView *view){// g_print("%s(): cat_entry is focused\n", __FUNCTION__); if (event->keyval == GDK_Return) { if (view->cat_modifier) { view->cat_modifier (view); } } if (event->keyval == GDK_Left || event->keyval == GDK_Right || event->keyval == GDK_Up || event->keyval == GDK_Down) { return FALSE; } return TRUE;}static voidabook_contact_view_init (ABookContactView *view){ gint i; GtkWidget *vbox = NULL; vbox = gtk_vbox_new (FALSE, 0); for (i = 0; i < NUM_CNT_VIEW_ITEMS; i++) { view->entries[i] = gtk_entry_new ();#if 1 gtk_widget_set_size_request (view->entries[i], 100, -1); gtk_entry_set_has_frame (GTK_ENTRY (view->entries[i]), FALSE); g_signal_connect (G_OBJECT (view->entries[i]), "focus-in-event", G_CALLBACK (entry_focus_in_cb), (gpointer) view); g_signal_connect (G_OBJECT (view->entries[i]), "focus-out-event", G_CALLBACK (entry_focus_out_cb), (gpointer) view);// g_signal_connect(G_OBJECT(view->entries[i]), "expose-event", G_CALLBACK(entry_expose_cb), (gpointer)view);#endif } for (i = CNT_VIEW_NAME; i < NUM_CNT_VIEW_ITEMS; i++) { view->labels[i] = gtk_label_new (NULL);// GTK_WIDGET_SET_FLAGS(buddy_labels[i], GTK_CAN_FOCUS); } gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_NAME]), "<span color=\"Blue\">Name</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_MOBILENUM]), "<span color=\"Blue\">Mobile Number</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_HOMENUM]), "<span color=\"Blue\">Home Number</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_BUSINUM]), "<span color=\"Blue\">Business Number</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_FAXNUM]), "<span color=\"Blue\">Fax Number</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_COMPANY]), "<span color=\"Blue\">Company</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_DEPART]), "<span color=\"Blue\">Department</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_WEBSITE]), "<span color=\"Blue\">Website</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_EMAIL]), "<span color=\"Blue\">Email</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_PICTURE]), "<span color=\"Blue\">Picure</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_RINGTONE]), "<span color=\"Blue\">Ringtone</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_HADDR]), "<span color=\"Blue\">Home Addresss</span>"); gtk_label_set_markup (GTK_LABEL (view->labels[CNT_VIEW_BADDR]), "<span color=\"Blue\">Business Address</span>"); view->image = gtk_image_new (); gtk_widget_set_size_request (view->image, SIZE_LARGE_W, SIZE_LARGE_H); if (TRUE) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -