OSDN Git Service

add window for register external bbs.
authorornse01 <ornse01@users.sourceforge.jp>
Sun, 15 Apr 2012 09:31:57 +0000 (09:31 +0000)
committerornse01 <ornse01@users.sourceforge.jp>
Sun, 15 Apr 2012 09:31:57 +0000 (09:31 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchanl/trunk@440 20a0b8eb-f62a-4a12-8fe1-b598822500fb

src/bchanl_hmi.c
src/bchanl_hmi.h
src/bchanl_hmi.yaml

index ccf136b..dbc7692 100644 (file)
@@ -96,6 +96,41 @@ struct subjectoptionwindow_t_ {
        } orderby;
 };
 
+struct registerexternalwindow_t_ {
+       UW flag;
+       WID wid;
+       GID gid;
+       WID parent;
+       RECT r;
+       PAT bgpat;
+       TC title[256+1];
+       WEVENT savedwev;
+       struct {
+               PAID id;
+               
+               TC buf[1000+7+1];
+               W buf_written;
+               Bool appended;
+               Bool nextaction;
+       } boradname;
+       struct {
+               PAID id;
+               
+               TC buf[1000+7+1];
+               W buf_written;
+               Bool appended;
+               Bool nextaction;
+       } url;
+       struct {
+               PAID id;
+               
+       } determine;
+       struct {
+               PAID id;
+               
+       } cancel;
+};
+
 #define BCHANLHMI_FLAG_SWITCHBUTDN 0x00000001
 
 struct bchanlhmi_t_ {
@@ -105,6 +140,7 @@ struct bchanlhmi_t_ {
        subjectwindow_t *subjectwindow;
        bbsmenuwindow_t *bbsmenuwindow;
        subjectoptionwindow_t *subjectoptionwindow;
+       registerexternalwindow_t *registerexternalwindow;
 };
 
 #define SUBJECTWINDOW_FLAG_DRAWREQUEST 0x00000001
@@ -776,6 +812,363 @@ EXPORT VOID subjectoptionwindow_close(subjectoptionwindow_t *window)
        window->gid = -1;
 }
 
