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

📄 tree.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 2 页
字号:
	gtk_widget_show (aitem);	gtk_object_set_user_data(GTK_OBJECT(aitem), (gpointer)my_data);	fprintf(stdout, "Added: %s, len: %u\n", dirp->name, dirlen);	if (dirp->smbc_type != SMBC_FILE &&	    dirp->smbc_type != SMBC_IPC_SHARE &&	    (!ISDOT(dirp->name)) &&	    (!ISDOTDOT(dirp->name))){	  	  subtree = gtk_tree_new();	  gtk_tree_item_set_subtree(GTK_TREE_ITEM(aitem), subtree);	  gtk_signal_connect(GTK_OBJECT(subtree), "select_child",			     GTK_SIGNAL_FUNC(cb_select_child), real_tree);	  gtk_signal_connect(GTK_OBJECT(subtree), "unselect_child",			     GTK_SIGNAL_FUNC(cb_unselect_child), real_tree);	}	(char *)dirp += dirlen;	err -= dirlen;      }    }    smbc_closedir(dh);     }  else if (strncmp(signame, "collapse", 8) == 0) {    GtkWidget *subtree = gtk_tree_new();    gtk_tree_remove_items(GTK_TREE(real_tree), GTK_TREE(real_tree)->children);    gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), subtree);    gtk_signal_connect (GTK_OBJECT(subtree), "select_child",			GTK_SIGNAL_FUNC(cb_select_child), real_tree);    gtk_signal_connect (GTK_OBJECT(subtree), "unselect_child",			GTK_SIGNAL_FUNC(cb_unselect_child), real_tree);  }}static void cb_selection_changed( GtkWidget *tree ){  GList *i;    g_print ("selection_change called for tree %p\n", tree);  g_print ("selected objects are:\n");  i = GTK_TREE_SELECTION(tree);  while (i){    gchar *name;    GtkLabel *label;    GtkWidget *item;    /* Get a GtkWidget pointer from the list node */    item = GTK_WIDGET (i->data);    label = GTK_LABEL (GTK_BIN (item)->child);    gtk_label_get (label, &name);    g_print ("\t%s on level %d\n", name, GTK_TREE	     (item->parent)->level);    i = i->next;  }}/* * Expand or collapse the whole network ... */static void cb_wholenet(GtkWidget *item, gchar *signame){  GtkWidget *real_tree, *aitem, *subtree;  gchar *name;  GtkLabel *label;  gint dh, err, dirlen;  char dirbuf[512];  struct smbc_dirent *dirp;    label = GTK_LABEL (GTK_BIN (item)->child);  gtk_label_get (label, &name);  g_print ("%s called for item %s->%p, level %d\n", signame, name,	   item, GTK_TREE (item->parent)->level);  real_tree = GTK_TREE_ITEM_SUBTREE(item);  /* Get the subtree */  if (strncmp(signame, "expand", 6) == 0) { /* Expand called */    if ((dh = smbc_opendir("smb://")) < 0) { /* Handle error */      g_print("cb_wholenet: Could not open dir smbc://, %s\n",	      strerror(errno));      gtk_main_quit();      return;    }    while ((err = smbc_getdents(dh, (struct smbc_dirent *)dirbuf, 				sizeof(dirbuf))) != 0) {      if (err < 0) { /* An error, report it */	g_print("cb_wholenet: Could not read dir smbc://, %s\n",		strerror(errno));	gtk_main_quit();	return;      }      dirp = (struct smbc_dirent *)dirbuf;      while (err > 0) {	struct tree_data *my_data;	dirlen = dirp->dirlen;	my_data = make_tree_data(dirp->smbc_type, dirp->name);	aitem = gtk_tree_item_new_with_label(dirp->name);	/* Connect all GtkItem:: and GtkTreeItem:: signals */	gtk_signal_connect (GTK_OBJECT(aitem), "select",			    GTK_SIGNAL_FUNC(cb_itemsignal), "select");	gtk_signal_connect (GTK_OBJECT(aitem), "deselect",			    GTK_SIGNAL_FUNC(cb_itemsignal), "deselect");	gtk_signal_connect (GTK_OBJECT(aitem), "toggle",			    GTK_SIGNAL_FUNC(cb_itemsignal), "toggle");	gtk_signal_connect (GTK_OBJECT(aitem), "expand",			    GTK_SIGNAL_FUNC(cb_itemsignal), "expand");	gtk_signal_connect (GTK_OBJECT(aitem), "collapse",			    GTK_SIGNAL_FUNC(cb_itemsignal), "collapse");	gtk_tree_append (GTK_TREE(real_tree), aitem);	/* Show it - this can be done at any time */	gtk_widget_show (aitem);	gtk_object_set_user_data(GTK_OBJECT(aitem), (gpointer)my_data);	fprintf(stdout, "Added: %s, len: %u\n", dirp->name, dirlen);	subtree = gtk_tree_new();	gtk_tree_item_set_subtree(GTK_TREE_ITEM(aitem), subtree);	gtk_signal_connect(GTK_OBJECT(subtree), "select_child",			   GTK_SIGNAL_FUNC(cb_select_child), real_tree);	gtk_signal_connect(GTK_OBJECT(subtree), "unselect_child",			   GTK_SIGNAL_FUNC(cb_unselect_child), real_tree);	(char *)dirp += dirlen;	err -= dirlen;      }    }    smbc_closedir(dh);     }  else { /* Must be collapse ... FIXME ... */    GtkWidget *subtree = gtk_tree_new();    gtk_tree_remove_items(GTK_TREE(real_tree), GTK_TREE(real_tree)->children);    gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), subtree);    gtk_signal_connect (GTK_OBJECT(subtree), "select_child",			GTK_SIGNAL_FUNC(cb_select_child), real_tree);    gtk_signal_connect (GTK_OBJECT(subtree), "unselect_child",			GTK_SIGNAL_FUNC(cb_unselect_child), real_tree);  }}/* Should put up a dialog box to ask the user for username and password */static void auth_fn(const char *server, const char *share,	char *workgroup, int wgmaxlen, char *username, int unmaxlen,	char *password, int pwmaxlen){   strncpy(username, "test", unmaxlen);   strncpy(password, "test", pwmaxlen);}static char *col_titles[] = {  "Name", "Attributes", "Size", "Modification Date",};int main( int   argc,          char *argv[] ){  GtkWidget *window, *scrolled_win, *scrolled_win2, *tree;  GtkWidget *subtree, *item, *main_hbox, *r_pane, *l_pane;  gint err, dh;  gint i;  char dirbuf[512];  struct smbc_dirent *dirp;  gtk_init (&argc, &argv);  /* Init the smbclient library */  err = smbc_init(auth_fn, 10);  /* Print an error response ... */  if (err < 0) {    fprintf(stderr, "smbc_init returned %s (%i)\nDo you have a ~/.smb/smb.conf file?\n", strerror(errno), errno);    exit(1);  }  /* a generic toplevel window */  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_widget_set_name(window, "main browser window");  gtk_signal_connect (GTK_OBJECT(window), "delete_event",		      GTK_SIGNAL_FUNC (gtk_main_quit), NULL);  gtk_window_set_title(GTK_WINDOW(window), "The Linux Windows Network Browser");  gtk_widget_set_usize(GTK_WIDGET(window), 750, -1);  gtk_container_set_border_width (GTK_CONTAINER(window), 5);  gtk_widget_show (window);  /* A container for the two panes ... */  main_hbox = gtk_hbox_new(FALSE, 1);  gtk_container_border_width(GTK_CONTAINER(main_hbox), 1);  gtk_container_add(GTK_CONTAINER(window), main_hbox);  gtk_widget_show(main_hbox);  l_pane = gtk_hpaned_new();  gtk_paned_gutter_size(GTK_PANED(l_pane), (GTK_PANED(l_pane))->handle_size);  r_pane = gtk_hpaned_new();  gtk_paned_gutter_size(GTK_PANED(r_pane), (GTK_PANED(r_pane))->handle_size);  gtk_container_add(GTK_CONTAINER(main_hbox), l_pane);  gtk_widget_show(l_pane);  /* A generic scrolled window */  scrolled_win = gtk_scrolled_window_new (NULL, NULL);  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),				  GTK_POLICY_AUTOMATIC,				  GTK_POLICY_AUTOMATIC);  gtk_widget_set_usize (scrolled_win, 150, 200);  gtk_container_add (GTK_CONTAINER(l_pane), scrolled_win);  gtk_widget_show (scrolled_win);  /* Another generic scrolled window */  scrolled_win2 = gtk_scrolled_window_new (NULL, NULL);  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win2),				  GTK_POLICY_AUTOMATIC,				  GTK_POLICY_AUTOMATIC);  gtk_widget_set_usize (scrolled_win2, 150, 200);  gtk_paned_add2 (GTK_PANED(l_pane), scrolled_win2);  gtk_widget_show (scrolled_win2);    /* Create the root tree */  tree = gtk_tree_new();  g_print ("root tree is %p\n", tree);  /* connect all GtkTree:: signals */  gtk_signal_connect (GTK_OBJECT(tree), "select_child",		      GTK_SIGNAL_FUNC(cb_select_child), tree);  gtk_signal_connect (GTK_OBJECT(tree), "unselect_child",		      GTK_SIGNAL_FUNC(cb_unselect_child), tree);  gtk_signal_connect (GTK_OBJECT(tree), "selection_changed",		      GTK_SIGNAL_FUNC(cb_selection_changed), tree);  /* Add it to the scrolled window */  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrolled_win),                                         tree);  /* Set the selection mode */  gtk_tree_set_selection_mode (GTK_TREE(tree),			       GTK_SELECTION_MULTIPLE);  /* Show it */  gtk_widget_show (tree);  /* Now, create a clist and attach it to the second pane */  clist = gtk_clist_new_with_titles(4, col_titles);  gtk_container_add (GTK_CONTAINER(scrolled_win2), clist);  gtk_widget_show(clist);  /* Now, build the top level display ... */  if ((dh = smbc_opendir("smb:///")) < 0) {    fprintf(stderr, "Could not list default workgroup: smb:///: %s\n",	    strerror(errno));    exit(1);  }  /* Create a tree item for Whole Network */  item = gtk_tree_item_new_with_label ("Whole Network");  /* Connect all GtkItem:: and GtkTreeItem:: signals */  gtk_signal_connect (GTK_OBJECT(item), "select",		      GTK_SIGNAL_FUNC(cb_itemsignal), "select");  gtk_signal_connect (GTK_OBJECT(item), "deselect",		      GTK_SIGNAL_FUNC(cb_itemsignal), "deselect");  gtk_signal_connect (GTK_OBJECT(item), "toggle",		      GTK_SIGNAL_FUNC(cb_itemsignal), "toggle");  gtk_signal_connect (GTK_OBJECT(item), "expand",		      GTK_SIGNAL_FUNC(cb_wholenet), "expand");  gtk_signal_connect (GTK_OBJECT(item), "collapse",		      GTK_SIGNAL_FUNC(cb_wholenet), "collapse");  /* Add it to the parent tree */  gtk_tree_append (GTK_TREE(tree), item);  /* Show it - this can be done at any time */  gtk_widget_show (item);  subtree = gtk_tree_new();  /* A subtree for Whole Network */  gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), subtree);  gtk_signal_connect (GTK_OBJECT(subtree), "select_child",		      GTK_SIGNAL_FUNC(cb_select_child), tree);  gtk_signal_connect (GTK_OBJECT(subtree), "unselect_child",		      GTK_SIGNAL_FUNC(cb_unselect_child), tree);  /* Now, get the items in smb:/// and add them to the tree */  dirp = (struct smbc_dirent *)dirbuf;  while ((err = smbc_getdents(dh, (struct smbc_dirent *)dirbuf, 			      sizeof(dirbuf))) != 0) {    if (err < 0) { /* Handle the error */      fprintf(stderr, "Could not read directory for smbc:///: %s\n",	      strerror(errno));      exit(1);    }    fprintf(stdout, "Dir len: %u\n", err);    while (err > 0) { /* Extract each entry and make a sub-tree */      struct tree_data *my_data;      int dirlen = dirp->dirlen;      my_data = make_tree_data(dirp->smbc_type, dirp->name);      item = gtk_tree_item_new_with_label(dirp->name);      /* Connect all GtkItem:: and GtkTreeItem:: signals */      gtk_signal_connect (GTK_OBJECT(item), "select",			  GTK_SIGNAL_FUNC(cb_itemsignal), "select");      gtk_signal_connect (GTK_OBJECT(item), "deselect",			  GTK_SIGNAL_FUNC(cb_itemsignal), "deselect");      gtk_signal_connect (GTK_OBJECT(item), "toggle",			  GTK_SIGNAL_FUNC(cb_itemsignal), "toggle");      gtk_signal_connect (GTK_OBJECT(item), "expand",			  GTK_SIGNAL_FUNC(cb_itemsignal), "expand");      gtk_signal_connect (GTK_OBJECT(item), "collapse",			  GTK_SIGNAL_FUNC(cb_itemsignal), "collapse");      /* Add it to the parent tree */      gtk_tree_append (GTK_TREE(tree), item);      /* Show it - this can be done at any time */      gtk_widget_show (item);      gtk_object_set_user_data(GTK_OBJECT(item), (gpointer)my_data);      fprintf(stdout, "Added: %s, len: %u\n", dirp->name, dirlen);      subtree = gtk_tree_new();      gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), subtree);      gtk_signal_connect (GTK_OBJECT(subtree), "select_child",			  GTK_SIGNAL_FUNC(cb_select_child), tree);      gtk_signal_connect (GTK_OBJECT(subtree), "unselect_child",			  GTK_SIGNAL_FUNC(cb_unselect_child), tree);      (char *)dirp += dirlen;      err -= dirlen;    }  }  smbc_closedir(dh); /* FIXME, check for error :-) */  /* Show the window and loop endlessly */  gtk_main();  return 0;}/* example-end */

⌨️ 快捷键说明

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