EXPERIMENTAL lightbar area/conference selection
This commit is contained in:
parent
b43247246e
commit
1aeaee5031
@ -245,3 +245,8 @@ File exists!\r\n
|
||||
\r\nSpaces not allowed\r\n
|
||||
\e[0;36mS. \e[1;37mSet Signature...\r\n
|
||||
\e[0;36mT. \e[1;37mToggle Auto-Signature (\e[1;33m%s\e[1;37m)\r\n
|
||||
\e[1;37;44mChoose a Conference\e[K
|
||||
\e[24;1H\e[1;37;44mUp / Down to Select, Enter to Confirm\e[K
|
||||
\e[%d;1H\e[1;30;40m[\e[1;34;44m%.4d\e[1;30;40m] \e[1;37m%s\e[K
|
||||
\e[%d;1H\e[1;30;40m[\e[1;34m%.4d\e[1;30;40m] \e[1;37m%s\e[K
|
||||
\e[1;37;44mChoose an Area in %s\e[K
|
||||
|
@ -276,8 +276,8 @@ extern int msg_is_from(struct user_record *user, char *addressed_from, char *add
|
||||
extern unsigned long generate_msgid();
|
||||
extern void read_mail(struct user_record *user);
|
||||
extern void list_messages(struct user_record *user);
|
||||
extern void choose_conference(struct user_record *user);
|
||||
extern void choose_area(struct user_record *user);
|
||||
extern void choose_conference();
|
||||
extern void choose_area();
|
||||
extern void next_mail_conf(struct user_record *user);
|
||||
extern void prev_mail_conf(struct user_record *user);
|
||||
extern void next_mail_area(struct user_record *user);
|
||||
|
216
src/mail_menu.c
216
src/mail_menu.c
@ -2554,37 +2554,209 @@ void list_messages(struct user_record *user) {
|
||||
}
|
||||
}
|
||||
|
||||
void choose_conference(struct user_record *user) {
|
||||
struct conf_tmp_t {
|
||||
struct mail_conference *conference;
|
||||
int index;
|
||||
};
|
||||
|
||||
void choose_conference() {
|
||||
int i;
|
||||
int j;
|
||||
int list_tmp = 0;
|
||||
struct conf_tmp_t **conf_tmp;
|
||||
int redraw = 1;
|
||||
int start = 0;
|
||||
int selected = 0;
|
||||
char c;
|
||||
char buffer[6];
|
||||
|
||||
|
||||
s_printf(get_string(131));
|
||||
for (i=0;i<conf.mail_conference_count;i++) {
|
||||
if (conf.mail_conferences[i]->sec_level <= user->sec_level) {
|
||||
s_printf(get_string(132), i, conf.mail_conferences[i]->name);
|
||||
}
|
||||
if (i != 0 && i % 20 == 0) {
|
||||
s_printf(get_string(6));
|
||||
c = s_getc();
|
||||
if (conf.mail_conferences[i]->sec_level <= gUser->sec_level) {
|
||||
if (list_tmp == 0) {
|
||||
conf_tmp = (struct conf_tmp_t **)malloc(sizeof(struct conf_tmp_t *));
|
||||
} else {
|
||||
conf_tmp = (struct conf_tmp_t **)realloc(conf_tmp, sizeof(struct conf_tmp_t *) * (list_tmp + 1));
|
||||
}
|
||||
|
||||
conf_tmp[list_tmp] = (struct conf_tmp_t *)malloc(sizeof(struct conf_tmp_t));
|
||||
conf_tmp[list_tmp]->conference = conf.mail_conferences[i];
|
||||
conf_tmp[list_tmp]->index = i;
|
||||
list_tmp++;
|
||||
}
|
||||
}
|
||||
s_printf(get_string(133));
|
||||
s_readstring(buffer, 5);
|
||||
if (tolower(buffer[0]) != 'q') {
|
||||
j = atoi(buffer);
|
||||
if (j < 0 || j >= conf.mail_conference_count || conf.mail_conferences[j]->sec_level > user->sec_level) {
|
||||
s_printf(get_string(134));
|
||||
} else {
|
||||
s_printf("\r\n");
|
||||
user->cur_mail_conf = j;
|
||||
user->cur_mail_area = 0;
|
||||
|
||||
while (1) {
|
||||
if (redraw) {
|
||||
s_printf("\e[2J\e[1;1H");
|
||||
s_printf(get_string(247));
|
||||
s_printf(get_string(248));
|
||||
for (i=start;i<start+22 && i < list_tmp;i++) {
|
||||
if (i == selected) {
|
||||
s_printf(get_string(249), i - start + 2, conf_tmp[i]->index, conf_tmp[i]->conference->name);
|
||||
} else {
|
||||
s_printf(get_string(250), i - start + 2, conf_tmp[i]->index, conf_tmp[i]->conference->name);
|
||||
}
|
||||
}
|
||||
redraw = 0;
|
||||
}
|
||||
c = s_getchar();
|
||||
if (tolower(c) == 'q') {
|
||||
break;
|
||||
} else if (c == 27) {
|
||||
c = s_getchar();
|
||||
if (c == 91) {
|
||||
c = s_getchar();
|
||||
if (c == 66) {
|
||||
// down
|
||||
if (selected + 1 > start + 22) {
|
||||
start += 22;
|
||||
if (start >= list_tmp) {
|
||||
start = list_tmp - 22;
|
||||
}
|
||||
redraw = 1;
|
||||
}
|
||||
selected++;
|
||||
if (selected >= list_tmp) {
|
||||
selected = list_tmp - 1;
|
||||
} else {
|
||||
if (!redraw) {
|
||||
s_printf(get_string(250), selected - start + 1, conf_tmp[selected - 1]->index, conf_tmp[selected - 1]->conference->name);
|
||||
s_printf(get_string(249), selected - start + 2, conf_tmp[selected]->index, conf_tmp[selected]->conference->name);
|
||||
}
|
||||
}
|
||||
} else if (c == 65) {
|
||||
// up
|
||||
if (selected - 1 < start) {
|
||||
start -= 22;
|
||||
if (start < 0) {
|
||||
start = 0;
|
||||
}
|
||||
redraw = 1;
|
||||
}
|
||||
selected--;
|
||||
if (selected < 0) {
|
||||
selected = 0;
|
||||
} else {
|
||||
if (!redraw) {
|
||||
s_printf(get_string(249), selected - start + 2, conf_tmp[selected]->index, conf_tmp[selected]->conference->name);
|
||||
s_printf(get_string(250), selected - start + 3, conf_tmp[selected + 1]->index, conf_tmp[selected + 1]->conference->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (c == 13) {
|
||||
gUser->cur_mail_conf = conf_tmp[selected]->index;
|
||||
gUser->cur_mail_area = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i=0;i<list_tmp;i++) {
|
||||
free(conf_tmp[i]);
|
||||
}
|
||||
free(conf_tmp);
|
||||
}
|
||||
|
||||
struct area_tmp_t {
|
||||
struct mail_area *area;
|
||||
int index;
|
||||
};
|
||||
|
||||
void choose_area() {
|
||||
int i;
|
||||
int list_tmp = 0;
|
||||
struct area_tmp_t **area_tmp;
|
||||
int redraw = 1;
|
||||
int start = 0;
|
||||
int selected = 0;
|
||||
char c;
|
||||
|
||||
for (i=0;i<conf.mail_conferences[gUser->cur_mail_conf]->mail_area_count;i++) {
|
||||
if (conf.mail_conferences[gUser->cur_mail_conf]->mail_areas[i]->read_sec_level <= gUser->sec_level) {
|
||||
if (list_tmp == 0) {
|
||||
area_tmp = (struct area_tmp_t **)malloc(sizeof(struct area_tmp_t *));
|
||||
} else {
|
||||
area_tmp = (struct area_tmp_t **)realloc(area_tmp, sizeof(struct area_tmp_t *) * (list_tmp + 1));
|
||||
}
|
||||
|
||||
area_tmp[list_tmp] = (struct area_tmp_t *)malloc(sizeof(struct area_tmp_t));
|
||||
area_tmp[list_tmp]->area = conf.mail_conferences[gUser->cur_mail_conf]->mail_areas[i];
|
||||
area_tmp[list_tmp]->index = i;
|
||||
list_tmp++;
|
||||
}
|
||||
}
|
||||
|
||||
while (1) {
|
||||
if (redraw) {
|
||||
s_printf("\e[2J\e[1;1H");
|
||||
s_printf(get_string(251), conf.mail_conferences[gUser->cur_mail_conf]->name);
|
||||
s_printf(get_string(248));
|
||||
for (i=start;i<start+22 && i < list_tmp;i++) {
|
||||
if (i == selected) {
|
||||
s_printf(get_string(249), i - start + 2, area_tmp[i]->index, area_tmp[i]->area->name);
|
||||
} else {
|
||||
s_printf(get_string(250), i - start + 2, area_tmp[i]->index, area_tmp[i]->area->name);
|
||||
}
|
||||
}
|
||||
redraw = 0;
|
||||
}
|
||||
c = s_getchar();
|
||||
if (tolower(c) == 'q') {
|
||||
break;
|
||||
} else if (c == 27) {
|
||||
c = s_getchar();
|
||||
if (c == 91) {
|
||||
c = s_getchar();
|
||||
if (c == 66) {
|
||||
// down
|
||||
if (selected + 1 > start + 22) {
|
||||
start += 22;
|
||||
if (start >= list_tmp) {
|
||||
start = list_tmp - 22;
|
||||
}
|
||||
redraw = 1;
|
||||
}
|
||||
selected++;
|
||||
if (selected >= list_tmp) {
|
||||
selected = list_tmp - 1;
|
||||
} else {
|
||||
if (!redraw) {
|
||||
s_printf(get_string(250), selected - start + 1, area_tmp[selected - 1]->index, area_tmp[selected - 1]->area->name);
|
||||
s_printf(get_string(249), selected - start + 2, area_tmp[selected]->index, area_tmp[selected]->area->name);
|
||||
}
|
||||
}
|
||||
} else if (c == 65) {
|
||||
// up
|
||||
if (selected - 1 < start) {
|
||||
start -= 22;
|
||||
if (start < 0) {
|
||||
start = 0;
|
||||
}
|
||||
redraw = 1;
|
||||
}
|
||||
selected--;
|
||||
if (selected < 0) {
|
||||
selected = 0;
|
||||
} else {
|
||||
if (!redraw) {
|
||||
s_printf(get_string(249), selected - start + 2, area_tmp[selected]->index, area_tmp[selected]->area->name);
|
||||
s_printf(get_string(250), selected - start + 3, area_tmp[selected + 1]->index, area_tmp[selected + 1]->area->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (c == 13) {
|
||||
gUser->cur_mail_area = area_tmp[selected]->index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i=0;i<list_tmp;i++) {
|
||||
free(area_tmp[i]);
|
||||
}
|
||||
free(area_tmp);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
void choose_area(struct user_record *user) {
|
||||
int i;
|
||||
int j;
|
||||
@ -2613,7 +2785,7 @@ void choose_area(struct user_record *user) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
void next_mail_conf(struct user_record *user) {
|
||||
int i;
|
||||
|
||||
|
@ -421,10 +421,10 @@ int menu_system(char *menufile) {
|
||||
post_message(gUser);
|
||||
break;
|
||||
case MENU_CHOOSEMAILCONF:
|
||||
choose_conference(gUser);
|
||||
choose_conference();
|
||||
break;
|
||||
case MENU_CHOOSEMAILAREA:
|
||||
choose_area(gUser);
|
||||
choose_area();
|
||||
break;
|
||||
case MENU_SENDEMAIL:
|
||||
send_email(gUser);
|
||||
|
Reference in New Issue
Block a user