Skip to content
Snippets Groups Projects
Commit 38cdb9e6 authored by Predrag "Pele" Balorda's avatar Predrag "Pele" Balorda
Browse files

gtk-tool updates

parent 9365ceab
No related branches found
No related tags found
No related merge requests found
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
......
......@@ -2,45 +2,66 @@
#include <gtk--/base.h>
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; i<ldap_count_values(values); i++) {
const gchar *t[] = { values[i] };
table->append(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() {
......
......@@ -5,6 +5,10 @@
#include <lber.h>
#include <ldap.h>
/*#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();
......
......@@ -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:
......
......@@ -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;
......
......@@ -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 *);
......
......@@ -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:
......
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment