mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-15 03:01:09 +08:00
new class files for gtk-tool
This commit is contained in:
parent
a093e98658
commit
41cac659fb
244
contrib/gtk-tool/Gtk_LdapServer.cc
Normal file
244
contrib/gtk-tool/Gtk_LdapServer.cc
Normal file
@ -0,0 +1,244 @@
|
||||
#include "Gtk_LdapServer.h"
|
||||
#include <gtk--/base.h>
|
||||
|
||||
Gtk_LdapServer::Gtk_LdapServer() : Gtk_TreeItem() {
|
||||
this->hostname = NULL;
|
||||
this->par = NULL;
|
||||
this->base_dn = NULL;
|
||||
this->port = 0;
|
||||
}
|
||||
|
||||
Gtk_LdapServer::Gtk_LdapServer(My_Window *w, char *h, int p) : Gtk_TreeItem() {
|
||||
this->par = w;
|
||||
this->hostname = h;
|
||||
this->port = p;
|
||||
cout << this->hostname << this->port << endl;
|
||||
this->getConfig();
|
||||
}
|
||||
|
||||
Gtk_LdapServer::Gtk_LdapServer(GtkTreeItem *t) : Gtk_TreeItem(t) {
|
||||
}
|
||||
|
||||
Gtk_LdapServer::~Gtk_LdapServer() {
|
||||
cout << "Bye" << endl;
|
||||
delete this;
|
||||
}
|
||||
|
||||
void Gtk_LdapServer::setType(int t) {
|
||||
cout << "Gtk_LdapServer::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();
|
||||
cout << this->hostname << endl;
|
||||
if (strcasecmp(this->hostname,"localhost") == 0)
|
||||
xpm_icon=new Gtk_Pixmap(*xpm_label, local_server);
|
||||
else xpm_icon=new Gtk_Pixmap(*xpm_label, remote_server);
|
||||
label = new Gtk_Label(this->hostname);
|
||||
xpm_label->pack_start(*xpm_icon, false, false, 1);
|
||||
xpm_label->pack_start(*label, false, false, 1);
|
||||
if (this->getchild() == NULL) this->add(xpm_label);
|
||||
label->show();
|
||||
xpm_label->show();
|
||||
xpm_icon->show();
|
||||
}
|
||||
|
||||
int Gtk_LdapServer::showDetails() {
|
||||
cout << "Gtk_LdapServer::showDetails()" << endl;
|
||||
this->getDetails();
|
||||
/*
|
||||
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_LdapServer::getConfig() {
|
||||
cout << "Gtk_LdapServer::getConfig()" << endl;
|
||||
int error, entriesCount;
|
||||
LDAPMessage *entry, *result_identifier;
|
||||
BerElement *ber;
|
||||
char *attribute, **t;
|
||||
|
||||
if ((this->ld = ldap_open(this->hostname, this->port)) == NULL) {
|
||||
perror("connection");
|
||||
}
|
||||
|
||||
error = ldap_search_s(this->ld, "cn=config", LDAP_SCOPE_BASE, "objectclass=*", NULL, 0, &result_identifier);
|
||||
entriesCount = ldap_count_entries(this->ld, result_identifier);
|
||||
if (entriesCount == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
cout << entriesCount << " entry" << endl;
|
||||
for (entry = ldap_first_entry(this->ld, result_identifier); entry != NULL; entry = ldap_next_entry(this->ld, result_identifier)) {
|
||||
for (attribute = ldap_first_attribute(this->ld, entry, &ber); attribute != NULL; attribute = ldap_next_attribute(this->ld, entry, ber)) {
|
||||
cout << "Attrib: " << attribute << endl;
|
||||
if (strcasecmp(attribute, "database") == 0) {
|
||||
cout << "have database here" << endl;
|
||||
this->databases = new G_List<char>;
|
||||
t = ldap_get_values(this->ld, entry, attribute);
|
||||
for (int i=0; i<ldap_count_values(t); i++) {
|
||||
this->databases->append(strdup(t[i]));
|
||||
}
|
||||
ldap_value_free(t);
|
||||
cout << "databases loaded" << endl;
|
||||
for (int i=0; i<this->databases->length(); i++) {
|
||||
cout << "database(" << i << ") " << this->databases->nth_data(i) << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
cout << "entry done" << endl;
|
||||
}
|
||||
// cout << "got " << entriesCount << " entries" << endl;
|
||||
return entriesCount;
|
||||
}
|
||||
|
||||
int Gtk_LdapServer::getDetails() {
|
||||
cout << "Gtk_LdapServer::getDetails()" << endl;
|
||||
Gtk_HBox *hbox;
|
||||
Gtk_VBox *vbox;
|
||||
Gtk_Label *label;
|
||||
Gtk_RadioButton *radio1, *radio2;
|
||||
char *val;
|
||||
int ival;
|
||||
|
||||
if (GTK_TREE_ITEM(this->gtkobj())->subtree == NULL) {
|
||||
this->getSubtree();
|
||||
}
|
||||
|
||||
/*
|
||||
cout << "getting ldap options";
|
||||
vbox = new Gtk_VBox();
|
||||
opt_util = new LdapOpts();
|
||||
|
||||
for (int i=0; i<sizeof(things); i++) {
|
||||
cout << i << endl;
|
||||
hbox = new Gtk_HBox();
|
||||
label = new Gtk_Label(LdapOpts->getOption(things[i]);
|
||||
hbox->pack_start(*label);
|
||||
label->show();
|
||||
int tipus = opt_util->getType(things[i]);
|
||||
switch (tipus) {
|
||||
case 0:
|
||||
ldap_get_option(NULL, things[i], &val);
|
||||
label = new Gtk_Label(val);
|
||||
break;
|
||||
case 1:
|
||||
ldap_get_option(NULL, numerals[i], &ival);
|
||||
sprintf(val, "%i", ival);
|
||||
label = new Gtk_Label(val);
|
||||
break;
|
||||
case 2:
|
||||
ldap_get_option(NULL, booleans[i], &ival);
|
||||
sprintf(val, "%s", ival == (int) LDAP_OPT_ON ? "on" : "off");
|
||||
label = new Gtk_Label(val);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
hbox->pack_start(*label);
|
||||
label->show();
|
||||
vbox->pack_start(*hbox);
|
||||
hbox->show();
|
||||
|
||||
}
|
||||
|
||||
vbox->border_width(2);
|
||||
this->notebook = new Gtk_Viewport();
|
||||
this->notebook->add(*vbox);
|
||||
vbox->show();
|
||||
*/
|
||||
this->setType(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Gtk_LdapServer::getSubtree() {
|
||||
cout << "Gtk_LdapServer::getSubtree()" << endl;
|
||||
Gtk_LdapItem *treeresult;
|
||||
Gtk_Tree *tree, *subtree;
|
||||
Gtk_LdapTreeItem *treeitem;
|
||||
int entries;
|
||||
|
||||
cout << "this->hostname=" << this->hostname << endl;
|
||||
cout << "this->port=" << this->port << endl;
|
||||
/* if ((this->ld = ldap_open(this->hostname, this->port)) == NULL) {
|
||||
perror("connection");
|
||||
}
|
||||
*/
|
||||
|
||||
char *c;
|
||||
char *tok;
|
||||
|
||||
int len = this->databases->length();
|
||||
cout << "this->databases->length()=" << len << endl;
|
||||
|
||||
tree = new Gtk_Tree();
|
||||
for (int i=0; i<len; i++) {
|
||||
tok = strdup(this->databases->nth_data(i));
|
||||
tok = strtok(tok, ":");
|
||||
c = strtok(NULL, "\0");
|
||||
cout << "database " << i << " " << c << endl;
|
||||
treeresult = this->par->make_tree(this->par, this->ld, c);
|
||||
treeitem = new Gtk_LdapTreeItem(*treeresult->treeitem);
|
||||
tree->append(*treeitem);
|
||||
if (treeresult->tree != NULL) {
|
||||
subtree = new Gtk_Tree(*treeresult->tree);
|
||||
treeitem->set_subtree(*subtree);
|
||||
}
|
||||
treeitem->show();
|
||||
// tree->show();
|
||||
}
|
||||
this->set_subtree(*tree);
|
||||
cout << "getTree() done" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Gtk_LdapServer::select_impl() {
|
||||
cout << this->hostname << " 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()));
|
||||
this->showDetails();
|
||||
}
|
||||
|
||||
void Gtk_LdapServer::collapse_impl() {
|
||||
// cout << this->dn << " collapsed" << endl;
|
||||
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)));
|
||||
}
|
||||
|
||||
void Gtk_LdapServer::expand_impl() {
|
||||
// cout << this->dn << " expanded" << endl;
|
||||
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;
|
||||
// }
|
||||
}
|
46
contrib/gtk-tool/Gtk_LdapServer.h
Normal file
46
contrib/gtk-tool/Gtk_LdapServer.h
Normal file
@ -0,0 +1,46 @@
|
||||
#ifndef GTK_LDAPSERVER_H
|
||||
#define GTK_LDAPSERVER_H
|
||||
#include "gtk.h"
|
||||
#include <My_Window.h>
|
||||
#include <LdapOpts.h>
|
||||
#include <Gtk_LdapItem.h>
|
||||
#include <Gtk_LdapTreeItem.h>
|
||||
#include <lber.h>
|
||||
#include <ldap.h>
|
||||
#include "icons/local_server.h"
|
||||
#include "icons/remote_server.h"
|
||||
|
||||
#define LOCAL_SERVER 1
|
||||
#define REMOTE_SERVER 2
|
||||
|
||||
class My_Window;
|
||||
|
||||
class Gtk_LdapServer : public Gtk_TreeItem {
|
||||
public:
|
||||
char *dn;
|
||||
char *hostname;
|
||||
LDAPMessage **thing;
|
||||
LDAP *ld;
|
||||
char *host;
|
||||
char *base_dn;
|
||||
int c, port;
|
||||
My_Window *par;
|
||||
// Gtk_Notebook *notebook;
|
||||
Gtk_Viewport *notebook;
|
||||
Gtk_HBox *xpm_label;
|
||||
// Gtk_Tree *subtree;
|
||||
G_List<char> *databases;
|
||||
Gtk_LdapServer();
|
||||
Gtk_LdapServer(My_Window *w, char *c, int p);
|
||||
Gtk_LdapServer(GtkTreeItem *t);
|
||||
~Gtk_LdapServer();
|
||||
void setType(int t);
|
||||
int getConfig();
|
||||
int getSubtree();
|
||||
int getDetails();
|
||||
int showDetails();
|
||||
void select_impl();
|
||||
void collapse_impl();
|
||||
void expand_impl();
|
||||
};
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user