/* GnoSamba 0.3.3
* copyright 1998-9 Perry Piplani
* redistributable under the terms of the GPL:
* http://www.gnu.org/copyleft/gpl.html
*/
#include <gtk/gtk.h>
#include <strings.h>
#include "gtksamba.h"
#include "../pix/share.xpm"
#include "../pix/delshare.xpm"
#include "../pix/delete.xpm"
#include "../pix/exit.xpm"
#include "../pix/new.xpm"
#include "../pix/open.xpm"
#include "../pix/edit.xpm"
#include "../pix/save.xpm"
#include "../pix/samba.xpm"
void get_user_list(GtkWidget *combo){
FILE *passwd;
GList *list=NULL;
char buff[1024], *s;
if( (passwd=fopen("/etc/passwd","r")) == NULL)
return;
while(fgets(buff,1024,passwd)){
s=strtok(buff,":");
if(strcmp(s,"root"))
list=g_list_append(list,g_strdup(s));
}
fclose(passwd);
if(list){
gtk_combo_set_popdown_strings (GTK_COMBO (combo), list);
gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry),"");
}
while(list){
g_free(list->data);
list=g_list_remove_link(list,list);
}
return;
}
void get_group_list(GtkWidget *combo){
FILE *passwd;
GList *list=NULL;
char buff[1024],s[34];
if( (passwd=fopen("/etc/group","r")) == NULL)
return;
s[0]='@';
while(fgets(buff,1024,passwd)){
strncpy(s+1,strtok(buff,":"),32);
if(strcmp(s,"@root"))
list=g_list_append(list,g_strdup(s));
}
fclose(passwd);
if(list){
gtk_combo_set_popdown_strings (GTK_COMBO (combo), list);
gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry),"");
}
while(list){
g_free(list->data);
list=g_list_remove_link(list,list);
}
return;
}
void c_button_list_add(GtkWidget *button, gpointer clist){
GtkWidget *entry;
gchar *text;
int row;
entry=gtk_object_get_data(GTK_OBJECT(button),"entry");
text=gtk_entry_get_text(GTK_ENTRY(entry));
if(GTK_CLIST(clist)->selection){
row = (int)(GTK_CLIST(clist)->selection->data);
gtk_clist_insert(GTK_CLIST(clist),row+1,&text);
}
else
gtk_clist_insert(GTK_CLIST(clist),0,&text);
}
void c_button_list_rem(GtkWidget *button, gpointer clist){
int row;
if(GTK_CLIST(clist)->selection){
row = (int)(GTK_CLIST(clist)->selection->data);
gtk_clist_remove(GTK_CLIST(clist),row);
}
return;
}
void c_button_list_clr(GtkWidget *button, gpointer clist){
gtk_clist_clear(GTK_CLIST(clist));
return;
}
void c_toggle_insensitive(GtkWidget *toggle,gpointer widget){
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle)))
gtk_widget_set_sensitive(GTK_WIDGET(widget),FALSE);
else
gtk_widget_set_sensitive(GTK_WIDGET(widget),TRUE);
return;
}
void c_choice_insensitive_one(GtkWidget *choicebox, gpointer widget){
int index;
index=gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox));
if(index==1)
gtk_widget_set_sensitive(GTK_WIDGET(widget),FALSE);
else
gtk_widget_set_sensitive(GTK_WIDGET(widget),TRUE);
return;
}
void c_choice_insensitive_two(GtkWidget *choicebox, gpointer widget){
int index;
index=gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox));
if(index==2)
gtk_widget_set_sensitive(GTK_WIDGET(widget),FALSE);
else
gtk_widget_set_sensitive(GTK_WIDGET(widget),TRUE);
return;
}
void handle_sensitivity(GtkWidget *mguru){
switch(gnome_mguru_get_page(GNOME_MGURU(mguru))){
case 0:
gnome_mguru_set_state(GNOME_MGURU(mguru),
GNOME_MGURU_START);
break;
case 8:
gnome_mguru_set_state(GNOME_MGURU(mguru),
GNOME_MGURU_LAST);
break;
default:
gnome_mguru_set_state(GNOME_MGURU(mguru),
GNOME_MGURU_MIDDLE);
}
}
int is_oct_string(char *s){
char *p;
for(p=s;*p && is_oct(*p); p++);
if(*p)
return 0;
else
return 1;
}
int is_dig_string(char *s){
char *p;
for(p=s;*p && isdigit(*p); p++);
if(*p)
return 0;
else
return 1;
}
void insert_service_modify_check(GtkWidget *mguru,GtkWidget *window){
GtkWidget *entry;
GtkWidget *servicelist;
gchar *text, *name;
int j;
servicelist=gtk_object_get_data(GTK_OBJECT(window),"servicelist");
entry=gtk_object_get_data(GTK_OBJECT(mguru),"name_entry");
name=gtk_entry_get_text(GTK_ENTRY(entry));
for(j=0; j < GTK_CLIST(servicelist)->rows; j++){
gtk_clist_get_text(GTK_CLIST(servicelist),
j,0,&text);
if(!strcasecmp(text,name)){
gtk_clist_select_row(GTK_CLIST(servicelist),j,0);
gtk_object_set_data(GTK_OBJECT(mguru),
"modify",GINT_TO_POINTER(1));
return;
}
}
gtk_object_set_data(GTK_OBJECT(mguru),
"modify",GINT_TO_POINTER(0));
return;
}
char *make_string_list(GtkWidget *clist){
char *list, *text;
int j, len;
int blocks=1;
list=g_malloc(1024);
list[0]='\0';
len=1;
for(j=0; j < GTK_CLIST(clist)->rows; j++){
gtk_clist_get_text(GTK_CLIST(clist),
j,0,&text);
len=len+strlen(text)+2;
if(len > 1024*blocks)
list=g_realloc(list,(++blocks)*1024);
if(j)
strcat(list,", ");
strcat(list,text);
}
if(strlen(list))
return list;
g_free(list);
return NULL;
}
void mguru_make_service(GtkWidget *mguru,GtkWidget *window){
GtkWidget *entry;
GtkWidget *sublist;
gchar *text;
gchar *pair[2];
GtkWidget *choicebox1, *choicebox2;
int index1, index2;
GtkWidget *clist;
GtkWidget *checkbutton;
index1=GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(mguru),
"modify"));
if(index1)
smbwin_delete_service(window);
entry=gtk_object_get_data(GTK_OBJECT(mguru),"name_entry");
text=gtk_entry_get_text(GTK_ENTRY(entry));
smbwin_insert_service(text,window);
sublist=gtk_object_get_data(GTK_OBJECT(window),"sublist");
entry=gtk_object_get_data(GTK_OBJECT(mguru),"comment_entry");
if(GTK_ENTRY(entry)->text_length){
pair[1]=gtk_entry_get_text(GTK_ENTRY(entry));
pair[0]=g_strdup("comment");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
}
entry=gtk_object_get_data(GTK_OBJECT(mguru),"path_entry");
if(GTK_ENTRY(entry)->text_length){
pair[1]=gtk_entry_get_text(GTK_ENTRY(entry));
pair[0]=g_strdup("path");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
}
choicebox1=gtk_object_get_data(GTK_OBJECT(mguru),"users_choice");
index1=gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox1));
choicebox2=gtk_object_get_data(GTK_OBJECT(mguru),"guest_choice");
index2=gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox2));
if(index2 != 2){
pair[0]=g_strdup("guest ok");
pair[1]=g_strdup("yes");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
entry=gtk_object_get_data(GTK_OBJECT(mguru),"guest_account_entry");
if(GTK_ENTRY(entry)->text_length){
pair[1]=gtk_entry_get_text(GTK_ENTRY(entry));
pair[0]=g_strdup("guest_account");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
}
}
if(index2 == 1){
pair[0]=g_strdup("guest only");
pair[1]=g_strdup("yes");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
}
if(index1 == 1 && index2 !=1){
clist=gtk_object_get_data(GTK_OBJECT(mguru),"valid_users_list");
pair[1]=make_string_list(clist);
if(pair[1]){
pair[0]=g_strdup("valid users");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
}
clist=gtk_object_get_data(GTK_OBJECT(mguru),"invalid_users_list");
pair[1]=make_string_list(clist);
if(pair[1]){
pair[0]=g_strdup("invalid users");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
}
}
checkbutton=gtk_object_get_data(GTK_OBJECT(mguru),"all_hosts_toggle");
if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton))){
clist=gtk_object_get_data(GTK_OBJECT(mguru),"hosts_allow_list");
pair[1]=make_string_list(clist);
if(pair[1]){
pair[0]=g_strdup("hosts allow");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
}
clist=gtk_object_get_data(GTK_OBJECT(mguru),"hosts_deny_list");
pair[1]=make_string_list(clist);
if(pair[1]){
pair[0]=g_strdup("hosts deny");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
}
}
choicebox1=gtk_object_get_data(GTK_OBJECT(mguru),"read_write_choice");
index1=gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox1));
pair[0]=g_strdup("writeable");
if(index1 < 2)
pair[1]=g_strdup("no");
else
pair[1]=g_strdup("yes");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
if(index1 == 1 || index2 == 2){
clist=gtk_object_get_data(GTK_OBJECT(mguru),"read_list");
pair[1]=make_string_list(clist);
if(pair[1]){
pair[0]=g_strdup("read list");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
}
clist=gtk_object_get_data(GTK_OBJECT(mguru),"write_list");
pair[1]=make_string_list(clist);
if(pair[1]){
pair[0]=g_strdup("write list");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
}
}
entry=gtk_object_get_data(GTK_OBJECT(mguru),"file_create_entry");
if(GTK_ENTRY(entry)->text_length){
pair[1]=gtk_entry_get_text(GTK_ENTRY(entry));
pair[0]=g_strdup("create mask");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
}
entry=gtk_object_get_data(GTK_OBJECT(mguru),"force_create_entry");
if(GTK_ENTRY(entry)->text_length){
pair[1]=gtk_entry_get_text(GTK_ENTRY(entry));
pair[0]=g_strdup("force create mode");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
}
entry=gtk_object_get_data(GTK_OBJECT(mguru),"directory_create_entry");
if(GTK_ENTRY(entry)->text_length){
pair[1]=gtk_entry_get_text(GTK_ENTRY(entry));
pair[0]=g_strdup("directory mask");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
}
entry=gtk_object_get_data(GTK_OBJECT(mguru),"force_directory_entry");
if(GTK_ENTRY(entry)->text_length){
pair[1]=gtk_entry_get_text(GTK_ENTRY(entry));
pair[0]=g_strdup("force directory mode");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
}
checkbutton=gtk_object_get_data(GTK_OBJECT(mguru),"browseable_toggle");
if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton))){
pair[0]=g_strdup("browseable");
pair[1]=g_strdup("no");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
}
checkbutton=gtk_object_get_data(GTK_OBJECT(mguru),"hide_dot_toggle");
if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton))){
pair[0]=g_strdup("hide dot files");
pair[1]=g_strdup("no");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
g_free(pair[1]);
}
entry=gtk_object_get_data(GTK_OBJECT(mguru),"max_connect_entry");
if(GTK_ENTRY(entry)->text_length){
pair[1]=gtk_entry_get_text(GTK_ENTRY(entry));
pair[0]=g_strdup("max connections");
gtk_clist_append(GTK_CLIST(sublist),pair);
g_free(pair[0]);
}
return;
}
void c_service_mguru_button(GtkWidget *mguru,
gint page,
gint button,
gpointer window){
GtkWidget *entry;
GtkWidget *choicebox1, *choicebox2;
int index;
GtkWidget *dialog;
switch(button){
case 0:
dialog=gtk_object_get_data(GTK_OBJECT(mguru),"dialog");
make_user_mesg("New service cancelled.","Information");
gtk_widget_destroy(GTK_WIDGET(dialog));
resensitize_sw(GTK_WIDGET(window));
break;
case 1:
if(page==1)
gnome_mguru_set_page(GNOME_MGURU(mguru),0);
else if(page==2)
gnome_mguru_set_page(GNOME_MGURU(mguru),1);
else if(page==3)
gnome_mguru_set_page(GNOME_MGURU(mguru),2);
else if(page==4){
choicebox1=gtk_object_get_data(GTK_OBJECT(mguru),"users_choice");
choicebox2=gtk_object_get_data(GTK_OBJECT(mguru),"guest_choice");
if(gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox1))==0 ||
gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox2))==1)
gnome_mguru_set_page(GNOME_MGURU(mguru),2);
else
gnome_mguru_set_page(GNOME_MGURU(mguru),3);
}
else if(page==5)
gnome_mguru_set_page(GNOME_MGURU(mguru),4);
else if(page==6)
gnome_mguru_set_page(GNOME_MGURU(mguru),5);
else if(page==7){
choicebox1=gtk_object_get_data(GTK_OBJECT(mguru),"read_write_choice");
index=gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox1));
if( index==0 || index==3 )
gnome_mguru_set_page(GNOME_MGURU(mguru),5);
else
gnome_mguru_set_page(GNOME_MGURU(mguru),6);
}
else if(page==8)
gnome_mguru_set_page(GNOME_MGURU(mguru),7);
handle_sensitivity(mguru);
break;
case 2:
if(page==0){
entry=gtk_object_get_data(GTK_OBJECT(mguru),"name_entry");
if(!(GTK_ENTRY(entry)->text_length))
make_user_mesg("Enter the service name!","Warning");
else{
insert_service_modify_check(mguru,window);
gnome_mguru_set_page(GNOME_MGURU(mguru),1);
}
}
else if(page==1){
entry=gtk_object_get_data(GTK_OBJECT(mguru),"path_entry");
if(!(GTK_ENTRY(entry)->text_length))
make_user_mesg("Enter a path to share!","Warning");
else
gnome_mguru_set_page(GNOME_MGURU(mguru),2);
}
else if(page==2){
choicebox1=gtk_object_get_data(GTK_OBJECT(mguru),"users_choice");
choicebox2=gtk_object_get_data(GTK_OBJECT(mguru),"guest_choice");
if(gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox1))==0 ||
gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox2))==1)
gnome_mguru_set_page(GNOME_MGURU(mguru),4);
else
gnome_mguru_set_page(GNOME_MGURU(mguru),3);
}
else if(page==3)
gnome_mguru_set_page(GNOME_MGURU(mguru),4);
else if(page==4)
gnome_mguru_set_page(GNOME_MGURU(mguru),5);
else if(page==5){
choicebox1=gtk_object_get_data(GTK_OBJECT(mguru),"read_write_choice");
index=gnome_choice_box_get_index(GNOME_CHOICE_BOX(choicebox1));
if( index==0 || index==3 )
gnome_mguru_set_page(GNOME_MGURU(mguru),7);
else
gnome_mguru_set_page(GNOME_MGURU(mguru),6);
}
else if(page==6)
gnome_mguru_set_page(GNOME_MGURU(mguru),7);
else if(page==7){
index=0;
entry=gtk_object_get_data(GTK_OBJECT(mguru),"file_create_entry");
if(GTK_ENTRY(entry)->text_length)
if(!is_oct_string(gtk_entry_get_text(GTK_ENTRY(entry))))
index=1;
entry=gtk_object_get_data(GTK_OBJECT(mguru),"force_create_entry");
if(GTK_ENTRY(entry)->text_length)
if(!is_oct_string(gtk_entry_get_text(GTK_ENTRY(entry))))
index=1;
entry=gtk_object_get_data(GTK_OBJECT(mguru),"directory_create_entry");
if(GTK_ENTRY(entry)->text_length)
if(!is_oct_string(gtk_entry_get_text(GTK_ENTRY(entry))))
index=1;
entry=gtk_object_get_data(GTK_OBJECT(mguru),"force_directory_entry");
if(GTK_ENTRY(entry)->text_length)
if(!is_oct_string(gtk_entry_get_text(GTK_ENTRY(entry))))
index=1;
if(index)
make_user_mesg("Enter octal values or leave blank","Warning");
else
gnome_mguru_set_page(GNOME_MGURU(mguru),8);
}
handle_sensitivity(mguru);
break;
case 3:
entry=gtk_object_get_data(GTK_OBJECT(mguru),"max_connect_entry");
if(GTK_ENTRY(entry)->text_length)
if(!is_dig_string(gtk_entry_get_text(GTK_ENTRY(entry)))){
make_user_mesg("Enter integer value or leave blank","Warning");
return;
}
mguru_make_service(mguru,GTK_WIDGET(window));
dialog=gtk_object_get_data(GTK_OBJECT(mguru),"dialog");
make_user_mesg("New service created","Information");
gtk_widget_destroy(GTK_WIDGET(dialog));
resensitize_sw(GTK_WIDGET(window));
}
return;
}
GtkWidget *service_guru_page_one(GtkWidget *guru, GtkWidget *window){
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *combo;
GList *services=NULL;
int j;
gchar *text;
GtkWidget *servicelist;
servicelist=gtk_object_get_data(GTK_OBJECT(window),"servicelist");
vbox=gtk_vbox_new(TRUE,0);
label = gtk_label_new("Enter a new service name or\n choose and existing one");
gtk_box_pack_start (GTK_BOX (vbox),
label, TRUE, TRUE, 10);
gtk_widget_show (label);
label = gtk_label_new
("Note: this will overwrite an\nexisting service. Future versions\n will allow you to modify a service.");
gtk_box_pack_start (GTK_BOX (vbox),
label, TRUE, TRUE, 10);
gtk_widget_show (label);
for(j=0; j < GTK_CLIST(servicelist)->rows; j++){
gtk_clist_get_text(GTK_CLIST(servicelist),
j,0,&text);
if(strcasecmp(text,"global") &&
strcasecmp(text,"printers") &&
strcasecmp(text,"homes"))
services=g_list_append(services,text);
}
combo=gtk_combo_new ();
if(services)
gtk_combo_set_popdown_strings (GTK_COMBO (combo), services);
gtk_box_pack_start (GTK_BOX (vbox),
combo, TRUE, TRUE, 10);
gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry),"");
gtk_widget_show (combo);
gtk_object_set_data(GTK_OBJECT(guru),"name_entry",
GTK_COMBO(combo)->entry);
while(services){
services=g_list_remove_link(services,services);
}
return vbox;
}
GtkWidget *service_guru_page_two(GtkWidget *guru){
GtkWidget *table;
GtkWidget *label;
GtkWidget *path_entry;
GtkWidget *comment_entry;
table=gtk_table_new (2, 3, TRUE);
label = gtk_label_new("Comment:");
gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,0,1);
gtk_widget_show (label);
comment_entry=gnome_entry_new("comment entry");
gtk_table_attach_defaults(GTK_TABLE(table),comment_entry,1,3,0,1);
gtk_widget_show (comment_entry);
gtk_object_set_data(GTK_OBJECT(guru),"comment_entry",
gnome_entry_gtk_entry(GNOME_ENTRY(comment_entry)));
label = gtk_label_new("Path:");
gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,1,2);
gtk_widget_show (label);
path_entry=gnome_file_entry_new("path entry",
"Path to be served");
gtk_table_attach(GTK_TABLE(table),path_entry,1,3,1,2,
GTK_FILL | GTK_EXPAND,
GTK_EXPAND,0,0);
gtk_widget_show (path_entry);
gtk_object_set_data(GTK_OBJECT(guru),"path_entry",
gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(path_entry)));
return table;
}
GtkWidget *service_guru_page_three(GtkWidget *guru){
GtkWidget *vbox;
GtkWidget *separator;
GtkWidget *choicebox1, *choicebox2;
GtkWidget *combo;
GtkWidget *label;
GtkWidget *hbox;
vbox=gtk_vbox_new(FALSE,0);
choicebox1=gnome_choice_box_new(CHOICE_BOX_VV,NULL,
"Allow all users",
"Select valid and invalid users",
NULL);
gtk_box_pack_start (GTK_BOX (vbox),
choicebox1, TRUE, TRUE, 0);
gnome_choice_box_set_index(GNOME_CHOICE_BOX(choicebox1),1);
gtk_widget_show (choicebox1);
gtk_object_set_data(GTK_OBJECT(guru),"users_choice",choicebox1);
separator = gtk_hseparator_new ();
gtk_box_pack_start (GTK_BOX (vbox),
separator, TRUE, TRUE, 0);
gtk_widget_show (separator);
choicebox2=gnome_choice_box_new(CHOICE_BOX_VV,NULL,
"Allow guest access",
"Allow only guest access",
"Do not allow guest access",
NULL);
gtk_box_pack_start (GTK_BOX (vbox),
choicebox2, TRUE, TRUE, 0);
gnome_choice_box_set_index(GNOME_CHOICE_BOX(choicebox2),2);
gtk_widget_show (choicebox2);
gtk_object_set_data(GTK_OBJECT(guru),"guest_choice",choicebox2);
hbox=gtk_hbox_new(FALSE,0);
gtk_box_pack_start (GTK_BOX (vbox),
hbox, TRUE, TRUE, 0);
gtk_widget_show (hbox);
label = gtk_label_new("Account for guest access:");
gtk_box_pack_start (GTK_BOX (hbox),
label, TRUE, TRUE, 10);
gtk_widget_show (label);
combo=gtk_combo_new ();
get_user_list(combo);
gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry),"nobody");
gtk_box_pack_start (GTK_BOX (hbox),
combo, TRUE, TRUE, 10);
gtk_widget_show (combo);
gtk_object_set_data(GTK_OBJECT(guru),"guest_account_entry",
GTK_COMBO(combo)->entry);
gtk_signal_connect(GTK_OBJECT(choicebox2),"choice_made",
c_choice_insensitive_one,choicebox1);
gtk_signal_connect(GTK_OBJECT(choicebox2),"choice_made",
c_choice_insensitive_two,hbox);
return vbox;
}
GtkWidget *service_guru_page_four(GtkWidget *guru){
GtkWidget *table;
GtkWidget *button;
GtkWidget *gcombo, *ucombo;
GtkWidget *label;
GtkWidget *scrolled;
GtkWidget *clist_allow;
GtkWidget *clist_deny;
char *valid_users[1] = {
"valid users"
};
char *invalid_users[1] = {
"invalid users"
};
table=gtk_table_new(8,4,TRUE);
gtk_table_set_col_spacings(GTK_TABLE(table),5);
gtk_table_set_row_spacings(GTK_TABLE(table),5);
clist_allow=gtk_clist_new_with_titles( 1,valid_users );
gtk_clist_set_selection_mode(GTK_CLIST(clist_allow),
GTK_SELECTION_BROWSE);
scrolled=gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_table_attach_defaults(GTK_TABLE(table),scrolled,0,1,0,8);
gtk_widget_show (scrolled);
gtk_container_add(GTK_CONTAINER(scrolled),clist_allow);
gtk_widget_show (clist_allow);
gtk_object_set_data(GTK_OBJECT(guru),"valid_users_list",
clist_allow);
ucombo=gtk_combo_new ();
get_user_list(ucombo);
gtk_table_attach_defaults(GTK_TABLE(table),ucombo,1,3,1,2);
gtk_widget_show (ucombo);
gcombo=gtk_combo_new ();
get_group_list(gcombo);
gtk_table_attach_defaults(GTK_TABLE(table),gcombo,1,3,4,5);
gtk_widget_show (gcombo);
clist_deny=gtk_clist_new_with_titles( 1,invalid_users );
gtk_clist_set_selection_mode(GTK_CLIST(clist_deny),
GTK_SELECTION_BROWSE);
scrolled=gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_table_attach_defaults(GTK_TABLE(table),scrolled,3,4,0,8);
gtk_widget_show (scrolled);
gtk_container_add(GTK_CONTAINER(scrolled),clist_deny);
gtk_widget_show (clist_deny);
gtk_object_set_data(GTK_OBJECT(guru),"invalid_users_list",
clist_deny);
button=gtk_button_new_with_label(">>> ");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,6,7);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_rem,clist_allow);
button=gtk_button_new_with_label("<--Clear");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,7,8);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_clr,clist_allow);
label = gtk_label_new("Users:");
gtk_table_attach_defaults(GTK_TABLE(table),label,1,3,0,1);
gtk_widget_show (label);
button=gtk_button_new_with_label("<<< ");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,2,3);
gtk_widget_show (button);
gtk_object_set_data(GTK_OBJECT(button),"entry",
GTK_COMBO(ucombo)->entry);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_add,clist_allow);
label = gtk_label_new("Groups:");
gtk_table_attach_defaults(GTK_TABLE(table),label,1,3,3,4);
gtk_widget_show (label);
button=gtk_button_new_with_label("<<< ");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,5,6);
gtk_widget_show (button);
gtk_object_set_data(GTK_OBJECT(button),"entry",
GTK_COMBO(gcombo)->entry);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_add,clist_allow);
button=gtk_button_new_with_label(" >>>");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,2,3);
gtk_widget_show (button);
gtk_object_set_data(GTK_OBJECT(button),"entry",
GTK_COMBO(ucombo)->entry);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_add,clist_deny);
button=gtk_button_new_with_label(" >>>");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,5,6);
gtk_widget_show (button);
gtk_object_set_data(GTK_OBJECT(button),"entry",
GTK_COMBO(gcombo)->entry);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_add,clist_deny);
button=gtk_button_new_with_label(" <<<");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,6,7);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_rem,clist_deny);
button=gtk_button_new_with_label("Clear-->");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,7,8);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_clr,clist_deny);
return table;
}
GtkWidget *service_guru_page_five(GtkWidget *guru){
GtkWidget *vbox;
GtkWidget *checkbutton;
GtkWidget *table;
GtkWidget *button;
GtkWidget *hostlist;
GtkWidget *label;
GtkWidget *scrolled;
GtkWidget *clist_allow;
GtkWidget *clist_deny;
char *valid_hosts[1] = {
"valid hosts"
};
char *invalid_hosts[1] = {
"invalid hosts"
};
vbox=gtk_vbox_new(FALSE,0);
checkbutton=gtk_check_button_new_with_label("Allow all hosts");
gtk_box_pack_start (GTK_BOX (vbox),
checkbutton, TRUE, TRUE, 10);
gtk_widget_show (checkbutton);
gtk_object_set_data(GTK_OBJECT(guru),"all_hosts_toggle",
checkbutton);
table=gtk_table_new(6,4,TRUE);
gtk_table_set_row_spacings(GTK_TABLE(table),5);
gtk_table_set_col_spacings(GTK_TABLE(table),5);
clist_allow=gtk_clist_new_with_titles( 1,valid_hosts );
gtk_clist_set_selection_mode(GTK_CLIST(clist_allow),
GTK_SELECTION_BROWSE);
scrolled=gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_table_attach_defaults(GTK_TABLE(table),scrolled,0,1,0,6);
gtk_widget_show (scrolled);
gtk_container_add(GTK_CONTAINER(scrolled),clist_allow);
gtk_widget_show (clist_allow);
gtk_object_set_data(GTK_OBJECT(guru),"hosts_allow_list",
clist_allow);
clist_deny=gtk_clist_new_with_titles( 1,invalid_hosts );
gtk_clist_set_selection_mode(GTK_CLIST(clist_deny),
GTK_SELECTION_BROWSE);
scrolled=gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_table_attach_defaults(GTK_TABLE(table),scrolled,3,4,0,6);
gtk_widget_show (scrolled);
gtk_container_add(GTK_CONTAINER(scrolled),clist_deny);
gtk_widget_show (clist_deny);
gtk_object_set_data(GTK_OBJECT(guru),"hosts_deny_list",
clist_deny);
hostlist=gnome_entry_new("host list");
gtk_table_attach_defaults(GTK_TABLE(table),hostlist,1,3,1,2);
gtk_widget_show (hostlist);
button=gtk_button_new_with_label(">>> ");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,4,5);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_rem,clist_allow);
button=gtk_button_new_with_label("<--Clear");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,5,6);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_clr,clist_allow);
label = gtk_label_new("Hostnames or IP addresses");
gtk_table_attach_defaults(GTK_TABLE(table),label,1,3,0,1);
gtk_widget_show (label);
button=gtk_button_new_with_label("<<< ");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,2,3);
gtk_widget_show (button);
gtk_object_set_data(GTK_OBJECT(button),"entry",
GTK_COMBO(hostlist)->entry);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_add,clist_allow);
button=gtk_button_new_with_label(" >>>");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,2,3);
gtk_widget_show (button);
gtk_object_set_data(GTK_OBJECT(button),"entry",
GTK_COMBO(hostlist)->entry);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_add,clist_deny);
button=gtk_button_new_with_label(" <<<");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,4,5);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_rem,clist_deny);
button=gtk_button_new_with_label("Clear-->");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,5,6);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_clr,clist_deny);
gtk_box_pack_start (GTK_BOX (vbox),
table, TRUE, TRUE, 10);
gtk_widget_show (table);
gtk_signal_connect(GTK_OBJECT(checkbutton),"toggled",
c_toggle_insensitive,table);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton),FALSE);
return vbox;
}
GtkWidget *service_guru_page_six(GtkWidget *guru){
GtkWidget *choicebox;
choicebox=gnome_choice_box_new
(CHOICE_BOX_VV,
"Select an option for read write access\nNote all Unix access restrictions still apply",
"Make service read only",
"Default to read only, then specify access by user",
"Default to read/write, then specify access by user",
"Let Unix access restrictions alone control access",
NULL);
gtk_object_set_data(GTK_OBJECT(guru),"read_write_choice",
choicebox);
return choicebox;
}
GtkWidget *service_guru_page_seven(GtkWidget *guru){
GtkWidget *table;
GtkWidget *button;
GtkWidget *ucombo, *gcombo;
GtkWidget *label;
GtkWidget *scrolled;
GtkWidget *clist_read;
GtkWidget *clist_write;
char *read_list[1] = {
"read only list"
};
char *write_list[1] = {
"write list"
};
table=gtk_table_new(8,4,TRUE);
gtk_table_set_col_spacings(GTK_TABLE(table),5);
gtk_table_set_row_spacings(GTK_TABLE(table),5);
clist_read=gtk_clist_new_with_titles( 1,read_list );
gtk_clist_set_selection_mode(GTK_CLIST(clist_read),
GTK_SELECTION_BROWSE);
scrolled=gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_table_attach_defaults(GTK_TABLE(table),scrolled,0,1,0,8);
gtk_widget_show (scrolled);
gtk_container_add(GTK_CONTAINER(scrolled),clist_read);
gtk_widget_show (clist_read);
gtk_object_set_data(GTK_OBJECT(guru),"read_list",
clist_read);
ucombo=gtk_combo_new ();
get_user_list(ucombo);
gtk_table_attach_defaults(GTK_TABLE(table),ucombo,1,3,1,2);
gtk_widget_show (ucombo);
gcombo=gtk_combo_new ();
get_group_list(gcombo);
gtk_table_attach_defaults(GTK_TABLE(table),gcombo,1,3,4,5);
gtk_widget_show (gcombo);
clist_write=gtk_clist_new_with_titles( 1,write_list );
gtk_clist_set_selection_mode(GTK_CLIST(clist_write),
GTK_SELECTION_BROWSE);
scrolled=gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_table_attach_defaults(GTK_TABLE(table),scrolled,3,4,0,8);
gtk_widget_show (scrolled);
gtk_container_add(GTK_CONTAINER(scrolled),clist_write);
gtk_widget_show (clist_write);
gtk_object_set_data(GTK_OBJECT(guru),"write_list",
clist_write);
button=gtk_button_new_with_label(">>> ");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,6,7);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_rem,clist_read);
button=gtk_button_new_with_label("<--Clear");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,7,8);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_clr,clist_read);
label = gtk_label_new("Users:");
gtk_table_attach_defaults(GTK_TABLE(table),label,1,3,0,1);
gtk_widget_show (label);
button=gtk_button_new_with_label("<<< ");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,2,3);
gtk_widget_show (button);
gtk_object_set_data(GTK_OBJECT(button),"entry",
GTK_COMBO(ucombo)->entry);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_add,clist_read);
label = gtk_label_new("Groups:");
gtk_table_attach_defaults(GTK_TABLE(table),label,1,3,3,4);
gtk_widget_show (label);
button=gtk_button_new_with_label("<<< ");
gtk_table_attach_defaults(GTK_TABLE(table),button,1,2,5,6);
gtk_widget_show (button);
gtk_object_set_data(GTK_OBJECT(button),"entry",
GTK_COMBO(gcombo)->entry);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_add,clist_read);
button=gtk_button_new_with_label(" >>>");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,2,3);
gtk_widget_show (button);
gtk_object_set_data(GTK_OBJECT(button),"entry",
GTK_COMBO(ucombo)->entry);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_add,clist_write);
button=gtk_button_new_with_label(" >>>");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,5,6);
gtk_widget_show (button);
gtk_object_set_data(GTK_OBJECT(button),"entry",
GTK_COMBO(gcombo)->entry);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_add,clist_write);
button=gtk_button_new_with_label(" <<<");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,6,7);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_rem,clist_write);
button=gtk_button_new_with_label("Clear-->");
gtk_table_attach_defaults(GTK_TABLE(table),button,2,3,7,8);
gtk_widget_show (button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
c_button_list_clr,clist_write);
return table;
}
GtkWidget *service_guru_page_eight(GtkWidget *guru){
GtkWidget *table;
GtkWidget *entry;
GtkWidget *label;
GtkRequisition requisition;
table=gtk_table_new(5,4,TRUE);
gtk_table_set_row_spacings(GTK_TABLE(table),5);
gtk_table_set_col_spacings(GTK_TABLE(table),5);
label = gtk_label_new("Enter octal values, or leave blank for defaults:");
gtk_table_attach_defaults(GTK_TABLE(table),label,0,4,0,1);
gtk_widget_show (label);
label = gtk_label_new("File Creation Mode (default 0744)\nTo be masked with DOS mode");
gtk_table_attach_defaults(GTK_TABLE(table),label,0,3,1,2);
gtk_widget_show (label);
entry=gtk_entry_new_with_max_length(4);
gtk_widget_size_request(entry,&requisition);
gtk_widget_set_usize(entry,20,requisition.height);
gtk_table_attach_defaults(GTK_TABLE(table),entry,3,4,1,2);
gtk_widget_show (entry);
gtk_object_set_data(GTK_OBJECT(guru),"file_create_entry",
entry);
label = gtk_label_new("Force Creation Mode (default 0000)\nTo be bitwise OR'ed with mode above");
gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_RIGHT);
gtk_table_attach_defaults(GTK_TABLE(table),label,0,3,2,3);
gtk_widget_show (label);
entry=gtk_entry_new_with_max_length(4);
gtk_widget_size_request(entry,&requisition);
gtk_widget_set_usize(entry,20,requisition.height);
gtk_table_attach_defaults(GTK_TABLE(table),entry,3,4,2,3);
gtk_widget_show (entry);
gtk_object_set_data(GTK_OBJECT(guru),"force_create_entry",
entry);
label = gtk_label_new("Directory Creation Mode (default 0744)\nTo be masked with DOS mode");
gtk_table_attach_defaults(GTK_TABLE(table),label,0,3,3,4);
gtk_widget_show (label);
entry=gtk_entry_new_with_max_length(4);
gtk_widget_size_request(entry,&requisition);
gtk_widget_set_usize(entry,20,requisition.height);
gtk_table_attach_defaults(GTK_TABLE(table),entry,3,4,3,4);
gtk_widget_show (entry);
gtk_object_set_data(GTK_OBJECT(guru),"directory_create_entry",
entry);
label = gtk_label_new("Force Directory Mode (default 0000)\nTo be bitwise OR'ed with mode above");
gtk_table_attach_defaults(GTK_TABLE(table),label,0,3,4,5);
gtk_widget_show (label);
entry=gtk_entry_new_with_max_length(4);
gtk_widget_size_request(entry,&requisition);
gtk_widget_set_usize(entry,20,requisition.height);
gtk_table_attach_defaults(GTK_TABLE(table),entry,3,4,4,5);
gtk_widget_show (entry);
gtk_object_set_data(GTK_OBJECT(guru),"force_directory_entry",
entry);
return table;
}
GtkWidget *service_guru_page_nine(GtkWidget *guru){
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *entry;
GtkWidget *checkbutton;
GtkWidget *label;
vbox=gtk_vbox_new(FALSE,0);
checkbutton=gtk_check_button_new_with_label("Make service browseable");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton),TRUE);
gtk_box_pack_start (GTK_BOX (vbox),
checkbutton, TRUE, TRUE, 10);
gtk_widget_show (checkbutton);
gtk_object_set_data(GTK_OBJECT(guru),"browseable_toggle",
checkbutton);
checkbutton=gtk_check_button_new_with_label("Hide hidden (dot) files");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton),TRUE);
gtk_box_pack_start (GTK_BOX (vbox),
checkbutton, TRUE, TRUE, 10);
gtk_widget_show (checkbutton);
gtk_object_set_data(GTK_OBJECT(guru),"hide_dot_toggle",
checkbutton);
hbox=gtk_hbox_new(FALSE,0);
gtk_box_pack_start (GTK_BOX (vbox),
hbox, TRUE, TRUE, 10);
gtk_widget_show (hbox);
label = gtk_label_new("Maximum number of connections:");
gtk_box_pack_start (GTK_BOX (hbox),
label, TRUE, TRUE, 10);
gtk_widget_show (label);
entry=gnome_entry_new ("max_connect");
gtk_box_pack_start (GTK_BOX (hbox),
entry, TRUE, TRUE, 10);
gtk_widget_show (entry);
gtk_object_set_data(GTK_OBJECT(guru),"max_connect_entry",
gnome_entry_gtk_entry(GNOME_ENTRY(entry)));
return vbox;
}
gint c_guru_diag_delete(GtkWidget *button, GdkEvent *event,
gpointer window){
resensitize_sw(GTK_WIDGET(window));
return FALSE;
}
void make_insert_service_dialog(GtkWidget *window){
GtkWidget *mguru;
GtkWidget *dialog;
GtkWidget *page;
GtkWidget *graphic=NULL;
desensitize_sw(GTK_WIDGET(window));
graphic = gnome_pixmap_new_from_xpm_d(samba_xpm);
dialog = gnome_dialog_new(_("GnoSamba Service Guru"),
NULL);
gtk_signal_connect(GTK_OBJECT(dialog), "delete_event",
GTK_SIGNAL_FUNC(c_guru_diag_delete),
window);
mguru = gnome_mguru_new(TRUE,GNOME_DIALOG(dialog),graphic);
page=service_guru_page_one(mguru,window);
gtk_widget_show(page);
gnome_mguru_append_page(GNOME_MGURU(mguru),page,"Select a service");
page=service_guru_page_two(mguru);
gtk_widget_show(page);
gnome_mguru_append_page(GNOME_MGURU(mguru),page,"Basic parameters");
page=service_guru_page_three(mguru);
gtk_widget_show(page);
gnome_mguru_append_page(GNOME_MGURU(mguru),page,"User Access Control");
page=service_guru_page_four(mguru);
gtk_widget_show(page);
gnome_mguru_append_page(GNOME_MGURU(mguru),page,"Select User Access Control");
page=service_guru_page_five(mguru);
gtk_widget_show(page);
gnome_mguru_append_page(GNOME_MGURU(mguru),page,"Host Access Control");
page=service_guru_page_six(mguru);
gtk_widget_show(page);
gnome_mguru_append_page(GNOME_MGURU(mguru),page,"Read Write Control");
page=service_guru_page_seven(mguru);
gtk_widget_show(page);
gnome_mguru_append_page(GNOME_MGURU(mguru),page,"Read Write Control");
page=service_guru_page_eight(mguru);
gtk_widget_show(page);
gnome_mguru_append_page(GNOME_MGURU(mguru),page,"Read Write Control");
page=service_guru_page_nine(mguru);
gtk_widget_show(page);
gnome_mguru_append_page(GNOME_MGURU(mguru),page,"Read Write Control");
gtk_object_set_data(GTK_OBJECT(mguru),"dialog",dialog);
gtk_signal_connect(GTK_OBJECT(mguru),
"mguru_click",
GTK_SIGNAL_FUNC(c_service_mguru_button),
window);
gtk_widget_show(mguru);
gtk_widget_show(dialog);
handle_sensitivity(mguru);
return;
}
void c_del_diag_ok(GtkWidget *button, gpointer window){
GtkWidget *diagwin;
int row;
GtkWidget *sublist;
diagwin=gtk_object_get_data(GTK_OBJECT(window),"dialog");
sublist=gtk_object_get_data(GTK_OBJECT(window),"sublist");
row = (int)(GTK_CLIST(sublist)->selection->data);
gtk_clist_remove(GTK_CLIST(sublist),row);
resensitize_sw(GTK_WIDGET(window));
gtk_widget_destroy(diagwin);
gtk_object_set_data(GTK_OBJECT(window),"dialog",NULL);
return;
}
void make_del_dialog(GtkWidget *window){
GtkWidget *diagwin;
GtkWidget *label;
GtkWidget *vbox;
char *text;
int row;
GtkWidget *sublist;
desensitize_sw(window);
sublist=gtk_object_get_data(GTK_OBJECT(window),"sublist");
row = (int)(GTK_CLIST(sublist)->selection->data);
gtk_clist_get_text(GTK_CLIST(sublist),
row ,0,&text);
diagwin = gnome_dialog_new (text,NULL);
gtk_object_set_data(GTK_OBJECT(window),"dialog",diagwin);
vbox=gtk_vbox_new(FALSE,0);
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (diagwin)->vbox),
vbox, TRUE, TRUE, 10);
gtk_container_border_width (GTK_CONTAINER (vbox), 0);
gtk_widget_show (vbox);
gtk_signal_connect(GTK_OBJECT(diagwin), "delete_event",
GTK_SIGNAL_FUNC(c_param_diag_delete),
window);
gtk_window_position (GTK_WINDOW (diagwin),GTK_WIN_POS_CENTER);
label = gtk_label_new("delete parameter:");
gtk_box_pack_start (GTK_BOX (vbox),
label, TRUE, TRUE, 0);
gtk_widget_show (label);
label = gtk_label_new(text);
gtk_box_pack_start (GTK_BOX (vbox),
label, TRUE, TRUE, 0);
gtk_widget_show (label);
gnome_dialog_append_button_with_pixmap(GNOME_DIALOG(diagwin),
"Delete",
GNOME_STOCK_MENU_CUT);
gnome_dialog_append_button(GNOME_DIALOG(diagwin),
GNOME_STOCK_BUTTON_CANCEL);
gnome_dialog_button_connect(GNOME_DIALOG(diagwin), 0,
GTK_SIGNAL_FUNC(c_del_diag_ok),
window);
gnome_dialog_button_connect(GNOME_DIALOG(diagwin), 1,
GTK_SIGNAL_FUNC(c_param_diag_cancel),
window);
gtk_widget_show(diagwin);
return;
}
void c_del_service_ok(GtkWidget *button, gpointer window){
GtkWidget *diagwin;
diagwin=gtk_object_get_data(GTK_OBJECT(window),"dialog");
smbwin_delete_service(GTK_WIDGET(window));
resensitize_sw(GTK_WIDGET(window));
gtk_widget_destroy(diagwin);
gtk_object_set_data(GTK_OBJECT(window),"dialog",NULL);
return;
}
void make_del_service_dialog(GtkWidget *window){
GtkWidget *diagwin;
GtkWidget *label;
GtkWidget *vbox;
char *text;
int row;
GtkWidget *servicelist;
servicelist=gtk_object_get_data(GTK_OBJECT(window),"servicelist");
desensitize_sw(GTK_WIDGET(window));
row = (int)(GTK_CLIST(servicelist)->selection->data);
gtk_clist_get_text(GTK_CLIST(servicelist),
row ,0,&text);
diagwin = gnome_dialog_new (text,NULL);
gtk_object_set_data(GTK_OBJECT(window),"dialog",diagwin);
vbox=gtk_vbox_new(FALSE,0);
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (diagwin)->vbox),
vbox, TRUE, TRUE, 0);
gtk_container_border_width (GTK_CONTAINER (vbox), 10);
gtk_widget_show (vbox);
gtk_signal_connect(GTK_OBJECT(diagwin), "delete_event",
GTK_SIGNAL_FUNC(c_param_diag_delete),
window);
gtk_window_position (GTK_WINDOW(diagwin),GTK_WIN_POS_CENTER);
label = gtk_label_new("delete service:");
gtk_box_pack_start (GTK_BOX (vbox),
label, TRUE, TRUE, 0);
gtk_widget_show (label);
label = gtk_label_new(text);
gtk_box_pack_start (GTK_BOX (vbox),
label, TRUE, TRUE, 0);
gtk_widget_show (label);
gnome_dialog_append_button_with_pixmap(GNOME_DIALOG(diagwin),
"Delete",
GNOME_STOCK_MENU_CUT);
gnome_dialog_append_button(GNOME_DIALOG(diagwin),
GNOME_STOCK_BUTTON_CANCEL);
gnome_dialog_button_connect(GNOME_DIALOG(diagwin), 0,
GTK_SIGNAL_FUNC(c_del_service_ok),
window);
gnome_dialog_button_connect(GNOME_DIALOG(diagwin), 1,
GTK_SIGNAL_FUNC(c_param_diag_cancel),
window);
gtk_widget_show(diagwin);
return;
}
void make_user_mesg(char *message, char *title){
if(!strcasecmp("Error",title))
gnome_error_dialog(message);
else if(!strcasecmp("Warning",title))
gnome_warning_dialog(message);
else
gnome_ok_dialog(message);
return;
}
void sw_main_menu(GtkWidget *window){
GnomeUIInfo filemenu[] = {
{ GNOME_APP_UI_ITEM,
N_("Open Configuration File"), NULL,
c_conf_open, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_NEW,
's', GDK_CONTROL_MASK, NULL},
{ GNOME_APP_UI_ITEM,
N_("Open Alternate File"), NULL,
c_alt_open, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN,
'o', GDK_CONTROL_MASK, NULL},
{ GNOME_APP_UI_ITEM,
N_("Open From Server"), NULL,
NULL, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_JUMP_TO,
0, 0, NULL},
GNOMEUIINFO_SEPARATOR,
{ GNOME_APP_UI_ITEM,
N_("Write to Current File"), NULL,
c_write_conf, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE,
'w', GDK_CONTROL_MASK, NULL},
{ GNOME_APP_UI_ITEM,
N_("Write to Alternate File"), NULL,
c_write_alt, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE_AS,
'a', GDK_CONTROL_MASK, NULL},
{ GNOME_APP_UI_ITEM,
N_("Write to Server"), NULL,
NULL,NULL,NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_JUMP_TO,
0, 0, NULL},
GNOMEUIINFO_SEPARATOR,
{ GNOME_APP_UI_ITEM,
N_("Preferences"), NULL,
c_make_pref_box, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PREF,
'p', GDK_CONTROL_MASK, NULL},
GNOMEUIINFO_SEPARATOR,
{ GNOME_APP_UI_ITEM,
N_("Close"), NULL,
c_smbwin_close, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CLOSE,
'c', GDK_CONTROL_MASK, NULL},
{ GNOME_APP_UI_ITEM,
N_("New Window"), NULL,
c_smbwin_new, window, NULL,
GNOME_APP_PIXMAP_NONE, NULL,
0,0, NULL},
{ GNOME_APP_UI_ITEM,
N_("Exit"), NULL,
c_make_exit_dialog, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_QUIT,
'q', GDK_CONTROL_MASK, NULL},
GNOMEUIINFO_END
};
GnomeUIInfo editmenu[] = {
{ GNOME_APP_UI_ITEM,
N_("Edit Parameter"), NULL,
c_edit_param, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PROP,
'e', GDK_CONTROL_MASK, NULL},
{ GNOME_APP_UI_ITEM,
N_("New Parameter"), NULL,
c_make_inserter, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_COPY,
'i', GDK_CONTROL_MASK , NULL},
{ GNOME_APP_UI_ITEM,
N_("New Service"), NULL,
c_insert_service, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PASTE,
'n',GDK_CONTROL_MASK, NULL},
GNOMEUIINFO_SEPARATOR,
{ GNOME_APP_UI_ITEM,
N_("Delete Parameter"), NULL,
c_delete_param, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CUT,
'd', GDK_CONTROL_MASK, NULL},
{ GNOME_APP_UI_ITEM,
N_("Delete Service"), NULL,
c_delete_service, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CUT,
0, 0, NULL},
GNOMEUIINFO_END
};
GnomeUIInfo optionsmenu[] = {
{ GNOME_APP_UI_ITEM,
N_("Run testparm"), NULL,
c_run_testparm, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_EXEC,
't', GDK_CONTROL_MASK, NULL},
{ GNOME_APP_UI_ITEM,
N_("Run smbstatus"), NULL,
c_run_smbstatus, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SEARCH,
0, 0, NULL},
{ GNOME_APP_UI_ITEM,
N_("Restart Samba"), NULL,
c_restart_samba, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_REFRESH,
0, 0, NULL},
GNOMEUIINFO_END
};
GnomeUIInfo helpmenu[] = {
{ GNOME_APP_UI_ITEM,
N_("smb.conf(5)"), NULL,
c_make_overview, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOOK_OPEN,
0, 0, NULL},
{ GNOME_APP_UI_ITEM,
N_("testparm(1)"), NULL,
c_man_testparm, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOOK_OPEN,
0, 0, NULL},
{ GNOME_APP_UI_ITEM,
N_("smbstatus(1)"), NULL,
c_man_smbstatus, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOOK_OPEN,
0, 0, NULL},
GNOMEUIINFO_SEPARATOR,
{ GNOME_APP_UI_ITEM,
N_("Selected Parameter"), NULL,
c_help_sel_param, window, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_INDEX,
0, 0, NULL},
{ GNOME_APP_UI_ITEM,
N_("Look Up Parameter"), NULL,
c_make_param_lookup, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_INDEX,
0, 0, NULL},
GNOMEUIINFO_SEPARATOR,
{ GNOME_APP_UI_ITEM,
N_("About"), NULL,
c_help_about, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL,
0, 0, NULL},
GNOMEUIINFO_END
};
GnomeUIInfo mainmenu[] = {
GNOMEUIINFO_SUBTREE(N_("_File"), filemenu),
GNOMEUIINFO_SUBTREE(N_("_Edit"), editmenu),
GNOMEUIINFO_SUBTREE(N_("_Options"), optionsmenu),
GNOMEUIINFO_SUBTREE(N_("_Help"), helpmenu),
GNOMEUIINFO_END
};
gnome_app_create_menus(GNOME_APP(window), mainmenu);
return;
}
void sw_toolbars(GtkWidget *window){
GnomeUIInfo toolbar[] = {
{ GNOME_APP_UI_ITEM,
N_("Open"), N_("Open Configuration"),
GTK_SIGNAL_FUNC(c_alt_open), window, NULL,
GNOME_APP_PIXMAP_DATA, open_xpm,
0, 0, NULL},
{ GNOME_APP_UI_ITEM,
N_("Write"), N_("Write Configuration"),
GTK_SIGNAL_FUNC(c_write_alt), window, NULL,
GNOME_APP_PIXMAP_DATA, save_xpm,
0, 0, NULL},
GNOMEUIINFO_SEPARATOR,
{ GNOME_APP_UI_ITEM,
N_("Insert"), N_("Insert Service"),
GTK_SIGNAL_FUNC(c_insert_service), window, NULL,
GNOME_APP_PIXMAP_DATA, share_xpm,
0, 0, NULL},
{ GNOME_APP_UI_ITEM,
N_("Delete"), N_("Delete Service"),
GTK_SIGNAL_FUNC(c_delete_service), window, NULL,
GNOME_APP_PIXMAP_DATA, delshare_xpm,
0, 0, NULL},
GNOMEUIINFO_SEPARATOR,
{ GNOME_APP_UI_ITEM,
N_("Edit"), N_("Edit Parameter"),
GTK_SIGNAL_FUNC(c_edit_param), window, NULL,
GNOME_APP_PIXMAP_DATA, edit_xpm,
0, 0, NULL},
{ GNOME_APP_UI_ITEM,
N_("Insert"), N_("Insert Parameter"),
GTK_SIGNAL_FUNC(c_make_inserter), window, NULL,
GNOME_APP_PIXMAP_DATA, new_xpm,
0, 0, NULL},
{ GNOME_APP_UI_ITEM,
N_("Delete"), N_("Delete Parameter"),
GTK_SIGNAL_FUNC(c_delete_param), window, NULL,
GNOME_APP_PIXMAP_DATA, delete_xpm,
0, 0, NULL},
GNOMEUIINFO_SEPARATOR,
{ GNOME_APP_UI_ITEM,
N_("Exit"), N_("Quit Program"),
GTK_SIGNAL_FUNC(c_make_exit_dialog), window, NULL,
GNOME_APP_PIXMAP_DATA, exit_xpm,
0, 0, NULL},
GNOMEUIINFO_END
};
gnome_app_create_toolbar(GNOME_APP(window), toolbar);
return;
}
syntax highlighted by Code2HTML, v. 0.9.1