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) {
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) {
}
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());
}
int Gtk_LdapTreeItem::getDetails() {
-// cout << "Gtk_LdapTreeItem::getDetails()" << endl;
+ debug("Gtk_LdapTreeItem::getDetails()\n");
int error, entriesCount;
BerElement *ber;
LDAPMessage *entry;
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);
}
}
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;
}
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()));
}
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()));