openldap/contrib/gtk-tool/Gtk_LdapTreeItem.cc

140 lines
4.5 KiB
C++
Raw Normal View History

1998-11-25 02:01:09 +08:00
#include "Gtk_LdapTreeItem.h"
#include <gtk--/base.h>
1998-11-25 02:01:09 +08:00
Gtk_LdapTreeItem::Gtk_LdapTreeItem() : Gtk_TreeItem() {
1998-11-29 04:25:09 +08:00
this->objectClass = NULL;
1998-11-25 02:01:09 +08:00
}
Gtk_LdapTreeItem::Gtk_LdapTreeItem(char *c, My_Window *w) : Gtk_TreeItem() {
1998-11-25 02:01:09 +08:00
this->rdn = c;
this->par = w;
1998-11-29 04:25:09 +08:00
this->objectClass = NULL;
1998-11-25 02:01:09 +08:00
}
1998-11-25 02:01:09 +08:00
Gtk_LdapTreeItem::Gtk_LdapTreeItem(GtkTreeItem *t) : Gtk_TreeItem(t) {
}
1998-11-29 04:25:09 +08:00
Gtk_LdapTreeItem::~Gtk_LdapTreeItem() {
cout << "Bye" << endl;
delete this;
}
void Gtk_LdapTreeItem::setType(int t) {
// cout << "Gtk_LdapTreeItem::setType(" << t << ")" << endl;
Gtk_Pixmap *xpm_icon;
Gtk_Label *label;
if (this->getchild() != NULL) {
xpm_label = new Gtk_HBox(GTK_HBOX(this->getchild()->gtkobj()));
xpm_label->remove_c(xpm_label->children()->nth_data(0));
xpm_label->remove_c(xpm_label->children()->nth_data(0));
}
else xpm_label = new Gtk_HBox();
1998-11-29 04:25:09 +08:00
if (strcasecmp(this->objectClass,"organization") == 0)
xpm_icon=new Gtk_Pixmap(*xpm_label, root_node);
else if (strcasecmp(this->objectClass,"organizationalunit") == 0)
xpm_icon=new Gtk_Pixmap(*xpm_label, branch_node);
else if (strcasecmp(this->objectClass,"person") == 0)
xpm_icon=new Gtk_Pixmap(*xpm_label, leaf_node);
else xpm_icon=new Gtk_Pixmap(*xpm_label, general_node);
label = new Gtk_Label(this->rdn);
xpm_label->pack_start(*xpm_icon, false, false, 1);
xpm_label->pack_start(*label, false, false, 1);
1998-11-29 04:25:09 +08:00
if (this->getchild() == NULL) this->add(xpm_label);
label->show();
xpm_label->show();
1998-11-29 04:25:09 +08:00
xpm_icon->show();
}
int Gtk_LdapTreeItem::showDetails() {
// cout << "Gtk_LdapTreeItem::showDetails()" << endl;
1998-11-29 04:25:09 +08:00
if (this->notebook != NULL) {
if (par->viewport->getchild() != NULL) {
par->viewport->remove_c(par->viewport->getchild()->gtkobj());
}
par->viewport->add(this->notebook);
this->notebook->show();
par->viewport->show();
return 0;
}
else this->getDetails();
this->showDetails();
return 0;
}
int Gtk_LdapTreeItem::getDetails() {
// cout << "Gtk_LdapTreeItem::getDetails()" << endl;
1998-11-25 02:01:09 +08:00
int error, entriesCount;
BerElement *ber;
LDAPMessage *entry;
char *attribute, **values;
Gtk_CList *table;
Gtk_Label *label;
GList *child_list;
Gtk_Notebook *g;
Gtk_Viewport *viewport;
1998-11-25 02:01:09 +08:00
error = ldap_search_s(this->ld, this->dn, LDAP_SCOPE_BASE, "objectclass=*", NULL, 0, &result_identifier);
entriesCount = ldap_count_entries(ld, result_identifier);
if (entriesCount == 0) return 0;
notebook = new Gtk_Notebook();
notebook->set_tab_pos(GTK_POS_LEFT);
const gchar *titles[] = { "values" };
1998-11-25 02:01:09 +08:00
for (entry = ldap_first_entry(ld, result_identifier); entry != NULL; entry = ldap_next_entry(ld, result_identifier)) {
for (attribute = ldap_first_attribute(ld, entry, &ber); attribute != NULL; attribute = ldap_next_attribute(ld, entry, ber)) {
values = ldap_get_values(ld, entry, attribute);
1998-11-29 04:25:09 +08:00
if (strcasecmp(attribute, "objectclass") == 0) {
if (strcasecmp(values[0],"top") == 0)
this->objectClass = strdup(values[1]);
else this->objectClass = values[0];
}
table = new Gtk_CList(1, titles);
1998-11-25 02:01:09 +08:00
for (int i=0; i<ldap_count_values(values); i++) {
const gchar *t[] = { values[i] };
1998-11-25 02:01:09 +08:00
table->append(t);
}
ldap_value_free(values);
label = new Gtk_Label(attribute);
notebook->append_page(*table, *label);
1998-11-25 02:01:09 +08:00
table->show();
label->show();
}
}
1998-11-29 04:25:09 +08:00
this->setType(1);
// cout << ".";
1998-11-25 02:01:09 +08:00
return 0;
}
void Gtk_LdapTreeItem::select_impl() {
// cout << this->dn << " selected" << endl;
// 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;
sig->select(GTK_ITEM(gtkobj()));
1998-11-29 04:25:09 +08:00
this->showDetails();
1998-11-25 02:01:09 +08:00
}
1998-11-25 02:01:09 +08:00
void Gtk_LdapTreeItem::collapse_impl() {
// cout << this->dn << " collapsed" << endl;
1998-11-25 02:01:09 +08:00
Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
if (!sig->collapse) return;
sig->collapse(GTK_TREE_ITEM(gtkobj()));
// gtk_widget_hide(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
}
1998-11-25 02:01:09 +08:00
void Gtk_LdapTreeItem::expand_impl() {
// cout << this->dn << " expanded" << endl;
1998-11-25 02:01:09 +08:00
Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
if (!sig->expand) return;
sig->expand(GTK_TREE_ITEM(gtkobj()));
// Gtk_Tree *t;
// t = new Gtk_Tree(GTK_TREE(GTK_TREE_ITEM(this->gtkobj())->subtree));
// bool vis = t->visible();
// if (vis == false) {
// gtk_widget_show(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
// cout << this->dn << " expanded" << endl;
// }
// else {
// gtk_widget_hide(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
// cout << this->dn << " collapsed" << endl;
// }
}