+#define REGISTEREXTERNALWINDOW_FLAG_DRAWREQUEST 0x00000001
+#define REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT 0x0000000f
+#define REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION 0x00000010
+
+#define registerexternalwindow_setflag(window, flagx) (window)->flag = (window)->flag | (flagx)
+#define registerexternalwindow_clearflag(window, flagx) (window)->flag = (window)->flag & ~(flagx)
+#define registerexternalwindow_issetflag(window, flagx) (((window)->flag & (flagx)) == 0 ? False : True)
+
+EXPORT W registerexternalwindow_setboradnametext(registerexternalwindow_t *window, TC *str, W len)
+{
+       W cp_len;
+
+       if (len < 1000) {
+               cp_len = len;
+       } else {
+               cp_len = 1000;
+       }
+       memcpy(window->boradname.buf+7, str, cp_len * sizeof(TC));
+       window->boradname.buf[7 + cp_len] = TNULL;
+       window->boradname.buf_written = cp_len;
+       if (window->wid < 0) {
+               return 0;
+       }
+
+       return cset_val(window->boradname.id, cp_len, (W*)(window->boradname.buf+7));
+}
+
+EXPORT W registerexternalwindow_getboradnametext(registerexternalwindow_t *window, TC *str, W len)
+{
+       W err, cp_len;
+
+       if (window->wid > 0) {
+               err = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
+               if (err < 0) {
+                       return err;
+               }
+               window->boradname.buf_written = err;
+       }
+
+       if (len < window->boradname.buf_written) {
+               cp_len = len;
+       } else {
+               cp_len = window->boradname.buf_written;
+       }
+       memcpy(str, window->boradname.buf + 7, cp_len * sizeof(TC));
+
+       return cp_len;
+}
+
+LOCAL VOID registerexternalwindow_actionboradname(registerexternalwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
+{
+       W i, len;
+
+       i = cact_par(window->boradname.id, wev);
+       if (i & 0x2000) {
+               window->boradname.nextaction = True;
+               registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT);
+               wugt_evt(wev);
+               return;
+       }
+       window->boradname.nextaction = False;
+       if (i & 0x1000) {
+               len = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
+               if (len > 0) {
+                       window->boradname.buf_written = len;
+               }
+       }
+       switch (i & 7) {
+       case    P_BUT:
+               wugt_evt(wev);
+               break;
+       case    P_TAB:
+               break;
+       case    P_NL:
+       case    P_END:
+               evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_DETERMINE;
+               evt->data.registerexternalwindow_boradname_determine.value = window->boradname.buf+7;
+               evt->data.registerexternalwindow_boradname_determine.len = window->boradname.buf_written;
+               break;
+       case    P_MOVE:
+               evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_MOVE;
+               evt->data.registerexternalwindow_boradname_move.rel_wid = wev->s.wid;
+               evt->data.registerexternalwindow_boradname_move.pos = wev->s.pos;
+               break;
+       case    P_COPY:
+               evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_COPY;
+               evt->data.registerexternalwindow_boradname_copy.rel_wid = wev->s.wid;
+               evt->data.registerexternalwindow_boradname_copy.pos = wev->s.pos;
+               break;
+       case    P_MENU:
+               if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
+                       evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_KEYMENU;
+                       evt->data.registerexternalwindow_boradname_keymenu.keycode = wev->e.data.key.code;
+               } else {
+                       evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_MENU;
+                       evt->data.registerexternalwindow_boradname_menu.pos = wev->s.pos;
+               }
+               window->boradname.nextaction = True;
+               registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
+               wugt_evt(wev);
+               break;
+       }
+}
+
+EXPORT W registerexternalwindow_seturltext(registerexternalwindow_t *window, TC *str, W len)
+{
+       W cp_len;
+
+       if (len < 1000) {
+               cp_len = len;
+       } else {
+               cp_len = 1000;
+       }
+       memcpy(window->url.buf+7, str, cp_len * sizeof(TC));
+       window->url.buf[7 + cp_len] = TNULL;
+       window->url.buf_written = cp_len;
+       if (window->wid < 0) {
+               return 0;
+       }
+
+       return cset_val(window->url.id, cp_len, (W*)(window->url.buf+7));
+}
+
+EXPORT W registerexternalwindow_geturltext(registerexternalwindow_t *window, TC *str, W len)
+{
+       W err, cp_len;
+
+       if (window->wid > 0) {
+               err = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
+               if (err < 0) {
+                       return err;
+               }
+               window->url.buf_written = err;
+       }
+
+       if (len < window->url.buf_written) {
+               cp_len = len;
+       } else {
+               cp_len = window->url.buf_written;
+       }
+       memcpy(str, window->url.buf + 7, cp_len * sizeof(TC));
+
+       return cp_len;
+}
+
+LOCAL VOID registerexternalwindow_actionurl(registerexternalwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
+{
+       W i, len;
+
+       i = cact_par(window->url.id, wev);
+       if (i & 0x2000) {
+               window->url.nextaction = True;
+               registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT);
+               wugt_evt(wev);
+               return;
+       }
+       window->url.nextaction = False;
+       if (i & 0x1000) {
+               len = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
+               if (len > 0) {
+                       window->url.buf_written = len;
+               }
+       }
+       switch (i & 7) {
+       case    P_BUT:
+               wugt_evt(wev);
+               break;
+       case    P_TAB:
+               break;
+       case    P_NL:
+       case    P_END:
+               evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_DETERMINE;
+               evt->data.registerexternalwindow_url_determine.value = window->url.buf+7;
+               evt->data.registerexternalwindow_url_determine.len = window->url.buf_written;
+               break;
+       case    P_MOVE:
+               evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_MOVE;
+               evt->data.registerexternalwindow_url_move.rel_wid = wev->s.wid;
+               evt->data.registerexternalwindow_url_move.pos = wev->s.pos;
+               break;
+       case    P_COPY:
+               evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_COPY;
+               evt->data.registerexternalwindow_url_copy.rel_wid = wev->s.wid;
+               evt->data.registerexternalwindow_url_copy.pos = wev->s.pos;
+               break;
+       case    P_MENU:
+               if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
+                       evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_KEYMENU;
+                       evt->data.registerexternalwindow_url_keymenu.keycode = wev->e.data.key.code;
+               } else {
+                       evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_MENU;
+                       evt->data.registerexternalwindow_url_menu.pos = wev->s.pos;
+               }
+               window->url.nextaction = True;
+               registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
+               wugt_evt(wev);
+               break;
+       }
+}
+
+LOCAL VOID registerexternalwindow_draw(registerexternalwindow_t *window, RECT *r)
+{
+       cdsp_pwd(window->wid, r, P_RDISP);
+}
+
+LOCAL VOID registerexternalwindow_redisp(registerexternalwindow_t *window)
+{
+       RECT r;
+       do {
+               if (wsta_dsp(window->wid, &r, NULL) == 0) {
+                       break;
+               }
+               wera_wnd(window->wid, &r);
+               registerexternalwindow_draw(window, &r);
+       } while (wend_dsp(window->wid) > 0);
+}
+
+EXPORT W registerexternalwindow_requestredisp(registerexternalwindow_t *window)
+{
+       return wreq_dsp(window->wid);
+}
+
+EXPORT GID registerexternalwindow_getGID(registerexternalwindow_t *window)
+{
+       return wget_gid(window->wid);
+}
+
+EXPORT WID registerexternalwindow_getWID(registerexternalwindow_t *window)
+{
+       return window->wid;
+}
+
+EXPORT W registerexternalwindow_settitle(registerexternalwindow_t *window, TC *title)
+{
+       tc_strncpy(window->title, title, 256);
+       window->title[256] = TNULL;
+       return wset_tit(window->wid, -1, window->title, 0);
+}
+
+EXPORT Bool registerexternalwindow_isactive(registerexternalwindow_t *window)
+{
+       WID wid;
+       wid = wget_act(NULL);
+       if (window->wid == wid) {
+               return True;
+       }
+       return False;
+}
+
+LOCAL VOID registerexternalwindow_butdnwork(registerexternalwindow_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->boradname.id) {
+               memcpy(&window->savedwev, wev, sizeof(WEVENT));
+               registerexternalwindow_actionboradname(window, wev, evt);
+               return;
+       }
+       if (id == window->url.id) {
+               memcpy(&window->savedwev, wev, sizeof(WEVENT));
+               registerexternalwindow_actionurl(window, wev, evt);
+               return;
+       }
+       if (id == window->determine.id) {
+               ret = cact_par(window->determine.id, wev);
+               if ((ret & 0x5000) != 0x5000) {
+                       return;
+               }
+               evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_DETERMINE_PUSH;
+               return;
+       }
+       if (id == window->cancel.id) {
+               ret = cact_par(window->cancel.id, wev);
+               if ((ret & 0x5000) != 0x5000) {
+                       return;
+               }
+               evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_CANCEL_PUSH;
+               return;
+       }
+}
+
+EXPORT W registerexternalwindow_open(registerexternalwindow_t *window)
+{
+       WID wid;
+       RECT r;
+
+       if (window->wid > 0) {
+               return 0;
+       }
+
+       wid = wopn_wnd(WA_STD, window->parent, &(window->r), NULL, 2, window->title, &window->bgpat, NULL);
+       if (wid < 0) {
+               DP_ER("wopn_wnd: subjectoption error", wid);
+               return wid;
+       }
+       window->wid = wid;
+       window->gid = wget_gid(wid);
+
+       r = (RECT){{8, 8, 368, 34}};
+       window->boradname.id = ccre_tbx(wid, TB_PARTS|P_DISP, &r, 1000, window->boradname.buf, NULL);
+       if (window->boradname.id < 0) {
+               DP_ER("ccre_xxx boradname error:", window->boradname.id);
+       }
+       r = (RECT){{8, 38, 368, 64}};
+       window->url.id = ccre_tbx(wid, TB_PARTS|P_DISP, &r, 1000, window->url.buf, NULL);
+       if (window->url.id < 0) {
+               DP_ER("ccre_xxx url error:", window->url.id);
+       }
+       r = (RECT){{158, 108, 300, 134}};
+       window->determine.id = ccre_msw(wid, MS_PARTS|P_DISP, &r, (TC[]){MC_STR, 0x3768, 0x446a, TNULL}, NULL);
+       if (window->determine.id < 0) {
+               DP_ER("ccre_xxx determine error:", window->determine.id);
+       }
+       r = (RECT){{8, 108, 150, 134}};
+       window->cancel.id = ccre_msw(wid, MS_PARTS|P_DISP, &r, (TC[]){MC_STR, 0x3c68, 0x246a, 0x3e43, 0x2437, TNULL}, NULL);
+       if (window->cancel.id < 0) {
+               DP_ER("ccre_xxx cancel error:", window->cancel.id);
+       }
+
+       wreq_dsp(wid);
+
+       return 0;
+}
+
+EXPORT VOID registerexternalwindow_close(registerexternalwindow_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;
+       }
+       err = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
+       if (err >= 0) {
+               window->url.buf_written = err;
+       }
+       err = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
+       if (err >= 0) {
+               window->boradname.buf_written = err;
+       }
+       cdel_pwd(window->wid, NOCLR);
+       wcls_wnd(window->wid, CLR);
+       window->wid = -1;
+       window->gid = -1;
+}
+
 LOCAL VOID bchanlhmi_setswitchbutdnflag(bchanlhmi_t *hmi)
 {
        hmi->flag = hmi->flag | BCHANLHMI_FLAG_SWITCHBUTDN;
@@ -818,6 +1211,14 @@ LOCAL Bool bchanlhmi_issubjectoptionwindowWID(bchanlhmi_t *hmi, WID wid)
        return False;
 }
 
