Browse Source

Add start of Qform driving code

master
cancel 6 years ago
parent
commit
170dcd2200
  1. 32
      term_util.c
  2. 14
      term_util.h
  3. 25
      tui_main.c

32
term_util.c

@ -293,6 +293,27 @@ Qform* qform_create(int id) {
Qform* qform_of(Qblock* qb) { return ORCA_CONTAINER_OF(qb, Qform, qblock); } Qform* qform_of(Qblock* qb) { return ORCA_CONTAINER_OF(qb, Qform, qblock); }
int qform_id(Qform const* qf) { return qf->id; }
void qform_add_text_line(Qform* qf, int id, char const* initial) {
FIELD* f = new_field(1, 20, 0, 0, 0, 0);
set_field_buffer(f, 0, initial);
set_field_userptr(f, (void*)(intptr_t)(id));
qf->ncurses_fields[qf->fields_count] = f;
++qf->fields_count;
qf->ncurses_fields[qf->fields_count] = NULL;
}
void qform_push_to_nav(Qform* qf) {
qf->ncurses_form = new_form(qf->ncurses_fields);
int form_min_h, form_min_w;
scale_form(qf->ncurses_form, &form_min_h, &form_min_w);
qnav_stack_push(Qblock_type_qform, form_min_h, form_min_w, &qf->qblock);
set_form_win(qf->ncurses_form, qf->qblock.outer_window);
set_form_sub(qf->ncurses_form, qf->qblock.content_window);
post_form(qf->ncurses_form);
}
void qform_free(Qform* qf) { void qform_free(Qform* qf) {
unpost_form(qf->ncurses_form); unpost_form(qf->ncurses_form);
free_form(qf->ncurses_form); free_form(qf->ncurses_form);
@ -301,3 +322,14 @@ void qform_free(Qform* qf) {
} }
free(qf); free(qf);
} }
bool qform_drive(Qform* qf, int key, Qform_action* out_action) {
(void)qf;
switch (key) {
case 27: {
out_action->any.type = Qform_action_type_canceled;
return true;
}
}
return false;
}

14
term_util.h

@ -85,6 +85,16 @@ typedef union {
typedef struct Qform Qform; typedef struct Qform Qform;
typedef enum {
Qform_action_type_canceled,
} Qform_action_type;
typedef struct {
Qform_action_type type;
} Qform_action_any;
typedef union {
Qform_action_any any;
} Qform_action;
void qnav_init(void); void qnav_init(void);
void qnav_deinit(void); void qnav_deinit(void);
Qblock* qnav_top_block(void); Qblock* qnav_top_block(void);
@ -110,6 +120,10 @@ Qmenu* qmenu_of(Qblock* qb);
bool qmenu_top_is_menu(int id); bool qmenu_top_is_menu(int id);
Qform* qform_create(int id); Qform* qform_create(int id);
int qform_id(Qform const* qf);
Qform* qform_of(Qblock* qb); Qform* qform_of(Qblock* qb);
void qform_add_text_line(Qform* qf, int id, char const* initial);
void qform_push_to_nav(Qform* qf);
bool qform_drive(Qform* qf, int key, Qform_action* out_action);
extern Qnav_stack qnav_stack; extern Qnav_stack qnav_stack;

25
tui_main.c

@ -1485,6 +1485,7 @@ bool hacky_try_save(Field* field, char const* filename) {
enum { enum {
Main_menu_id = 1, Main_menu_id = 1,
Save_as_form_id,
}; };
enum { enum {
@ -1631,6 +1632,12 @@ void try_save_with_msg(Ged* ged) {
} }
} }
void push_save_as_form(void) {
Qform* qf = qform_create(Save_as_form_id);
qform_add_text_line(qf, 0, "file name");
qform_push_to_nav(qf);
}
// //
// main // main
// //
@ -1950,10 +1957,11 @@ int main(int argc, char** argv) {
try_save_with_msg(&ged_state); try_save_with_msg(&ged_state);
break; break;
case Main_menu_save_as: { case Main_menu_save_as: {
Qmsg* msg = qmsg_push(3, 30); // Qmsg* msg = qmsg_push(3, 30);
WINDOW* msgw = qmsg_window(msg); // WINDOW* msgw = qmsg_window(msg);
wmove(msgw, 0, 1); // wmove(msgw, 0, 1);
wprintw(msgw, "Not yet implemented"); // wprintw(msgw, "Not yet implemented");
push_save_as_form();
} break; } break;
} }
} }
@ -1962,6 +1970,15 @@ int main(int argc, char** argv) {
} }
} break; } break;
case Qblock_type_qform: { case Qblock_type_qform: {
Qform* qf = qform_of(qb);
Qform_action act;
if (qform_drive(qf, key, &act)) {
switch (act.any.type) {
case Qform_action_type_canceled:
qnav_stack_pop();
break;
}
}
} break; } break;
} }
goto next_getch; goto next_getch;

Loading…
Cancel
Save