|
|
1.1 root 1: #include "events.h"
2: #include "sbbsdefs.h"
3: #include "gtkuserlist.h"
4:
5: GladeXML *lxml;
6:
7: char *complete_path(char *dest, char *path, char *filename)
8: {
9: if(path != NULL) {
10: strcpy(dest, path);
11: backslash(dest);
12: }
13: else
14: dest[0]=0;
15:
16: if(filename != NULL)
17: strcat(dest, filename);
18: fexistcase(dest); /* TODO: Hack: Fixes upr/lwr case fname */
19: return(dest);
20: }
21:
22: void exec_cmdline(void *cmdline)
23: {
24: GtkWidget *w;
25:
26: if(cmdline==NULL)
27: return;
28: system((char *)cmdline);
29: free(cmdline);
30: w=glade_xml_get_widget(lxml, "UserListWindow");
31: gtk_widget_set_sensitive(GTK_WIDGET(w), TRUE);
32: }
33:
34: void run_external(char *path, char *filename)
35: {
36: static char cmdline[MAX_PATH*2];
37: GtkWidget *w;
38:
39: w=glade_xml_get_widget(lxml, "UserListWindow");
40: gtk_widget_set_sensitive(GTK_WIDGET(w), FALSE);
41: complete_path(cmdline,path,filename);
42: _beginthread(exec_cmdline, 0, strdup(cmdline));
43: }
44:
45: void display_message(char *title, char *message, char *icon)
46: {
47: GtkWidget *dialog, *label;
48:
49: dialog=gtk_dialog_new_with_buttons(title
50: ,GTK_WINDOW(glade_xml_get_widget(lxml, "UserListWindow"))
51: ,GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT
52: ,GTK_STOCK_OK
53: ,GTK_RESPONSE_NONE
54: ,NULL);
55: if(icon==NULL)
56: icon="gtk-info";
57: gtk_window_set_icon_name(GTK_WINDOW(dialog), icon);
58: label = gtk_label_new (message);
59:
60: g_signal_connect_swapped (dialog
61: ,"response"
62: ,G_CALLBACK(gtk_widget_destroy)
63: ,dialog);
64: gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
65: label);
66: gtk_widget_show_all (dialog);
67: gtk_dialog_run(GTK_DIALOG(dialog));
68: }
69:
70: void update_userlist_sensitive_callback(GtkTreeSelection *wiggy, gpointer data)
71: {
72: GtkWidget *w;
73: int selected;
74:
75: w=glade_xml_get_widget(lxml, "bUserListEditUser");
76: selected=gtk_tree_selection_count_selected_rows(wiggy);
77: gtk_widget_set_sensitive(w, selected==1);
78: }
79:
80: void update_userlist_item(GtkListStore *lstore, GtkTreeIter *curr, int usernum)
81: {
82: char sex[2];
83: char first[9];
84: char last[9];
85: user_t user;
86:
87: user.number=usernum;
88: getuserdat(&cfg, &user);
89: if(arbuf) {
90: if(!chk_ar(&cfg, arbuf, &user)) {
91: gtk_list_store_remove(lstore, curr);
92: return;
93: }
94: }
95: sex[0]=user.sex;
96: sex[1]=0;
97: unixtodstr(&cfg, user.firston, first);
98: unixtodstr(&cfg, user.laston, last);
99: gtk_list_store_set(lstore, curr
100: ,0,user.number
101: ,1,user.alias
102: ,2,user.name
103: ,3,user.level
104: ,4,getage(&cfg, user.birth)
105: ,5,sex
106: ,6,user.location
107: ,7,user.modem
108: ,8,user.note
109: ,9,user.comp
110: ,10,user.phone
111: ,11,user.netmail
112: ,12,user.logons
113: ,13,first
114: ,14,last
115: ,15,user.firston
116: ,16,user.laston
117: ,-1);
118: }
119:
120: void update_userlist_callback(GtkWidget *wiggy, gpointer data)
121: {
122: GtkWidget *w;
123: GtkListStore *lstore = NULL;
124: int totalusers;
125: int i;
126: GtkTreeIter curr;
127: char str[1024];
128:
129: free_cfg(&cfg);
130: if(!load_cfg(&cfg, NULL, TRUE, str)) {
131: display_message("Load Error","Cannot load configuration data","gtk-dialog-error");
132: return;
133: }
134:
135: w=glade_xml_get_widget(lxml, "lUserList");
136: lstore=GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(w)));
137: gtk_list_store_clear(lstore);
138: totalusers=lastuser(&cfg);
139: for(i=1; i<=totalusers; i++) {
140: gtk_list_store_insert(lstore, &curr, i-1);
141: update_userlist_item(lstore, &curr, i);
142: }
143: }
144:
145: void quick_validate(int usernum, int set)
146: {
147: user_t user;
148: int res;
149: char str[1024];
150:
151: user.number=usernum;
152: if((res=getuserdat(&cfg,&user))) {
153: sprintf(str,"Error loading user %d.\n",usernum);
154: display_message("Load Error",str,"gtk-dialog-error");
155: return;
156: }
157: user.flags1=cfg.val_flags1[set];
158: user.flags2=cfg.val_flags2[set];
159: user.flags3=cfg.val_flags3[set];
160: user.flags4=cfg.val_flags4[set];
161: user.exempt=cfg.val_exempt[set];
162: user.rest=cfg.val_rest[set];
163: if(cfg.val_expire[set]) {
164: user.expire=time(NULL)
165: +(cfg.val_expire[set]*24*60*60);
166: }
167: else
168: user.expire=0;
169: user.level=cfg.val_level[set];
170: if((res=putuserdat(&cfg,&user))) {
171: sprintf(str,"Error saving user %d.\n",usernum);
172: display_message("Save Error",str,"gtk=dialog-error");
173: }
174: }
175:
176: void userlist_do_quick_validate(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
177: {
178: int *set=data;
179: int usernum;
180:
181: gtk_tree_model_get(model, iter, 0, &usernum, -1);
182: quick_validate(usernum,*set);
183: update_userlist_item(GTK_LIST_STORE(model), iter, usernum);
184: }
185:
186: void on_userlist_quick_validate(GtkWidget *wiggy, gpointer data)
187: {
188: int set;
189: GtkWidget *w;
190:
191: w=glade_xml_get_widget(lxml, "lUserList");
192: set=gtk_combo_box_get_active(GTK_COMBO_BOX(wiggy))-1;
193: if(set>=0) {
194: gtk_tree_selection_selected_foreach(gtk_tree_view_get_selection (GTK_TREE_VIEW (w))
195: ,userlist_do_quick_validate
196: ,&set);
197: gtk_combo_box_set_active(GTK_COMBO_BOX(wiggy), 0);
198: }
199: }
200:
201: void get_lastselected_user(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
202: {
203: int *i=data;
204: int user;
205:
206: gtk_tree_model_get(model, iter, 0, &user, -1);
207: *i=user;
208: }
209:
210: void userlist_edituser(GtkWidget *wiggy, gpointer data)
211: {
212: char str[MAX_PATH+1];
213: int i;
214: GtkWidget *w;
215:
216: w=glade_xml_get_widget(lxml, "lUserList");
217: gtk_tree_selection_selected_foreach(gtk_tree_view_get_selection (GTK_TREE_VIEW (w))
218: ,get_lastselected_user
219: ,&i);
220:
221: sprintf(str,"gtkuseredit %d",i);
222: run_external(cfg.exec_dir,str);
223: }
224:
225: void apply_ars_filter(GtkWidget *wiggy, gpointer data)
226: {
227: GtkWidget *w;
228:
229: w=glade_xml_get_widget(lxml, "eArsFilter");
230: arbuf=arstr(NULL, (char *)gtk_entry_get_text(GTK_ENTRY(w)), &cfg);
231: update_userlist_callback(wiggy, data);
232: }
233:
234: void clear_ars_filter(GtkWidget *wiggy, gpointer data)
235: {
236: GtkWidget *w;
237:
238: w=glade_xml_get_widget(lxml, "eArsFilter");
239: gtk_entry_set_text(GTK_ENTRY(w),"");
240: arbuf=NULL;
241: update_userlist_callback(wiggy, data);
242: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.