+LOCAL Bool bchanlhmi_isregisterexternalwindowWID(bchanlhmi_t *hmi, WID wid)
+{
+       if (hmi->registerexternalwindow->wid == wid) {
+               return True;
+       }
+       return False;
+}
+
 LOCAL VOID bchanlhmi_weventnull(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
 {
        cidl_par(wev->s.wid, &wev->s.pos);
@@ -841,6 +1242,10 @@ LOCAL VOID bchanlhmi_weventnull(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t
                cidl_par(wev->s.wid, &wev->s.pos);
                return;
        }
+       if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
+               cidl_par(wev->s.wid, &wev->s.pos);
+               return;
+       }
        /*¥¦¥£¥ó¥É¥¦³°*/
        hmi->evt.type = BCHANLHMIEVENT_TYPE_COMMON_MOUSEMOVE;
        hmi->evt.data.common_mousemove.pos = wev->s.pos;
@@ -862,6 +1267,10 @@ LOCAL VOID bchanlhmi_weventrequest(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent
                        subjectoptionwindow_redisp(hmi->subjectoptionwindow);
                        break;
                }
+               if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->g.wid) == True) {
+                       registerexternalwindow_redisp(hmi->registerexternalwindow);
+                       break;
+               }
                break;
        case    W_PASTE:        /*Ž¹þ¤ßÍ×µá*/
                if (bchanlhmi_issubjectwindowWID(hmi, wev->g.wid) == True) {
@@ -887,6 +1296,10 @@ LOCAL VOID bchanlhmi_weventrequest(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent
                        subjectoptionwindow_close(hmi->subjectoptionwindow);
                        break;
                }
+               if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->g.wid) == True) {
+                       registerexternalwindow_close(hmi->registerexternalwindow);
+                       break;
+               }
                break;
        case    W_FINISH:       /*ÇÑ´þ½ªÎ»*/
                wrsp_evt(wev, 0);       /*ACK*/
