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

📄 main.c

📁 linux下电话本所依赖的一些图形库
💻 C
📖 第 1 页 / 共 2 页
字号:
  gtk_text_buffer_delete (info_buffer, &start, &end);  gtk_text_buffer_get_bounds (source_buffer, &start, &end);  gtk_text_buffer_delete (source_buffer, &start, &end);  full_filename = demo_find_file (filename, &err);  if (!full_filename)    {      g_warning ("%s", err->message);      g_error_free (err);      return;    }  file = g_fopen (full_filename, "r");  if (!file)    g_warning ("Cannot open %s: %s\n", full_filename, g_strerror (errno));  g_free (full_filename);  if (!file)    return;  gtk_text_buffer_get_iter_at_offset (info_buffer, &start, 0);  while (read_line (file, buffer))    {      gchar *p = buffer->str;      gchar *q;      gchar *r;            switch (state)	{	case 0:	  /* Reading title */	  while (*p == '/' || *p == '*' || g_ascii_isspace (*p))	    p++;	  r = p;	  while (*r != '/' && strlen (r))	    r++;	  if (strlen (r) > 0)	    p = r + 1;	  q = p + strlen (p);	  while (q > p && g_ascii_isspace (*(q - 1)))	    q--;	  if (q > p)	    {	      int len_chars = g_utf8_pointer_to_offset (p, q);	      end = start;	      g_assert (strlen (p) >= q - p);	      gtk_text_buffer_insert (info_buffer, &end, p, q - p);	      start = end;	      gtk_text_iter_backward_chars (&start, len_chars);	      gtk_text_buffer_apply_tag_by_name (info_buffer, "title", &start, &end);	      start = end;	      	      state++;	    }	  break;	    	case 1:	  /* Reading body of info section */	  while (g_ascii_isspace (*p))	    p++;	  if (*p == '*' && *(p + 1) == '/')	    {	      gtk_text_buffer_get_iter_at_offset (source_buffer, &start, 0);	      state++;	    }	  else	    {	      int len;	      	      while (*p == '*' || g_ascii_isspace (*p))		p++;	      len = strlen (p);	      while (g_ascii_isspace (*(p + len - 1)))		len--;	      	      if (len > 0)		{		  if (in_para)		    gtk_text_buffer_insert (info_buffer, &start, " ", 1);		  g_assert (strlen (p) >= len);		  gtk_text_buffer_insert (info_buffer, &start, p, len);		  in_para = 1;		}	      else		{		  gtk_text_buffer_insert (info_buffer, &start, "\n", 1);		  in_para = 0;		}	    }	  break;	case 2:	  /* Skipping blank lines */	  while (g_ascii_isspace (*p))	    p++;	  if (*p)	    {	      p = buffer->str;	      state++;	      /* Fall through */	    }	  else	    break;	  	case 3:	  /* Reading program body */	  gtk_text_buffer_insert (source_buffer, &start, p, -1);	  gtk_text_buffer_insert (source_buffer, &start, "\n", 1);	  break;	}    }  fontify ();  g_string_free (buffer, TRUE);}voidrow_activated_cb (GtkTreeView       *tree_view,                  GtkTreePath       *path,		  GtkTreeViewColumn *column){  GtkTreeIter iter;  gboolean italic;  GDoDemoFunc func;  GtkWidget *window;  GtkTreeModel *model;  model = gtk_tree_view_get_model (tree_view);    gtk_tree_model_get_iter (model, &iter, path);  gtk_tree_model_get (GTK_TREE_MODEL (model),		      &iter,		      FUNC_COLUMN, &func,		      ITALIC_COLUMN, &italic,		      -1);  if (func)    {      gtk_tree_store_set (GTK_TREE_STORE (model),			  &iter,			  ITALIC_COLUMN, !italic,			  -1);      window = (func) (gtk_widget_get_toplevel (GTK_WIDGET (tree_view)));            if (window != NULL)	{	  CallbackData *cbdata;	  	  cbdata = g_new (CallbackData, 1);	  cbdata->model = model;	  cbdata->path = gtk_tree_path_copy (path);	  	  g_signal_connect (window, "destroy",			    G_CALLBACK (window_closed_cb), cbdata);	}    }}static voidselection_cb (GtkTreeSelection *selection,	      GtkTreeModel     *model){  GtkTreeIter iter;  GValue value = {0, };  if (! gtk_tree_selection_get_selected (selection, NULL, &iter))    return;  gtk_tree_model_get_value (model, &iter,			    FILENAME_COLUMN,			    &value);  if (g_value_get_string (&value))    load_file (g_value_get_string (&value));  g_value_unset (&value);}static GtkWidget *create_text (GtkTextBuffer **buffer,	     gboolean        is_source){  GtkWidget *scrolled_window;  GtkWidget *text_view;  PangoFontDescription *font_desc;  scrolled_window = gtk_scrolled_window_new (NULL, NULL);  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),				  GTK_POLICY_AUTOMATIC,				  GTK_POLICY_AUTOMATIC);  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),				       GTK_SHADOW_IN);    text_view = gtk_text_view_new ();    *buffer = gtk_text_buffer_new (NULL);  gtk_text_view_set_buffer (GTK_TEXT_VIEW (text_view), *buffer);  gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE);  gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE);  gtk_container_add (GTK_CONTAINER (scrolled_window), text_view);    if (is_source)    {      font_desc = pango_font_description_from_string ("Courier 12");      gtk_widget_modify_font (text_view, font_desc);      pango_font_description_free (font_desc);      gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view),                                   GTK_WRAP_NONE);    }  else    {      /* Make it a bit nicer for text. */      gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view),                                   GTK_WRAP_WORD);      gtk_text_view_set_pixels_above_lines (GTK_TEXT_VIEW (text_view),                                            2);      gtk_text_view_set_pixels_below_lines (GTK_TEXT_VIEW (text_view),                                            2);    }    return scrolled_window;}static GtkWidget *create_tree (void){  GtkTreeSelection *selection;  GtkCellRenderer *cell;  GtkWidget *tree_view;  GtkTreeViewColumn *column;  GtkTreeStore *model;  GtkTreeIter iter;  Demo *d = testgtk_demos;  model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN);  tree_view = gtk_tree_view_new ();  gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model));  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));  gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection),			       GTK_SELECTION_BROWSE);  gtk_widget_set_size_request (tree_view, 200, -1);  /* this code only supports 1 level of children. If we   * want more we probably have to use a recursing function.   */  while (d->title)    {      Demo *children = d->children;      gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);      gtk_tree_store_set (GTK_TREE_STORE (model),			  &iter,			  TITLE_COLUMN, d->title,			  FILENAME_COLUMN, d->filename,			  FUNC_COLUMN, d->func,			  ITALIC_COLUMN, FALSE,			  -1);      d++;      if (!children)	continue;            while (children->title)	{	  GtkTreeIter child_iter;	  gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);	  	  gtk_tree_store_set (GTK_TREE_STORE (model),			      &child_iter,			      TITLE_COLUMN, children->title,			      FILENAME_COLUMN, children->filename,			      FUNC_COLUMN, children->func,			      ITALIC_COLUMN, FALSE,			      -1);	  	  children++;	}    }  cell = gtk_cell_renderer_text_new ();  g_object_set (cell,                "style", PANGO_STYLE_ITALIC,                NULL);    column = gtk_tree_view_column_new_with_attributes ("Widget (double click for demo)",						     cell,						     "text", TITLE_COLUMN,						     "style_set", ITALIC_COLUMN,						     NULL);    gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),			       GTK_TREE_VIEW_COLUMN (column));  g_signal_connect (selection, "changed", G_CALLBACK (selection_cb), model);  g_signal_connect (tree_view, "row_activated", G_CALLBACK (row_activated_cb), model);  gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));  return tree_view;}static voidsetup_default_icon (void){  GdkPixbuf *pixbuf;  char *filename;  GError *err;  err = NULL;  pixbuf = NULL;  filename = demo_find_file ("gtk-logo-rgb.gif", &err);  if (filename)    {      pixbuf = gdk_pixbuf_new_from_file (filename, &err);      g_free (filename);    }  /* Ignoring this error (passing NULL instead of &err above)   * would probably be reasonable for most apps.  We're just   * showing off.   */  if (err)    {      GtkWidget *dialog;            dialog = gtk_message_dialog_new (NULL, 0,				       GTK_MESSAGE_ERROR,				       GTK_BUTTONS_CLOSE,				       "Failed to read icon file: %s",				       err->message);      g_error_free (err);      g_signal_connect (dialog, "response",			G_CALLBACK (gtk_widget_destroy), NULL);    }  if (pixbuf)    {      GList *list;            GdkPixbuf *transparent;      /* The gtk-logo-rgb icon has a white background, make it transparent */      transparent = gdk_pixbuf_add_alpha (pixbuf, TRUE, 0xff, 0xff, 0xff);      list = NULL;      list = g_list_append (list, transparent);      gtk_window_set_default_icon_list (list);      g_list_free (list);      g_object_unref (pixbuf);      g_object_unref (transparent);    }}intmain (int argc, char **argv){  GtkWidget *window;  GtkWidget *notebook;  GtkWidget *hbox;  GtkWidget *tree;  GtkTextTag *tag;  /* Most code in gtk-demo is intended to be exemplary, but not   * these few lines, which are just a hack so gtk-demo will work   * in the GTK tree without installing it.   */  if (g_file_test ("../../gdk-pixbuf/libpixbufloader-pnm.la",                   G_FILE_TEST_EXISTS))    {      g_setenv ("GDK_PIXBUF_MODULE_FILE", "../../gdk-pixbuf/gdk-pixbuf.loaders", TRUE);      g_setenv ("GTK_IM_MODULE_FILE", "../../modules/input/gtk.immodules", TRUE);    }  /* -- End of hack -- */    gtk_init (&argc, &argv);  setup_default_icon ();    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_window_set_title (GTK_WINDOW (window), "GTK+ Code Demos");  g_signal_connect (window, "destroy",		    G_CALLBACK (gtk_main_quit), NULL);  hbox = gtk_hbox_new (FALSE, 0);  gtk_container_add (GTK_CONTAINER (window), hbox);  tree = create_tree ();  gtk_box_pack_start (GTK_BOX (hbox), tree, FALSE, FALSE, 0);  notebook = gtk_notebook_new ();  gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 0);  gtk_notebook_append_page (GTK_NOTEBOOK (notebook),			    create_text (&info_buffer, FALSE),			    gtk_label_new_with_mnemonic ("_Info"));  gtk_notebook_append_page (GTK_NOTEBOOK (notebook),			    create_text (&source_buffer, TRUE),			    gtk_label_new_with_mnemonic ("_Source"));  tag = gtk_text_buffer_create_tag (info_buffer, "title",                                    "font", "Sans 18",                                    NULL);  tag = gtk_text_buffer_create_tag (source_buffer, "comment",				    "foreground", "red",                                    NULL);  tag = gtk_text_buffer_create_tag (source_buffer, "type",				    "foreground", "ForestGreen",                                    NULL);  tag = gtk_text_buffer_create_tag (source_buffer, "string",				    "foreground", "RosyBrown",				    "weight", PANGO_WEIGHT_BOLD,                                    NULL);  tag = gtk_text_buffer_create_tag (source_buffer, "control",				    "foreground", "purple",                                    NULL);  tag = gtk_text_buffer_create_tag (source_buffer, "preprocessor",				    "style", PANGO_STYLE_OBLIQUE, 				    "foreground", "burlywood4",                                    NULL);  tag = gtk_text_buffer_create_tag (source_buffer, "function",				    "weight", PANGO_WEIGHT_BOLD, 				    "foreground", "DarkGoldenrod4",                                    NULL);    gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);  gtk_widget_show_all (window);    load_file (testgtk_demos[0].filename);    gtk_main ();  return 0;}

⌨️ 快捷键说明

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