]> git.sur5r.net Git - openldap/blobdiff - contrib/gtk-tool/Gtk_LdapTreeItem.cc
various updates and fixes for gtk-tool
[openldap] / contrib / gtk-tool / Gtk_LdapTreeItem.cc
index 5a44bd3ef019570561a620a269113c2c7032eabf..24f5398b75088bbbe116e9cc38be934e88529c7a 100644 (file)
@@ -5,10 +5,16 @@ Gtk_LdapTreeItem::Gtk_LdapTreeItem() : Gtk_TreeItem() {
        this->objectClass = NULL;
 }
 
-Gtk_LdapTreeItem::Gtk_LdapTreeItem(char *c, My_Window *w) : Gtk_TreeItem() {
-       this->rdn = c;
+Gtk_LdapTreeItem::Gtk_LdapTreeItem(char *c, My_Window *w, LDAP *ld) : Gtk_TreeItem() {
+       debug("Gtk_LdapTreeItem::Gtk_LdapTreeItem(%s)\n", c);
+       char **s;
+       this->dn = c;
+       s = ldap_explode_dn(this->dn, 1);
+       this->rdn = g_strdup_printf("%s", s[0]);
        this->par = w;
+       this->ld = ld;
        this->objectClass = NULL;
+       this->getDetails();
 }
 
 Gtk_LdapTreeItem::Gtk_LdapTreeItem(GtkTreeItem *t) : Gtk_TreeItem(t) {
@@ -19,8 +25,50 @@ Gtk_LdapTreeItem::~Gtk_LdapTreeItem() {
        delete this;
 }
 
+Gtk_LdapTree* Gtk_LdapTreeItem::getSubtree(LDAP *ld, int counter) {
+       debug("Gtk_LdapTreeItem::getSubtree(%s)\n", this->dn);
+       if (counter <= 0) return NULL;
+       if (this->gtkobj()->subtree != NULL) {
+               return (Gtk_LdapTree *)GTK_TREE(this->gtkobj()->subtree);
+       }
+       counter--;
+       Gtk_LdapTree *subtree = NULL, *tree = NULL;
+       Gtk_LdapTreeItem *subtreeitem = NULL;
+       LDAPMessage *r_i = NULL, *entry = NULL;
+       gchar *c;
+       char **s;
+       int entriesCount = 0, error;
+
+       this->ld = ld;
+       error = ldap_search_s(this->ld, this->dn, LDAP_SCOPE_ONELEVEL, "objectclass=*", NULL, 0, &r_i);
+//     printf("%s\n", ldap_err2string(error));
+       entriesCount = ldap_count_entries(this->ld, r_i);
+       debug("%i results\n", entriesCount);
+       if (entriesCount != 0) { 
+               tree = new Gtk_LdapTree();
+               tree->set_selection_mode(GTK_SELECTION_BROWSE);
+               tree->set_view_mode(GTK_TREE_VIEW_ITEM);
+               tree->set_view_lines(false);
+               entry = ldap_first_entry(this->ld, r_i);
+               while (entry != NULL) {
+                       subtreeitem = new Gtk_LdapTreeItem(ldap_get_dn(this->ld, entry), this->par, this->ld);
+                       subtree = subtreeitem->getSubtree(this->ld, counter);
+                       debug("inserting %s into %s\n",subtreeitem->rdn,this->rdn);
+                       tree->append(*subtreeitem);
+                       subtreeitem->show();
+                       if (subtree != NULL) subtreeitem->set_subtree(*subtree);
+                       debug("done\n");
+                       entry = ldap_next_entry(this->ld, entry);
+               }
+       //      this->set_subtree(*tree);
+       }
+//     this->getDetails();
+       debug("done\n");
+       return tree;
+}
+
 void Gtk_LdapTreeItem::setType(int t) {
-//     cout << "Gtk_LdapTreeItem::setType(" << t << ")" << endl;
+       debug("Gtk_LdapTreeItem::setType(%i)\n", t);
        Gtk_Pixmap *xpm_icon;
        Gtk_Label *label;
        if (this->getchild() != NULL) {
@@ -46,7 +94,7 @@ void Gtk_LdapTreeItem::setType(int t) {
 }
 
 int Gtk_LdapTreeItem::showDetails() {
-//     cout << "Gtk_LdapTreeItem::showDetails()" << endl;
+       debug("Gtk_LdapTreeItem::showDetails()\n");
        if (this->notebook != NULL) {
                if (par->viewport->getchild() != NULL) {
                        par->viewport->remove_c(par->viewport->getchild()->gtkobj());
@@ -62,7 +110,7 @@ int Gtk_LdapTreeItem::showDetails() {
 }
 
 int Gtk_LdapTreeItem::getDetails() {
-//     cout << "Gtk_LdapTreeItem::getDetails()" << endl;
+       debug("Gtk_LdapTreeItem::getDetails()\n");
        int error, entriesCount;
        BerElement *ber;
        LDAPMessage *entry;
@@ -72,8 +120,8 @@ int Gtk_LdapTreeItem::getDetails() {
        GList *child_list;
        Gtk_Notebook *g;
        Gtk_Viewport *viewport;
-       error = ldap_search_s(this->ld, this->dn, LDAP_SCOPE_BASE, "objectclass=*", NULL, 0, &result_identifier);
-       entriesCount = ldap_count_entries(ld, result_identifier);
+       error = ldap_search_s(this->ld, this->dn, LDAP_SCOPE_BASE, "objectclass=*", NULL, 0, &this->result_identifier);
+       entriesCount = ldap_count_entries(this->ld, this->result_identifier);
        if (entriesCount == 0) return 0;
        notebook = new Gtk_Notebook();
        notebook->set_tab_pos(GTK_POS_LEFT);
@@ -100,11 +148,18 @@ int Gtk_LdapTreeItem::getDetails() {
                }
        }
        this->setType(1);
-//     cout << ".";
+       debug("done\n");
        return 0;
 }
+
+void Gtk_LdapTreeItem::show_impl() {
+       debug("%s showed\n", this->dn);
+       Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
+       sig->show(GTK_WIDGET(gtkobj()));
+}
+
 void Gtk_LdapTreeItem::select_impl() {
-//     cout << this->dn << " selected" << endl;
+       debug("%s selected\n", this->dn);
 //     gtk_item_select(GTK_ITEM(GTK_TREE_ITEM(this->gtkobj())));
        Gtk_c_signals_Item *sig=(Gtk_c_signals_Item *)internal_getsignalbase();
        if (!sig->select) return;
@@ -113,7 +168,7 @@ void Gtk_LdapTreeItem::select_impl() {
 }
 
 void Gtk_LdapTreeItem::collapse_impl() {
-//     cout << this->dn << " collapsed" << endl;
+       debug("%s collapsed\n", this->dn);
        Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
        if (!sig->collapse) return;
        sig->collapse(GTK_TREE_ITEM(gtkobj()));
@@ -121,7 +176,10 @@ void Gtk_LdapTreeItem::collapse_impl() {
 }
 
 void Gtk_LdapTreeItem::expand_impl() {
-//     cout << this->dn << " expanded" << endl;
+       debug("%s expanded\n",this->dn);
+       Gtk_LdapTreeItem *item;
+       G_List<GtkWidget> *list;
+       Gtk_Tree *tree;
        Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
        if (!sig->expand) return;
        sig->expand(GTK_TREE_ITEM(gtkobj()));