@@ -904,6 +1317,10 @@ LOCAL VOID bchanlhmi_weventrequest(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent
                        subjectoptionwindow_close(hmi->subjectoptionwindow);
                        break;
                }
+               if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->g.wid) == True) {
+                       registerexternalwindow_close(hmi->registerexternalwindow);
+                       break;
+               }
                break;
        }
 }
@@ -931,6 +1348,10 @@ LOCAL VOID bchanlhmi_weventbutdn(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t
                                subjectoptionwindow_close(hmi->subjectoptionwindow);
                                return;
                        }
+                       if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
+                               registerexternalwindow_close(hmi->registerexternalwindow);
+                               return;
+                       }
                        return;
                case    W_PRESS:
                        break;
@@ -952,6 +1373,10 @@ LOCAL VOID bchanlhmi_weventbutdn(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t
                                subjectoptionwindow_redisp(hmi->subjectoptionwindow);
                                return;
                        }
+                       if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
+                               registerexternalwindow_redisp(hmi->registerexternalwindow);
+                               return;
+                       }
                }
                return;
        case    W_LTHD:
@@ -1065,6 +1490,10 @@ LOCAL VOID bchanlhmi_weventbutdn(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t
                        subjectoptionwindow_butdnwork(hmi->subjectoptionwindow, wev, evt);
                        return;
                }
