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

📄 gemnumchooser.c.svn-base

📁 一款Linux手机上应用的文件管理器 系统要求就安装Gtk+2.0
💻 SVN-BASE
字号:
/*  addressbook - Address book *abooknumchooser.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 "gemnumchooser.h"#define _(x) gettext(x)static void abook_number_chooser_class_init (ABookNumberChooserClass *klass);static void abook_number_chooser_init (ABookNumberChooser *window);GTypeabook_number_chooser_get_type (void){  static GType number_chooser_type = 0;  if (!number_chooser_type)  {    static const GTypeInfo number_chooser_info = {      sizeof (ABookNumberChooserClass),      NULL,                     /* base_init */      NULL,                     /* base_finalize */      (GClassInitFunc) abook_number_chooser_class_init,      NULL,                     /* class_finalize */      NULL,                     /* class_data */      sizeof (ABookNumberChooser),      0,                        /* n_preallocs */      (GInstanceInitFunc) abook_number_chooser_init,    };    number_chooser_type =      g_type_register_static (GTK_TYPE_DIALOG, "ABookNumberChooser",                              &number_chooser_info, 0);  }  return number_chooser_type;}static voidabook_number_chooser_class_init (ABookNumberChooserClass *klass){  return;}static gbooleanabook_number_chooser_treeview_key_press_event_cb (GtkWidget *widget,                                                  GdkEventKey *event,                                                  ABookNumberChooser *view){  GtkTreeView *treeview = GTK_TREE_VIEW (view->treeview);  if (event->keyval == GDK_Up)  {    GtkTreePath *path = NULL;    GtkTreePath *first = NULL;    GtkTreeViewColumn *col = NULL;    gboolean result = FALSE;    gtk_tree_view_get_cursor (treeview, &path, &col);    first = gtk_tree_path_new_first ();    result = !gtk_tree_path_compare (path, first);    gtk_tree_path_free (first);    if (path && result)    {      GtkTreeModel *model = NULL;      model = gtk_tree_view_get_model (treeview);      if (model)      {        GtkTreeIter iter;        if (gtk_tree_model_iter_nth_child            (model, &iter, NULL,             gtk_tree_model_iter_n_children (model, NULL) - 1))        {          GtkTreePath *last = NULL;          last = gtk_tree_model_get_path (model, &iter);          if (gtk_tree_view_row_expanded (treeview, last))          {            GtkTreeIter child_iter;            if (gtk_tree_model_iter_nth_child                (model, &child_iter, &iter,                 gtk_tree_model_iter_n_children (model, &iter) - 1))            {              gtk_tree_path_free (last);              last = gtk_tree_model_get_path (model, &child_iter);            }          }          gtk_tree_view_set_cursor (treeview, last, NULL, FALSE);          gtk_tree_path_free (last);        }      }    }    gtk_tree_path_free (path);    return result;  }  else if (event->keyval == GDK_Down)  {    GtkTreePath *path = NULL;    GtkTreeViewColumn *col = NULL;    GtkTreeModel *model = NULL;    gboolean result = FALSE;    gtk_tree_view_get_cursor (treeview, &path, &col);    model = gtk_tree_view_get_model (treeview);    if (model)    {      GtkTreeIter iter;      if (gtk_tree_model_iter_nth_child          (model, &iter, NULL,           gtk_tree_model_iter_n_children (model, NULL) - 1))      {        GtkTreePath *last = NULL;        last = gtk_tree_model_get_path (model, &iter);        if (gtk_tree_view_row_expanded (treeview, last))        {          GtkTreeIter child_iter;          if (gtk_tree_model_iter_nth_child              (model, &child_iter, &iter,               gtk_tree_model_iter_n_children (model, &iter) - 1))          {            gtk_tree_path_free (last);            last = gtk_tree_model_get_path (model, &child_iter);          }        }        result = !gtk_tree_path_compare (path, last);        if (result)        {          GtkTreePath *first = NULL;          first = gtk_tree_path_new_first ();          gtk_tree_view_set_cursor (treeview, first, NULL, FALSE);          gtk_tree_path_free (first);        }        gtk_tree_path_free (last);      }    }    gtk_tree_path_free (path);    return result;  }  return FALSE;}voidabook_number_chooser_number_cell_data_func (GtkTreeViewColumn *col,                                            GtkCellRenderer *cell,                                            GtkTreeModel *model,                                            GtkTreeIter *iter,                                            GtkTreeView *view){  if (TRUE)  {    gchar *origtxt = NULL;    gchar *markuptxt = NULL;    gtk_tree_model_get (GTK_TREE_MODEL (model),                        iter, COL_NC_NUMBER, &origtxt, -1);//              g_print("%s(): entering, str = %s\n", __FUNCTION__, origtxt);    if (TRUE)    {      GtkTreePath *curr_path = NULL;      GtkTreePath *cursor_path = NULL;      GtkTreeViewColumn *unused = NULL;      gtk_tree_view_get_cursor (view, &cursor_path, &unused);      curr_path = gtk_tree_model_get_path (model, iter);      if (gtk_tree_path_compare (curr_path, cursor_path) == 0)      {        markuptxt =          g_strdup_printf ("<span color=\"White\" style=\"italic\">%s</span>",                           origtxt);      }      else      {        markuptxt =          g_strdup_printf ("<span color=\"Blue\" style=\"normal\">%s</span>",                           origtxt);      }      gtk_tree_path_free (curr_path);      gtk_tree_path_free (cursor_path);    }    g_object_set (G_OBJECT (cell), "markup", markuptxt, NULL);    g_free (markuptxt);    g_free (origtxt);  }  return;}static voidabook_number_chooser_row_activated (GtkTreeView *treeview, GtkTreePath *path,                                    GtkTreeViewColumn *col, gpointer user_data){  ABookNumberChooser *nc = (ABookNumberChooser *) user_data;  GtkTreeModel *model = NULL;  GtkTreeIter iter;  model = gtk_tree_view_get_model (treeview);  if (gtk_tree_model_get_iter (model, &iter, path))  {    gtk_dialog_response (GTK_DIALOG (nc), GTK_RESPONSE_OK);  }  return;}static voidabook_number_chooser_show_cb (GtkWidget *widget, gpointer user_data){  ABookNumberChooser *nc = ABOOK_NUMBER_CHOOSER (widget);  GtkTreePath *path = NULL;  GdkRectangle rect;  gint n_childen = 0;  path = gtk_tree_path_new_first ();  gtk_tree_view_get_cell_area (GTK_TREE_VIEW (nc->treeview), path, NULL, &rect);  gtk_tree_path_free (path);  n_childen =    gtk_tree_model_iter_n_children (GTK_TREE_MODEL (nc->liststore), NULL);  gtk_widget_set_size_request (nc->treeview, 240,                               (rect.height + 2) *n_childen);//      gtk_widget_set_size_request(GTK_DIALOG(nc)->action_area, 240, 0);  return;}static voidabook_number_chooser_init (ABookNumberChooser *view){  GtkTreeViewColumn *col;  GtkCellRenderer *renderer;  view->scroll_window = gtk_auto_scrolled_window_new ();  view->liststore = gtk_list_store_new (NUM_NC_COLS,                                        G_TYPE_STRING, G_TYPE_STRING);  view->treeview = gtk_tree_view_new ();  /* column type */  col = gtk_tree_view_column_new ();  gtk_tree_view_column_set_title (col, "String");  gtk_tree_view_append_column (GTK_TREE_VIEW (view->treeview), col);  gtk_tree_view_column_set_clickable (col, FALSE);  renderer = gtk_cell_renderer_text_new ();  gtk_tree_view_column_pack_start (col, renderer, TRUE);  g_object_set (G_OBJECT (renderer), "ypad", 5, NULL);  gtk_tree_view_column_add_attribute (col, renderer, "text", COL_NC_TYPE);  /* column number */  col = gtk_tree_view_column_new ();  gtk_tree_view_column_set_title (col, "Number");  gtk_tree_view_append_column (GTK_TREE_VIEW (view->treeview), col);  gtk_tree_view_column_set_clickable (col, FALSE);  renderer = gtk_cell_renderer_text_new ();  gtk_tree_view_column_pack_start (col, renderer, TRUE);  gtk_tree_view_column_add_attribute (col, renderer, "text", COL_NC_NUMBER);  gtk_tree_view_column_set_cell_data_func (col, renderer,                                           (GtkTreeCellDataFunc)                                           abook_number_chooser_number_cell_data_func,                                           view->treeview, NULL);  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view->treeview), FALSE);  gtk_tree_view_set_enable_search (GTK_TREE_VIEW (view->treeview), FALSE);  g_signal_connect (G_OBJECT (view->treeview), "key-press-event",                    G_CALLBACK                    (abook_number_chooser_treeview_key_press_event_cb), view);  g_signal_connect (G_OBJECT (view->treeview), "row-activated",                    G_CALLBACK (abook_number_chooser_row_activated), view);  gtk_tree_view_set_model (GTK_TREE_VIEW (view->treeview),                           GTK_TREE_MODEL (view->liststore));  view->scroll_window = gtk_auto_scrolled_window_new ();  gtk_auto_scrolled_window_add (GTK_AUTO_SCROLLED_WINDOW (view->scroll_window),                                view->treeview);  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (view)->vbox),                     view->scroll_window);  gtk_window_set_decorated (GTK_WINDOW (view), FALSE);  gtk_dialog_set_has_separator (GTK_DIALOG (view), FALSE);  gtk_container_set_border_width (GTK_CONTAINER (view), 0);  g_signal_connect (G_OBJECT (view), "show",                    G_CALLBACK (abook_number_chooser_show_cb), NULL);  return;}GtkWidget *abook_number_chooser_new (void){	g_print("%s() :$$$$$$$$$$$$$$$$$$$$$44\n",__FUNCTION__);  return g_object_new (ABOOK_TYPE_NUMBER_CHOOSER, NULL);}GtkListStore *abook_number_chooser_get_model (ABookNumberChooser *view){  if (view->liststore)  {    g_object_ref (view->liststore);  }  return view->liststore;}GtkWidget *abook_number_chooser_get_view (ABookNumberChooser *view){  if (view->treeview)  {    g_object_ref (view->treeview);  }  return view->treeview;}voidabook_number_chooser_update (ABookNumberChooser *view){  GtkTreePath *path = NULL;  path = gtk_tree_path_new_first ();  gtk_tree_view_set_cursor (GTK_TREE_VIEW (view->treeview), path, NULL, TRUE);  gtk_tree_path_free (path);  gtk_widget_set_size_request (GTK_DIALOG (view)->vbox, 240, -1);  gtk_widget_set_size_request (GTK_DIALOG (view)->action_area, 240, 0);  gtk_widget_show_all (GTK_WIDGET (view));  return;}gchar *abook_number_chooser_get_selected (ABookNumberChooser *view){  GtkTreeView *treeview = GTK_TREE_VIEW (view->treeview);  GtkTreePath *path = NULL;  GtkTreeViewColumn *col = NULL;  gchar *numstr = NULL;  gtk_tree_view_get_cursor (treeview, &path, &col);  if (path)  {    GtkTreeModel *model = NULL;    model = gtk_tree_view_get_model (treeview);    if (model)    {      GtkTreeIter iter;      gtk_tree_model_get_iter (model, &iter, path);      gtk_tree_model_get (model, &iter, COL_NC_NUMBER, &numstr, -1);    }  }  return numstr;}/* vi:ts=2:nowrap:ai:expandtab*/

⌨️ 快捷键说明

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