4 # Copyright (c) 2012 project bchan
6 # This software is provided 'as-is', without any express or implied
7 # warranty. In no event will the authors be held liable for any damages
8 # arising from the use of this software.
10 # Permission is granted to anyone to use this software for any purpose,
11 # including commercial applications, and to alter it and redistribute it
12 # freely, subject to the following restrictions:
14 # 1. The origin of this software must not be misrepresented; you must not
15 # claim that you wrote the original software. If you use this software
16 # in a product, an acknowledgment in the product documentation would be
17 # appreciated but is not required.
19 # 2. Altered source versions must be plainly marked as such, and must not be
20 # misrepresented as being the original software.
22 # 3. This notice may not be removed or altered from any source
30 def conv_euc_to_TCArray(str)
39 ret.push(val & 0x7f7f);
44 def conv_TCArray_to_hex_definition(a)
47 str += "0x" + x.to_s(16) + ", "
52 def calc_euc_to_TCArray_length(str)
53 str = conv_euc_to_TCArray(str);
72 "{{" + @yaml["rect"]["left"].to_s + ", " + @yaml["rect"]["top"].to_s + ", " + @yaml["rect"]["right"].to_s + ", " + @yaml["rect"]["bottom"].to_s + "}}";
75 @yaml["rect"]["left"].to_s
78 @yaml["rect"]["top"].to_s
81 @yaml["rect"]["right"].to_s
84 @yaml["rect"]["bottom"].to_s
87 conv_TCArray_to_hex_definition(conv_euc_to_TCArray(@yaml["text"]));
89 def text_array_length()
90 calc_euc_to_TCArray_length(@yaml["text"]);
92 def is_attr_specified()
96 if self.is_attr_specified()
102 def get_attrval_chcol()
103 if @yaml["attr"]["chcol"] == nil
106 @yaml["attr"]["chcol"]
108 def get_attrval_class()
109 if @yaml["attr"]["class"] == nil
112 @yaml["attr"]["class"]
114 def get_attrval_attr()
115 if @yaml["attr"]["attr"] == nil
118 @yaml["attr"]["attr"]
120 def get_attrval_csize_h()
121 if @yaml["attr"]["csize"] == nil || @yaml["attr"]["csize"]["h"] == nil
124 @yaml["attr"]["csize"]["h"]
126 def get_attrval_csize_v()
127 if @yaml["attr"]["csize"] == nil || @yaml["attr"]["csize"]["v"] == nil
130 @yaml["attr"]["csize"]["v"]
132 def is_need_eventbreak()
135 def get_databox_specify()
136 return @yaml["databox"]["specify"]
138 def get_databox_number()
139 return @yaml["databox"]["number"]
141 def is_databox_specify_argument()
142 @yaml["databox"] != nil && @yaml["databox"]["specify"] == "argument"
145 @yaml["databox"] != nil && (@yaml["databox"]["specify"] != "direct" || @yaml["databox"]["specify"] != "argument")
147 def is_use_rect_in_open()
151 def generate_header_eventtype_enumulate(main_name, window_name)
155 erb = ERB.new(script, nil, '-');
159 def generate_header_eventstruct_definition(main_name, window_name)
163 erb = ERB.new(script, nil, '-');
167 def generate_header_eventunion_member(main_name, window_name)
171 erb = ERB.new(script, nil, '-');
175 def generate_prototypes(window_name)
179 erb = ERB.new(script, nil, '-');
183 def generate_source_struct(window_name)
187 erb = ERB.new(script, nil, '-');
191 def generate_source_functions(main_name, window_name)
195 erb = ERB.new(script, nil, '-');
199 def generate_initialize_in_new()
201 window-><%= self.name() %>.id = -1;
202 <%- if self.is_databox_specify_argument() -%>
203 window-><%= self.name() %>.dnum = dnum_<%= self.name() %>;
207 erb = ERB.new(script, nil, '-');
211 def generate_create_systemcall_databox()
212 case self.get_databox_specify()
214 script = "copn_par(wid, window-><%= self.name() %>.dnum, NULL)"
216 script = "copn_par(wid, <%= self.get_databox_number() %>, NULL)"
219 erb = ERB.new(script, nil, '-');
223 def generate_create_systemcall_direct()
227 erb = ERB.new(script, nil, '-');
231 def generate_create_systemcall()
232 if self.is_databox_use()
233 return self.generate_create_systemcall_databox()
235 return self.generate_create_systemcall_direct()
239 def generate_create_in_open()
241 <%- if !self.is_databox_use() -%>
242 r = (RECT)<%= self.rect_string() %>;
244 window-><%= self.name() %>.id = <%= self.generate_create_systemcall()%>;
245 if (window-><%= self.name() %>.id < 0) {
246 DP_ER("ccre_xxx <%= self.name() %> error:", window-><%= self.name() %>.id);
248 <%- if self.is_databox_use() -%><%= self.generate_loadvalue_in_open() %><%- end -%>
251 erb = ERB.new(script, nil, '-');
255 def generate_loadvalue_in_open()
259 erb = ERB.new(script, nil, '-');
263 def generate_savevalue_in_close()
267 erb = ERB.new(script, nil, '-');
271 def generate_action_in_butdnwork(main_name, window_name)
275 erb = ERB.new(script, nil, '-');
279 def generate_draw_in_draw(main_name, window_name)
283 erb = ERB.new(script, nil, '-');
288 class HMITextBoxParts < HMIParts
289 def is_need_eventbreak()
293 def generate_header_eventtype_enumulate(main_name, window_name)
295 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_DETERMINE,
296 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_COPY,
297 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MOVE,
298 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MENU,
299 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_KEYMENU,
302 erb = ERB.new(script, nil, '-');
306 def generate_header_eventstruct_definition(main_name, window_name)
308 struct <%= window_name %>_eventdata_<%= self.name() %>_determine_t_ {
312 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_determine_t_ <%= window_name %>_eventdata_<%= self.name() %>_determine_t;
314 struct <%= window_name %>_eventdata_<%= self.name() %>_copy_t_ {
318 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_copy_t_ <%= window_name %>_eventdata_<%= self.name() %>_copy_t;
320 struct <%= window_name %>_eventdata_<%= self.name() %>_move_t_ {
324 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_move_t_ <%= window_name %>_eventdata_<%= self.name() %>_move_t;
326 struct <%= window_name %>_eventdata_<%= self.name() %>_menu_t_ {
329 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_menu_t_ <%= window_name %>_eventdata_<%= self.name() %>_menu_t;
331 struct <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t_ {
334 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t_ <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t;
338 erb = ERB.new(script, nil, '-');
342 def generate_header_eventunion_member(main_name, window_name)
344 <%= window_name %>_eventdata_<%= self.name() %>_determine_t <%= window_name %>_<%= self.name() %>_determine;
345 <%= window_name %>_eventdata_<%= self.name() %>_copy_t <%= window_name %>_<%= self.name() %>_copy;
346 <%= window_name %>_eventdata_<%= self.name() %>_move_t <%= window_name %>_<%= self.name() %>_move;
347 <%= window_name %>_eventdata_<%= self.name() %>_menu_t <%= window_name %>_<%= self.name() %>_menu;
348 <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t <%= window_name %>_<%= self.name() %>_keymenu;
351 erb = ERB.new(script, nil, '-');
355 def generate_prototypes(window_name)
357 IMPORT W <%= window_name %>_set<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len);
358 IMPORT W <%= window_name %>_get<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len);
359 IMPORT W <%= window_name %>_cut<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len, Bool cut);
360 IMPORT W <%= window_name %>_insert<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len);
363 erb = ERB.new(script, nil, '-');
367 def generate_source_struct(window_name)
371 <% if self.is_databox_specify_argument() %>W dnum;<% end %>
372 TC buf[<%= self.text_length() %>+<%= self.get_attr_offset() %>+1];
376 } <%= self.name() %>;
379 erb = ERB.new(script, nil, '-');
383 def generate_source_functions(main_name, window_name)
385 EXPORT W <%= window_name %>_set<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len)
389 if (len < <%= self.text_length() %>) {
392 cp_len = <%= self.text_length() %>;
394 memcpy(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>, str, cp_len * sizeof(TC));
395 window-><%= self.name() %>.buf[<%= self.get_attr_offset() %> + cp_len] = TNULL;
396 window-><%= self.name() %>.buf_written = cp_len;
397 if (window->wid < 0) {
401 return cset_val(window-><%= self.name() %>.id, cp_len, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
404 EXPORT W <%= window_name %>_get<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len)
408 if (window->wid > 0) {
409 err = cget_val(window-><%= self.name() %>.id, <%= self.text_length() %>, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
413 window-><%= self.name() %>.buf_written = err;
416 if (len < window-><%= self.name() %>.buf_written) {
419 cp_len = window-><%= self.name() %>.buf_written;
421 memcpy(str, window-><%= self.name() %>.buf + <%= self.get_attr_offset() %>, cp_len * sizeof(TC));
426 EXPORT W <%= window_name %>_cut<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len, Bool cut)
430 len0 = ccut_txt(window-><%= self.name() %>.id, len, str, cut == False ? 0 : 1);
436 err = cget_val(window-><%= self.name() %>.id, <%= self.text_length() %>, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
440 window-><%= self.name() %>.buf_written = err;
447 EXPORT W <%= window_name %>_insert<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len)
451 err = cins_txt(window-><%= self.name() %>.id, (PNT){0x8000, 0x8000}, str);
456 err = cget_val(window-><%= self.name() %>.id, <%= self.text_length() %>, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
460 window-><%= self.name() %>.buf_written = err;
465 LOCAL VOID <%= window_name %>_action<%= self.name() %>(<%= window_name %>_t *window, WEVENT *wev, <%= main_name %>event_t *evt)
469 i = cact_par(window-><%= self.name() %>.id, wev);
471 window-><%= self.name() %>.nextaction = True;
474 if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
475 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_KEYMENU;
476 evt->data.<%= window_name %>_<%= self.name() %>_keymenu.keycode = wev->e.data.key.code;
478 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MENU;
479 evt->data.<%= window_name %>_<%= self.name() %>_menu.pos = wev->s.pos;
481 <%= window_name %>_setflag(window, <%= window_name.upcase %>_FLAG_PARTS_NEXTACTION);
485 <%= window_name %>_setflag(window, <%= window_name.upcase %>_FLAG_PARTS_OTHEREVENT);
490 window-><%= self.name() %>.nextaction = False;
492 len = cget_val(window-><%= self.name() %>.id, <%= self.text_length() %>, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
494 window-><%= self.name() %>.buf_written = len;
499 cchg_par(window-><%= self.name() %>.id, P_INACT);
500 cchg_par(window-><%= self.name() %>.id, P_ACT);
507 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_DETERMINE;
508 evt->data.<%= window_name %>_<%= self.name() %>_determine.value = window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>;
509 evt->data.<%= window_name %>_<%= self.name() %>_determine.len = window-><%= self.name() %>.buf_written;
512 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MOVE;
513 evt->data.<%= window_name %>_<%= self.name() %>_move.rel_wid = wev->s.wid;
514 evt->data.<%= window_name %>_<%= self.name() %>_move.pos = wev->s.pos;
517 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_COPY;
518 evt->data.<%= window_name %>_<%= self.name() %>_copy.rel_wid = wev->s.wid;
519 evt->data.<%= window_name %>_<%= self.name() %>_copy.pos = wev->s.pos;
526 erb = ERB.new(script, nil, '-');
530 def generate_initialize_in_new()
532 window-><%= self.name() %>.id = -1;
533 <%- if self.is_databox_specify_argument() -%>
534 window-><%= self.name() %>.dnum = dnum_<%= self.name() %>;
536 memset(window-><%= self.name() %>.buf, 0, sizeof(TC)*<%= self.text_length() %>);
537 <%- if self.is_attr_specified() -%>
538 window-><%= self.name() %>.buf[0] = MC_ATTR;
539 *(COLOR*)(window-><%= self.name() %>.buf + 1) = <%= self.get_attrval_chcol() %>;
540 window-><%= self.name() %>.buf[3] = <%= self.get_attrval_class() %>;
541 window-><%= self.name() %>.buf[4] = <%= self.get_attrval_attr() %>;
542 window-><%= self.name() %>.buf[5] = <%= self.get_attrval_csize_h() %>;
543 window-><%= self.name() %>.buf[6] = <%= self.get_attrval_csize_v() %>;
544 window-><%= self.name() %>.buf[7] = TNULL;
546 window-><%= self.name() %>.buf[0] = MC_STR;
547 window-><%= self.name() %>.buf[1] = TNULL;
549 window-><%= self.name() %>.nextaction = False;
552 erb = ERB.new(script, nil, '-');
556 def generate_create_systemcall_direct()
557 script = "ccre_tbx(wid, TB_PARTS|P_DISP, &r, <%= self.text_length() %>, window-><%= self.name() %>.buf, NULL)"
559 erb = ERB.new(script, nil, '-');
563 def generate_loadvalue_in_open()
565 cset_val(window-><%= self.name() %>.id, <%= self.text_length() %>, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
568 erb = ERB.new(script, nil, '-');
572 def generate_savevalue_in_close()
574 err = cget_val(window-><%= self.name() %>.id, <%= self.text_length() %>, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
576 window-><%= self.name() %>.buf_written = err;
580 erb = ERB.new(script, nil, '-');
584 def generate_action_in_butdnwork(main_name, window_name)
586 if (id == window-><%= self.name() %>.id) {
587 memcpy(&window->savedwev, wev, sizeof(WEVENT));
588 <%= window_name %>_action<%= self.name() %>(window, wev, evt);
593 erb = ERB.new(script, nil, '-');
598 class HMISecretTextBoxParts < HMITextBoxParts
599 def generate_create_systemcall_direct()
600 script = "ccre_xbx(wid, XB_PARTS|P_DISP, &r, <%= self.text_length() %>, window-><%= self.name() %>.buf, NULL);";
602 erb = ERB.new(script, nil, '-');
607 class HMINumberBoxParts < HMIParts
608 def is_need_eventbreak()
612 if @yaml["format"]["datatype"] == "double"
617 def is_pointdisplay()
618 ret = @yaml["format"]["pointdisplay"];
625 ret = @yaml["format"]["hankaku"];
632 sz = @yaml["format"]["fontsize"]
644 def get_decimalplace()
645 sz = @yaml["format"]["decimalplace"]
658 def generate_header_eventtype_enumulate(main_name, window_name)
660 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_DETERMINE,
661 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_COPY,
662 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MOVE,
663 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MENU,
664 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_KEYMENU,
667 erb = ERB.new(script, nil, '-');
671 def generate_header_eventstruct_definition(main_name, window_name)
673 struct <%= window_name %>_eventdata_<%= self.name() %>_determine_t_ {
674 <% if self.is_double() %>DOUBLE<% else %>W<% end %> value;
676 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_determine_t_ <%= window_name %>_eventdata_<%= self.name() %>_determine_t;
678 struct <%= window_name %>_eventdata_<%= self.name() %>_copy_t_ {
682 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_copy_t_ <%= window_name %>_eventdata_<%= self.name() %>_copy_t;
684 struct <%= window_name %>_eventdata_<%= self.name() %>_move_t_ {
688 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_move_t_ <%= window_name %>_eventdata_<%= self.name() %>_move_t;
690 struct <%= window_name %>_eventdata_<%= self.name() %>_menu_t_ {
693 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_menu_t_ <%= window_name %>_eventdata_<%= self.name() %>_menu_t;
695 struct <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t_ {
698 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t_ <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t;
702 erb = ERB.new(script, nil, '-');
706 def generate_header_eventunion_member(main_name, window_name)
708 <%= window_name %>_eventdata_<%= self.name() %>_determine_t <%= window_name %>_<%= self.name() %>_determine;
709 <%= window_name %>_eventdata_<%= self.name() %>_copy_t <%= window_name %>_<%= self.name() %>_copy;
710 <%= window_name %>_eventdata_<%= self.name() %>_move_t <%= window_name %>_<%= self.name() %>_move;
711 <%= window_name %>_eventdata_<%= self.name() %>_menu_t <%= window_name %>_<%= self.name() %>_menu;
712 <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t <%= window_name %>_<%= self.name() %>_keymenu;
715 erb = ERB.new(script, nil, '-');
719 def generate_prototypes(window_name)
721 IMPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <% if self.is_double() %>DOUBLE<% else %>W<% end %> value);
722 IMPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <% if self.is_double() %>DOUBLE<% else %>W<% end %> *value);
725 erb = ERB.new(script, nil, '-');
729 def generate_source_struct(window_name)
733 <% if self.is_databox_specify_argument() %>W dnum;<% end %>
735 <% if self.is_double() %>DOUBLE<% else %>W<% end %> cv;
737 } <%= self.name() %>;
740 erb = ERB.new(script, nil, '-');
744 def generate_source_functions(main_name, window_name)
746 EXPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <% if self.is_double() %>DOUBLE<% else %>W<% end %> value)
748 window-><%= self.name() %>.cv = value;
749 if (window->wid < 0) {
753 return cset_val(window-><%= self.name() %>.id, <% if self.is_double() %>2<% else %>1<% end %>, (W*)(&window-><%= self.name() %>.cv));
756 EXPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <% if self.is_double() %>DOUBLE<% else %>W<% end %> *value)
760 if (window->wid > 0) {
761 err = cget_val(window-><%= self.name() %>.id, <% if self.is_double() %>2<% else %>1<% end %>, (W*)(&window-><%= self.name() %>.cv));
767 *value = window-><%= self.name() %>.cv;
771 LOCAL VOID <%= window_name %>_action<%= self.name() %>(<%= window_name %>_t *window, WEVENT *wev, <%= main_name %>event_t *evt)
775 i = cact_par(window-><%= self.name() %>.id, wev);
777 window-><%= self.name() %>.nextaction = True;
778 <%= window_name %>_setflag(window, <%= window_name.upcase %>_FLAG_PARTS_OTHEREVENT);
782 window-><%= self.name() %>.nextaction = False;
784 cget_val(window-><%= self.name() %>.id, <% if self.is_double() %>2<% else %>1<% end %>, (W*)(&window-><%= self.name() %>.cv));
794 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_DETERMINE;
795 evt->data.<%= window_name %>_<%= self.name() %>_determine.value = window-><%= self.name() %>.cv;
798 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MOVE;
799 evt->data.<%= window_name %>_<%= self.name() %>_move.rel_wid = wev->s.wid;
800 evt->data.<%= window_name %>_<%= self.name() %>_move.pos = wev->s.pos;
803 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_COPY;
804 evt->data.<%= window_name %>_<%= self.name() %>_copy.rel_wid = wev->s.wid;
805 evt->data.<%= window_name %>_<%= self.name() %>_copy.pos = wev->s.pos;
808 if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
809 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_KEYMENU;
810 evt->data.<%= window_name %>_<%= self.name() %>_keymenu.keycode = wev->e.data.key.code;
812 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MENU;
813 evt->data.<%= window_name %>_<%= self.name() %>_menu.pos = wev->s.pos;
815 window-><%= self.name() %>.nextaction = True;
816 <%= window_name %>_setflag(window, <%= window_name.upcase %>_FLAG_PARTS_NEXTACTION);
824 erb = ERB.new(script, nil, '-');
828 def generate_initialize_in_new()
830 window-><%= self.name() %>.id = -1;
831 <%- if self.is_databox_specify_argument() -%>
832 window-><%= self.name() %>.dnum = dnum_<%= self.name() %>;
834 window-><%= self.name() %>.format = (<%= self.get_fontsize() %> << 8)|<% if self.is_double() %>0xF0<% else %>0<% end %>|<% if self.is_hankaku() %>0x40<% else %>0<% end %>|<% if self.is_pointdisplay() %>0x10<% else %>0<% end %>|<%= self.get_decimalplace() %>;
835 window-><%= self.name() %>.cv = <% if self.is_double() %>0.0<% else %>0<% end %>;
836 window-><%= self.name() %>.nextaction = False;
839 erb = ERB.new(script, nil, '-');
843 def generate_create_systemcall_direct()
844 script = "ccre_nbx(wid, NB_PARTS|P_DISP, &r, window-><%= self.name() %>.format, (W*)&window-><%= self.name() %>.cv, NULL)"
846 erb = ERB.new(script, nil, '-');
850 def generate_loadvalue_in_open()
852 cset_val(window-><%= self.name() %>.id, <% if self.is_double() %>2<% else %>1<% end %>, (W*)(&window-><%= self.name() %>.cv));
855 erb = ERB.new(script, nil, '-');
859 def generate_savevalue_in_close()
861 err = cget_val(window-><%= self.name() %>.id, <% if self.is_double() %>2<% else %>1<% end %>, (W*)(&window-><%= self.name() %>.cv));
864 erb = ERB.new(script, nil, '-');
868 def generate_action_in_butdnwork(main_name, window_name)
870 if (id == window-><%= self.name() %>.id) {
871 <%= window_name %>_action<%= self.name() %>(window, wev, evt);
876 erb = ERB.new(script, nil, '-');
881 class HMITextMomentallySwitchParts < HMIParts
882 def generate_header_eventtype_enumulate(main_name, window_name)
884 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_PUSH,
887 erb = ERB.new(script, nil, '-');
891 def generate_source_struct(window_name)
895 <% if self.is_databox_specify_argument() %>W dnum;<% end %>
896 } <%= self.name() %>;
899 erb = ERB.new(script, nil, '-');
903 def generate_create_systemcall_direct()
904 script = "ccre_msw(wid, MS_PARTS|P_DISP, &r, (TC[]){MC_STR, <%= self.text_array() %>}, NULL)"
906 erb = ERB.new(script, nil, '-');
910 def generate_action_in_butdnwork(main_name, window_name)
912 if (id == window-><%= self.name() %>.id) {
913 ret = cact_par(window-><%= self.name() %>.id, wev);
914 if ((ret & 0x5000) != 0x5000) {
917 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_PUSH;
922 erb = ERB.new(script, nil, '-');
927 class HMISerialBoxParts < HMIParts
928 def calc_serialbox_formatlength()
930 @yaml["fields"].each { |field|
933 l += 3; # specify, max, min
936 field["items"].each { |item| # item text
937 l+= 1 + calc_euc_to_TCArray_length(item["text"]);
941 l += calc_euc_to_TCArray_length(field["text"]);
944 l += 1; # for last TNULL
947 def calc_serialbox_fieldsnumber()
949 @yaml["fields"].each { |field|
951 when "number", "items"
954 # not variable field.
959 def is_need_eventbreak()
963 def generate_header_eventtype_enumulate(main_name, window_name)
967 erb = ERB.new(script, nil, '-');
971 def generate_prototypes(window_name)
973 struct <%= window_name %>_<%= self.name() %>value_t_ {
974 <%- @yaml["fields"].each do |field| -%>
975 <%- case field["type"] -%>
976 <%- when "number" -%>
977 W <%= field["name"] %>;
980 <%- field["items"].each do |item| -%>
981 <%= window_name.upcase %>_<%= self.name().upcase %>_<%= field["name"].upcase %>VALUE_<%= item["name"].upcase %>,
983 } <%= field["name"] %>;
987 typedef struct <%= window_name %>_<%= self.name() %>value_t_ <%= window_name %>_<%= self.name() %>value_t;
988 IMPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name %>_<%= self.name() %>value_t *value);
989 IMPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name %>_<%= self.name() %>value_t *value);
992 erb = ERB.new(script, nil, '-');
996 def generate_source_struct(window_name)
1000 <% if self.is_databox_specify_argument() %>W dnum;<% end %>
1001 TC format[<%= self.calc_serialbox_formatlength() %>];
1002 W cv[<%= self.calc_serialbox_fieldsnumber() %>];
1004 } <%= self.name() %>;
1007 erb = ERB.new(script, nil, '-');
1011 def generate_source_functions(main_name, window_name)
1013 EXPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name %>_<%= self.name() %>value_t *value)
1016 <%- @yaml["fields"].each do |field| -%>
1017 <%- case field["type"] -%>
1018 <%- when "number" -%>
1019 if ((<%= field["min"] %> <= value-><%= field["name"] %>)&&(value-><%= field["name"] %> <= <%= field["max"] %>)) {
1020 window-><%= self.name() %>.cv[<%= j %>] = value-><%= field["name"] %>;<%- j+=1 %>
1022 <%- when "items" -%>
1023 if ((0 <= value-><%= field["name"] %>)&&(value-><%= field["name"] %> < <%= field["items"].length %>)) {
1024 window-><%= self.name() %>.cv[<%= j %>] = value-><%= field["name"] %>;<%- j+=1 %>
1028 if (window->wid < 0) {
1032 return cset_val(window-><%= self.name() %>.id, <%= self.calc_serialbox_fieldsnumber() %>, (W*)(window-><%= self.name() %>.cv));
1035 EXPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name %>_<%= self.name() %>value_t *value)
1039 if (window->wid > 0) {
1040 err = cget_val(window-><%= self.name() %>.id, <%= self.calc_serialbox_fieldsnumber() %>, (W*)(window-><%= self.name() %>.cv));
1047 <%- @yaml["fields"].each do |field| -%>
1048 <%- case field["type"] -%>
1049 <%- when "number", "items" -%>
1050 value-><%= field["name"] %> = window-><%= self.name() %>.cv[<%= j %>];<%- j+=1 %>
1057 LOCAL VOID <%= window_name %>_action<%= self.name() %>(<%= window_name %>_t *window, WEVENT *wev, <%= main_name %>event_t *evt)
1061 i = cact_par(window-><%= self.name() %>.id, wev);
1063 window-><%= self.name() %>.nextaction = True;
1064 <%= window_name %>_setflag(window, <%= window_name.upcase %>_FLAG_PARTS_OTHEREVENT);
1068 window-><%= self.name() %>.nextaction = False;
1070 cget_val(window-><%= self.name() %>.id, <%= self.calc_serialbox_fieldsnumber() %>, (W*)(window-><%= self.name() %>.cv));
1071 /* TODO: export event */
1088 erb = ERB.new(script, nil, '-');
1092 def generate_initialize_in_new()
1094 window-><%= self.name() %>.id = -1;
1095 <%- if self.is_databox_specify_argument() -%>
1096 window-><%= self.name() %>.dnum = dnum_<%= self.name() %>;
1099 <%- @yaml["fields"].each do |field| -%>
1100 <%- case field["type"] -%>
1101 <%- when "number" -%>
1102 window-><%= self.name() %>.format[<%= l %>] = 0x0e00 | <%= field["chars"] %>;<%- l+=1 %>
1103 window-><%= self.name() %>.format[<%= l %>] = <%= field["min"] %>;<%- l+=1 %>
1104 window-><%= self.name() %>.format[<%= l %>] = <%= field["max"] %>;<%- l+=1 %>
1105 <%- when "items" -%>
1106 window-><%= self.name() %>.format[<%= l %>] = 0x0800 | <%= field["chars"] %>;<%- l+=1 %>
1107 <%- field["items"].each do |item| -%>
1108 window-><%= self.name() %>.format[<%= l %>] = MC_STR;<%- l+=1 %>
1109 <%- conv_euc_to_TCArray(item["text"]).each do |ch| -%>
1110 window-><%= self.name() %>.format[<%= l %>] = 0x<%= ch.to_s(16) %>;<%- l+=1 %>
1113 window-><%= self.name() %>.format[<%= l %>] = TNULL;<%- l+=1 %>
1114 <%- when "fixed" -%>
1115 <%- conv_euc_to_TCArray(field["text"]).each do |ch| -%>
1116 window-><%= self.name() %>.format[<%= l %>] = 0x<%= ch.to_s(16) %>;<%- l+=1 %>
1120 window-><%= self.name() %>.format[<%= l %>] = TNULL;<%- l+=1 %>
1122 <%- @yaml["fields"].each do |field| -%>
1123 <%- case field["type"] -%>
1124 <%- when "number" -%>
1125 window-><%= self.name() %>.cv[<%= l %>] = <%= field["min"] %>;<%- l+=1 %>
1126 <%- when "items" -%>
1127 window-><%= self.name() %>.cv[<%= l %>] = 0;<%- l+=1 %>
1130 window-><%= self.name() %>.nextaction = False;
1133 erb = ERB.new(script, nil, '-');
1137 def generate_create_systemcall_direct()
1138 script = "ccre_sbx(wid, SB_PARTS|P_DISP, &r, window-><%= self.name() %>.format, <%= self.calc_serialbox_fieldsnumber() %>, window-><%= self.name() %>.cv, NULL)"
1140 erb = ERB.new(script, nil, '-');
1144 def generate_loadvalue_in_open()
1146 cset_val(window-><%= self.name() %>.id, <%= self.calc_serialbox_fieldsnumber() %>, (W*)(window-><%= self.name() %>.cv));
1149 erb = ERB.new(script, nil, '-');
1153 def generate_savevalue_in_close()
1155 err = cget_val(window-><%= self.name() %>.id, <%= self.calc_serialbox_fieldsnumber() %>, (W*)(window-><%= self.name() %>.cv));
1158 erb = ERB.new(script, nil, '-');
1162 def generate_action_in_butdnwork(main_name, window_name)
1164 if (id == window-><%= self.name() %>.id) {
1165 <%= window_name %>_action<%= self.name() %>(window, wev, evt);
1170 erb = ERB.new(script, nil, '-');
1175 class HMISwitchSelectorParts < HMIParts
1176 def calc_formatlength()
1178 @yaml["fields"].each { |field|
1179 l+= 1 + calc_euc_to_TCArray_length(field["text"]);
1181 l += 1; # for last TNULL
1184 def is_need_eventbreak()
1188 def generate_header_eventtype_enumulate(main_name, window_name)
1190 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_CHANGE,
1193 erb = ERB.new(script, nil, '-');
1197 def generate_header_eventstruct_definition(main_name, window_name)
1199 struct <%= window_name %>_eventdata_<%= self.name() %>_change_t_ {
1200 <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T value;
1202 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_change_t_ <%= window_name %>_eventdata_<%= self.name() %>_change_t;
1206 erb = ERB.new(script, nil, '-');
1210 def generate_header_eventunion_member(main_name, window_name)
1212 <%= window_name %>_eventdata_<%= self.name() %>_change_t <%= window_name %>_<%= self.name() %>_change;
1215 erb = ERB.new(script, nil, '-');
1219 def generate_prototypes(window_name)
1221 enum <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T_ {
1222 <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_NOSEL = 0,
1223 <%- @yaml["fields"].each do |field| -%>
1224 <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_<%= field["name"].upcase %>,
1227 typedef enum <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T_ <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T;
1228 IMPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T value);
1229 IMPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T *value);
1232 erb = ERB.new(script, nil, '-');
1236 def generate_source_struct(window_name)
1240 <%- if self.is_databox_use() -%>
1243 TC format[<%= self.calc_formatlength()%>];
1245 <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T value;
1246 } <%= self.name() %>;
1249 erb = ERB.new(script, nil, '-');
1253 def generate_source_functions(main_name, window_name)
1255 EXPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T value)
1259 val = window-><%= self.name() %>.value = value;
1260 if (window->wid < 0) {
1264 return cset_val(window-><%= self.name() %>.id, 1, (W*)(&val));
1267 EXPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T *value)
1271 if (window->wid > 0) {
1272 err = cget_val(window-><%= self.name() %>.id, 1, (W*)(&val));
1277 *value = window-><%= self.name() %>.value = val;
1282 LOCAL VOID <%= window_name %>_action<%= self.name() %>(<%= window_name %>_t *window, WEVENT *wev, <%= main_name %>event_t *evt)
1286 i = cact_par(window-><%= self.name() %>.id, wev);
1287 if ((i & 0x5000) != 0x5000) {
1290 window-><%= self.name() %>.value = i & 0xfff;
1291 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_CHANGE;
1292 evt->data.<%= window_name %>_<%= self.name() %>_change.value = window-><%= self.name() %>.value;
1297 erb = ERB.new(script, nil, '-');
1301 def generate_initialize_in_new()
1303 window-><%= self.name() %>.id = -1;
1304 <%- if self.is_databox_use() -%>
1305 window-><%= self.name() %>.dnum = dnum_<%= self.name() %>;
1308 <%- @yaml["fields"].each do |field| -%>
1309 window-><%= self.name() %>.format[<%= l %>] = MC_STR;<%- l+=1 %>
1310 <%- conv_euc_to_TCArray(field["text"]).each do |ch| -%>
1311 window-><%= self.name() %>.format[<%= l %>] = 0x<%= ch.to_s(16) %>;<%- l+=1 %>
1314 window-><%= self.name() %>.format[<%= l %>] = TNULL;<%- l+=1 %>
1316 window-><%= self.name() %>.value = 0;
1319 erb = ERB.new(script, nil, '-');
1323 def generate_create_systemcall_direct()
1324 script = "ccre_sel(wid, WS_PARTS|P_DISP, &r, window-><%= self.name() %>.value, window-><%= self.name() %>.format, NULL)"
1326 erb = ERB.new(script, nil, '-');
1330 def generate_loadvalue_in_open()
1332 cset_val(window-><%= self.name() %>.id, 1, (W*)(&window-><%= self.name() %>.value));
1335 erb = ERB.new(script, nil, '-');
1339 def generate_savevalue_in_close()
1341 err = cget_val(window-><%= self.name() %>.id, 1, (W*)(&window-><%= self.name() %>.value));
1344 erb = ERB.new(script, nil, '-');
1348 def generate_action_in_butdnwork(main_name, window_name)
1350 if (id == window-><%= self.name() %>.id) {
1351 <%= window_name %>_action<%= self.name() %>(window, wev, evt);
1356 erb = ERB.new(script, nil, '-');
1361 class HMIFixedTextParts < HMIParts
1362 def is_need_eventbreak()
1365 def is_use_rect_in_open()
1369 def generate_initialize_in_new()
1372 def generate_create_in_open()
1375 def generate_draw_in_draw(main_name, window_name)
1377 gdra_stp(window->gid, <%= self.rect_left() %>, <%= self.rect_bottom() %>, (TC[]){<%= self.text_array() %>}, <%= self.text_array_length() %>, G_STORE);
1380 erb = ERB.new(script, nil, '-');
1385 def generate_parts(type, a)
1388 return HMITextBoxParts.new(a);
1389 when "secrettextbox"
1390 return HMISecretTextBoxParts.new(a);
1391 when "textmomentallyswitch"
1392 return HMITextMomentallySwitchParts.new(a);
1394 return HMISerialBoxParts.new(a);
1396 return HMINumberBoxParts.new(a);
1397 when "switchselector"
1398 return HMISwitchSelectorParts.new(a);
1400 return HMIFixedTextParts.new(a)
1405 attr_accessor :yaml, :parts
1406 def initialize(yaml)
1408 @parts = Array.new();
1409 if yaml["parts"] != nil
1410 yaml["parts"].each { |a|
1411 w = generate_parts(a["type"], a)
1417 @yaml["window_name"]
1419 def is_attr_xxx(name)
1420 if @yaml["attributes"] == nil || @yaml["attributes"].empty?
1423 @yaml["attributes"].any? { |item|
1428 def is_exportevent_xxx(name)
1429 if @yaml["export_events"] == nil || @yaml["export_events"].empty?
1432 @yaml["export_events"].any? { |item|
1437 def is_attr_scrollable()
1438 self.is_attr_xxx("scrollable");
1440 def is_attr_resizable()
1441 self.is_attr_xxx("resizable");
1443 def is_attr_opencheckable()
1444 self.is_attr_xxx("opencheckable");
1446 def is_attr_subwindow()
1447 self.is_attr_xxx("subwindow");
1449 def is_attr_alwaysopen()
1450 self.is_attr_xxx("alwaysopen");
1452 def is_exportevent_draw()
1453 self.is_exportevent_xxx("draw");
1455 def is_exportevent_butdn()
1456 self.is_exportevent_xxx("butdn");
1458 def is_exportevent_paste()
1459 self.is_exportevent_xxx("paste");
1461 def is_exportevent_close()
1462 self.is_exportevent_xxx("close");
1464 def is_exportevent_switch()
1465 self.is_exportevent_xxx("switch");
1467 def is_exportevent_mousemove()
1468 self.is_exportevent_xxx("mousemove");
1470 def is_exportevent_scroll()
1471 self.is_exportevent_xxx("scroll");
1473 def is_exist_controllparts()
1476 def is_exist_use_rect_in_open()
1477 @parts.any? { |item|
1478 item.is_use_rect_in_open();
1484 def get_window_width()
1487 def get_window_height()
1490 def get_window_title()
1493 def is_exist_eventbreak_parts()
1494 @parts.any? { |item|
1495 item.is_need_eventbreak();
1498 def get_window_parent()
1501 def get_window_title_max_length()
1502 len = @yaml["title_max_length"];
1509 def generate_header_eventtype_enumulate(main_name)
1511 <%- if self.is_exportevent_draw() -%>
1512 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_DRAW,
1514 <%- if self.is_attr_resizable() -%>
1515 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_RESIZE,
1517 <%- if self.is_exportevent_close() -%>
1518 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_CLOSE,
1520 <%- if self.is_exportevent_butdn() -%>
1521 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_BUTDN,
1523 <%- if self.is_exportevent_paste() -%>
1524 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_PASTE,
1526 <%- if self.is_exportevent_switch() -%>
1527 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_SWITCH,
1529 <%- if self.is_exportevent_mousemove() -%>
1530 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_MOUSEMOVE,
1532 <%- if self.is_exportevent_scroll() and self.is_attr_scrollable() -%>
1533 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_SCROLL,
1535 <%- @parts.each do |p| -%><%= p.generate_header_eventtype_enumulate(main_name, self.struct_name()) %><%- end -%>
1538 erb = ERB.new(script, nil, '-');
1542 def generate_header_partsevent_struct(main_name)
1544 <%- @parts.each do |p| -%><%= p.generate_header_eventstruct_definition(main_name, self.struct_name()) %><%- end -%>
1547 erb = ERB.new(script, nil, '-');
1551 def generate_header_partsevent_unionmember(main_name)
1553 <%- @parts.each do |p| -%><%= p.generate_header_eventunion_member(main_name, self.struct_name()) %><%- end -%>
1556 erb = ERB.new(script, nil, '-');
1560 def generate_prototypes()
1562 typedef struct <%= self.struct_name() %>_t_ <%= self.struct_name() %>_t;
1563 <%- if self.is_attr_scrollable() -%>
1564 typedef VOID (*<%= self.struct_name() %>_scrollcalback)(VP arg, W dh, W dv);
1567 <%- if self.is_attr_scrollable() -%>
1568 IMPORT VOID <%= self.struct_name() %>_scrollbyvalue(<%= self.struct_name() %>_t *window, W dh, W dv);
1569 IMPORT W <%= self.struct_name() %>_setdrawrect(<%= self.struct_name() %>_t *window, W l, W t, W r, W b);
1570 IMPORT W <%= self.struct_name() %>_setworkrect(<%= self.struct_name() %>_t *window, W l, W t, W r, W b);
1571 IMPORT W <%= self.struct_name() %>_scrollworkarea(<%= self.struct_name() %>_t *window, W dh, W dv);
1572 IMPORT W <%= self.struct_name() %>_getworkrect(<%= self.struct_name() %>_t *window, RECT *r);
1574 <%- if self.is_attr_opencheckable() -%>
1575 IMPORT Bool <%= self.struct_name() %>_isopen(<%= self.struct_name() %>_t *window);
1577 <%- if self.is_exportevent_paste() -%>
1578 IMPORT VOID <%= self.struct_name() %>_responsepasterequest(<%= self.struct_name() %>_t *window, W nak, PNT *pos);
1580 <%- if self.is_exportevent_draw() -%>
1581 IMPORT W <%= self.struct_name() %>_startredisp(<%= self.struct_name() %>_t *window, RECT *r);
1582 IMPORT W <%= self.struct_name() %>_endredisp(<%= self.struct_name() %>_t *window);
1583 IMPORT W <%= self.struct_name() %>_eraseworkarea(<%= self.struct_name() %>_t *window, RECT *r);
1585 IMPORT W <%= self.struct_name() %>_requestredisp(<%= self.struct_name() %>_t *window);
1586 <%- if self.is_exportevent_butdn() -%>
1587 IMPORT GID <%= self.struct_name() %>_startdrag(<%= self.struct_name() %>_t *window);
1588 IMPORT W <%= self.struct_name() %>_getdrag(<%= self.struct_name() %>_t *window, PNT *pos, WID *wid, PNT *pos_butup);
1589 IMPORT VOID <%= self.struct_name() %>_enddrag(<%= self.struct_name() %>_t *window);
1591 IMPORT GID <%= self.struct_name() %>_getGID(<%= self.struct_name() %>_t *window);
1592 IMPORT WID <%= self.struct_name() %>_getWID(<%= self.struct_name() %>_t *window);
1593 IMPORT W <%= self.struct_name() %>_settitle(<%= self.struct_name() %>_t *window, TC *title);
1594 IMPORT Bool <%= self.struct_name() %>_isactive(<%= self.struct_name() %>_t *window);
1595 <%- if !self.is_attr_alwaysopen() -%>
1596 IMPORT W <%= self.struct_name() %>_open(<%= self.struct_name() %>_t *window);
1597 IMPORT VOID <%= self.struct_name() %>_close(<%= self.struct_name() %>_t *window);
1599 <%- @parts.each do |p| -%><%= p.generate_prototypes(self.struct_name()) %><%- end -%>
1602 erb = ERB.new(script, nil, '-');
1606 def generate_initialize_arguments()
1608 <%- if self.is_attr_resizable() -%>RECT *r<% else %>PNT *p<% end %>, <%- if self.is_attr_subwindow() -%><%= self.get_window_parent() %>_t *parent<%- else -%>WID parent<%- end -%>, TC *title, PAT *bgpat<%- @parts.each do |p| -%><% if p.is_databox_specify_argument() %>, W dnum_<%= p.name() %><% end %><%- end -%><%- -%>
1611 erb = ERB.new(script, nil, '-');
1615 def generate_initialize_arguments_values()
1617 <%- if self.is_attr_resizable() -%>r<% else %>p<% end %>, parent, title, bgpat<%- @parts.each do |p| -%><% if p.is_databox_specify_argument() %>, dnum_<%= p.name() %><% end %><%- end -%><%- -%>
1620 erb = ERB.new(script, nil, '-');
1624 def generate_source_struct()
1626 struct <%= self.struct_name() %>_t_ {
1627 <%- if self.is_need_flag() -%>
1632 <%- if self.is_attr_subwindow() -%>
1633 <%= self.get_window_parent() %>_t *parent;
1639 <%- if self.is_attr_scrollable() -%>
1640 hmi_windowscroll_t wscr;
1642 <%- if !self.is_attr_alwaysopen() -%>
1643 TC title[<%= self.get_window_title_max_length() %>+1];
1646 <%- @parts.each do |p| -%><%= p.generate_source_struct(self.struct_name()) %><%- end -%>
1651 erb = ERB.new(script, nil, '-');
1655 def generate_source_functions(main_name)
1657 <%- if self.is_need_flag() -%>
1658 #define <%= self.struct_name().upcase %>_FLAG_DRAWREQUEST 0x00000001
1659 <%- if self.is_attr_scrollable() -%>
1660 #define <%= self.struct_name().upcase %>_FLAG_RSCROLLING 0x00000002
1661 #define <%= self.struct_name().upcase %>_FLAG_BSCROLLING 0x00000004
1663 <%- if self.is_exist_eventbreak_parts -%>
1664 #define <%= self.struct_name().upcase %>_FLAG_PARTS_OTHEREVENT 0x0000000f
1665 #define <%= self.struct_name().upcase %>_FLAG_PARTS_NEXTACTION 0x00000010
1668 #define <%= self.struct_name() %>_setflag(window, flagx) (window)->flag = (window)->flag | (flagx)
1669 #define <%= self.struct_name() %>_clearflag(window, flagx) (window)->flag = (window)->flag & ~(flagx)
1670 #define <%= self.struct_name() %>_issetflag(window, flagx) (((window)->flag & (flagx)) == 0 ? False : True)
1673 <%- @parts.each do |p| -%><%= p.generate_source_functions(main_name, self.struct_name()) %><%- end -%>
1674 <%- if self.is_attr_scrollable() -%>
1675 EXPORT VOID <%= self.struct_name() %>_scrollbyvalue(<%= self.struct_name() %>_t *window, W dh, W dv)
1677 hmi_windowscroll_scrollworkrect(&window->wscr, dh, dv);
1680 EXPORT W <%= self.struct_name() %>_setdrawrect(<%= self.struct_name() %>_t *window, W l, W t, W r, W b)
1682 return hmi_windowscroll_setdrawrect(&window->wscr, l, t, r, b);
1685 EXPORT W <%= self.struct_name() %>_setworkrect(<%= self.struct_name() %>_t *window, W l, W t, W r, W b)
1687 return hmi_windowscroll_setworkrect(&window->wscr, l, t, r, b);
1690 EXPORT W <%= self.struct_name() %>_scrollworkarea(<%= self.struct_name() %>_t *window, W dh, W dv)
1693 err = wscr_wnd(window->wid, NULL, dh, dv, W_MOVE|W_RDSET);
1697 if ((err & W_RDSET) != 0) {
1698 <%= self.struct_name() %>_setflag(window, <%= self.struct_name().upcase %>_FLAG_DRAWREQUEST);
1703 EXPORT W <%= self.struct_name() %>_getworkrect(<%= self.struct_name() %>_t *window, RECT *r)
1705 return wget_wrk(window->wid, r);
1709 <%- if self.is_attr_opencheckable() -%>
1710 EXPORT Bool <%= self.struct_name() %>_isopen(<%= self.struct_name() %>_t *window)
1712 if (window->wid < 0) {
1719 <%- if self.is_exportevent_paste() -%>
1720 EXPORT VOID <%= self.struct_name() %>_responsepasterequest(<%= self.struct_name() %>_t *window, W nak, PNT *pos)
1723 window->savedwev.r.r.p.rightbot.x = pos->x;
1724 window->savedwev.r.r.p.rightbot.y = pos->y;
1726 wrsp_evt(&window->savedwev, nak);
1730 <%- if self.is_exportevent_draw() -%>
1731 EXPORT W <%= self.struct_name() %>_startredisp(<%= self.struct_name() %>_t *window, RECT *r)
1733 return wsta_dsp(window->wid, r, NULL);
1736 EXPORT W <%= self.struct_name() %>_endredisp(<%= self.struct_name() %>_t *window)
1738 return wend_dsp(window->wid);
1741 EXPORT W <%= self.struct_name() %>_eraseworkarea(<%= self.struct_name() %>_t *window, RECT *r)
1743 return wera_wnd(window->wid, r);
1747 LOCAL VOID <%= self.struct_name() %>_draw(<%= self.struct_name() %>_t *window, RECT *r)
1749 cdsp_pwd(window->wid, r, P_RDISP);
1750 <%- @parts.each do |p| -%><%= p.generate_draw_in_draw(main_name, self.struct_name()) %><%- end -%>
1753 LOCAL VOID <%= self.struct_name() %>_redisp(<%= self.struct_name() %>_t *window)
1757 if (wsta_dsp(window->wid, &r, NULL) == 0) {
1760 wera_wnd(window->wid, &r);
1761 <%= self.struct_name() %>_draw(window, &r);
1762 } while (wend_dsp(window->wid) > 0);
1766 EXPORT W <%= self.struct_name() %>_requestredisp(<%= self.struct_name() %>_t *window)
1768 return wreq_dsp(window->wid);
1771 <%- if self.is_exportevent_butdn() -%>
1772 EXPORT GID <%= self.struct_name() %>_startdrag(<%= self.struct_name() %>_t *window)
1774 return wsta_drg(window->wid, 0);
1777 EXPORT W <%= self.struct_name() %>_getdrag(<%= self.struct_name() %>_t *window, PNT *pos, WID *wid, PNT *pos_butup)
1781 etype = wget_drg(pos, &window->savedwev);
1782 *wid = window->savedwev.s.wid;
1783 if (etype == EV_BUTUP) {
1784 *pos_butup = window->savedwev.s.pos;
1790 EXPORT VOID <%= self.struct_name() %>_enddrag(<%= self.struct_name() %>_t *window)
1796 EXPORT GID <%= self.struct_name() %>_getGID(<%= self.struct_name() %>_t *window)
1798 return wget_gid(window->wid);
1801 EXPORT WID <%= self.struct_name() %>_getWID(<%= self.struct_name() %>_t *window)
1806 EXPORT W <%= self.struct_name() %>_settitle(<%= self.struct_name() %>_t *window, TC *title)
1808 <%- if !self.is_attr_alwaysopen() -%>
1809 tc_strncpy(window->title, title, <%= self.get_window_title_max_length() %>);
1810 window->title[<%= self.get_window_title_max_length() %>] = TNULL;
1811 return wset_tit(window->wid, -1, window->title, 0);
1813 return wset_tit(window->wid, -1, title, 0);
1817 EXPORT Bool <%= self.struct_name() %>_isactive(<%= self.struct_name() %>_t *window)
1820 wid = wget_act(NULL);
1821 if (window->wid == wid) {
1827 LOCAL VOID <%= self.struct_name() %>_butdnwork(<%= self.struct_name() %>_t *window, WEVENT *wev, <%= main_name %>event_t *evt)
1829 <%- if self.is_exist_controllparts() -%>
1833 ret = cfnd_par(window->wid, wev->s.pos, &id);
1837 <%- @parts.each do |p| -%><%= p.generate_action_in_butdnwork(main_name, self.struct_name()) %><%- end -%>
1839 <%- if self.is_exportevent_butdn() -%>
1840 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_BUTDN;
1841 evt->data.<%= self.struct_name() %>_butdn.type = wchk_dck(wev->s.time);
1842 evt->data.<%= self.struct_name() %>_butdn.pos = wev->s.pos;
1843 memcpy(&window->savedwev, wev, sizeof(WEVENT));
1847 <%- if self.is_attr_resizable() -%>
1848 LOCAL VOID <%= self.struct_name() %>_resize(<%= self.struct_name() %>_t *window, SIZE *sz)
1851 Bool workchange = False;
1853 wget_wrk(window->wid, &work);
1854 if (work.c.left != 0) {
1858 if (work.c.top != 0) {
1862 wset_wrk(window->wid, &work);
1863 gset_vis(window->gid, work);
1865 if (workchange == True) {
1866 wera_wnd(window->wid, NULL);
1867 wreq_dsp(window->wid);
1870 sz->v = work.c.bottom - work.c.top;
1871 sz->h = work.c.right - work.c.left;
1875 <% if self.is_attr_alwaysopen() %>LOCAL<% else %>EXPORT<% end %> W <%= self.struct_name() %>_open(<%= self.struct_name() %>_t *window<% if self.is_attr_alwaysopen() %>, TC *title<% end %>)
1878 <%- if self.is_exist_use_rect_in_open() -%>
1882 if (window->wid > 0) {
1886 wid = wopn_wnd(WA_STD<% if self.is_attr_subwindow() %>|WA_SUBW<% end %><% if self.is_attr_resizable() %>|WA_SIZE|WA_HHDL|WA_VHDL<% end %><% if self.is_attr_scrollable() %>|WA_BBAR|WA_RBAR<% end %>, <% if self.is_attr_subwindow() %>window->parent->wid<% else %>window->parent<% end %>, &(window->r), NULL, 2, <% if !self.is_attr_alwaysopen() %>window->title<%- else -%>title<%- end -%>, &window->bgpat, NULL);
1888 DP_ER("wopn_wnd: subjectoption error", wid);
1892 window->gid = wget_gid(wid);
1893 <%- if self.is_attr_scrollable() -%>
1894 hmi_windowscroll_settarget(&window->wscr, wid);
1897 <%- @parts.each do |p| -%><%= p.generate_create_in_open() %><%- end -%>
1904 <%- if !self.is_attr_alwaysopen() -%>
1905 EXPORT VOID <%= self.struct_name() %>_close(<%= self.struct_name() %>_t *window)
1910 if (window->wid < 0) {
1915 err = wget_sts(window->wid, &stat, NULL);
1919 <%- @parts.reverse_each do |p| -%><%= p.generate_savevalue_in_close() %><%- end -%>
1920 <%- if self.is_exist_controllparts() -%>
1921 cdel_pwd(window->wid, NOCLR);
1923 wcls_wnd(window->wid, CLR);
1931 erb = ERB.new(script, nil, '-');
1935 def generate_checkpartsflag_in_checkflag(main_name)
1937 <%- if self.is_exist_eventbreak_parts() -%>
1938 if (<%= self.struct_name() %>_issetflag(hmi-><%= self.struct_name() %>, <%= self.struct_name().upcase %>_FLAG_PARTS_OTHEREVENT) == True) {
1939 <%= self.struct_name() %>_clearflag(hmi-><%= self.struct_name() %>, <%= self.struct_name().upcase %>_FLAG_PARTS_OTHEREVENT);
1940 <%= self.struct_name() %>_setflag(hmi-><%= self.struct_name() %>, <%= self.struct_name().upcase %>_FLAG_PARTS_NEXTACTION);
1942 } else if (<%= self.struct_name() %>_issetflag(hmi-><%= self.struct_name() %>, <%= self.struct_name().upcase %>_FLAG_PARTS_NEXTACTION) == True) {
1943 <%= self.struct_name() %>_clearflag(hmi-><%= self.struct_name() %>, <%= self.struct_name().upcase %>_FLAG_PARTS_NEXTACTION);
1944 <%- self.parts.each do |p| -%>
1945 <%- if p.is_need_eventbreak() -%>
1946 if (hmi-><%= self.struct_name() %>-><%= p.name() %>.nextaction == True) {
1947 hmi->wev.s.type = EV_NULL;
1948 <%= self.struct_name() %>_action<%= p.name() %>(hmi-><%= self.struct_name() %>, &hmi->wev, &hmi->evt);
1957 erb = ERB.new(script, nil, '-');
1961 def generate_new_del_functions()
1963 EXPORT <%= self.struct_name() %>_t* <%= self.struct_name() %>_new(<%= self.generate_initialize_arguments() %>)
1965 <%= self.struct_name() %>_t *window;
1966 <%- if self.is_attr_scrollable() -%>
1970 window = (<%= self.struct_name() %>_t*)malloc(sizeof(<%= self.struct_name() %>_t));
1971 if (window == NULL) {
1974 <%- if self.is_attr_scrollable() -%>
1979 window->parent = parent;
1980 <%- if self.is_attr_resizable() -%>
1983 window->r.c.left = p->x;
1984 window->r.c.top = p->y;
1985 window->r.c.right = p->x + <%= self.get_window_width() %>;
1986 window->r.c.bottom = p->y + <%= self.get_window_height() %>;
1988 <%- if self.is_attr_scrollable() -%>
1989 err = hmi_windowscroll_initialize(&window->wscr, window->wid);
1995 <%- if !self.is_attr_alwaysopen() -%>
1996 tc_strset(window->title, TNULL, <%= self.get_window_title_max_length() %>+1);
1998 tc_strncpy(window->title, title, <%= self.get_window_title_max_length() %>);
2001 <%- conv_euc_to_TCArray(self.get_window_title()).each do |ch| -%>
2002 window->title[<%= l %>] = 0x<%= ch.to_s(16) %>;<%- l+=1 %>
2006 <%- @parts.each do |p| -%><%= p.generate_initialize_in_new() %><%- end -%>
2008 <%- if self.is_attr_alwaysopen() -%>
2009 err = <%= self.struct_name() %>_open(window, title);
2011 <%- if self.is_attr_scrollable() -%>
2012 hmi_windowscroll_finalize(&window->wscr);
2022 LOCAL VOID <%= self.struct_name() %>_delete(<%= self.struct_name() %>_t *window)
2024 if (window->wid > 0) {
2025 <%- if self.is_exist_controllparts() -%>
2026 cdel_pwd(window->wid, NOCLR);
2028 wcls_wnd(window->wid, CLR);
2030 <%- if self.is_attr_scrollable() -%>
2031 hmi_windowscroll_finalize(&window->wscr);
2038 erb = ERB.new(script, nil, '-');
2044 attr_accessor :yaml, :win, :name
2045 def initialize(yaml)
2048 yaml["windows"].each { |a|
2049 w = HMIWindow.new(a);
2054 @yaml["generator"]["name"]
2056 def lisence_header()
2057 @yaml["generator"]["lisence_header"]
2059 def lisence_source()
2060 @yaml["generator"]["lisence_source"]
2062 def filename_header()
2063 @yaml["generator"]["output_header"]
2066 def generate_header_eventtype_enumulate()
2069 <%= self.main_name().upcase %>EVENT_TYPE_NONE,
2070 <%= self.main_name().upcase %>EVENT_TYPE_COMMON_MOUSEMOVE,
2071 <%= self.main_name().upcase %>EVENT_TYPE_COMMON_KEYDOWN,
2072 <%= self.main_name().upcase %>EVENT_TYPE_COMMON_MENU,
2073 <%= self.main_name().upcase %>EVENT_TYPE_COMMON_TIMEOUT,
2074 <%- @win.each do |w| -%><%= w.generate_header_eventtype_enumulate(self.main_name()) %><%- end -%>
2078 erb = ERB.new(script, nil, '-');
2081 def generate_header_eventtype_struct()
2083 struct <%= self.main_name() %>_eventdata_mousemove_t_ {
2086 typedef struct <%= self.main_name() %>_eventdata_mousemove_t_ <%= self.main_name() %>_eventdata_mousemove_t;
2088 struct <%= self.main_name() %>_eventdata_keydown_t_ {
2093 typedef struct <%= self.main_name() %>_eventdata_keydown_t_ <%= self.main_name() %>_eventdata_keydown_t;
2095 struct <%= self.main_name() %>_eventdata_menu_t_ {
2098 typedef struct <%= self.main_name() %>_eventdata_menu_t_ <%= self.main_name() %>_eventdata_menu_t;
2100 struct <%= self.main_name() %>_eventdata_timeout_t_ {
2103 typedef struct <%= self.main_name() %>_eventdata_timeout_t_ <%= self.main_name() %>_eventdata_timeout_t;
2105 <%- @win.each do |w| -%>
2106 <%- if w.is_exportevent_draw() -%>
2107 struct <%= w.struct_name() %>_eventdata_draw_t_ {
2109 typedef struct <%= w.struct_name() %>_eventdata_draw_t_ <%= w.struct_name() %>_eventdata_draw_t;
2112 <%- if w.is_attr_resizable() -%>
2113 struct <%= w.struct_name() %>_eventdata_resize_t_ {
2116 typedef struct <%= w.struct_name() %>_eventdata_resize_t_ <%= w.struct_name() %>_eventdata_resize_t;
2119 <%- if w.is_exportevent_close() -%>
2120 struct <%= w.struct_name() %>_eventdata_close_t_ {
2123 typedef struct <%= w.struct_name() %>_eventdata_close_t_ <%= w.struct_name() %>_eventdata_close_t;
2126 <%- if w.is_exportevent_butdn() -%>
2127 struct <%= w.struct_name() %>_eventdata_butdn_t_ {
2131 typedef struct <%= w.struct_name() %>_eventdata_butdn_t_ <%= w.struct_name() %>_eventdata_butdn_t;
2134 <%- if w.is_exportevent_paste() -%>
2135 struct <%= w.struct_name() %>_eventdata_paste_t_ {
2137 typedef struct <%= w.struct_name() %>_eventdata_paste_t_ <%= w.struct_name() %>_eventdata_paste_t;
2140 <%- if w.is_exportevent_switch() -%>
2141 struct <%= w.struct_name() %>_eventdata_switch_t_ {
2143 typedef struct <%= w.struct_name() %>_eventdata_switch_t_ <%= w.struct_name() %>_eventdata_switch_t;
2146 <%- if w.is_exportevent_mousemove() -%>
2147 struct <%= w.struct_name() %>_eventdata_mousemove_t_ {
2151 typedef struct <%= w.struct_name() %>_eventdata_mousemove_t_ <%= w.struct_name() %>_eventdata_mousemove_t;
2154 <%- if w.is_exportevent_scroll() and w.is_attr_scrollable() -%>
2155 struct <%= w.struct_name() %>_eventdata_scroll_t_ {
2159 typedef struct <%= w.struct_name() %>_eventdata_scroll_t_ <%= w.struct_name() %>_eventdata_scroll_t;
2162 <%= w.generate_header_partsevent_struct(self.main_name()) %><%- -%>
2166 erb = ERB.new(script, nil, '-');
2169 def generate_header_eventtype_union()
2171 struct <%= self.main_name() %>event_t_ {
2174 <%= self.main_name() %>_eventdata_mousemove_t common_mousemove;
2175 <%= self.main_name() %>_eventdata_keydown_t common_keydown;
2176 <%= self.main_name() %>_eventdata_menu_t common_menu;
2177 <%= self.main_name() %>_eventdata_timeout_t common_timeout;
2178 <%- @win.each do |w| -%>
2179 <%- if w.is_exportevent_draw() -%>
2180 <%= w.struct_name() %>_eventdata_draw_t <%= w.struct_name() %>_draw;
2182 <%- if w.is_attr_resizable() -%>
2183 <%= w.struct_name() %>_eventdata_resize_t <%= w.struct_name() %>_resize;
2185 <%- if w.is_exportevent_close() -%>
2186 <%= w.struct_name() %>_eventdata_close_t <%= w.struct_name() %>_close;
2188 <%- if w.is_exportevent_butdn() -%>
2189 <%= w.struct_name() %>_eventdata_butdn_t <%= w.struct_name() %>_butdn;
2191 <%- if w.is_exportevent_paste() -%>
2192 <%= w.struct_name() %>_eventdata_paste_t <%= w.struct_name() %>_paste;
2194 <%- if w.is_exportevent_switch() -%>
2195 <%= w.struct_name() %>_eventdata_switch_t <%= w.struct_name() %>_switch;
2197 <%- if w.is_exportevent_mousemove() -%>
2198 <%= w.struct_name() %>_eventdata_mousemove_t <%= w.struct_name() %>_mousemove;
2200 <%- if w.is_exportevent_scroll() and w.is_attr_scrollable() -%>
2201 <%= w.struct_name() %>_eventdata_scroll_t <%= w.struct_name() %>_scroll;
2203 <%- -%><%= w.generate_header_partsevent_unionmember(self.main_name()) %><%- -%>
2207 typedef struct <%= self.main_name() %>event_t_ <%= self.main_name() %>event_t;
2210 erb = ERB.new(script, nil, '-');
2213 def generate_header_main_prototypes()
2215 typedef struct <%= self.main_name() %>_t_ <%= self.main_name() %>_t;
2217 IMPORT <%= self.main_name() %>_t* <%= self.main_name() %>_new();
2218 IMPORT VOID <%= self.main_name() %>_delete(<%= self.main_name() %>_t *hmi);
2219 IMPORT W <%= self.main_name() %>_getevent(<%= self.main_name() %>_t *hmi, <%= self.main_name() %>event_t **evt);
2220 <%- @win.each do |w| -%>
2221 IMPORT <%= w.struct_name() %>_t* <%= self.main_name() %>_new<%= w.struct_name() %>(<%= self.main_name() %>_t *hmi, <%= w.generate_initialize_arguments() %>);
2223 <%- @win.each do |w| -%>
2224 IMPORT VOID <%= self.main_name() %>_delete<%= w.struct_name() %>(<%= self.main_name() %>_t *hmi, <%= w.struct_name() %>_t *window);
2228 erb = ERB.new(script, nil, '-');
2232 def generate_header()
2235 str += w.generate_prototypes() + "\n";
2237 str += self.generate_header_eventtype_enumulate() + "\n";
2238 str += self.generate_header_eventtype_struct();
2239 str += self.generate_header_eventtype_union() + "\n";
2240 str += self.generate_header_main_prototypes() + "\n";
2244 def generate_source_include_files()
2246 #include "<%= self.filename_header() %>"
2247 #include "hmi/hmi_windowscroll.h"
2250 #include <bstdlib.h>
2252 #include <tstring.h>
2253 #include <btron/btron.h>
2254 #include <btron/hmi.h>
2255 #include <btron/vobj.h>
2258 # define DP(arg) printf arg
2259 # define DP_ER(msg, err) printf("%s (%d/%x)\\n", msg, err>>16, err)
2261 # define DP(arg) /**/
2262 # define DP_ER(msg, err) /**/
2267 erb = ERB.new(script, nil, '-');
2271 def generate_source_mainloop_windowid_valuablelist()
2273 <%- @win.each_with_index do |w, idx| -%>
2274 <%= w.struct_name() %>_id<%- if idx != @win.length - 1 -%>, <%- end -%>
2277 erb = ERB.new(script, nil, '-');
2281 def generate_source_mainloop()
2283 LOCAL VOID <%= self.main_name() %>_setswitchbutdnflag(<%= self.main_name() %>_t *hmi)
2285 hmi->flag = hmi->flag | <%= self.main_name().upcase %>_FLAG_SWITCHBUTDN;
2288 LOCAL VOID <%= self.main_name() %>_clearswitchbutdnflag(<%= self.main_name() %>_t *hmi)
2290 hmi->flag = hmi->flag & ~<%= self.main_name().upcase %>_FLAG_SWITCHBUTDN;
2293 LOCAL Bool <%= self.main_name() %>_issetswitchbutdnflag(<%= self.main_name() %>_t *hmi)
2295 if ((hmi->flag & <%= self.main_name().upcase %>_FLAG_SWITCHBUTDN) == 0) {
2301 <%- @win.each do |w| -%>
2302 LOCAL Bool <%= self.main_name() %>_is<%= w.struct_name() %>WID(<%= self.main_name() %>_t *hmi, WID wid)
2304 if (hmi-><%= w.struct_name() %>->wid == wid) {
2311 LOCAL VOID <%= self.main_name() %>_weventnull(<%= self.main_name() %>_t *hmi, WEVENT *wev, <%= self.main_name() %>event_t *evt)
2313 cidl_par(wev->s.wid, &wev->s.pos);
2314 if (wev->s.cmd != W_WORK)
2315 return; /*ºî¶ÈÎΰ賰*/
2316 if (wev->s.stat & ES_CMD)
2317 return; /*Ì¿Îᥡ¼¤¬²¡¤µ¤ì¤Æ¤¤¤ë*/
2318 <%- @win.each do |w| -%>
2319 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2320 <%- if w.is_exist_controllparts() -%>
2321 cidl_par(wev->s.wid, &wev->s.pos);
2323 <%- if w.is_exportevent_mousemove() -%>
2324 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_MOUSEMOVE;
2325 hmi->evt.data.<%= w.struct_name() %>_mousemove.pos = wev->s.pos;
2326 hmi->evt.data.<%= w.struct_name() %>_mousemove.stat = wev->s.stat;
2327 <%- elsif !w.is_exist_controllparts() -%>
2328 gset_ptr(PS_SELECT, NULL, -1, -1);
2334 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_COMMON_MOUSEMOVE;
2335 hmi->evt.data.common_mousemove.pos = wev->s.pos;
2338 LOCAL VOID <%= self.main_name() %>_weventrequest(<%= self.main_name() %>_t *hmi, WEVENT *wev, <%= self.main_name() %>event_t *evt)
2340 switch (wev->g.cmd) {
2341 case W_REDISP: /*ºÆɽ¼¨Í×µá*/
2342 <%- @win.each do |w| -%>
2343 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->g.wid) == True) {
2344 <%- if w.is_exportevent_draw() -%>
2345 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_DRAW;
2347 <%= w.struct_name() %>_redisp(hmi-><%= w.struct_name() %>);
2353 case W_PASTE: /*Ž¹þ¤ßÍ×µá*/
2354 <%- @win.each do |w| -%>
2355 <%- if w.is_exportevent_paste() -%>
2356 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->g.wid) == True) {
2357 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_PASTE;
2358 memcpy(&hmi-><%= w.struct_name() %>->savedwev, wev, sizeof(WEVENT));
2363 wrsp_evt(wev, 1); /*NACK*/
2365 case W_DELETE: /*Êݸ½ªÎ»*/
2366 wrsp_evt(wev, 0); /*ACK*/
2367 <%- @win.each do |w| -%>
2368 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->g.wid) == True) {
2369 <%- if w.is_exportevent_close() -%>
2370 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_CLOSE;
2371 evt->data.<%= w.struct_name() %>_close.save = True;
2373 <%= w.struct_name() %>_close(hmi-><%= w.struct_name() %>);
2379 case W_FINISH: /*ÇÑ´þ½ªÎ»*/
2380 wrsp_evt(wev, 0); /*ACK*/
2381 <%- @win.each do |w| -%>
2382 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->g.wid) == True) {
2383 <%- if w.is_exportevent_close() -%>
2384 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_CLOSE;
2385 evt->data.<%= w.struct_name() %>_close.save = False;
2387 <%= w.struct_name() %>_close(hmi-><%= w.struct_name() %>);
2396 LOCAL VOID <%= self.main_name() %>_weventbutdn(<%= self.main_name() %>_t *hmi, WEVENT *wev, <%= self.main_name() %>event_t *evt)
2399 W dh, dv; /* TODO: add check for exist scrollable window */
2401 switch (wev->s.cmd) {
2403 switch (wchk_dck(wev->s.time)) {
2405 <%- @win.each do |w| -%>
2406 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2407 <%- if w.is_exportevent_close() -%>
2408 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_CLOSE;
2409 evt->data.<%= w.struct_name() %>_close.save = True; /* TODO: tmp value */
2411 <%= w.struct_name() %>_close(hmi-><%= w.struct_name() %>);
2424 if (wmov_drg(wev, NULL) > 0) {
2425 <%- @win.each do |w| -%>
2426 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2427 <%- if w.is_exportevent_draw() -%>
2428 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_DRAW;
2430 <%= w.struct_name() %>_redisp(hmi-><%= w.struct_name() %>);
2441 switch (wchk_dck(wev->s.time)) {
2443 i = wchg_wnd(wev->s.wid, NULL, W_MOVE);
2446 i = wrsz_drg(wev, NULL, NULL);
2452 <%- @win.each do |w| -%>
2453 <%- if w.is_attr_resizable() -%>
2454 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2455 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_RESIZE;
2456 <%= w.struct_name() %>_resize(hmi-><%= w.struct_name() %>, &evt->data.<%= w.struct_name() %>_resize.work_sz);
2457 hmi_windowscroll_updatebar(&hmi-><%= w.struct_name() %>->wscr);
2459 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_DRAWREQUEST);
2467 <%- @win.each do |w| -%>
2468 <%- if w.is_attr_scrollable() -%>
2469 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2470 err = hmi_windowscroll_weventrbar(&hmi-><%= w.struct_name() %>->wscr, wev, &dh, &dv);
2475 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING);
2477 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING);
2479 <%- if w.is_exportevent_scroll() -%>
2480 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SCROLL;
2481 evt->data.<%= w.struct_name() %>_scroll.dh = dh;
2482 evt->data.<%= w.struct_name() %>_scroll.dv = dv;
2490 <%- @win.each do |w| -%>
2491 <%- if w.is_attr_scrollable() -%>
2492 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2493 err = hmi_windowscroll_weventbbar(&hmi-><%= w.struct_name() %>->wscr, wev, &dh, &dv);
2498 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING);
2500 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING);
2502 <%- if w.is_exportevent_scroll() -%>
2503 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SCROLL;
2504 evt->data.<%= w.struct_name() %>_scroll.dh = dh;
2505 evt->data.<%= w.struct_name() %>_scroll.dv = dv;
2513 <%- @win.each do |w| -%>
2514 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2515 <%= w.struct_name() %>_butdnwork(hmi-><%= w.struct_name() %>, wev, evt);
2525 LOCAL VOID <%= self.main_name() %>_weventswitch(<%= self.main_name() %>_t *hmi, WEVENT *wev, <%= self.main_name() %>event_t *evt)
2527 <%= self.main_name() %>_setswitchbutdnflag(hmi);
2528 <%- @win.each do |w| -%>
2529 <%- if w.is_exportevent_switch() -%>
2530 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2531 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SWITCH;
2538 LOCAL VOID <%= self.main_name() %>_weventreswitch(<%= self.main_name() %>_t *hmi, WEVENT *wev, <%= self.main_name() %>event_t *evt)
2540 <%= self.main_name() %>_setswitchbutdnflag(hmi);
2541 <%- @win.each do |w| -%>
2542 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2543 <%- if w.is_exportevent_switch() -%>
2544 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SWITCH;
2545 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_DRAWREQUEST);
2548 <%- if w.is_exportevent_draw() -%>
2549 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_DRAW;
2551 <%= w.struct_name() %>_redisp(hmi-><%= w.struct_name() %>);
2559 LOCAL VOID <%= self.main_name() %>_receivemessage(<%= self.main_name() %>_t *hmi, <%= self.main_name() %>event_t *evt)
2564 err = rcv_msg(MM_ALL, &msg, sizeof(MESSAGE), WAIT|NOCLR);
2566 if (msg.msg_type == MS_TMOUT) { /* should be use other type? */
2567 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_COMMON_TIMEOUT;
2568 evt->data.common_timeout.code = msg.msg_body.TMOUT.code;
2571 clr_msg(MM_ALL, MM_ALL);
2574 LOCAL Bool <%= self.main_name() %>_checkflag(<%= self.main_name() %>_t *hmi, <%= self.main_name() %>event_t **evt)
2578 <%- @win.each do |w| -%>
2579 <%- if w.is_need_flag() and w.is_attr_scrollable() -%>
2580 if (<%= w.struct_name() %>_issetflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING) == True) {
2581 err = hmi_windowscroll_weventrbar(&hmi-><%= w.struct_name() %>->wscr, &hmi->wev, &dh, &dv);
2583 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING);
2587 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING);
2589 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING);
2591 <%- if w.is_exportevent_scroll() -%>
2592 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SCROLL;
2593 hmi->evt.data.<%= w.struct_name() %>_scroll.dh = dh;
2594 hmi->evt.data.<%= w.struct_name() %>_scroll.dv = dv;
2598 if (<%= w.struct_name() %>_issetflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING) == True) {
2599 err = hmi_windowscroll_weventbbar(&hmi-><%= w.struct_name() %>->wscr, &hmi->wev, &dh, &dv);
2601 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING);
2605 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING);
2607 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING);
2609 <%- if w.is_exportevent_scroll() -%>
2610 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SCROLL;
2611 hmi->evt.data.<%= w.struct_name() %>_scroll.dh = dh;
2612 hmi->evt.data.<%= w.struct_name() %>_scroll.dv = dv;
2618 <%- @win.each do |w| -%><%= w.generate_checkpartsflag_in_checkflag(self.main_name()) %><%- end -%>
2623 EXPORT W <%= self.main_name() %>_getevent(<%= self.main_name() %>_t *hmi, <%= self.main_name() %>event_t **evt)
2628 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_NONE;
2632 ok = <%= self.main_name() %>_issetswitchbutdnflag(hmi);
2634 <%= self.main_name() %>_weventbutdn(hmi, wev0, &hmi->evt);
2635 <%= self.main_name() %>_clearswitchbutdnflag(hmi);
2639 <%- @win.each do |w| -%>
2640 <%- if w.is_need_flag() -%>
2641 if (<%= w.struct_name() %>_issetflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_DRAWREQUEST) == True) {
2642 <%- if w.is_exportevent_draw() -%>
2643 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_DRAW;
2645 <%= w.struct_name() %>_redisp(hmi-><%= w.struct_name() %>);
2647 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_DRAWREQUEST);
2653 ok = <%= self.main_name() %>_checkflag(hmi, evt);
2658 wget_evt(wev0, WAIT);
2659 switch (wev0->s.type) {
2661 <%= self.main_name() %>_weventnull(hmi, wev0, &hmi->evt);
2664 <%= self.main_name() %>_weventrequest(hmi, wev0, &hmi->evt);
2667 <%= self.main_name() %>_weventreswitch(hmi, wev0, &hmi->evt);
2670 <%= self.main_name() %>_weventswitch(hmi, wev0, &hmi->evt);
2673 <%= self.main_name() %>_weventbutdn(hmi, wev0, &hmi->evt);
2677 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_COMMON_KEYDOWN;
2678 hmi->evt.data.common_keydown.keycode = wev0->e.data.key.code;
2679 hmi->evt.data.common_keydown.keytop = wev0->e.data.key.keytop;
2680 hmi->evt.data.common_keydown.stat = wev0->e.stat;
2686 oprc_dev(&wev0->e, NULL, 0);
2689 <%= self.main_name() %>_receivemessage(hmi, &hmi->evt);
2692 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_COMMON_MENU;
2693 hmi->evt.data.common_menu.pos = wev0->s.pos;
2702 erb = ERB.new(script, nil, '-');
2706 def generate_struct()
2709 str += w.generate_source_struct();
2712 #define <%= self.main_name().upcase %>_FLAG_SWITCHBUTDN 0x00000001
2714 struct <%= self.main_name() %>_t_ {
2716 <%= self.main_name() %>event_t evt;
2718 <%- @win.each do |w| -%>
2719 <%= w.struct_name() %>_t *<%= w.struct_name() %>;
2724 erb = ERB.new(script, nil, '-');
2725 str += erb.result(binding)
2728 def generate_windowfunctions()
2731 str += w.generate_source_functions(self.main_name());
2736 def generate_source_new_del_wrappers()
2738 <%- @win.each do |w| -%>
2739 EXPORT <%= w.struct_name() %>_t* <%= self.main_name() %>_new<%= w.struct_name() %>(<%= self.main_name() %>_t *hmi, <%= w.generate_initialize_arguments() %>)
2741 <%- if w.is_attr_subwindow -%>
2742 if (parent == NULL) {
2746 if (hmi-><%= w.struct_name() %> != NULL) {
2749 hmi-><%= w.struct_name() %> = <%= w.struct_name() %>_new(<%= w.generate_initialize_arguments_values() %>);
2750 return hmi-><%= w.struct_name() %>;
2753 EXPORT VOID <%= self.main_name() %>_delete<%= w.struct_name() %>(<%= self.main_name() %>_t *hmi, <%= w.struct_name() %>_t *window)
2755 <%= w.struct_name() %>_delete(hmi-><%= w.struct_name() %>);
2756 hmi-><%= w.struct_name() %> = NULL;
2761 EXPORT <%= self.main_name() %>_t* <%= self.main_name() %>_new()
2763 <%= self.main_name() %>_t *hmi;
2765 hmi = (<%= self.main_name() %>_t *)malloc(sizeof(<%= self.main_name() %>_t));
2770 <%- @win.each do |w| -%>
2771 hmi-><%= w.struct_name() %> = NULL;
2777 EXPORT VOID <%= self.main_name() %>_delete(<%= self.main_name() %>_t *hmi)
2779 <%- @win.each do |w| -%>
2780 if (hmi-><%= w.struct_name() %> != NULL) {
2781 <%= w.struct_name() %>_delete(hmi-><%= w.struct_name() %>);
2788 erb = ERB.new(script, nil, '-');
2792 def generate_source_mainfunctions()
2795 str += w.generate_new_del_functions();
2797 str += self.generate_source_new_del_wrappers()
2801 def generate_source()
2803 str += self.generate_struct();
2804 str += self.generate_windowfunctions();
2805 str += self.generate_source_mainloop();
2806 str += self.generate_source_mainfunctions();
2813 def generate_header(filename, data)
2814 fd = File.open(filename, "w");
2815 fd.puts data.lisence_header();
2818 /* This file is automatically generated. */
2821 #include <btron/dp.h>
2822 #include <btron/hmi.h>
2825 fd.puts "#ifndef __" + filename.upcase.gsub(/\./, '_') + "__";
2826 fd.puts "#define __" + filename.upcase.gsub(/\./, '_') + "__";
2828 fd.puts data.generate_header();
2832 def generate_source(filename, data)
2833 fd = File.open(filename, "w");
2834 fd.puts data.lisence_source();
2837 /* This file is automatically generated. */
2840 fd.puts data.generate_source_include_files();
2842 fd.puts data.generate_source();
2848 yaml = YAML.load_file(ARGV[0]);
2849 data = HMIData.new(yaml);
2851 fname_header = yaml["generator"]["output_header"]
2852 fname_source = yaml["generator"]["output_source"]
2854 generate_header(fname_header, data);
2855 generate_source(fname_source, data);