+               if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
+                       registerexternalwindow_butdnwork(hmi->registerexternalwindow, wev, evt);
+                       return;
+               }
                return;
        }
 
@@ -1089,6 +1518,10 @@ LOCAL VOID bchanlhmi_weventreswitch(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmieven
                subjectoptionwindow_redisp(hmi->subjectoptionwindow);
                return;
        }
+       if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
+               registerexternalwindow_redisp(hmi->registerexternalwindow);
+               return;
+       }
 }
 
 LOCAL VOID bchanlhmi_receivemessage(bchanlhmi_t *hmi, bchanlhmievent_t *evt)
@@ -1186,6 +1619,23 @@ LOCAL Bool bchanlhmi_checkflag(bchanlhmi_t *hmi, bchanlhmievent_t **evt)
                        return True;
                }
        }
+       if (registerexternalwindow_issetflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT) == True) {
+               registerexternalwindow_clearflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT);
+               registerexternalwindow_setflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
+               return False;
+       } else if (registerexternalwindow_issetflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION) == True) {
+               registerexternalwindow_clearflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
+               if (hmi->registerexternalwindow->boradname.nextaction == True) {
+                       hmi->wev.s.type = EV_NULL;
+                       registerexternalwindow_actionboradname(hmi->registerexternalwindow, &hmi->wev, &hmi->evt);
+                       return True;
+               }
+               if (hmi->registerexternalwindow->url.nextaction == True) {
+                       hmi->wev.s.type = EV_NULL;
+                       registerexternalwindow_actionurl(hmi->registerexternalwindow, &hmi->wev, &hmi->evt);
+                       return True;
+               }
+       }
 
        return False;
 }
@@ -1221,6 +1671,11 @@ EXPORT W bchanlhmi_getevent(bchanlhmi_t *hmi, bchanlhmievent_t **evt)
                subjectoptionwindow_clearflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_DRAWREQUEST);
                return 0;
        }
+       if (registerexternalwindow_issetflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_DRAWREQUEST) == True) {
+               registerexternalwindow_redisp(hmi->registerexternalwindow);
+               registerexternalwindow_clearflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_DRAWREQUEST);
+               return 0;
+       }
 
        ok = bchanlhmi_checkflag(hmi, evt);
        if (ok == True) {
@@ -1404,6 +1859,68 @@ LOCAL VOID subjectoptionwindow_delete(subjectoptionwindow_t *window)
        free(window);
 }
 
