|
|
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.