WEVENT savedwev;
};
+#define SUBJECTOPTIONWINDOW_STRBUF_LEN 512
+struct subjectoptionwindow_t_ {
+ WID wid;
+ GID gid;
+ WID parent;
+ RECT r;
+ PAT bgpat;
+ W dnum_filter;
+ W dnum_order;
+ W dnum_orderby;
+ PAID tb_filter_id;
+ PAID ws_order_id;
+ PAID ws_orderby_id;
+ WEVENT savedwev;
+ W order;
+ W orderby;
+ TC strbuf[SUBJECTOPTIONWINDOW_STRBUF_LEN];
+};
+
#define BCHANLHMI_FLAG_SWITCHBUTDN 0x00000001
struct bchanlhmi_t_ {
UW flag;
subjectwindow_t *subjectwindow;
bbsmenuwindow_t *bbsmenuwindow;
+ subjectoptionwindow_t *subjectoptionwindow;
};
EXPORT W subjectwindow_startredisp(subjectwindow_t *window, RECT *r)
return windowscroll_setworkrect(&window->wscr, l, t, r, b);
}
+EXPORT W subjectoptionwindow_open(subjectoptionwindow_t *window)
+{
+ WID wid;
+
+ if (window->wid > 0) {
+ return 0;
+ }
+
+ wid = wopn_wnd(WA_SUBW|WA_TITL|WA_HHDL, window->parent, &(window->r), NULL, 2, NULL, &window->bgpat, NULL);
+ if (wid < 0) {
+ DP_ER("wopn_wnd: subjectoption error", wid);
+ return wid;
+ }
+ window->wid = wid;
+ window->gid = wget_gid(wid);
+
+ window->tb_filter_id = copn_par(wid, window->dnum_filter, NULL);
+ if (window->tb_filter_id < 0) {
+ DP_ER("copn_par list error:", window->tb_filter_id);
+ }
+ window->ws_order_id = copn_par(wid, window->dnum_order, NULL);
+ if (window->ws_order_id < 0) {
+ DP_ER("copn_par delete error:", window->ws_order_id);
+ }
+ window->ws_orderby_id = copn_par(wid, window->dnum_orderby, NULL);
+ if (window->ws_orderby_id < 0) {
+ DP_ER("copn_par input error:", window->ws_orderby_id);
+ }
+
+ wreq_dsp(wid);
+
+ return 0;
+}
+
+EXPORT VOID subjectoptionwindow_close(subjectoptionwindow_t *window)
+{
+ WDSTAT stat;
+ W err;
+
+ if (window->wid < 0) {
+ return;
+ }
+
+ stat.attr = WA_STD;
+ err = wget_sts(window->wid, &stat, NULL);
+ if (err >= 0) {
+ window->r = stat.r;
+ }
+ cdel_pwd(window->wid, NOCLR);
+ wcls_wnd(window->wid, CLR);
+ window->wid = -1;
+ window->gid = -1;
+}
+
+EXPORT Bool subjectoptionwindow_isopen(subjectoptionwindow_t *window)
+{
+ if (window->wid < 0) {
+ return False;
+ }
+ return True;
+}
+
+EXPORT W subjectoptionwindow_setorder(subjectoptionwindow_t *window, W order)
+{
+ if ((order != SUBJECTOPTIONWINDOW_ORDER_ASCENDING)
+ &&(order != SUBJECTOPTIONWINDOW_ORDER_DESCENDING)) {
+ return -1; /* TODO */
+ }
+ window->order = order;
+ if (window->wid < 0) {
+ return 0;
+ }
+ return cset_val(window->ws_order_id, 1, (W*)&order);
+}
+
+EXPORT W subjectoptionwindow_setorderby(subjectoptionwindow_t *window, W orderby)
+{
+ if ((orderby != SUBJECTOPTIONWINDOW_ORDERBY_NUMBER)
+ &&(orderby != SUBJECTOPTIONWINDOW_ORDERBY_RES)
+ &&(orderby != SUBJECTOPTIONWINDOW_ORDERBY_SINCE)
+ &&(orderby != SUBJECTOPTIONWINDOW_ORDERBY_VIGOR)) {
+ return -1; /* TODO */
+ }
+ window->orderby = orderby;
+ if (window->wid < 0) {
+ return 0;
+ }
+ return cset_val(window->ws_order_id, 1, (W*)&orderby);
+}
+
+EXPORT W subjectoptionwindow_settext(subjectoptionwindow_t *window, TC *str, W len)
+{
+ W cp_len;
+
+ if (len < SUBJECTOPTIONWINDOW_STRBUF_LEN) {
+ cp_len = len;
+ } else {
+ cp_len = SUBJECTOPTIONWINDOW_STRBUF_LEN;
+ }
+ memcpy(window->strbuf, str, cp_len * sizeof(TC));
+ if (window->wid < 0) {
+ return 0;
+ }
+
+ return cset_val(window->tb_filter_id, cp_len, (W*)window->strbuf);
+}
+
+EXPORT W subjectoptionwindow_getorder(subjectoptionwindow_t *window)
+{
+ return window->order;
+}
+
+EXPORT W subjectoptionwindow_getorderby(subjectoptionwindow_t *window)
+{
+ return window->orderby;
+}
+
+EXPORT W subjectoptionwindow_gettext(subjectoptionwindow_t *window, TC *str, W len)
+{
+ W cp_len;
+
+ if (len < SUBJECTOPTIONWINDOW_STRBUF_LEN) {
+ cp_len = len;
+ } else {
+ cp_len = SUBJECTOPTIONWINDOW_STRBUF_LEN;
+ }
+ memcpy(str, window->strbuf, cp_len * sizeof(TC));
+
+ return cp_len;
+}
+
+EXPORT W subjectoptionwindow_starttextboxaction(subjectoptionwindow_t *window)
+{
+ return 0;
+}
+
+EXPORT W subjectoptionwindow_gettextboxaction(subjectoptionwindow_t *window, TC *key, TC **val, W *len)
+{
+ W ret, len0;
+ WEVENT *wev;
+
+ wev = &window->savedwev;
+
+ for (;;) {
+ ret = cact_par(window->tb_filter_id, wev);
+ if (ret < 0) {
+ DP_ER("cact_par tb_filter_id error:", ret);
+ return ret;
+ }
+ switch (ret & 0xefff) {
+ case P_EVENT:
+ switch (wev->s.type) {
+ case EV_INACT:
+ case EV_REQUEST:
+ wugt_evt(wev);
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_FINISH;
+ case EV_DEVICE:
+ oprc_dev(&wev->e, NULL, 0);
+ break;
+ }
+ wev->s.type = EV_NULL;
+ continue;
+ case P_MENU:
+ wev->s.type = EV_NULL;
+ if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
+ *key = wev->e.data.key.code;
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_KEYMENU;
+ }
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_MENU;
+ case (0x4000|P_MOVE):
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_MOVE;
+ case (0x4000|P_COPY):
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_COPY;
+ case (0x4000|P_NL):
+ len0 = cget_val(window->tb_filter_id, 128, (W*)window->strbuf);
+ if (len0 <= 0) {
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_FINISH;
+ }
+ *val = window->strbuf;
+ *len = len0;
+ ret = cset_val(window->tb_filter_id, 0, NULL);
+ if (ret < 0) {
+ DP_ER("cset_val tb_filter_id error", ret);
+ return ret;
+ }
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_APPEND;
+ case (0x4000|P_TAB):
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_FINISH;
+ case (0x4000|P_BUT):
+ wugt_evt(wev);
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_FINISH;
+ default:
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_FINISH;
+ }
+ }
+
+ return SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_FINISH;
+}
+
+EXPORT W subjectoptionwindow_endtextboxaction(subjectoptionwindow_t *window)
+{
+ return 0;
+}
+
+LOCAL VOID subjectoptionwindow_draw(subjectoptionwindow_t *window, RECT *r)
+{
+ cdsp_pwd(window->wid, r, P_RDISP);
+}
+
+LOCAL VOID subjectoptionwindow_redisp(subjectoptionwindow_t *window)
+{
+ RECT r;
+ do {
+ if (wsta_dsp(window->wid, &r, NULL) == 0) {
+ break;
+ }
+ wera_wnd(window->wid, &r);
+ subjectoptionwindow_draw(window, &r);
+ } while (wend_dsp(window->wid) > 0);
+}
+
LOCAL VOID bchanlhmi_setswitchbutdnflag(bchanlhmi_t *hmi)
{
hmi->flag = hmi->flag | BCHANLHMI_FLAG_SWITCHBUTDN;
return hmi->bbsmenuwindow->wid;
}
+LOCAL WID bchanlhmi_getsubjectoptionWID(bchanlhmi_t *hmi)
+{
+ if (hmi->subjectoptionwindow == NULL) {
+ return -1;
+ }
+ return hmi->subjectoptionwindow->wid;
+}
+
LOCAL VOID bchanlhmi_weventrequest(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
{
- WID subject_wid, bbsmenu_wid;
+ WID subject_wid, bbsmenu_wid, subjectoption_wid;
subject_wid = bchanlhmi_getsubjectWID(hmi);
bbsmenu_wid = bchanlhmi_getbbsmenuWID(hmi);
+ subjectoption_wid = bchanlhmi_getsubjectoptionWID(hmi);
switch (wev->g.cmd) {
case W_REDISP: /*ºÆɽ¼¨Í×µá*/
evt->type = BCHANLHMIEVENT_TYPE_SUBJECT_DRAW;
} else if (wev->g.wid == bbsmenu_wid) {
evt->type = BCHANLHMIEVENT_TYPE_BBSMENU_DRAW;
+ } else if (wev->g.wid == subjectoption_wid) {
+ subjectoptionwindow_redisp(hmi->subjectoptionwindow);
}
break;
case W_PASTE: /*Ž¹þ¤ßÍ×µá*/
} else if (wev->g.wid == bbsmenu_wid) {
evt->type = BCHANLHMIEVENT_TYPE_BBSMENU_CLOSE;
evt->data.bbsmenu_close.save = True;
+ } else if (wev->g.wid == subjectoption_wid) {
+ subjectoptionwindow_close(hmi->subjectoptionwindow);
}
break;
case W_FINISH: /*ÇÑ´þ½ªÎ»*/
} else if (wev->g.wid == bbsmenu_wid) {
evt->type = BCHANLHMIEVENT_TYPE_BBSMENU_CLOSE;
evt->data.bbsmenu_close.save = False;
+ } else if (wev->g.wid == subjectoption_wid) {
+ subjectoptionwindow_close(hmi->subjectoptionwindow);
}
break;
}
sz->h = work.c.right - work.c.left;
}
+LOCAL VOID subjectoptionwindow_butdnwork(subjectoptionwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
+{
+ PAID id;
+ W ret;
+
+ ret = cfnd_par(window->wid, wev->s.pos, &id);
+ if (ret <= 0) {
+ return;
+ }
+ if (id == window->tb_filter_id) {
+ memcpy(&window->savedwev, wev, sizeof(WEVENT));
+ evt->type = BCHANLHMIEVENT_TYPE_SUBJECTOPTION_TEXTBOX;
+ return;
+ }
+ if (id == window->ws_order_id) {
+ ret = cact_par(window->ws_order_id, wev);
+ if ((ret & 0x5000) != 0x5000) {
+ return;
+ }
+ window->order = ret & 0xfff;
+ evt->type = BCHANLHMIEVENT_TYPE_SUBJECTOPTION_CHANGEORDER;
+ evt->data.subjectoption_changeorder.order = window->order;
+ return;
+ }
+ if (id == window->ws_orderby_id) {
+ ret = cact_par(window->ws_orderby_id, wev);
+ if ((ret & 0x5000) != 0x5000) {
+ return;
+ }
+ window->orderby = ret & 0xfff;
+ evt->type = BCHANLHMIEVENT_TYPE_SUBJECTOPTION_CHANGEORDERBY;
+ evt->data.subjectoption_changeorderby.orderby = window->orderby;
+ return;
+ }
+}
+
LOCAL VOID bchanlhmi_weventbutdn(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
{
W i;
- WID subject_wid, bbsmenu_wid;
+ WID subject_wid, bbsmenu_wid, subjectoption_wid;
subject_wid = bchanlhmi_getsubjectWID(hmi);
bbsmenu_wid = bchanlhmi_getbbsmenuWID(hmi);
+ subjectoption_wid = bchanlhmi_getsubjectoptionWID(hmi);
switch (wev->s.cmd) {
case W_PICT:
} else if (wev->s.wid == bbsmenu_wid) {
evt->type = BCHANLHMIEVENT_TYPE_BBSMENU_CLOSE;
evt->data.bbsmenu_close.save = True; /* TODO: tmp value. */
+ } else if (wev->s.wid == subjectoption_wid) {
+ subjectoptionwindow_close(hmi->subjectoptionwindow);
}
return;
case W_PRESS:
evt->type = BCHANLHMIEVENT_TYPE_SUBJECT_DRAW;
} else if (wev->s.wid == bbsmenu_wid) {
evt->type = BCHANLHMIEVENT_TYPE_BBSMENU_DRAW;
+ } else if (wev->s.wid == subjectoption_wid) {
+ subjectoptionwindow_redisp(hmi->subjectoptionwindow);
}
}
return;
evt->data.bbsmenu_resize.needdraw = False;
}
}
+ /* subject option window need not do nothing. */
return;
case W_RBAR:
if (wev->s.wid == subject_wid) {
} else if (wev->s.wid == bbsmenu_wid) {
windowscroll_weventrbar(&hmi->bbsmenuwindow->wscr, wev);
}
- /* ngword window need not do nothing. */
+ /* subject option window need not do nothing. */
return;
case W_BBAR:
if (wev->s.wid == subject_wid) {
} else if (wev->s.wid == bbsmenu_wid) {
windowscroll_weventbbar(&hmi->bbsmenuwindow->wscr, wev);
}
- /* ngword window need not do nothing. */
+ /* subject option window need not do nothing. */
return;
case W_WORK:
if (wev->s.wid == subject_wid) {
evt->data.bbsmenu_butdn.type = wchk_dck(wev->s.time);
evt->data.bbsmenu_butdn.pos = wev->s.pos;
memcpy(&hmi->bbsmenuwindow->savedwev, wev, sizeof(WEVENT));
+ } else if (wev->s.wid == subjectoption_wid) {
+ subjectoptionwindow_butdnwork(hmi->subjectoptionwindow, wev, evt);
}
return;
}
LOCAL VOID bchanlhmi_weventreswitch(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
{
- WID subject_wid, bbsmenu_wid;
+ WID subject_wid, bbsmenu_wid, subjectoption_wid;
subject_wid = bchanlhmi_getsubjectWID(hmi);
bbsmenu_wid = bchanlhmi_getbbsmenuWID(hmi);
+ subjectoption_wid = bchanlhmi_getsubjectoptionWID(hmi);
if (wev->s.wid == subject_wid) {
evt->type = BCHANLHMIEVENT_TYPE_SUBJECT_SWITCH;
} else if (wev->s.wid == bbsmenu_wid) {
evt->type = BCHANLHMIEVENT_TYPE_BBSMENU_SWITCH;
evt->data.bbsmenu_switch.needdraw = True;
+ } else if (wev->s.wid == subjectoption_wid) {
+ subjectoptionwindow_redisp(hmi->subjectoptionwindow);
}
bchanlhmi_setswitchbutdnflag(hmi);
}
EXPORT W bchanlhmi_getevent(bchanlhmi_t *hmi, bchanlhmievent_t **evt)
{
WEVENT *wev0;
- WID subject_wid, bbsmenu_wid;
+ WID subject_wid, bbsmenu_wid, subjectoption_wid;
Bool ok;
subject_wid = bchanlhmi_getsubjectWID(hmi);
bbsmenu_wid = bchanlhmi_getbbsmenuWID(hmi);
+ subjectoption_wid = bchanlhmi_getsubjectoptionWID(hmi);
hmi->evt.type = BCHANLHMIEVENT_TYPE_NONE;
wev0 = &hmi->wev;
hmi->evt.data.bbsmenu_mousemove.stat = wev0->s.stat;
break;
}
+ if (wev0->s.wid == subjectoption_wid) {
+ cidl_par(wev0->s.wid, &wev0->s.pos);
+ break;
+ }
break;
case EV_REQUEST:
bchanlhmi_weventrequest(hmi, wev0, &hmi->evt);
hmi->bbsmenuwindow = NULL;
}
+LOCAL subjectoptionwindow_t* subjectoptionwindow_new(PNT *p, WID parent, W dnum_filter, W dnum_order, W dnum_orderby)
+{
+ subjectoptionwindow_t *window;
+ W err;
+
+ window = (subjectoptionwindow_t*)malloc(sizeof(subjectoptionwindow_t));
+ if (window == NULL) {
+ DP_ER("malloc error:", 0);
+ return NULL;
+ }
+ window->wid = -1;
+ window->gid = -1;
+ window->parent = parent;
+ window->r.p.lefttop = *p;
+ window->r.p.rightbot.x = p->x + 8+360+8+80+8 + 7;
+ window->r.p.rightbot.y = p->y + 8+24+16+70+8 + 7;
+ err = wget_inf(WI_PANELBACK, &window->bgpat, sizeof(PAT));
+ if (err != sizeof(PAT)) {
+ DP_ER("wget_inf error:", err);
+ window->bgpat.spat.kind = 0;
+ window->bgpat.spat.hsize = 16;
+ window->bgpat.spat.vsize = 16;
+ window->bgpat.spat.fgcol = 0x10ffffff;
+ window->bgpat.spat.bgcol = 0;
+ window->bgpat.spat.mask = FILL100;
+ }
+ window->dnum_filter = dnum_filter;
+ window->dnum_order = dnum_order;
+ window->dnum_orderby = dnum_orderby;
+ window->tb_filter_id = -1;
+ window->ws_order_id = -1;
+ window->ws_orderby_id = -1;
+ window->order = SUBJECTOPTIONWINDOW_ORDER_ASCENDING;
+ window->orderby = SUBJECTOPTIONWINDOW_ORDERBY_NUMBER;
+ memset(window->strbuf, 0, sizeof(TC)*SUBJECTOPTIONWINDOW_STRBUF_LEN);
+
+ return window;
+}
+
+LOCAL VOID subjectoptionwindow_delete(subjectoptionwindow_t *window)
+{
+ if (window->wid > 0) {
+ cdel_pwd(window->wid, NOCLR);
+ wcls_wnd(window->wid, CLR);
+ }
+ free(window);
+}
+
+EXPORT subjectoptionwindow_t *bchanlhmi_newsubjectoptionwindow(bchanlhmi_t *hmi, PNT *p, W dnum_filter, W dnum_order, W dnum_orderby)
+{
+ W subject_wid;
+ subject_wid = bchanlhmi_getsubjectWID(hmi);
+ if (subject_wid < 0) {
+ DP_ER("subject window not exist", 0);
+ return NULL;
+ }
+ hmi->subjectoptionwindow = subjectoptionwindow_new(p, subject_wid, dnum_filter, dnum_order, dnum_orderby);
+ return hmi->subjectoptionwindow;
+}
+
+EXPORT VOID bchanlhmi_deletesubjectoptionwindow(bchanlhmi_t *hmi, subjectoptionwindow_t *window)
+{
+ subjectoptionwindow_delete(window);
+ hmi->subjectoptionwindow = NULL;
+}
+
EXPORT bchanlhmi_t* bchanlhmi_new()
{
bchanlhmi_t *hmi;
}
hmi->subjectwindow = NULL;
hmi->bbsmenuwindow = NULL;
+ hmi->subjectoptionwindow = NULL;
return hmi;
}
EXPORT VOID bchanlhmi_delete(bchanlhmi_t *hmi)
{
+ if (hmi->subjectoptionwindow != NULL) {
+ subjectoptionwindow_delete(hmi->subjectoptionwindow);
+ }
if (hmi->bbsmenuwindow != NULL) {
bbsmenuwindow_delete(hmi->bbsmenuwindow);
}
IMPORT W bbsmenuwindow_settitle(bbsmenuwindow_t *window, TC *title);
IMPORT Bool bbsmenuwindow_isactive(bbsmenuwindow_t *window);
+typedef struct subjectoptionwindow_t_ subjectoptionwindow_t;
+
+IMPORT W subjectoptionwindow_open(subjectoptionwindow_t *window);
+IMPORT VOID subjectoptionwindow_close(subjectoptionwindow_t *window);
+IMPORT Bool subjectoptionwindow_isopen(subjectoptionwindow_t *window);
+IMPORT W subjectoptionwindow_setorder(subjectoptionwindow_t *window, W order);
+IMPORT W subjectoptionwindow_setorderby(subjectoptionwindow_t *window, W orderby);
+IMPORT W subjectoptionwindow_settext(subjectoptionwindow_t *window, TC *str, W len);
+#define SUBJECTOPTIONWINDOW_ORDER_ASCENDING 1
+#define SUBJECTOPTIONWINDOW_ORDER_DESCENDING 2
+IMPORT W subjectoptionwindow_getorder(subjectoptionwindow_t *window);
+#define SUBJECTOPTIONWINDOW_ORDERBY_NUMBER 1
+#define SUBJECTOPTIONWINDOW_ORDERBY_RES 2
+#define SUBJECTOPTIONWINDOW_ORDERBY_SINCE 3
+#define SUBJECTOPTIONWINDOW_ORDERBY_VIGOR 4
+IMPORT W subjectoptionwindow_getorderby(subjectoptionwindow_t *window);
+IMPORT W subjectoptionwindow_gettext(subjectoptionwindow_t *window, TC *str, W len);
+IMPORT W subjectoptionwindow_starttextboxaction(subjectoptionwindow_t *window);
+#define SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_FINISH 0
+#define SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_MENU 1
+#define SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_KEYMENU 2
+#define SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_MOVE 3
+#define SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_COPY 4
+#define SUBJECTOPTIONWINDOW_GETTEXTBOXACTION_APPEND 5
+IMPORT W subjectoptionwindow_gettextboxaction(subjectoptionwindow_t *window, TC *key, TC **val, W *len);
+IMPORT W subjectoptionwindow_endtextboxaction(subjectoptionwindow_t *window);
+
enum {
BCHANLHMIEVENT_TYPE_NONE,
BCHANLHMIEVENT_TYPE_COMMON_MOUSEMOVE,
BCHANLHMIEVENT_TYPE_BBSMENU_PASTE,
BCHANLHMIEVENT_TYPE_BBSMENU_SWITCH,
BCHANLHMIEVENT_TYPE_BBSMENU_MOUSEMOVE,
+ BCHANLHMIEVENT_TYPE_SUBJECTOPTION_CHANGEORDER,
+ BCHANLHMIEVENT_TYPE_SUBJECTOPTION_CHANGEORDERBY,
+ BCHANLHMIEVENT_TYPE_SUBJECTOPTION_TEXTBOX,
};
struct bchanlhmi_eventdata_mousemove_t_ {
UW stat;
};
+struct subjectoptionwindow_eventdata_changeorder_t_ {
+ W order;
+};
+
+struct subjectoptionwindow_eventdata_changeorderby_t_ {
+ W orderby;
+};
+
typedef struct bchanlhmi_eventdata_mousemove_t_ bchanlhmi_eventdata_mousemove_t;
typedef struct bchanlhmi_eventdata_keydown_t_ bchanlhmi_eventdata_keydown_t;
typedef struct bchanlhmi_eventdata_menu_t_ bchanlhmi_eventdata_menu_t;
typedef struct bbsmenuwindow_eventdata_paste_t_ bbsmenuwindow_eventdata_paste_t;
typedef struct bbsmenuwindow_eventdata_switch_t_ bbsmenuwindow_eventdata_switch_t;
typedef struct bbsmenuwindow_eventdata_mousemove_t_ bbsmenuwindow_eventdata_mousemove_t;
+typedef struct subjectoptionwindow_eventdata_changeorder_t_ subjectoptionwindow_eventdata_changeorder_t;
+typedef struct subjectoptionwindow_eventdata_changeorderby_t_ subjectoptionwindow_eventdata_changeorderby_t;
struct bchanlhmievent_t_ {
W type;
bbsmenuwindow_eventdata_paste_t bbsmenu_paste;
bbsmenuwindow_eventdata_switch_t bbsmenu_switch;
bbsmenuwindow_eventdata_mousemove_t bbsmenu_mousemove;
+ subjectoptionwindow_eventdata_changeorder_t subjectoption_changeorder;
+ subjectoptionwindow_eventdata_changeorderby_t subjectoption_changeorderby;
} data;
};
typedef struct bchanlhmievent_t_ bchanlhmievent_t;
IMPORT W bchanlhmi_getevent(bchanlhmi_t *hmi, bchanlhmievent_t **evt);
IMPORT subjectwindow_t* bchanlhmi_newsubjectwindow(bchanlhmi_t *hmi, RECT *r, TC *title, PAT *bgpat, subjectwindow_scrollcalback scrollcallback, VP arg);
IMPORT bbsmenuwindow_t *bchanlhmi_newbbsmenuwindow(bchanlhmi_t *hmi, RECT *r, TC *title, PAT *bgpat, bbsmenuwindow_scrollcalback scrollcallback, VP arg);
+IMPORT subjectoptionwindow_t *bchanlhmi_newsubjectoptionwindow(bchanlhmi_t *hmi, PNT *p, W dnum_text, W dnum_orderselect, W dnum_orderbyselect);
IMPORT VOID bchanlhmi_deletesubjectwindow(bchanlhmi_t *hmi, subjectwindow_t *window);
IMPORT VOID bchanlhmi_deletebbsmenuwindow(bchanlhmi_t *hmi, bbsmenuwindow_t *window);
+IMPORT VOID bchanlhmi_deletesubjectoptionwindow(bchanlhmi_t *hmi, subjectoptionwindow_t *window);
#endif