+EXPORT registerexternalwindow_t* registerexternalwindow_new(PNT *p, WID parent, TC *title, PAT *bgpat)
+{
+       registerexternalwindow_t *window;
+
+       window = (registerexternalwindow_t*)malloc(sizeof(registerexternalwindow_t));
+       if (window == NULL) {
+               return NULL;
+       }
+       window->wid = -1;
+       window->gid = -1;
+       window->parent = parent;
+       window->r.c.left = p->x;
+       window->r.c.top = p->y;
+       window->r.c.right = p->x + 400;
+       window->r.c.bottom = p->y + 200;
+       tc_strset(window->title, TNULL, 256+1);
+       if (title != 0) {
+               tc_strncpy(window->title, title, 256);
+       } else {
+               window->title[0] = 0x3330;
+               window->title[1] = 0x4974;
+               window->title[2] = 0x4844;
+               window->title[3] = 0x244e;
+               window->title[4] = 0x4449;
+               window->title[5] = 0x3243;
+       }
+       window->boradname.id = -1;
+       memset(window->boradname.buf, 0, sizeof(TC)*1000);
+       window->boradname.buf[0] = MC_ATTR;
+       *(COLOR*)(window->boradname.buf + 1) = -1;
+       window->boradname.buf[3] = -1;
+       window->boradname.buf[4] = 0;
+       window->boradname.buf[5] = 16;
+       window->boradname.buf[6] = 16;
+       window->boradname.buf[7] = TNULL;
+       window->boradname.nextaction = False;
+       window->url.id = -1;
+       memset(window->url.buf, 0, sizeof(TC)*1000);
+       window->url.buf[0] = MC_ATTR;
+       *(COLOR*)(window->url.buf + 1) = -1;
+       window->url.buf[3] = -1;
+       window->url.buf[4] = 0;
+       window->url.buf[5] = 16;
+       window->url.buf[6] = 16;
+       window->url.buf[7] = TNULL;
+       window->url.nextaction = False;
+       window->determine.id = -1;
+       window->cancel.id = -1;
+
+
+       return window;
+}
+
+LOCAL VOID registerexternalwindow_delete(registerexternalwindow_t *window)
+{
+       if (window->wid > 0) {
+               cdel_pwd(window->wid, NOCLR);
+               wcls_wnd(window->wid, CLR);
+       }
+       free(window);
+}
+
 EXPORT subjectwindow_t* bchanlhmi_newsubjectwindow(bchanlhmi_t *hmi, RECT *r, WID parent, TC *title, PAT *bgpat)
 {
        if (hmi->subjectwindow != NULL) {
@@ -1452,6 +1969,21 @@ EXPORT VOID bchanlhmi_deletesubjectoptionwindow(bchanlhmi_t *hmi, subjectoptionw
        hmi->subjectoptionwindow = NULL;
 }
 
+EXPORT registerexternalwindow_t* bchanlhmi_newregisterexternalwindow(bchanlhmi_t *hmi, PNT *p, WID parent, TC *title, PAT *bgpat)
+{
+       if (hmi->registerexternalwindow != NULL) {
+               return NULL;
+       }
+       hmi->registerexternalwindow = registerexternalwindow_new(p, parent, title, bgpat);
+       return hmi->registerexternalwindow;
+}
+
+EXPORT VOID bchanlhmi_deleteregisterexternalwindow(bchanlhmi_t *hmi, registerexternalwindow_t *window)
+{
+       registerexternalwindow_delete(hmi->registerexternalwindow);
+       hmi->registerexternalwindow = NULL;
+}
+
 
 EXPORT bchanlhmi_t* bchanlhmi_new()
 {
@@ -1465,6 +1997,7 @@ EXPORT bchanlhmi_t* bchanlhmi_new()
        hmi->subjectwindow = NULL;
        hmi->bbsmenuwindow = NULL;
        hmi->subjectoptionwindow = NULL;
+       hmi->registerexternalwindow = NULL;
 
        return hmi;
 }
@@ -1480,5 +2013,8 @@ EXPORT VOID bchanlhmi_delete(bchanlhmi_t *hmi)
        if (hmi->subjectoptionwindow != NULL) {
                subjectoptionwindow_delete(hmi->subjectoptionwindow);
        }
+       if (hmi->registerexternalwindow != NULL) {
+               registerexternalwindow_delete(hmi->registerexternalwindow);
+       }
        free(hmi);
 }
index 5a6d57c..7b8cabb 100644 (file)
@@ -106,6 +106,22 @@ typedef enum SUBJECTOPTIONWINDOW_ORDERBYVALUE_T_ SUBJECTOPTIONWINDOW_ORDERBYVALU
 IMPORT W subjectoptionwindow_setorderbyvalue(subjectoptionwindow_t *window, SUBJECTOPTIONWINDOW_ORDERBYVALUE_T value);
 IMPORT W subjectoptionwindow_getorderbyvalue(subjectoptionwindow_t *window, SUBJECTOPTIONWINDOW_ORDERBYVALUE_T *value);
 
+typedef struct registerexternalwindow_t_ registerexternalwindow_t;
+
+IMPORT W registerexternalwindow_requestredisp(registerexternalwindow_t *window);
+IMPORT GID registerexternalwindow_getGID(registerexternalwindow_t *window);
+IMPORT WID registerexternalwindow_getWID(registerexternalwindow_t *window);
+IMPORT W registerexternalwindow_settitle(registerexternalwindow_t *window, TC *title);
+IMPORT Bool registerexternalwindow_isactive(registerexternalwindow_t *window);
+IMPORT W registerexternalwindow_open(registerexternalwindow_t *window);
+IMPORT VOID registerexternalwindow_close(registerexternalwindow_t *window);
+IMPORT W registerexternalwindow_setboradnametext(registerexternalwindow_t *window, TC *str, W len);
+IMPORT W registerexternalwindow_getboradnametext(registerexternalwindow_t *window, TC *str, W len);
+IMPORT W registerexternalwindow_endboradnameaction(registerexternalwindow_t *window);
+IMPORT W registerexternalwindow_seturltext(registerexternalwindow_t *window, TC *str, W len);
+IMPORT W registerexternalwindow_geturltext(registerexternalwindow_t *window, TC *str, W len);
+IMPORT W registerexternalwindow_endurlaction(registerexternalwindow_t *window);
+
 enum {
        BCHANLHMIEVENT_TYPE_NONE,
        BCHANLHMIEVENT_TYPE_COMMON_MOUSEMOVE,
@@ -132,6 +148,18 @@ enum {
        BCHANLHMIEVENT_TYPE_SUBJECTOPTIONWINDOW_PARTS_FILTER_KEYMENU,
        BCHANLHMIEVENT_TYPE_SUBJECTOPTIONWINDOW_PARTS_ORDER_CHANGE,
        BCHANLHMIEVENT_TYPE_SUBJECTOPTIONWINDOW_PARTS_ORDERBY_CHANGE,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_DETERMINE,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_COPY,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_MOVE,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_MENU,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_KEYMENU,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_DETERMINE,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_COPY,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_MOVE,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_MENU,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_KEYMENU,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_DETERMINE_PUSH,
+       BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_CANCEL_PUSH,
 };
 
 struct bchanlhmi_eventdata_mousemove_t_ {
@@ -262,6 +290,62 @@ struct subjectoptionwindow_eventdata_orderby_change_t_ {
 };
 typedef struct subjectoptionwindow_eventdata_orderby_change_t_ subjectoptionwindow_eventdata_orderby_change_t;
 
+struct registerexternalwindow_eventdata_boradname_determine_t_ {
+       TC *value;
+       W len;
+};
+typedef struct registerexternalwindow_eventdata_boradname_determine_t_ registerexternalwindow_eventdata_boradname_determine_t;
+
+struct registerexternalwindow_eventdata_boradname_copy_t_ {
+       WID rel_wid;
+       PNT pos;
+};
+typedef struct registerexternalwindow_eventdata_boradname_copy_t_ registerexternalwindow_eventdata_boradname_copy_t;
+
+struct registerexternalwindow_eventdata_boradname_move_t_ {
+       WID rel_wid;
+       PNT pos;
+};
+typedef struct registerexternalwindow_eventdata_boradname_move_t_ registerexternalwindow_eventdata_boradname_move_t;
+
+struct registerexternalwindow_eventdata_boradname_menu_t_ {
+       PNT pos;
+};
+typedef struct registerexternalwindow_eventdata_boradname_menu_t_ registerexternalwindow_eventdata_boradname_menu_t;
+
+struct registerexternalwindow_eventdata_boradname_keymenu_t_ {
+       TC keycode;
+};
+typedef struct registerexternalwindow_eventdata_boradname_keymenu_t_ registerexternalwindow_eventdata_boradname_keymenu_t;
+
+struct registerexternalwindow_eventdata_url_determine_t_ {
+       TC *value;
+       W len;
+};
+typedef struct registerexternalwindow_eventdata_url_determine_t_ registerexternalwindow_eventdata_url_determine_t;
+
+struct registerexternalwindow_eventdata_url_copy_t_ {
+       WID rel_wid;
+       PNT pos;
+};
+typedef struct registerexternalwindow_eventdata_url_copy_t_ registerexternalwindow_eventdata_url_copy_t;
+
+struct registerexternalwindow_eventdata_url_move_t_ {
+       WID rel_wid;
+       PNT pos;
+};
+typedef struct registerexternalwindow_eventdata_url_move_t_ registerexternalwindow_eventdata_url_move_t;
+
+struct registerexternalwindow_eventdata_url_menu_t_ {
+       PNT pos;
+};
+typedef struct registerexternalwindow_eventdata_url_menu_t_ registerexternalwindow_eventdata_url_menu_t;
+
+struct registerexternalwindow_eventdata_url_keymenu_t_ {
+       TC keycode;
+};
+typedef struct registerexternalwindow_eventdata_url_keymenu_t_ registerexternalwindow_eventdata_url_keymenu_t;
+
 struct bchanlhmievent_t_ {
        W type;
        union  {
@@ -289,6 +373,16 @@ struct bchanlhmievent_t_ {
                subjectoptionwindow_eventdata_filter_keymenu_t subjectoptionwindow_filter_keymenu;
                subjectoptionwindow_eventdata_order_change_t subjectoptionwindow_order_change;
                subjectoptionwindow_eventdata_orderby_change_t subjectoptionwindow_orderby_change;
+               registerexternalwindow_eventdata_boradname_determine_t registerexternalwindow_boradname_determine;
+               registerexternalwindow_eventdata_boradname_copy_t registerexternalwindow_boradname_copy;
+               registerexternalwindow_eventdata_boradname_move_t registerexternalwindow_boradname_move;
+               registerexternalwindow_eventdata_boradname_menu_t registerexternalwindow_boradname_menu;
+               registerexternalwindow_eventdata_boradname_keymenu_t registerexternalwindow_boradname_keymenu;
+               registerexternalwindow_eventdata_url_determine_t registerexternalwindow_url_determine;
+               registerexternalwindow_eventdata_url_copy_t registerexternalwindow_url_copy;
+               registerexternalwindow_eventdata_url_move_t registerexternalwindow_url_move;
+               registerexternalwindow_eventdata_url_menu_t registerexternalwindow_url_menu;
+               registerexternalwindow_eventdata_url_keymenu_t registerexternalwindow_url_keymenu;
        } data;
 };
 typedef struct bchanlhmievent_t_ bchanlhmievent_t;
@@ -301,8 +395,10 @@ IMPORT W bchanlhmi_getevent(bchanlhmi_t *hmi, bchanlhmievent_t **evt);
 IMPORT subjectwindow_t* bchanlhmi_newsubjectwindow(bchanlhmi_t *hmi, RECT *r, WID parent, TC *title, PAT *bgpat);
 IMPORT bbsmenuwindow_t* bchanlhmi_newbbsmenuwindow(bchanlhmi_t *hmi, RECT *r, WID parent, TC *title, PAT *bgpat);
 IMPORT subjectoptionwindow_t* bchanlhmi_newsubjectoptionwindow(bchanlhmi_t *hmi, PNT *p, subjectwindow_t *parent, TC *title, PAT *bgpat, W dnum_filter, W dnum_order, W dnum_orderby);
+IMPORT registerexternalwindow_t* bchanlhmi_newregisterexternalwindow(bchanlhmi_t *hmi, PNT *p, WID parent, TC *title, PAT *bgpat);
 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);
+IMPORT VOID bchanlhmi_deleteregisterexternalwindow(bchanlhmi_t *hmi, registerexternalwindow_t *window);
 
 #endif
index 90c895d..d7dc6dc 100644 (file)
@@ -169,3 +169,58 @@ windows:
             text: £Ó£é£î£ã£å
           - name: vigor
             text: Àª¤¤
+
+  - window_name: registerexternalwindow
+    attributes:
+    title: ³°ÉôÈĤÎÄɲÃ
+    title_max_length: 256
+    size:
+      h: 400
+      v: 200
+    parts:
+      - name: boradname
+        type: textbox
+        rect:
+          left: 8
+          top: 8
+          right: 368
+          bottom: 34
+        length: 1000
+        attr:
+          chcol: -1
+          class: -1
+          attr: 0
+          csize:
+            h: 16
+            v: 16
+      - name: url
+        type: textbox
+        rect:
+          left: 8
+          top: 38
+          right: 368
+          bottom: 64
+        length: 1000
+        attr:
+          chcol: -1
+          class: -1
+          attr: 0
+          csize:
+            h: 16
+            v: 16
+      - name: determine
+        type: textmomentallyswitch
+        rect:
+          left: 158
+          top: 108
+          right: 300
+          bottom: 134
+        text: ·èÄê
+      - name: cancel
+        type: textmomentallyswitch
+        rect:
+          left: 8
+          top: 108
+          right: 150
+          bottom: 134
+        text: ¼è¤ê¾Ã¤·