1 #include "Gtk_LdapTreeItem.h"
2 #include <gtk--/base.h>
4 Gtk_LdapTreeItem::Gtk_LdapTreeItem() : Gtk_TreeItem() {
5 this->objectClass = NULL;
8 Gtk_LdapTreeItem::Gtk_LdapTreeItem(char *c, My_Window *w) : Gtk_TreeItem() {
11 this->objectClass = NULL;
14 Gtk_LdapTreeItem::Gtk_LdapTreeItem(GtkTreeItem *t) : Gtk_TreeItem(t) {
17 Gtk_LdapTreeItem::~Gtk_LdapTreeItem() {
18 cout << "Bye" << endl;
22 void Gtk_LdapTreeItem::setType(int t) {
23 cout << "Gtk_LdapTreeItem::setType(" << t << ")" << endl;
26 if (this->getchild() != NULL) {
27 xpm_label = new Gtk_HBox(GTK_HBOX(this->getchild()->gtkobj()));
28 xpm_label->remove_c(xpm_label->children()->nth_data(0));
29 xpm_label->remove_c(xpm_label->children()->nth_data(0));
31 else xpm_label = new Gtk_HBox();
32 if (strcasecmp(this->objectClass,"organization") == 0)
33 xpm_icon=new Gtk_Pixmap(*xpm_label, root_node);
34 else if (strcasecmp(this->objectClass,"organizationalunit") == 0)
35 xpm_icon=new Gtk_Pixmap(*xpm_label, branch_node);
36 else if (strcasecmp(this->objectClass,"person") == 0)
37 xpm_icon=new Gtk_Pixmap(*xpm_label, leaf_node);
38 else xpm_icon=new Gtk_Pixmap(*xpm_label, general_node);
39 label = new Gtk_Label(this->rdn);
40 xpm_label->pack_start(*xpm_icon, false, false, 1);
41 xpm_label->pack_start(*label, false, false, 1);
42 if (this->getchild() == NULL) this->add(xpm_label);
48 int Gtk_LdapTreeItem::showDetails() {
49 cout << "Gtk_LdapTreeItem::showDetails()" << endl;
50 if (this->notebook != NULL) {
51 if (par->viewport->getchild() != NULL) {
52 par->viewport->remove_c(par->viewport->getchild()->gtkobj());
54 par->viewport->add(this->notebook);
55 this->notebook->show();
56 par->viewport->show();
59 else this->getDetails();
63 int Gtk_LdapTreeItem::getDetails() {
64 cout << "Gtk_LdapTreeItem::getDetails()" << endl;
65 int error, entriesCount;
68 char *attribute, **values;
73 Gtk_Viewport *viewport;
74 error = ldap_search_s(this->ld, this->dn, LDAP_SCOPE_BASE, "objectclass=*", NULL, 0, &result_identifier);
75 entriesCount = ldap_count_entries(ld, result_identifier);
76 if (entriesCount == 0) return 0;
77 notebook = new Gtk_Notebook();
78 notebook->set_tab_pos(GTK_POS_LEFT);
79 const gchar *titles[] = { "values" };
81 for (entry = ldap_first_entry(ld, result_identifier); entry != NULL; entry = ldap_next_entry(ld, result_identifier)) {
82 for (attribute = ldap_first_attribute(ld, entry, &ber); attribute != NULL; attribute = ldap_next_attribute(ld, entry, ber)) {
83 values = ldap_get_values(ld, entry, attribute);
84 if (strcasecmp(attribute, "objectclass") == 0) {
85 if (strcasecmp(values[0],"top") == 0)
86 this->objectClass = strdup(values[1]);
87 else this->objectClass = values[0];
89 table = new Gtk_CList(1, titles);
90 for (int i=0; i<ldap_count_values(values); i++) {
91 const gchar *t[] = { values[i] };
94 ldap_value_free(values);
95 label = new Gtk_Label(attribute);
96 notebook->append_page(*table, *label);
105 void Gtk_LdapTreeItem::select_impl() {
106 // cout << this->dn << " selected" << endl;
107 // gtk_item_select(GTK_ITEM(GTK_TREE_ITEM(this->gtkobj())));
108 Gtk_c_signals_Item *sig=(Gtk_c_signals_Item *)internal_getsignalbase();
109 if (!sig->select) return;
110 sig->select(GTK_ITEM(gtkobj()));
114 void Gtk_LdapTreeItem::collapse_impl() {
115 // cout << this->dn << " collapsed" << endl;
116 Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
117 if (!sig->collapse) return;
118 sig->collapse(GTK_TREE_ITEM(gtkobj()));
119 // gtk_widget_hide(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
122 void Gtk_LdapTreeItem::expand_impl() {
123 // cout << this->dn << " expanded" << endl;
124 Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
125 if (!sig->expand) return;
126 sig->expand(GTK_TREE_ITEM(gtkobj()));
128 // t = new Gtk_Tree(GTK_TREE(GTK_TREE_ITEM(this->gtkobj())->subtree));
129 // bool vis = t->visible();
130 // if (vis == false) {
131 // gtk_widget_show(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
132 // cout << this->dn << " expanded" << endl;
135 // gtk_widget_hide(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
136 // cout << this->dn << " collapsed" << endl;