]> git.sur5r.net Git - openldap/blob - contrib/gtk-tool/Gtk_LdapTreeItem.cc
7efcb58d6c408ce2e0d57a14a828ac86950eb4b3
[openldap] / contrib / gtk-tool / Gtk_LdapTreeItem.cc
1 #include "Gtk_LdapTreeItem.h"
2 #include <gtk--/base.h>
3
4 Gtk_LdapTreeItem::Gtk_LdapTreeItem() : Gtk_TreeItem() {
5         this->objectClass = NULL;
6 }
7
8 Gtk_LdapTreeItem::Gtk_LdapTreeItem(char *c, My_Window *w) : Gtk_TreeItem() {
9         this->rdn = c;
10         this->par = w;
11         this->objectClass = NULL;
12 }
13
14 Gtk_LdapTreeItem::Gtk_LdapTreeItem(GtkTreeItem *t) : Gtk_TreeItem(t) {
15 }
16
17 Gtk_LdapTreeItem::~Gtk_LdapTreeItem() {
18         cout << "Bye" << endl;
19         delete this;
20 }
21
22 void Gtk_LdapTreeItem::setType(int t) {
23         cout << "Gtk_LdapTreeItem::setType(" << t << ")" << endl;
24         Gtk_Pixmap *xpm_icon;
25         Gtk_Label *label;
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));
30         }
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);
43         label->show();
44         xpm_label->show();
45         xpm_icon->show();
46 }
47
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());
53                 }
54                 par->viewport->add(this->notebook);
55                 this->notebook->show();
56                 par->viewport->show();
57                 return 0;
58         }
59         else this->getDetails();
60         this->showDetails();
61 }
62
63 int Gtk_LdapTreeItem::getDetails() {
64         cout << "Gtk_LdapTreeItem::getDetails()" << endl;
65         int error, entriesCount;
66         BerElement *ber;
67         LDAPMessage *entry;
68         char *attribute, **values;
69         Gtk_CList *table;
70         Gtk_Label *label;
71         GList *child_list;
72         Gtk_Notebook *g;
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" };
80         
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];
88                         }
89                         table = new Gtk_CList(1, titles);
90                         for (int i=0; i<ldap_count_values(values); i++) {
91                                 const gchar *t[] = { values[i] };
92                                 table->append(t);
93                         }
94                         ldap_value_free(values);
95                         label = new Gtk_Label(attribute);
96                         notebook->append_page(*table, *label);
97                         table->show();
98                         label->show();
99                 }
100         }
101         this->setType(1);
102         cout << ".";
103         return 0;
104 }
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()));
111         this->showDetails();
112 }
113
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)));
120 }
121
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()));
127 //      Gtk_Tree *t;
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;
133 //      }
134 //      else {
135 //              gtk_widget_hide(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
136 //              cout << this->dn << " collapsed" << endl;
137 //      }
138 }