From 38cdb9e6ba5de16b3c7fb44683eec76f33059633 Mon Sep 17 00:00:00 2001 From: "Predrag \"Pele\" Balorda" Date: Sat, 28 Nov 1998 20:25:09 +0000 Subject: [PATCH] gtk-tool updates --- contrib/gtk-tool/ChangeLog | 6 +++ contrib/gtk-tool/Gtk_LdapTreeItem.cc | 78 +++++++++++++++------------- contrib/gtk-tool/Gtk_LdapTreeItem.h | 7 +++ contrib/gtk-tool/Makefile | 2 +- contrib/gtk-tool/My_Window.cc | 11 +++- contrib/gtk-tool/My_Window.h | 1 + contrib/gtk-tool/TODO | 2 - contrib/gtk-tool/main.cc | 13 ++--- 8 files changed, 73 insertions(+), 47 deletions(-) diff --git a/contrib/gtk-tool/ChangeLog b/contrib/gtk-tool/ChangeLog index a002fc7edd..dbd38b36de 100644 --- a/contrib/gtk-tool/ChangeLog +++ b/contrib/gtk-tool/ChangeLog @@ -1,5 +1,11 @@ ChangeLog for gtk-tool +28/11/1998 - Pele + * Fixes, enhancements, started using ldap utility api + * It now traverses the whole tree at startup, not sure if it's smart + but I did it because of something that has no relevance to network + traffic + 27/11/1998 - Pele * Added viewports, both sides now scroll automatically * Brought back the "cache" stuff, now data gets reused if it's allready diff --git a/contrib/gtk-tool/Gtk_LdapTreeItem.cc b/contrib/gtk-tool/Gtk_LdapTreeItem.cc index 3556911453..7efcb58d6c 100644 --- a/contrib/gtk-tool/Gtk_LdapTreeItem.cc +++ b/contrib/gtk-tool/Gtk_LdapTreeItem.cc @@ -2,45 +2,66 @@ #include Gtk_LdapTreeItem::Gtk_LdapTreeItem() : Gtk_TreeItem() { + this->objectClass = NULL; } Gtk_LdapTreeItem::Gtk_LdapTreeItem(char *c, My_Window *w) : Gtk_TreeItem() { this->rdn = c; this->par = w; + this->objectClass = NULL; } Gtk_LdapTreeItem::Gtk_LdapTreeItem(GtkTreeItem *t) : Gtk_TreeItem(t) { } +Gtk_LdapTreeItem::~Gtk_LdapTreeItem() { + cout << "Bye" << endl; + delete this; +} + void Gtk_LdapTreeItem::setType(int t) { -// printf("Gtk_LdapTreeItem::setType(%d)\n", t); + cout << "Gtk_LdapTreeItem::setType(" << t << ")" << endl; Gtk_Pixmap *xpm_icon; Gtk_Label *label; if (this->getchild() != NULL) { - // printf("There's a label in here - removing"); 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)); - // xpm_label->remove_c(GTK_WIDGET(xpm_icon->gtkobj())); - // printf("done\n"); } else xpm_label = new Gtk_HBox(); - switch (t) { - case 1: xpm_icon = new Gtk_Pixmap(*xpm_label, "root_node.xpm"); break; - case 2: xpm_icon = new Gtk_Pixmap(*xpm_label, "branch_node.xpm"); break; - default: xpm_icon = new Gtk_Pixmap(*xpm_label, "leaf_node.xpm"); break; - } + 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); - xpm_icon->show(); + if (this->getchild() == NULL) this->add(xpm_label); label->show(); xpm_label->show(); - if (this->getchild() == NULL) this->add(xpm_label); - else printf("There's still a child here!\n"); + xpm_icon->show(); +} + +int Gtk_LdapTreeItem::showDetails() { + cout << "Gtk_LdapTreeItem::showDetails()" << endl; + 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(); } int Gtk_LdapTreeItem::getDetails() { + cout << "Gtk_LdapTreeItem::getDetails()" << endl; int error, entriesCount; BerElement *ber; LDAPMessage *entry; @@ -50,18 +71,6 @@ int Gtk_LdapTreeItem::getDetails() { GList *child_list; Gtk_Notebook *g; Gtk_Viewport *viewport; - viewport = new Gtk_Viewport(); - if (this->notebook != NULL) { - printf("Data on %s available\n", this->rdn); - if (par->viewport->getchild() != NULL) { - par->viewport->remove_c(par->viewport->getchild()->gtkobj()); - } - par->viewport->add(this->notebook); - this->notebook->show(); - par->viewport->show(); - // par->scroller2->show(); - return 0; - } 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; @@ -71,8 +80,13 @@ int Gtk_LdapTreeItem::getDetails() { 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)) { - table = new Gtk_CList(1, titles); values = ldap_get_values(ld, entry, attribute); + 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); for (int i=0; iappend(t); @@ -84,16 +98,8 @@ int Gtk_LdapTreeItem::getDetails() { label->show(); } } - if (par->scroller2 != 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(); - // par->scroller2->show(); - cout << "Added details for " << this->rdn << endl; - } + this->setType(1); + cout << "."; return 0; } void Gtk_LdapTreeItem::select_impl() { @@ -102,7 +108,7 @@ void Gtk_LdapTreeItem::select_impl() { Gtk_c_signals_Item *sig=(Gtk_c_signals_Item *)internal_getsignalbase(); if (!sig->select) return; sig->select(GTK_ITEM(gtkobj())); - this->getDetails(); + this->showDetails(); } void Gtk_LdapTreeItem::collapse_impl() { diff --git a/contrib/gtk-tool/Gtk_LdapTreeItem.h b/contrib/gtk-tool/Gtk_LdapTreeItem.h index ab7e562f09..ee8f711a1e 100644 --- a/contrib/gtk-tool/Gtk_LdapTreeItem.h +++ b/contrib/gtk-tool/Gtk_LdapTreeItem.h @@ -5,6 +5,10 @@ #include #include /*#include "XPMLabelBox.h"*/ +#include "icons/root_node.h" +#include "icons/branch_node.h" +#include "icons/leaf_node.h" +#include "icons/general_node.h" #define ROOT_NODE 1 #define BRANCH_NODE 2 @@ -16,6 +20,7 @@ class Gtk_LdapTreeItem : public Gtk_TreeItem { public: char *dn; char *rdn; + char *objectClass; LDAP *ld; LDAPMessage *result_identifier; My_Window *par; @@ -24,8 +29,10 @@ public: Gtk_LdapTreeItem(); Gtk_LdapTreeItem(char *c, My_Window *w); Gtk_LdapTreeItem(GtkTreeItem *t); + ~Gtk_LdapTreeItem(); void setType(int t); int getDetails(); + int showDetails(); void select_impl(); void collapse_impl(); void expand_impl(); diff --git a/contrib/gtk-tool/Makefile b/contrib/gtk-tool/Makefile index db8f5d7dc5..65a52f157f 100644 --- a/contrib/gtk-tool/Makefile +++ b/contrib/gtk-tool/Makefile @@ -3,7 +3,7 @@ CC= gcc CPLUS= g++ OPTS=-g -DmyDEBUG INCLUDES=`gtkmm-config --cflags` -I. -LDFLAGS=`gtkmm-config --libs` -L/usr/lib -L/usr/X11/lib -L/usr/local/gnome/lib -L/usr/local/ldap/lib -lldap -llber +LDFLAGS=`gtkmm-config --libs` -L/usr/lib -L/usr/X11/lib -L/usr/local/gnome/lib -L/usr/local/ldap/lib -lldap -llber -L/usr/local/kerberos/lib -lkrb5 -lkrb4 LIBS=-lXext -lgtkmm -lX11 -lXt -lXxf86dga .EXPORT_ALL_VARIABLES: diff --git a/contrib/gtk-tool/My_Window.cc b/contrib/gtk-tool/My_Window.cc index 9e07dc89a6..6fbe8c45c9 100644 --- a/contrib/gtk-tool/My_Window.cc +++ b/contrib/gtk-tool/My_Window.cc @@ -37,6 +37,12 @@ My_Window::My_Window(GtkWindowType t) : Gtk_Window(t) { this->add(main_hbox); main_hbox->show(); } + +My_Window::~My_Window() { + cout << "~My_Window()" << endl; + delete this; +} + void My_Window::do_display() { cout << this->urlfield->get_text() << endl; } @@ -75,8 +81,9 @@ Gtk_LdapItem* My_Window::make_tree(My_Window *p, LDAP* l_i, char* b_d) { treeitem = new Gtk_LdapTreeItem(c, p); treeitem->dn = b_d; treeitem->ld = l_i; treeresult = new Gtk_LdapItem(); + treeitem->getDetails(); if (entriesCount == 0) { - treeitem->setType(LEAF_NODE); + // treeitem->setType(LEAF_NODE); treeresult->treeitem = new Gtk_LdapTreeItem(*treeitem); treeresult->tree = NULL; return treeresult; @@ -103,7 +110,7 @@ Gtk_LdapItem* My_Window::make_tree(My_Window *p, LDAP* l_i, char* b_d) { // printf("\n"); entry = ldap_next_entry(l_i, entry); } - treeitem->setType(BRANCH_NODE); +// treeitem->setType(BRANCH_NODE); treeresult->treeitem = new Gtk_LdapTreeItem(*treeitem); treeresult->tree = new Gtk_Tree(*subtree); return treeresult; diff --git a/contrib/gtk-tool/My_Window.h b/contrib/gtk-tool/My_Window.h index 7cf29a0f47..f39091ef0a 100644 --- a/contrib/gtk-tool/My_Window.h +++ b/contrib/gtk-tool/My_Window.h @@ -20,6 +20,7 @@ public: Gtk_Button *display_button; Gtk_Paned *pane; My_Window(GtkWindowType t); + ~My_Window(); void do_display(); void expand(Gtk_TreeItem *t); gint delete_event_impl(GdkEventAny *); diff --git a/contrib/gtk-tool/TODO b/contrib/gtk-tool/TODO index fd144406b0..c8aebd7057 100644 --- a/contrib/gtk-tool/TODO +++ b/contrib/gtk-tool/TODO @@ -3,8 +3,6 @@ LOADS!!! Priorities: Make it useful! Implement searches - Some sort of config-file parsing (not new files, but existing - slapd-config stuff) port to autoconf (anyone? it should be easy) Optional: diff --git a/contrib/gtk-tool/main.cc b/contrib/gtk-tool/main.cc index 022fac6d81..44c8e41aa5 100644 --- a/contrib/gtk-tool/main.cc +++ b/contrib/gtk-tool/main.cc @@ -33,8 +33,10 @@ int main(int argc, char **argv) { } } +// if (base_dn == NULL) base_dn = ldap_get_option(NULL, LDAP_OPT_BASE); if (base_dn == NULL) base_dn = "o=University of Michigan, c=US"; - if (host == NULL) host = "localhost"; + if (host == NULL) ldap_get_option(NULL, LDAP_OPT_HOST_NAME, host); + //host = "localhost"; if (port == 0) port = LDAP_PORT; Gtk_Main m(&argc, &argv); @@ -48,13 +50,11 @@ int main(int argc, char **argv) { tree = new Gtk_Tree(); treeresult = window->make_tree(window, ld, base_dn); treeitem = new Gtk_LdapTreeItem(*treeresult->treeitem); -// treeitem->remove_c(treeitem->getchild()->gtkobj()); -// gtk_widget_destroy(GTK_WIDGET(treeitem->xpm_label->gtkobj())); - treeresult->treeitem->setType(ROOT_NODE); +// treeresult->treeitem->setType(ROOT_NODE); tree->append(*treeitem); if (treeresult->tree != NULL) { subtree = new Gtk_Tree(*treeresult->tree); - printf("inserting %s into root\n", base_dn); + // cout << "Inserting " << base_dn << " into root" << endl; treeitem->set_subtree(*subtree); } treeitem->show(); @@ -64,7 +64,8 @@ int main(int argc, char **argv) { tree->show(); viewport->show(); window->scroller->show(); - treeitem->getDetails(); + treeitem->showDetails(); +// treeitem->select(); window->set_title("Hello"); window->activate(); -- 2.39.5