LINUX.ORG.RU

gtktreeview directory tree Си

 , ,


0

2

Добрый день.понемногу разбираюсь в gtk. возник вопрос - как вывести directory tree в gtktreeview? по самому gtktreeview информации много,а вот как его заставить отображать дерево каталогов и файлов на С, я так и не понял.

хочется как тут



Последнее исправление: cetjs2 (всего исправлений: 1)

при помощи opendir/readdir обходишь файловую систему, и заполняешь GtkTreeStore, привязанный к твоему GtkTreeView

ananas ★★★★★
()
Ответ на: комментарий от kalter

лентяй, да?

#include <sys/types.h>
#include <dirent.h>

#include <gtk/gtk.h>

void
load_dir_tree (GtkTreeStore *s, GtkTreeIter *pit, gchar *path)
{
  DIR *d;

  d = opendir (path);
  if (d)
    {
      struct dirent *ent;
      
      while ((ent = readdir (d)) != NULL)
        {
          if (ent->d_type == DT_DIR && ent->d_name[0] != '.')
            {
              GtkTreeIter it;
              gchar *fpath;
              
              gtk_tree_store_append (s, &it, pit);
              gtk_tree_store_set (s, &it, 0, ent->d_name, -1);
              
              fpath = g_strdup_printf ("%s/%s", path, ent->d_name);
              load_dir_tree (s, &it, fpath);
              g_free (fpath);
            }
        }
      closedir (d);
    }
  else
    perror ("opendir");

  return;
}

int main (int argc, char *argv[])
{
  GtkWidget *w, *sw, *tw;
  GtkCellRenderer *r;
  GtkTreeStore *store;
  
  gtk_init (&argc, &argv);
  
  w = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (G_OBJECT (w), "delete-event", G_CALLBACK (gtk_main_quit), NULL);
  
  sw = gtk_scrolled_window_new (NULL, NULL);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
                                  GTK_POLICY_AUTOMATIC,
                                  GTK_POLICY_AUTOMATIC);
  gtk_container_add (GTK_CONTAINER (w), sw);
  
  store = gtk_tree_store_new (1, G_TYPE_STRING);
  tw = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
  gtk_container_add (GTK_CONTAINER (sw), tw);

  r = gtk_cell_renderer_text_new ();
  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tw), -1, "Directory", r, "text", 0, NULL);

  load_dir_tree (store, NULL, "/");
  
  gtk_widget_show_all (w);  
  gtk_main ();
  
  return 0;     
}

с тебя магарыч

ananas ★★★★★
()
Ответ на: комментарий от ananas

О, спасибо большое! куда высылать магарыч?:}

kalter
() автор топика
Ответ на: комментарий от ananas

Ну, на самом деле, чтобы было совсем уж по фен-шую, нужно самому реализовать GtkTreeModel, чтобы унутре у ней были opendir/readdir

thesame ★★★★
()
Ответ на: комментарий от thesame

внутре достаточно неонки. по феншую будет свой виджет, какой-нить GtkDirView создать

ananas ★★★★★
()
20 февраля 2014 г.
Ответ на: комментарий от RisuX3

Смотри внимательно в текст темы:

kalter

29.06.2013 18:15:08

Последнее исправление: cetjs2 19.02.2014 23:47:59 (всего исправлений: 1)

Ужик теги правит.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.