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 conv_TCArray_to_hex_definition(conv_euc_to_TCArray(@yaml["text"]));
77 def is_attr_specified()
81 if self.is_attr_specified()
87 def get_attrval_chcol()
88 if @yaml["attr"]["chcol"] == nil
91 @yaml["attr"]["chcol"]
93 def get_attrval_class()
94 if @yaml["attr"]["class"] == nil
97 @yaml["attr"]["class"]
99 def get_attrval_attr()
100 if @yaml["attr"]["attr"] == nil
103 @yaml["attr"]["attr"]
105 def get_attrval_csize_h()
106 if @yaml["attr"]["csize"] == nil || @yaml["attr"]["csize"]["h"] == nil
109 @yaml["attr"]["csize"]["h"]
111 def get_attrval_csize_v()
112 if @yaml["attr"]["csize"] == nil || @yaml["attr"]["csize"]["v"] == nil
115 @yaml["attr"]["csize"]["v"]
117 def is_need_eventbreak()
120 def get_databox_specify()
121 return @yaml["databox"]["specify"]
123 def get_databox_number()
124 return @yaml["databox"]["number"]
126 def is_databox_specify_argument()
127 @yaml["databox"] != nil && @yaml["databox"]["specify"] == "argument"
130 @yaml["databox"] != nil && (@yaml["databox"]["specify"] != "direct" || @yaml["databox"]["specify"] != "argument")
133 def generate_header_eventtype_enumulate(main_name, window_name)
137 erb = ERB.new(script, nil, '-');
141 def generate_header_eventstruct_definition(main_name, window_name)
145 erb = ERB.new(script, nil, '-');
149 def generate_header_eventunion_member(main_name, window_name)
153 erb = ERB.new(script, nil, '-');
157 def generate_prototypes(window_name)
161 erb = ERB.new(script, nil, '-');
165 def generate_source_struct(window_name)
169 erb = ERB.new(script, nil, '-');
173 def generate_source_functions(main_name, window_name)
177 erb = ERB.new(script, nil, '-');
181 def generate_initialize_in_new()
183 window-><%= self.name() %>.id = -1;
184 <%- if self.is_databox_specify_argument() -%>
185 window-><%= self.name() %>.dnum = dnum_<%= self.name() %>;
189 erb = ERB.new(script, nil, '-');
193 def generate_create_systemcall_databox()
194 case self.get_databox_specify()
196 script = "copn_par(wid, window-><%= self.name() %>.dnum, NULL)"
198 script = "copn_par(wid, <%= self.get_databox_number() %>, NULL)"
201 erb = ERB.new(script, nil, '-');
205 def generate_create_systemcall_direct()
209 erb = ERB.new(script, nil, '-');
213 def generate_create_systemcall()
214 if self.is_databox_use()
215 return self.generate_create_systemcall_databox()
217 return self.generate_create_systemcall_direct()
221 def generate_create_in_open()
223 <%- if !self.is_databox_use() -%>
224 r = (RECT)<%= self.rect_string() %>;
226 window-><%= self.name() %>.id = <%= self.generate_create_systemcall()%>;
227 if (window-><%= self.name() %>.id < 0) {
228 DP_ER("ccre_xxx <%= self.name() %> error:", window-><%= self.name() %>.id);
230 <%- if self.is_databox_use() -%><%= self.generate_loadvalue_in_open() %><%- end -%>
233 erb = ERB.new(script, nil, '-');
237 def generate_loadvalue_in_open()
241 erb = ERB.new(script, nil, '-');
245 def generate_savevalue_in_close()
249 erb = ERB.new(script, nil, '-');
253 def generate_action_in_butdnwork(main_name, window_name)
257 erb = ERB.new(script, nil, '-');
262 class HMITextBoxParts < HMIParts
263 def is_need_eventbreak()
267 def generate_header_eventtype_enumulate(main_name, window_name)
269 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_DETERMINE,
270 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_COPY,
271 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MOVE,
272 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MENU,
273 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_KEYMENU,
276 erb = ERB.new(script, nil, '-');
280 def generate_header_eventstruct_definition(main_name, window_name)
282 struct <%= window_name %>_eventdata_<%= self.name() %>_determine_t_ {
286 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_determine_t_ <%= window_name %>_eventdata_<%= self.name() %>_determine_t;
288 struct <%= window_name %>_eventdata_<%= self.name() %>_copy_t_ {
292 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_copy_t_ <%= window_name %>_eventdata_<%= self.name() %>_copy_t;
294 struct <%= window_name %>_eventdata_<%= self.name() %>_move_t_ {
298 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_move_t_ <%= window_name %>_eventdata_<%= self.name() %>_move_t;
300 struct <%= window_name %>_eventdata_<%= self.name() %>_menu_t_ {
303 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_menu_t_ <%= window_name %>_eventdata_<%= self.name() %>_menu_t;
305 struct <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t_ {
308 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t_ <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t;
312 erb = ERB.new(script, nil, '-');
316 def generate_header_eventunion_member(main_name, window_name)
318 <%= window_name %>_eventdata_<%= self.name() %>_determine_t <%= window_name %>_<%= self.name() %>_determine;
319 <%= window_name %>_eventdata_<%= self.name() %>_copy_t <%= window_name %>_<%= self.name() %>_copy;
320 <%= window_name %>_eventdata_<%= self.name() %>_move_t <%= window_name %>_<%= self.name() %>_move;
321 <%= window_name %>_eventdata_<%= self.name() %>_menu_t <%= window_name %>_<%= self.name() %>_menu;
322 <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t <%= window_name %>_<%= self.name() %>_keymenu;
325 erb = ERB.new(script, nil, '-');
329 def generate_prototypes(window_name)
331 IMPORT W <%= window_name %>_set<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len);
332 IMPORT W <%= window_name %>_get<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len);
333 IMPORT W <%= window_name %>_cut<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len, Bool cut);
334 IMPORT W <%= window_name %>_insert<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len);
337 erb = ERB.new(script, nil, '-');
341 def generate_source_struct(window_name)
345 <% if self.is_databox_specify_argument() %>W dnum;<% end %>
346 TC buf[<%= self.text_length() %>+<%= self.get_attr_offset() %>+1];
350 } <%= self.name() %>;
353 erb = ERB.new(script, nil, '-');
357 def generate_source_functions(main_name, window_name)
359 EXPORT W <%= window_name %>_set<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len)
363 if (len < <%= self.text_length() %>) {
366 cp_len = <%= self.text_length() %>;
368 memcpy(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>, str, cp_len * sizeof(TC));
369 window-><%= self.name() %>.buf[<%= self.get_attr_offset() %> + cp_len] = TNULL;
370 window-><%= self.name() %>.buf_written = cp_len;
371 if (window->wid < 0) {
375 return cset_val(window-><%= self.name() %>.id, cp_len, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
378 EXPORT W <%= window_name %>_get<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len)
382 if (window->wid > 0) {
383 err = cget_val(window-><%= self.name() %>.id, <%= self.text_length() %>, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
387 window-><%= self.name() %>.buf_written = err;
390 if (len < window-><%= self.name() %>.buf_written) {
393 cp_len = window-><%= self.name() %>.buf_written;
395 memcpy(str, window-><%= self.name() %>.buf + <%= self.get_attr_offset() %>, cp_len * sizeof(TC));
400 EXPORT W <%= window_name %>_cut<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len, Bool cut)
402 return ccut_txt(window-><%= self.name() %>.id, len, str, cut == False ? 0 : 1);
405 EXPORT W <%= window_name %>_insert<%= self.name() %>text(<%= window_name %>_t *window, TC *str, W len)
407 return cins_txt(window-><%= self.name() %>.id, (PNT){0x8000, 0x8000}, str);
410 LOCAL VOID <%= window_name %>_action<%= self.name() %>(<%= window_name %>_t *window, WEVENT *wev, <%= main_name %>event_t *evt)
414 i = cact_par(window-><%= self.name() %>.id, wev);
416 window-><%= self.name() %>.nextaction = True;
417 <%= window_name %>_setflag(window, <%= window_name.upcase %>_FLAG_PARTS_OTHEREVENT);
421 window-><%= self.name() %>.nextaction = False;
423 len = cget_val(window-><%= self.name() %>.id, <%= self.text_length() %>, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
425 window-><%= self.name() %>.buf_written = len;
430 cchg_par(window-><%= self.name() %>.id, P_INACT);
431 cchg_par(window-><%= self.name() %>.id, P_ACT);
438 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_DETERMINE;
439 evt->data.<%= window_name %>_<%= self.name() %>_determine.value = window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>;
440 evt->data.<%= window_name %>_<%= self.name() %>_determine.len = window-><%= self.name() %>.buf_written;
443 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MOVE;
444 evt->data.<%= window_name %>_<%= self.name() %>_move.rel_wid = wev->s.wid;
445 evt->data.<%= window_name %>_<%= self.name() %>_move.pos = wev->s.pos;
448 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_COPY;
449 evt->data.<%= window_name %>_<%= self.name() %>_copy.rel_wid = wev->s.wid;
450 evt->data.<%= window_name %>_<%= self.name() %>_copy.pos = wev->s.pos;
453 if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
454 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_KEYMENU;
455 evt->data.<%= window_name %>_<%= self.name() %>_keymenu.keycode = wev->e.data.key.code;
457 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MENU;
458 evt->data.<%= window_name %>_<%= self.name() %>_menu.pos = wev->s.pos;
460 window-><%= self.name() %>.nextaction = True;
461 <%= window_name %>_setflag(window, <%= window_name.upcase %>_FLAG_PARTS_NEXTACTION);
469 erb = ERB.new(script, nil, '-');
473 def generate_initialize_in_new()
475 window-><%= self.name() %>.id = -1;
476 <%- if self.is_databox_specify_argument() -%>
477 window-><%= self.name() %>.dnum = dnum_<%= self.name() %>;
479 memset(window-><%= self.name() %>.buf, 0, sizeof(TC)*<%= self.text_length() %>);
480 <%- if self.is_attr_specified() -%>
481 window-><%= self.name() %>.buf[0] = MC_ATTR;
482 *(COLOR*)(window-><%= self.name() %>.buf + 1) = <%= self.get_attrval_chcol() %>;
483 window-><%= self.name() %>.buf[3] = <%= self.get_attrval_class() %>;
484 window-><%= self.name() %>.buf[4] = <%= self.get_attrval_attr() %>;
485 window-><%= self.name() %>.buf[5] = <%= self.get_attrval_csize_h() %>;
486 window-><%= self.name() %>.buf[6] = <%= self.get_attrval_csize_v() %>;
487 window-><%= self.name() %>.buf[7] = TNULL;
489 window-><%= self.name() %>.buf[0] = MC_STR;
490 window-><%= self.name() %>.buf[1] = TNULL;
492 window-><%= self.name() %>.nextaction = False;
495 erb = ERB.new(script, nil, '-');
499 def generate_create_systemcall_direct()
500 script = "ccre_tbx(wid, TB_PARTS|P_DISP, &r, <%= self.text_length() %>, window-><%= self.name() %>.buf, NULL)"
502 erb = ERB.new(script, nil, '-');
506 def generate_loadvalue_in_open()
508 cset_val(window-><%= self.name() %>.id, <%= self.text_length() %>, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
511 erb = ERB.new(script, nil, '-');
515 def generate_savevalue_in_close()
517 err = cget_val(window-><%= self.name() %>.id, <%= self.text_length() %>, (W*)(window-><%= self.name() %>.buf+<%= self.get_attr_offset() %>));
519 window-><%= self.name() %>.buf_written = err;
523 erb = ERB.new(script, nil, '-');
527 def generate_action_in_butdnwork(main_name, window_name)
529 if (id == window-><%= self.name() %>.id) {
530 memcpy(&window->savedwev, wev, sizeof(WEVENT));
531 <%= window_name %>_action<%= self.name() %>(window, wev, evt);
536 erb = ERB.new(script, nil, '-');
541 class HMISecretTextBoxParts < HMITextBoxParts
542 def generate_create_systemcall_direct()
543 script = "ccre_xbx(wid, XB_PARTS|P_DISP, &r, <%= self.text_length() %>, window-><%= self.name() %>.buf, NULL);";
545 erb = ERB.new(script, nil, '-');
550 class HMINumberBoxParts < HMIParts
551 def is_need_eventbreak()
555 if @yaml["format"]["datatype"] == "double"
560 def is_pointdisplay()
561 ret = @yaml["format"]["pointdisplay"];
568 ret = @yaml["format"]["hankaku"];
575 sz = @yaml["format"]["fontsize"]
587 def get_decimalplace()
588 sz = @yaml["format"]["decimalplace"]
601 def generate_header_eventtype_enumulate(main_name, window_name)
603 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_DETERMINE,
604 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_COPY,
605 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MOVE,
606 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MENU,
607 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_KEYMENU,
610 erb = ERB.new(script, nil, '-');
614 def generate_header_eventstruct_definition(main_name, window_name)
616 struct <%= window_name %>_eventdata_<%= self.name() %>_determine_t_ {
617 <% if self.is_double() %>DOUBLE<% else %>W<% end %> value;
619 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_determine_t_ <%= window_name %>_eventdata_<%= self.name() %>_determine_t;
621 struct <%= window_name %>_eventdata_<%= self.name() %>_copy_t_ {
625 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_copy_t_ <%= window_name %>_eventdata_<%= self.name() %>_copy_t;
627 struct <%= window_name %>_eventdata_<%= self.name() %>_move_t_ {
631 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_move_t_ <%= window_name %>_eventdata_<%= self.name() %>_move_t;
633 struct <%= window_name %>_eventdata_<%= self.name() %>_menu_t_ {
636 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_menu_t_ <%= window_name %>_eventdata_<%= self.name() %>_menu_t;
638 struct <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t_ {
641 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t_ <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t;
645 erb = ERB.new(script, nil, '-');
649 def generate_header_eventunion_member(main_name, window_name)
651 <%= window_name %>_eventdata_<%= self.name() %>_determine_t <%= window_name %>_<%= self.name() %>_determine;
652 <%= window_name %>_eventdata_<%= self.name() %>_copy_t <%= window_name %>_<%= self.name() %>_copy;
653 <%= window_name %>_eventdata_<%= self.name() %>_move_t <%= window_name %>_<%= self.name() %>_move;
654 <%= window_name %>_eventdata_<%= self.name() %>_menu_t <%= window_name %>_<%= self.name() %>_menu;
655 <%= window_name %>_eventdata_<%= self.name() %>_keymenu_t <%= window_name %>_<%= self.name() %>_keymenu;
658 erb = ERB.new(script, nil, '-');
662 def generate_prototypes(window_name)
664 IMPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <% if self.is_double() %>DOUBLE<% else %>W<% end %> value);
665 IMPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <% if self.is_double() %>DOUBLE<% else %>W<% end %> *value);
668 erb = ERB.new(script, nil, '-');
672 def generate_source_struct(window_name)
676 <% if self.is_databox_specify_argument() %>W dnum;<% end %>
678 <% if self.is_double() %>DOUBLE<% else %>W<% end %> cv;
680 } <%= self.name() %>;
683 erb = ERB.new(script, nil, '-');
687 def generate_source_functions(main_name, window_name)
689 EXPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <% if self.is_double() %>DOUBLE<% else %>W<% end %> value)
691 window-><%= self.name() %>.cv = value;
692 if (window->wid < 0) {
696 return cset_val(window-><%= self.name() %>.id, <% if self.is_double() %>2<% else %>1<% end %>, (W*)(&window-><%= self.name() %>.cv));
699 EXPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <% if self.is_double() %>DOUBLE<% else %>W<% end %> *value)
703 if (window->wid > 0) {
704 err = cget_val(window-><%= self.name() %>.id, <% if self.is_double() %>2<% else %>1<% end %>, (W*)(&window-><%= self.name() %>.cv));
710 *value = window-><%= self.name() %>.cv;
714 LOCAL VOID <%= window_name %>_action<%= self.name() %>(<%= window_name %>_t *window, WEVENT *wev, <%= main_name %>event_t *evt)
718 i = cact_par(window-><%= self.name() %>.id, wev);
720 window-><%= self.name() %>.nextaction = True;
721 <%= window_name %>_setflag(window, <%= window_name.upcase %>_FLAG_PARTS_OTHEREVENT);
725 window-><%= self.name() %>.nextaction = False;
727 cget_val(window-><%= self.name() %>.id, <% if self.is_double() %>2<% else %>1<% end %>, (W*)(&window-><%= self.name() %>.cv));
737 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_DETERMINE;
738 evt->data.<%= window_name %>_<%= self.name() %>_determine.value = window-><%= self.name() %>.cv;
741 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MOVE;
742 evt->data.<%= window_name %>_<%= self.name() %>_move.rel_wid = wev->s.wid;
743 evt->data.<%= window_name %>_<%= self.name() %>_move.pos = wev->s.pos;
746 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_COPY;
747 evt->data.<%= window_name %>_<%= self.name() %>_copy.rel_wid = wev->s.wid;
748 evt->data.<%= window_name %>_<%= self.name() %>_copy.pos = wev->s.pos;
751 if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
752 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_KEYMENU;
753 evt->data.<%= window_name %>_<%= self.name() %>_keymenu.keycode = wev->e.data.key.code;
755 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_MENU;
756 evt->data.<%= window_name %>_<%= self.name() %>_menu.pos = wev->s.pos;
758 window-><%= self.name() %>.nextaction = True;
759 <%= window_name %>_setflag(window, <%= window_name.upcase %>_FLAG_PARTS_NEXTACTION);
767 erb = ERB.new(script, nil, '-');
771 def generate_initialize_in_new()
773 window-><%= self.name() %>.id = -1;
774 <%- if self.is_databox_specify_argument() -%>
775 window-><%= self.name() %>.dnum = dnum_<%= self.name() %>;
777 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() %>;
778 window-><%= self.name() %>.cv = <% if self.is_double() %>0.0<% else %>0<% end %>;
779 window-><%= self.name() %>.nextaction = False;
782 erb = ERB.new(script, nil, '-');
786 def generate_create_systemcall_direct()
787 script = "ccre_nbx(wid, NB_PARTS|P_DISP, &r, window-><%= self.name() %>.format, (W*)&window-><%= self.name() %>.cv, NULL)"
789 erb = ERB.new(script, nil, '-');
793 def generate_loadvalue_in_open()
795 cset_val(window-><%= self.name() %>.id, <% if self.is_double() %>2<% else %>1<% end %>, (W*)(&window-><%= self.name() %>.cv));
798 erb = ERB.new(script, nil, '-');
802 def generate_savevalue_in_close()
804 err = cget_val(window-><%= self.name() %>.id, <% if self.is_double() %>2<% else %>1<% end %>, (W*)(&window-><%= self.name() %>.cv));
807 erb = ERB.new(script, nil, '-');
811 def generate_action_in_butdnwork(main_name, window_name)
813 if (id == window-><%= self.name() %>.id) {
814 <%= window_name %>_action<%= self.name() %>(window, wev, evt);
819 erb = ERB.new(script, nil, '-');
824 class HMITextMomentallySwitchParts < HMIParts
825 def generate_header_eventtype_enumulate(main_name, window_name)
827 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_PUSH,
830 erb = ERB.new(script, nil, '-');
834 def generate_source_struct(window_name)
838 <% if self.is_databox_specify_argument() %>W dnum;<% end %>
839 } <%= self.name() %>;
842 erb = ERB.new(script, nil, '-');
846 def generate_create_systemcall_direct()
847 script = "ccre_msw(wid, MS_PARTS|P_DISP, &r, (TC[]){MC_STR, <%= self.text_array() %>}, NULL)"
849 erb = ERB.new(script, nil, '-');
853 def generate_action_in_butdnwork(main_name, window_name)
855 if (id == window-><%= self.name() %>.id) {
856 ret = cact_par(window-><%= self.name() %>.id, wev);
857 if ((ret & 0x5000) != 0x5000) {
860 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_PUSH;
865 erb = ERB.new(script, nil, '-');
870 class HMISerialBoxParts < HMIParts
871 def calc_serialbox_formatlength()
873 @yaml["fields"].each { |field|
876 l += 3; # specify, max, min
879 field["items"].each { |item| # item text
880 l+= 1 + calc_euc_to_TCArray_length(item["text"]);
884 l += calc_euc_to_TCArray_length(field["text"]);
887 l += 1; # for last TNULL
890 def calc_serialbox_fieldsnumber()
892 @yaml["fields"].each { |field|
894 when "number", "items"
897 # not variable field.
902 def is_need_eventbreak()
906 def generate_header_eventtype_enumulate(main_name, window_name)
910 erb = ERB.new(script, nil, '-');
914 def generate_prototypes(window_name)
916 struct <%= window_name %>_<%= self.name() %>value_t_ {
917 <%- @yaml["fields"].each do |field| -%>
918 <%- case field["type"] -%>
919 <%- when "number" -%>
920 W <%= field["name"] %>;
923 <%- field["items"].each do |item| -%>
924 <%= window_name.upcase %>_<%= self.name().upcase %>_<%= field["name"].upcase %>VALUE_<%= item["name"].upcase %>,
926 } <%= field["name"] %>;
930 typedef struct <%= window_name %>_<%= self.name() %>value_t_ <%= window_name %>_<%= self.name() %>value_t;
931 IMPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name %>_<%= self.name() %>value_t *value);
932 IMPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name %>_<%= self.name() %>value_t *value);
935 erb = ERB.new(script, nil, '-');
939 def generate_source_struct(window_name)
943 <% if self.is_databox_specify_argument() %>W dnum;<% end %>
944 TC format[<%= self.calc_serialbox_formatlength() %>];
945 W cv[<%= self.calc_serialbox_fieldsnumber() %>];
947 } <%= self.name() %>;
950 erb = ERB.new(script, nil, '-');
954 def generate_source_functions(main_name, window_name)
956 EXPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name %>_<%= self.name() %>value_t *value)
959 <%- @yaml["fields"].each do |field| -%>
960 <%- case field["type"] -%>
961 <%- when "number" -%>
962 if ((<%= field["min"] %> <= value-><%= field["name"] %>)&&(value-><%= field["name"] %> <= <%= field["max"] %>)) {
963 window-><%= self.name() %>.cv[<%= j %>] = value-><%= field["name"] %>;<%- j+=1 %>
966 if ((0 <= value-><%= field["name"] %>)&&(value-><%= field["name"] %> < <%= field["items"].length %>)) {
967 window-><%= self.name() %>.cv[<%= j %>] = value-><%= field["name"] %>;<%- j+=1 %>
971 if (window->wid < 0) {
975 return cset_val(window-><%= self.name() %>.id, <%= self.calc_serialbox_fieldsnumber() %>, (W*)(window-><%= self.name() %>.cv));
978 EXPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name %>_<%= self.name() %>value_t *value)
982 if (window->wid > 0) {
983 err = cget_val(window-><%= self.name() %>.id, <%= self.calc_serialbox_fieldsnumber() %>, (W*)(window-><%= self.name() %>.cv));
990 <%- @yaml["fields"].each do |field| -%>
991 <%- case field["type"] -%>
992 <%- when "number", "items" -%>
993 value-><%= field["name"] %> = window-><%= self.name() %>.cv[<%= j %>];<%- j+=1 %>
1000 LOCAL VOID <%= window_name %>_action<%= self.name() %>(<%= window_name %>_t *window, WEVENT *wev, <%= main_name %>event_t *evt)
1004 i = cact_par(window-><%= self.name() %>.id, wev);
1006 window-><%= self.name() %>.nextaction = True;
1007 <%= window_name %>_setflag(window, <%= window_name.upcase %>_FLAG_PARTS_OTHEREVENT);
1011 window-><%= self.name() %>.nextaction = False;
1013 cget_val(window-><%= self.name() %>.id, <%= self.calc_serialbox_fieldsnumber() %>, (W*)(window-><%= self.name() %>.cv));
1014 /* TODO: export event */
1031 erb = ERB.new(script, nil, '-');
1035 def generate_initialize_in_new()
1037 window-><%= self.name() %>.id = -1;
1038 <%- if self.is_databox_specify_argument() -%>
1039 window-><%= self.name() %>.dnum = dnum_<%= self.name() %>;
1042 <%- @yaml["fields"].each do |field| -%>
1043 <%- case field["type"] -%>
1044 <%- when "number" -%>
1045 window-><%= self.name() %>.format[<%= l %>] = 0x0e00 | <%= field["chars"] %>;<%- l+=1 %>
1046 window-><%= self.name() %>.format[<%= l %>] = <%= field["min"] %>;<%- l+=1 %>
1047 window-><%= self.name() %>.format[<%= l %>] = <%= field["max"] %>;<%- l+=1 %>
1048 <%- when "items" -%>
1049 window-><%= self.name() %>.format[<%= l %>] = 0x0800 | <%= field["chars"] %>;<%- l+=1 %>
1050 <%- field["items"].each do |item| -%>
1051 window-><%= self.name() %>.format[<%= l %>] = MC_STR;<%- l+=1 %>
1052 <%- conv_euc_to_TCArray(item["text"]).each do |ch| -%>
1053 window-><%= self.name() %>.format[<%= l %>] = 0x<%= ch.to_s(16) %>;<%- l+=1 %>
1056 window-><%= self.name() %>.format[<%= l %>] = TNULL;<%- l+=1 %>
1057 <%- when "fixed" -%>
1058 <%- conv_euc_to_TCArray(field["text"]).each do |ch| -%>
1059 window-><%= self.name() %>.format[<%= l %>] = 0x<%= ch.to_s(16) %>;<%- l+=1 %>
1063 window-><%= self.name() %>.format[<%= l %>] = TNULL;<%- l+=1 %>
1065 <%- @yaml["fields"].each do |field| -%>
1066 <%- case field["type"] -%>
1067 <%- when "number" -%>
1068 window-><%= self.name() %>.cv[<%= l %>] = <%= field["min"] %>;<%- l+=1 %>
1069 <%- when "items" -%>
1070 window-><%= self.name() %>.cv[<%= l %>] = 0;<%- l+=1 %>
1073 window-><%= self.name() %>.nextaction = False;
1076 erb = ERB.new(script, nil, '-');
1080 def generate_create_systemcall_direct()
1081 script = "ccre_sbx(wid, SB_PARTS|P_DISP, &r, window-><%= self.name() %>.format, <%= self.calc_serialbox_fieldsnumber() %>, window-><%= self.name() %>.cv, NULL)"
1083 erb = ERB.new(script, nil, '-');
1087 def generate_loadvalue_in_open()
1089 cset_val(window-><%= self.name() %>.id, <%= self.calc_serialbox_fieldsnumber() %>, (W*)(window-><%= self.name() %>.cv));
1092 erb = ERB.new(script, nil, '-');
1096 def generate_savevalue_in_close()
1098 err = cget_val(window-><%= self.name() %>.id, <%= self.calc_serialbox_fieldsnumber() %>, (W*)(window-><%= self.name() %>.cv));
1101 erb = ERB.new(script, nil, '-');
1105 def generate_action_in_butdnwork(main_name, window_name)
1107 if (id == window-><%= self.name() %>.id) {
1108 <%= window_name %>_action<%= self.name() %>(window, wev, evt);
1113 erb = ERB.new(script, nil, '-');
1118 class HMISwitchSelectorParts < HMIParts
1119 def calc_formatlength()
1121 @yaml["fields"].each { |field|
1122 l+= 1 + calc_euc_to_TCArray_length(field["text"]);
1124 l += 1; # for last TNULL
1127 def is_need_eventbreak()
1131 def generate_header_eventtype_enumulate(main_name, window_name)
1133 <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_CHANGE,
1136 erb = ERB.new(script, nil, '-');
1140 def generate_header_eventstruct_definition(main_name, window_name)
1142 struct <%= window_name %>_eventdata_<%= self.name() %>_change_t_ {
1143 <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T value;
1145 typedef struct <%= window_name %>_eventdata_<%= self.name() %>_change_t_ <%= window_name %>_eventdata_<%= self.name() %>_change_t;
1149 erb = ERB.new(script, nil, '-');
1153 def generate_header_eventunion_member(main_name, window_name)
1155 <%= window_name %>_eventdata_<%= self.name() %>_change_t <%= window_name %>_<%= self.name() %>_change;
1158 erb = ERB.new(script, nil, '-');
1162 def generate_prototypes(window_name)
1164 enum <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T_ {
1165 <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_NOSEL = 0,
1166 <%- @yaml["fields"].each do |field| -%>
1167 <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_<%= field["name"].upcase %>,
1170 typedef enum <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T_ <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T;
1171 IMPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T value);
1172 IMPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T *value);
1175 erb = ERB.new(script, nil, '-');
1179 def generate_source_struct(window_name)
1183 <%- if self.is_databox_use() -%>
1186 TC format[<%= self.calc_formatlength()%>];
1188 <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T value;
1189 } <%= self.name() %>;
1192 erb = ERB.new(script, nil, '-');
1196 def generate_source_functions(main_name, window_name)
1198 EXPORT W <%= window_name %>_set<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T value)
1202 val = window-><%= self.name() %>.value = value;
1203 if (window->wid < 0) {
1207 return cset_val(window-><%= self.name() %>.id, 1, (W*)(&val));
1210 EXPORT W <%= window_name %>_get<%= self.name() %>value(<%= window_name %>_t *window, <%= window_name.upcase %>_<%= self.name().upcase %>VALUE_T *value)
1214 if (window->wid > 0) {
1215 err = cget_val(window-><%= self.name() %>.id, 1, (W*)(&val));
1220 *value = window-><%= self.name() %>.value = val;
1225 LOCAL VOID <%= window_name %>_action<%= self.name() %>(<%= window_name %>_t *window, WEVENT *wev, <%= main_name %>event_t *evt)
1229 i = cact_par(window-><%= self.name() %>.id, wev);
1230 if ((i & 0x5000) != 0x5000) {
1233 window-><%= self.name() %>.value = i & 0xfff;
1234 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= window_name.upcase %>_PARTS_<%= self.name().upcase %>_CHANGE;
1235 evt->data.<%= window_name %>_<%= self.name() %>_change.value = window-><%= self.name() %>.value;
1240 erb = ERB.new(script, nil, '-');
1244 def generate_initialize_in_new()
1246 window-><%= self.name() %>.id = -1;
1247 <%- if self.is_databox_use() -%>
1248 window-><%= self.name() %>.dnum = dnum_<%= self.name() %>;
1251 <%- @yaml["fields"].each do |field| -%>
1252 window-><%= self.name() %>.format[<%= l %>] = MC_STR;<%- l+=1 %>
1253 <%- conv_euc_to_TCArray(field["text"]).each do |ch| -%>
1254 window-><%= self.name() %>.format[<%= l %>] = 0x<%= ch.to_s(16) %>;<%- l+=1 %>
1257 window-><%= self.name() %>.format[<%= l %>] = TNULL;<%- l+=1 %>
1259 window-><%= self.name() %>.value = 0;
1262 erb = ERB.new(script, nil, '-');
1266 def generate_create_systemcall_direct()
1267 script = "ccre_sel(wid, WS_PARTS|P_DISP, &r, window-><%= self.name() %>.value, window-><%= self.name() %>.format, NULL)"
1269 erb = ERB.new(script, nil, '-');
1273 def generate_loadvalue_in_open()
1275 cset_val(window-><%= self.name() %>.id, 1, (W*)(&window-><%= self.name() %>.value));
1278 erb = ERB.new(script, nil, '-');
1282 def generate_savevalue_in_close()
1284 err = cget_val(window-><%= self.name() %>.id, 1, (W*)(&window-><%= self.name() %>.value));
1287 erb = ERB.new(script, nil, '-');
1291 def generate_action_in_butdnwork(main_name, window_name)
1293 if (id == window-><%= self.name() %>.id) {
1294 <%= window_name %>_action<%= self.name() %>(window, wev, evt);
1299 erb = ERB.new(script, nil, '-');
1304 def generate_parts(type, a)
1307 return HMITextBoxParts.new(a);
1308 when "secrettextbox"
1309 return HMISecretTextBoxParts.new(a);
1310 when "textmomentallyswitch"
1311 return HMITextMomentallySwitchParts.new(a);
1313 return HMISerialBoxParts.new(a);
1315 return HMINumberBoxParts.new(a);
1316 when "switchselector"
1317 return HMISwitchSelectorParts.new(a);
1322 attr_accessor :yaml, :parts
1323 def initialize(yaml)
1325 @parts = Array.new();
1326 if yaml["parts"] != nil
1327 yaml["parts"].each { |a|
1328 w = generate_parts(a["type"], a)
1334 @yaml["window_name"]
1336 def is_attr_xxx(name)
1337 if @yaml["attributes"] == nil || @yaml["attributes"].empty?
1340 @yaml["attributes"].any? { |item|
1345 def is_exportevent_xxx(name)
1346 if @yaml["export_events"] == nil || @yaml["export_events"].empty?
1349 @yaml["export_events"].any? { |item|
1354 def is_attr_scrollable()
1355 self.is_attr_xxx("scrollable");
1357 def is_attr_resizable()
1358 self.is_attr_xxx("resizable");
1360 def is_attr_opencheckable()
1361 self.is_attr_xxx("opencheckable");
1363 def is_attr_subwindow()
1364 self.is_attr_xxx("subwindow");
1366 def is_attr_alwaysopen()
1367 self.is_attr_xxx("alwaysopen");
1369 def is_exportevent_draw()
1370 self.is_exportevent_xxx("draw");
1372 def is_exportevent_butdn()
1373 self.is_exportevent_xxx("butdn");
1375 def is_exportevent_paste()
1376 self.is_exportevent_xxx("paste");
1378 def is_exportevent_close()
1379 self.is_exportevent_xxx("close");
1381 def is_exportevent_switch()
1382 self.is_exportevent_xxx("switch");
1384 def is_exportevent_mousemove()
1385 self.is_exportevent_xxx("mousemove");
1387 def is_exportevent_scroll()
1388 self.is_exportevent_xxx("scroll");
1390 def is_exist_controllparts()
1393 def is_exist_nondatabox_controllparts()
1394 @parts.any? { |item|
1395 !item.is_databox_use();
1401 def get_window_width()
1404 def get_window_height()
1407 def get_window_title()
1410 def is_exist_eventbreak_parts()
1411 @parts.any? { |item|
1412 item.is_need_eventbreak();
1415 def get_window_parent()
1418 def get_window_title_max_length()
1419 len = @yaml["title_max_length"];
1426 def generate_header_eventtype_enumulate(main_name)
1428 <%- if self.is_exportevent_draw() -%>
1429 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_DRAW,
1431 <%- if self.is_attr_resizable() -%>
1432 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_RESIZE,
1434 <%- if self.is_exportevent_close() -%>
1435 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_CLOSE,
1437 <%- if self.is_exportevent_butdn() -%>
1438 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_BUTDN,
1440 <%- if self.is_exportevent_paste() -%>
1441 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_PASTE,
1443 <%- if self.is_exportevent_switch() -%>
1444 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_SWITCH,
1446 <%- if self.is_exportevent_mousemove() -%>
1447 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_MOUSEMOVE,
1449 <%- if self.is_exportevent_scroll() and self.is_attr_scrollable() -%>
1450 <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_SCROLL,
1452 <%- @parts.each do |p| -%><%= p.generate_header_eventtype_enumulate(main_name, self.struct_name()) %><%- end -%>
1455 erb = ERB.new(script, nil, '-');
1459 def generate_header_partsevent_struct(main_name)
1461 <%- @parts.each do |p| -%><%= p.generate_header_eventstruct_definition(main_name, self.struct_name()) %><%- end -%>
1464 erb = ERB.new(script, nil, '-');
1468 def generate_header_partsevent_unionmember(main_name)
1470 <%- @parts.each do |p| -%><%= p.generate_header_eventunion_member(main_name, self.struct_name()) %><%- end -%>
1473 erb = ERB.new(script, nil, '-');
1477 def generate_prototypes()
1479 typedef struct <%= self.struct_name() %>_t_ <%= self.struct_name() %>_t;
1480 <%- if self.is_attr_scrollable() -%>
1481 typedef VOID (*<%= self.struct_name() %>_scrollcalback)(VP arg, W dh, W dv);
1484 <%- if self.is_attr_scrollable() -%>
1485 IMPORT VOID <%= self.struct_name() %>_scrollbyvalue(<%= self.struct_name() %>_t *window, W dh, W dv);
1486 IMPORT W <%= self.struct_name() %>_setdrawrect(<%= self.struct_name() %>_t *window, W l, W t, W r, W b);
1487 IMPORT W <%= self.struct_name() %>_setworkrect(<%= self.struct_name() %>_t *window, W l, W t, W r, W b);
1488 IMPORT W <%= self.struct_name() %>_scrollworkarea(<%= self.struct_name() %>_t *window, W dh, W dv);
1489 IMPORT W <%= self.struct_name() %>_getworkrect(<%= self.struct_name() %>_t *window, RECT *r);
1491 <%- if self.is_attr_opencheckable() -%>
1492 IMPORT Bool <%= self.struct_name() %>_isopen(<%= self.struct_name() %>_t *window);
1494 <%- if self.is_exportevent_paste() -%>
1495 IMPORT VOID <%= self.struct_name() %>_responsepasterequest(<%= self.struct_name() %>_t *window, W nak, PNT *pos);
1497 <%- if self.is_exportevent_draw() -%>
1498 IMPORT W <%= self.struct_name() %>_startredisp(<%= self.struct_name() %>_t *window, RECT *r);
1499 IMPORT W <%= self.struct_name() %>_endredisp(<%= self.struct_name() %>_t *window);
1500 IMPORT W <%= self.struct_name() %>_eraseworkarea(<%= self.struct_name() %>_t *window, RECT *r);
1502 IMPORT W <%= self.struct_name() %>_requestredisp(<%= self.struct_name() %>_t *window);
1503 <%- if self.is_exportevent_butdn() -%>
1504 IMPORT GID <%= self.struct_name() %>_startdrag(<%= self.struct_name() %>_t *window);
1505 IMPORT W <%= self.struct_name() %>_getdrag(<%= self.struct_name() %>_t *window, PNT *pos, WID *wid, PNT *pos_butup);
1506 IMPORT VOID <%= self.struct_name() %>_enddrag(<%= self.struct_name() %>_t *window);
1508 IMPORT GID <%= self.struct_name() %>_getGID(<%= self.struct_name() %>_t *window);
1509 IMPORT WID <%= self.struct_name() %>_getWID(<%= self.struct_name() %>_t *window);
1510 IMPORT W <%= self.struct_name() %>_settitle(<%= self.struct_name() %>_t *window, TC *title);
1511 IMPORT Bool <%= self.struct_name() %>_isactive(<%= self.struct_name() %>_t *window);
1512 <%- if !self.is_attr_alwaysopen() -%>
1513 IMPORT W <%= self.struct_name() %>_open(<%= self.struct_name() %>_t *window);
1514 IMPORT VOID <%= self.struct_name() %>_close(<%= self.struct_name() %>_t *window);
1516 <%- @parts.each do |p| -%><%= p.generate_prototypes(self.struct_name()) %><%- end -%>
1519 erb = ERB.new(script, nil, '-');
1523 def generate_initialize_arguments()
1525 <%- 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 -%><%- -%>
1528 erb = ERB.new(script, nil, '-');
1532 def generate_initialize_arguments_values()
1534 <%- 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 -%><%- -%>
1537 erb = ERB.new(script, nil, '-');
1541 def generate_source_struct()
1543 struct <%= self.struct_name() %>_t_ {
1544 <%- if self.is_need_flag() -%>
1549 <%- if self.is_attr_subwindow() -%>
1550 <%= self.get_window_parent() %>_t *parent;
1556 <%- if self.is_attr_scrollable() -%>
1557 hmi_windowscroll_t wscr;
1559 <%- if !self.is_attr_alwaysopen() -%>
1560 TC title[<%= self.get_window_title_max_length() %>+1];
1563 <%- @parts.each do |p| -%><%= p.generate_source_struct(self.struct_name()) %><%- end -%>
1568 erb = ERB.new(script, nil, '-');
1572 def generate_source_functions(main_name)
1574 <%- if self.is_need_flag() -%>
1575 #define <%= self.struct_name().upcase %>_FLAG_DRAWREQUEST 0x00000001
1576 <%- if self.is_attr_scrollable() -%>
1577 #define <%= self.struct_name().upcase %>_FLAG_RSCROLLING 0x00000002
1578 #define <%= self.struct_name().upcase %>_FLAG_BSCROLLING 0x00000004
1580 <%- if self.is_exist_eventbreak_parts -%>
1581 #define <%= self.struct_name().upcase %>_FLAG_PARTS_OTHEREVENT 0x0000000f
1582 #define <%= self.struct_name().upcase %>_FLAG_PARTS_NEXTACTION 0x00000010
1585 #define <%= self.struct_name() %>_setflag(window, flagx) (window)->flag = (window)->flag | (flagx)
1586 #define <%= self.struct_name() %>_clearflag(window, flagx) (window)->flag = (window)->flag & ~(flagx)
1587 #define <%= self.struct_name() %>_issetflag(window, flagx) (((window)->flag & (flagx)) == 0 ? False : True)
1590 <%- @parts.each do |p| -%><%= p.generate_source_functions(main_name, self.struct_name()) %><%- end -%>
1591 <%- if self.is_attr_scrollable() -%>
1592 EXPORT VOID <%= self.struct_name() %>_scrollbyvalue(<%= self.struct_name() %>_t *window, W dh, W dv)
1594 hmi_windowscroll_scrollworkrect(&window->wscr, dh, dv);
1597 EXPORT W <%= self.struct_name() %>_setdrawrect(<%= self.struct_name() %>_t *window, W l, W t, W r, W b)
1599 return hmi_windowscroll_setdrawrect(&window->wscr, l, t, r, b);
1602 EXPORT W <%= self.struct_name() %>_setworkrect(<%= self.struct_name() %>_t *window, W l, W t, W r, W b)
1604 return hmi_windowscroll_setworkrect(&window->wscr, l, t, r, b);
1607 EXPORT W <%= self.struct_name() %>_scrollworkarea(<%= self.struct_name() %>_t *window, W dh, W dv)
1610 err = wscr_wnd(window->wid, NULL, dh, dv, W_MOVE|W_RDSET);
1614 if ((err & W_RDSET) != 0) {
1615 <%= self.struct_name() %>_setflag(window, <%= self.struct_name().upcase %>_FLAG_DRAWREQUEST);
1620 EXPORT W <%= self.struct_name() %>_getworkrect(<%= self.struct_name() %>_t *window, RECT *r)
1622 return wget_wrk(window->wid, r);
1626 <%- if self.is_attr_opencheckable() -%>
1627 EXPORT Bool <%= self.struct_name() %>_isopen(<%= self.struct_name() %>_t *window)
1629 if (window->wid < 0) {
1636 <%- if self.is_exportevent_paste() -%>
1637 EXPORT VOID <%= self.struct_name() %>_responsepasterequest(<%= self.struct_name() %>_t *window, W nak, PNT *pos)
1640 window->savedwev.r.r.p.rightbot.x = pos->x;
1641 window->savedwev.r.r.p.rightbot.y = pos->y;
1643 wrsp_evt(&window->savedwev, nak);
1647 <%- if self.is_exportevent_draw() -%>
1648 EXPORT W <%= self.struct_name() %>_startredisp(<%= self.struct_name() %>_t *window, RECT *r)
1650 return wsta_dsp(window->wid, r, NULL);
1653 EXPORT W <%= self.struct_name() %>_endredisp(<%= self.struct_name() %>_t *window)
1655 return wend_dsp(window->wid);
1658 EXPORT W <%= self.struct_name() %>_eraseworkarea(<%= self.struct_name() %>_t *window, RECT *r)
1660 return wera_wnd(window->wid, r);
1664 LOCAL VOID <%= self.struct_name() %>_draw(<%= self.struct_name() %>_t *window, RECT *r)
1666 cdsp_pwd(window->wid, r, P_RDISP);
1669 LOCAL VOID <%= self.struct_name() %>_redisp(<%= self.struct_name() %>_t *window)
1673 if (wsta_dsp(window->wid, &r, NULL) == 0) {
1676 wera_wnd(window->wid, &r);
1677 <%= self.struct_name() %>_draw(window, &r);
1678 } while (wend_dsp(window->wid) > 0);
1682 EXPORT W <%= self.struct_name() %>_requestredisp(<%= self.struct_name() %>_t *window)
1684 return wreq_dsp(window->wid);
1687 <%- if self.is_exportevent_butdn() -%>
1688 EXPORT GID <%= self.struct_name() %>_startdrag(<%= self.struct_name() %>_t *window)
1690 return wsta_drg(window->wid, 0);
1693 EXPORT W <%= self.struct_name() %>_getdrag(<%= self.struct_name() %>_t *window, PNT *pos, WID *wid, PNT *pos_butup)
1697 etype = wget_drg(pos, &window->savedwev);
1698 *wid = window->savedwev.s.wid;
1699 if (etype == EV_BUTUP) {
1700 *pos_butup = window->savedwev.s.pos;
1706 EXPORT VOID <%= self.struct_name() %>_enddrag(<%= self.struct_name() %>_t *window)
1712 EXPORT GID <%= self.struct_name() %>_getGID(<%= self.struct_name() %>_t *window)
1714 return wget_gid(window->wid);
1717 EXPORT WID <%= self.struct_name() %>_getWID(<%= self.struct_name() %>_t *window)
1722 EXPORT W <%= self.struct_name() %>_settitle(<%= self.struct_name() %>_t *window, TC *title)
1724 <%- if !self.is_attr_alwaysopen() -%>
1725 tc_strncpy(window->title, title, <%= self.get_window_title_max_length() %>);
1726 window->title[<%= self.get_window_title_max_length() %>] = TNULL;
1727 return wset_tit(window->wid, -1, window->title, 0);
1729 return wset_tit(window->wid, -1, title, 0);
1733 EXPORT Bool <%= self.struct_name() %>_isactive(<%= self.struct_name() %>_t *window)
1736 wid = wget_act(NULL);
1737 if (window->wid == wid) {
1743 LOCAL VOID <%= self.struct_name() %>_butdnwork(<%= self.struct_name() %>_t *window, WEVENT *wev, <%= main_name %>event_t *evt)
1745 <%- if self.is_exist_controllparts() -%>
1749 ret = cfnd_par(window->wid, wev->s.pos, &id);
1753 <%- @parts.each do |p| -%><%= p.generate_action_in_butdnwork(main_name, self.struct_name()) %><%- end -%>
1755 <%- if self.is_exportevent_butdn() -%>
1756 evt->type = <%= main_name.upcase %>EVENT_TYPE_<%= self.struct_name().upcase %>_BUTDN;
1757 evt->data.<%= self.struct_name() %>_butdn.type = wchk_dck(wev->s.time);
1758 evt->data.<%= self.struct_name() %>_butdn.pos = wev->s.pos;
1759 memcpy(&window->savedwev, wev, sizeof(WEVENT));
1763 <%- if self.is_attr_resizable() -%>
1764 LOCAL VOID <%= self.struct_name() %>_resize(<%= self.struct_name() %>_t *window, SIZE *sz)
1767 Bool workchange = False;
1769 wget_wrk(window->wid, &work);
1770 if (work.c.left != 0) {
1774 if (work.c.top != 0) {
1778 wset_wrk(window->wid, &work);
1779 gset_vis(window->gid, work);
1781 if (workchange == True) {
1782 wera_wnd(window->wid, NULL);
1783 wreq_dsp(window->wid);
1786 sz->v = work.c.bottom - work.c.top;
1787 sz->h = work.c.right - work.c.left;
1791 <% 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 %>)
1794 <%- if self.is_exist_nondatabox_controllparts() -%>
1798 if (window->wid > 0) {
1802 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);
1804 DP_ER("wopn_wnd: subjectoption error", wid);
1808 window->gid = wget_gid(wid);
1809 <%- if self.is_attr_scrollable() -%>
1810 hmi_windowscroll_settarget(&window->wscr, wid);
1813 <%- @parts.each do |p| -%><%= p.generate_create_in_open() %><%- end -%>
1820 <%- if !self.is_attr_alwaysopen() -%>
1821 EXPORT VOID <%= self.struct_name() %>_close(<%= self.struct_name() %>_t *window)
1826 if (window->wid < 0) {
1831 err = wget_sts(window->wid, &stat, NULL);
1835 <%- @parts.reverse_each do |p| -%><%= p.generate_savevalue_in_close() %><%- end -%>
1836 <%- if self.is_exist_controllparts() -%>
1837 cdel_pwd(window->wid, NOCLR);
1839 wcls_wnd(window->wid, CLR);
1847 erb = ERB.new(script, nil, '-');
1851 def generate_checkpartsflag_in_checkflag(main_name)
1853 <%- if self.is_exist_eventbreak_parts() -%>
1854 if (<%= self.struct_name() %>_issetflag(hmi-><%= self.struct_name() %>, <%= self.struct_name().upcase %>_FLAG_PARTS_OTHEREVENT) == True) {
1855 <%= self.struct_name() %>_clearflag(hmi-><%= self.struct_name() %>, <%= self.struct_name().upcase %>_FLAG_PARTS_OTHEREVENT);
1856 <%= self.struct_name() %>_setflag(hmi-><%= self.struct_name() %>, <%= self.struct_name().upcase %>_FLAG_PARTS_NEXTACTION);
1858 } else if (<%= self.struct_name() %>_issetflag(hmi-><%= self.struct_name() %>, <%= self.struct_name().upcase %>_FLAG_PARTS_NEXTACTION) == True) {
1859 <%= self.struct_name() %>_clearflag(hmi-><%= self.struct_name() %>, <%= self.struct_name().upcase %>_FLAG_PARTS_NEXTACTION);
1860 <%- self.parts.each do |p| -%>
1861 <%- if p.is_need_eventbreak() -%>
1862 if (hmi-><%= self.struct_name() %>-><%= p.name() %>.nextaction == True) {
1863 hmi->wev.s.type = EV_NULL;
1864 <%= self.struct_name() %>_action<%= p.name() %>(hmi-><%= self.struct_name() %>, &hmi->wev, &hmi->evt);
1873 erb = ERB.new(script, nil, '-');
1877 def generate_new_del_functions()
1879 EXPORT <%= self.struct_name() %>_t* <%= self.struct_name() %>_new(<%= self.generate_initialize_arguments() %>)
1881 <%= self.struct_name() %>_t *window;
1882 <%- if self.is_attr_scrollable() -%>
1886 window = (<%= self.struct_name() %>_t*)malloc(sizeof(<%= self.struct_name() %>_t));
1887 if (window == NULL) {
1890 <%- if self.is_attr_scrollable() -%>
1895 window->parent = parent;
1896 <%- if self.is_attr_resizable() -%>
1899 window->r.c.left = p->x;
1900 window->r.c.top = p->y;
1901 window->r.c.right = p->x + <%= self.get_window_width() %>;
1902 window->r.c.bottom = p->y + <%= self.get_window_height() %>;
1904 <%- if self.is_attr_scrollable() -%>
1905 err = hmi_windowscroll_initialize(&window->wscr, window->wid);
1911 <%- if !self.is_attr_alwaysopen() -%>
1912 tc_strset(window->title, TNULL, <%= self.get_window_title_max_length() %>+1);
1914 tc_strncpy(window->title, title, <%= self.get_window_title_max_length() %>);
1917 <%- conv_euc_to_TCArray(self.get_window_title()).each do |ch| -%>
1918 window->title[<%= l %>] = 0x<%= ch.to_s(16) %>;<%- l+=1 %>
1922 <%- @parts.each do |p| -%><%= p.generate_initialize_in_new() %><%- end -%>
1924 <%- if self.is_attr_alwaysopen() -%>
1925 err = <%= self.struct_name() %>_open(window, title);
1927 <%- if self.is_attr_scrollable() -%>
1928 hmi_windowscroll_finalize(&window->wscr);
1938 LOCAL VOID <%= self.struct_name() %>_delete(<%= self.struct_name() %>_t *window)
1940 if (window->wid > 0) {
1941 <%- if self.is_exist_controllparts() -%>
1942 cdel_pwd(window->wid, NOCLR);
1944 wcls_wnd(window->wid, CLR);
1946 <%- if self.is_attr_scrollable() -%>
1947 hmi_windowscroll_finalize(&window->wscr);
1954 erb = ERB.new(script, nil, '-');
1960 attr_accessor :yaml, :win, :name
1961 def initialize(yaml)
1964 yaml["windows"].each { |a|
1965 w = HMIWindow.new(a);
1970 @yaml["generator"]["name"]
1972 def lisence_header()
1973 @yaml["generator"]["lisence_header"]
1975 def lisence_source()
1976 @yaml["generator"]["lisence_source"]
1978 def filename_header()
1979 @yaml["generator"]["output_header"]
1982 def generate_header_eventtype_enumulate()
1985 <%= self.main_name().upcase %>EVENT_TYPE_NONE,
1986 <%= self.main_name().upcase %>EVENT_TYPE_COMMON_MOUSEMOVE,
1987 <%= self.main_name().upcase %>EVENT_TYPE_COMMON_KEYDOWN,
1988 <%= self.main_name().upcase %>EVENT_TYPE_COMMON_MENU,
1989 <%= self.main_name().upcase %>EVENT_TYPE_COMMON_TIMEOUT,
1990 <%- @win.each do |w| -%><%= w.generate_header_eventtype_enumulate(self.main_name()) %><%- end -%>
1994 erb = ERB.new(script, nil, '-');
1997 def generate_header_eventtype_struct()
1999 struct <%= self.main_name() %>_eventdata_mousemove_t_ {
2002 typedef struct <%= self.main_name() %>_eventdata_mousemove_t_ <%= self.main_name() %>_eventdata_mousemove_t;
2004 struct <%= self.main_name() %>_eventdata_keydown_t_ {
2009 typedef struct <%= self.main_name() %>_eventdata_keydown_t_ <%= self.main_name() %>_eventdata_keydown_t;
2011 struct <%= self.main_name() %>_eventdata_menu_t_ {
2014 typedef struct <%= self.main_name() %>_eventdata_menu_t_ <%= self.main_name() %>_eventdata_menu_t;
2016 struct <%= self.main_name() %>_eventdata_timeout_t_ {
2019 typedef struct <%= self.main_name() %>_eventdata_timeout_t_ <%= self.main_name() %>_eventdata_timeout_t;
2021 <%- @win.each do |w| -%>
2022 <%- if w.is_exportevent_draw() -%>
2023 struct <%= w.struct_name() %>_eventdata_draw_t_ {
2025 typedef struct <%= w.struct_name() %>_eventdata_draw_t_ <%= w.struct_name() %>_eventdata_draw_t;
2028 <%- if w.is_attr_resizable() -%>
2029 struct <%= w.struct_name() %>_eventdata_resize_t_ {
2032 typedef struct <%= w.struct_name() %>_eventdata_resize_t_ <%= w.struct_name() %>_eventdata_resize_t;
2035 <%- if w.is_exportevent_close() -%>
2036 struct <%= w.struct_name() %>_eventdata_close_t_ {
2039 typedef struct <%= w.struct_name() %>_eventdata_close_t_ <%= w.struct_name() %>_eventdata_close_t;
2042 <%- if w.is_exportevent_butdn() -%>
2043 struct <%= w.struct_name() %>_eventdata_butdn_t_ {
2047 typedef struct <%= w.struct_name() %>_eventdata_butdn_t_ <%= w.struct_name() %>_eventdata_butdn_t;
2050 <%- if w.is_exportevent_paste() -%>
2051 struct <%= w.struct_name() %>_eventdata_paste_t_ {
2053 typedef struct <%= w.struct_name() %>_eventdata_paste_t_ <%= w.struct_name() %>_eventdata_paste_t;
2056 <%- if w.is_exportevent_switch() -%>
2057 struct <%= w.struct_name() %>_eventdata_switch_t_ {
2059 typedef struct <%= w.struct_name() %>_eventdata_switch_t_ <%= w.struct_name() %>_eventdata_switch_t;
2062 <%- if w.is_exportevent_mousemove() -%>
2063 struct <%= w.struct_name() %>_eventdata_mousemove_t_ {
2067 typedef struct <%= w.struct_name() %>_eventdata_mousemove_t_ <%= w.struct_name() %>_eventdata_mousemove_t;
2070 <%- if w.is_exportevent_scroll() and w.is_attr_scrollable() -%>
2071 struct <%= w.struct_name() %>_eventdata_scroll_t_ {
2075 typedef struct <%= w.struct_name() %>_eventdata_scroll_t_ <%= w.struct_name() %>_eventdata_scroll_t;
2078 <%= w.generate_header_partsevent_struct(self.main_name()) %><%- -%>
2082 erb = ERB.new(script, nil, '-');
2085 def generate_header_eventtype_union()
2087 struct <%= self.main_name() %>event_t_ {
2090 <%= self.main_name() %>_eventdata_mousemove_t common_mousemove;
2091 <%= self.main_name() %>_eventdata_keydown_t common_keydown;
2092 <%= self.main_name() %>_eventdata_menu_t common_menu;
2093 <%= self.main_name() %>_eventdata_timeout_t common_timeout;
2094 <%- @win.each do |w| -%>
2095 <%- if w.is_exportevent_draw() -%>
2096 <%= w.struct_name() %>_eventdata_draw_t <%= w.struct_name() %>_draw;
2098 <%- if w.is_attr_resizable() -%>
2099 <%= w.struct_name() %>_eventdata_resize_t <%= w.struct_name() %>_resize;
2101 <%- if w.is_exportevent_close() -%>
2102 <%= w.struct_name() %>_eventdata_close_t <%= w.struct_name() %>_close;
2104 <%- if w.is_exportevent_butdn() -%>
2105 <%= w.struct_name() %>_eventdata_butdn_t <%= w.struct_name() %>_butdn;
2107 <%- if w.is_exportevent_paste() -%>
2108 <%= w.struct_name() %>_eventdata_paste_t <%= w.struct_name() %>_paste;
2110 <%- if w.is_exportevent_switch() -%>
2111 <%= w.struct_name() %>_eventdata_switch_t <%= w.struct_name() %>_switch;
2113 <%- if w.is_exportevent_mousemove() -%>
2114 <%= w.struct_name() %>_eventdata_mousemove_t <%= w.struct_name() %>_mousemove;
2116 <%- if w.is_exportevent_scroll() and w.is_attr_scrollable() -%>
2117 <%= w.struct_name() %>_eventdata_scroll_t <%= w.struct_name() %>_scroll;
2119 <%- -%><%= w.generate_header_partsevent_unionmember(self.main_name()) %><%- -%>
2123 typedef struct <%= self.main_name() %>event_t_ <%= self.main_name() %>event_t;
2126 erb = ERB.new(script, nil, '-');
2129 def generate_header_main_prototypes()
2131 typedef struct <%= self.main_name() %>_t_ <%= self.main_name() %>_t;
2133 IMPORT <%= self.main_name() %>_t* <%= self.main_name() %>_new();
2134 IMPORT VOID <%= self.main_name() %>_delete(<%= self.main_name() %>_t *hmi);
2135 IMPORT W <%= self.main_name() %>_getevent(<%= self.main_name() %>_t *hmi, <%= self.main_name() %>event_t **evt);
2136 <%- @win.each do |w| -%>
2137 IMPORT <%= w.struct_name() %>_t* <%= self.main_name() %>_new<%= w.struct_name() %>(<%= self.main_name() %>_t *hmi, <%= w.generate_initialize_arguments() %>);
2139 <%- @win.each do |w| -%>
2140 IMPORT VOID <%= self.main_name() %>_delete<%= w.struct_name() %>(<%= self.main_name() %>_t *hmi, <%= w.struct_name() %>_t *window);
2144 erb = ERB.new(script, nil, '-');
2148 def generate_header()
2151 str += w.generate_prototypes() + "\n";
2153 str += self.generate_header_eventtype_enumulate() + "\n";
2154 str += self.generate_header_eventtype_struct();
2155 str += self.generate_header_eventtype_union() + "\n";
2156 str += self.generate_header_main_prototypes() + "\n";
2160 def generate_source_include_files()
2162 #include "<%= self.filename_header() %>"
2163 #include "hmi/hmi_windowscroll.h"
2166 #include <bstdlib.h>
2168 #include <tstring.h>
2169 #include <btron/btron.h>
2170 #include <btron/hmi.h>
2171 #include <btron/vobj.h>
2174 # define DP(arg) printf arg
2175 # define DP_ER(msg, err) printf("%s (%d/%x)\\n", msg, err>>16, err)
2177 # define DP(arg) /**/
2178 # define DP_ER(msg, err) /**/
2183 erb = ERB.new(script, nil, '-');
2187 def generate_source_mainloop_windowid_valuablelist()
2189 <%- @win.each_with_index do |w, idx| -%>
2190 <%= w.struct_name() %>_id<%- if idx != @win.length - 1 -%>, <%- end -%>
2193 erb = ERB.new(script, nil, '-');
2197 def generate_source_mainloop()
2199 LOCAL VOID <%= self.main_name() %>_setswitchbutdnflag(<%= self.main_name() %>_t *hmi)
2201 hmi->flag = hmi->flag | <%= self.main_name().upcase %>_FLAG_SWITCHBUTDN;
2204 LOCAL VOID <%= self.main_name() %>_clearswitchbutdnflag(<%= self.main_name() %>_t *hmi)
2206 hmi->flag = hmi->flag & ~<%= self.main_name().upcase %>_FLAG_SWITCHBUTDN;
2209 LOCAL Bool <%= self.main_name() %>_issetswitchbutdnflag(<%= self.main_name() %>_t *hmi)
2211 if ((hmi->flag & <%= self.main_name().upcase %>_FLAG_SWITCHBUTDN) == 0) {
2217 <%- @win.each do |w| -%>
2218 LOCAL Bool <%= self.main_name() %>_is<%= w.struct_name() %>WID(<%= self.main_name() %>_t *hmi, WID wid)
2220 if (hmi-><%= w.struct_name() %>->wid == wid) {
2227 LOCAL VOID <%= self.main_name() %>_weventnull(<%= self.main_name() %>_t *hmi, WEVENT *wev, <%= self.main_name() %>event_t *evt)
2229 cidl_par(wev->s.wid, &wev->s.pos);
2230 if (wev->s.cmd != W_WORK)
2231 return; /*ºî¶ÈÎΰ賰*/
2232 if (wev->s.stat & ES_CMD)
2233 return; /*Ì¿Îᥡ¼¤¬²¡¤µ¤ì¤Æ¤¤¤ë*/
2234 <%- @win.each do |w| -%>
2235 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2236 <%- if w.is_exist_controllparts() -%>
2237 cidl_par(wev->s.wid, &wev->s.pos);
2239 <%- if w.is_exportevent_mousemove() -%>
2240 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_MOUSEMOVE;
2241 hmi->evt.data.<%= w.struct_name() %>_mousemove.pos = wev->s.pos;
2242 hmi->evt.data.<%= w.struct_name() %>_mousemove.stat = wev->s.stat;
2243 <%- elsif !w.is_exist_controllparts() -%>
2244 gset_ptr(PS_SELECT, NULL, -1, -1);
2250 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_COMMON_MOUSEMOVE;
2251 hmi->evt.data.common_mousemove.pos = wev->s.pos;
2254 LOCAL VOID <%= self.main_name() %>_weventrequest(<%= self.main_name() %>_t *hmi, WEVENT *wev, <%= self.main_name() %>event_t *evt)
2256 switch (wev->g.cmd) {
2257 case W_REDISP: /*ºÆɽ¼¨Í×µá*/
2258 <%- @win.each do |w| -%>
2259 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->g.wid) == True) {
2260 <%- if w.is_exportevent_draw() -%>
2261 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_DRAW;
2263 <%= w.struct_name() %>_redisp(hmi-><%= w.struct_name() %>);
2269 case W_PASTE: /*Ž¹þ¤ßÍ×µá*/
2270 <%- @win.each do |w| -%>
2271 <%- if w.is_exportevent_paste() -%>
2272 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->g.wid) == True) {
2273 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_PASTE;
2274 memcpy(&hmi-><%= w.struct_name() %>->savedwev, wev, sizeof(WEVENT));
2279 wrsp_evt(wev, 1); /*NACK*/
2281 case W_DELETE: /*Êݸ½ªÎ»*/
2282 wrsp_evt(wev, 0); /*ACK*/
2283 <%- @win.each do |w| -%>
2284 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->g.wid) == True) {
2285 <%- if w.is_exportevent_close() -%>
2286 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_CLOSE;
2287 evt->data.<%= w.struct_name() %>_close.save = True;
2289 <%= w.struct_name() %>_close(hmi-><%= w.struct_name() %>);
2295 case W_FINISH: /*ÇÑ´þ½ªÎ»*/
2296 wrsp_evt(wev, 0); /*ACK*/
2297 <%- @win.each do |w| -%>
2298 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->g.wid) == True) {
2299 <%- if w.is_exportevent_close() -%>
2300 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_CLOSE;
2301 evt->data.<%= w.struct_name() %>_close.save = False;
2303 <%= w.struct_name() %>_close(hmi-><%= w.struct_name() %>);
2312 LOCAL VOID <%= self.main_name() %>_weventbutdn(<%= self.main_name() %>_t *hmi, WEVENT *wev, <%= self.main_name() %>event_t *evt)
2315 W dh, dv; /* TODO: add check for exist scrollable window */
2317 switch (wev->s.cmd) {
2319 switch (wchk_dck(wev->s.time)) {
2321 <%- @win.each do |w| -%>
2322 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2323 <%- if w.is_exportevent_close() -%>
2324 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_CLOSE;
2325 evt->data.<%= w.struct_name() %>_close.save = True; /* TODO: tmp value */
2327 <%= w.struct_name() %>_close(hmi-><%= w.struct_name() %>);
2340 if (wmov_drg(wev, NULL) > 0) {
2341 <%- @win.each do |w| -%>
2342 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2343 <%- if w.is_exportevent_draw() -%>
2344 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_DRAW;
2346 <%= w.struct_name() %>_redisp(hmi-><%= w.struct_name() %>);
2357 switch (wchk_dck(wev->s.time)) {
2359 i = wchg_wnd(wev->s.wid, NULL, W_MOVE);
2362 i = wrsz_drg(wev, NULL, NULL);
2368 <%- @win.each do |w| -%>
2369 <%- if w.is_attr_resizable() -%>
2370 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2371 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_RESIZE;
2372 <%= w.struct_name() %>_resize(hmi-><%= w.struct_name() %>, &evt->data.<%= w.struct_name() %>_resize.work_sz);
2373 hmi_windowscroll_updatebar(&hmi-><%= w.struct_name() %>->wscr);
2375 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_DRAWREQUEST);
2383 <%- @win.each do |w| -%>
2384 <%- if w.is_attr_scrollable() -%>
2385 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2386 err = hmi_windowscroll_weventrbar(&hmi-><%= w.struct_name() %>->wscr, wev, &dh, &dv);
2391 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING);
2393 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING);
2395 <%- if w.is_exportevent_scroll() -%>
2396 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SCROLL;
2397 evt->data.<%= w.struct_name() %>_scroll.dh = dh;
2398 evt->data.<%= w.struct_name() %>_scroll.dv = dv;
2406 <%- @win.each do |w| -%>
2407 <%- if w.is_attr_scrollable() -%>
2408 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2409 err = hmi_windowscroll_weventbbar(&hmi-><%= w.struct_name() %>->wscr, wev, &dh, &dv);
2414 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING);
2416 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING);
2418 <%- if w.is_exportevent_scroll() -%>
2419 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SCROLL;
2420 evt->data.<%= w.struct_name() %>_scroll.dh = dh;
2421 evt->data.<%= w.struct_name() %>_scroll.dv = dv;
2429 <%- @win.each do |w| -%>
2430 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2431 <%= w.struct_name() %>_butdnwork(hmi-><%= w.struct_name() %>, wev, evt);
2441 LOCAL VOID <%= self.main_name() %>_weventswitch(<%= self.main_name() %>_t *hmi, WEVENT *wev, <%= self.main_name() %>event_t *evt)
2443 <%= self.main_name() %>_setswitchbutdnflag(hmi);
2444 <%- @win.each do |w| -%>
2445 <%- if w.is_exportevent_switch() -%>
2446 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2447 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SWITCH;
2454 LOCAL VOID <%= self.main_name() %>_weventreswitch(<%= self.main_name() %>_t *hmi, WEVENT *wev, <%= self.main_name() %>event_t *evt)
2456 <%= self.main_name() %>_setswitchbutdnflag(hmi);
2457 <%- @win.each do |w| -%>
2458 if (<%= self.main_name() %>_is<%= w.struct_name() %>WID(hmi, wev->s.wid) == True) {
2459 <%- if w.is_exportevent_switch() -%>
2460 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SWITCH;
2461 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_DRAWREQUEST);
2464 <%- if w.is_exportevent_draw() -%>
2465 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_DRAW;
2467 <%= w.struct_name() %>_redisp(hmi-><%= w.struct_name() %>);
2475 LOCAL VOID <%= self.main_name() %>_receivemessage(<%= self.main_name() %>_t *hmi, <%= self.main_name() %>event_t *evt)
2480 err = rcv_msg(MM_ALL, &msg, sizeof(MESSAGE), WAIT|NOCLR);
2482 if (msg.msg_type == MS_TMOUT) { /* should be use other type? */
2483 evt->type = <%= self.main_name().upcase %>EVENT_TYPE_COMMON_TIMEOUT;
2484 evt->data.common_timeout.code = msg.msg_body.TMOUT.code;
2487 clr_msg(MM_ALL, MM_ALL);
2490 LOCAL Bool <%= self.main_name() %>_checkflag(<%= self.main_name() %>_t *hmi, <%= self.main_name() %>event_t **evt)
2494 <%- @win.each do |w| -%>
2495 <%- if w.is_need_flag() and w.is_attr_scrollable() -%>
2496 if (<%= w.struct_name() %>_issetflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING) == True) {
2497 err = hmi_windowscroll_weventrbar(&hmi-><%= w.struct_name() %>->wscr, &hmi->wev, &dh, &dv);
2499 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING);
2503 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING);
2505 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_RSCROLLING);
2507 <%- if w.is_exportevent_scroll() -%>
2508 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SCROLL;
2509 hmi->evt.data.<%= w.struct_name() %>_scroll.dh = dh;
2510 hmi->evt.data.<%= w.struct_name() %>_scroll.dv = dv;
2514 if (<%= w.struct_name() %>_issetflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING) == True) {
2515 err = hmi_windowscroll_weventbbar(&hmi-><%= w.struct_name() %>->wscr, &hmi->wev, &dh, &dv);
2517 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING);
2521 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING);
2523 <%= w.struct_name() %>_setflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_BSCROLLING);
2525 <%- if w.is_exportevent_scroll() -%>
2526 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_SCROLL;
2527 hmi->evt.data.<%= w.struct_name() %>_scroll.dh = dh;
2528 hmi->evt.data.<%= w.struct_name() %>_scroll.dv = dv;
2534 <%- @win.each do |w| -%><%= w.generate_checkpartsflag_in_checkflag(self.main_name()) %><%- end -%>
2539 EXPORT W <%= self.main_name() %>_getevent(<%= self.main_name() %>_t *hmi, <%= self.main_name() %>event_t **evt)
2544 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_NONE;
2548 ok = <%= self.main_name() %>_issetswitchbutdnflag(hmi);
2550 <%= self.main_name() %>_weventbutdn(hmi, wev0, &hmi->evt);
2551 <%= self.main_name() %>_clearswitchbutdnflag(hmi);
2555 <%- @win.each do |w| -%>
2556 <%- if w.is_need_flag() -%>
2557 if (<%= w.struct_name() %>_issetflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_DRAWREQUEST) == True) {
2558 <%- if w.is_exportevent_draw() -%>
2559 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_<%= w.struct_name().upcase %>_DRAW;
2561 <%= w.struct_name() %>_redisp(hmi-><%= w.struct_name() %>);
2563 <%= w.struct_name() %>_clearflag(hmi-><%= w.struct_name() %>, <%= w.struct_name().upcase %>_FLAG_DRAWREQUEST);
2569 ok = <%= self.main_name() %>_checkflag(hmi, evt);
2574 wget_evt(wev0, WAIT);
2575 switch (wev0->s.type) {
2577 <%= self.main_name() %>_weventnull(hmi, wev0, &hmi->evt);
2580 <%= self.main_name() %>_weventrequest(hmi, wev0, &hmi->evt);
2583 <%= self.main_name() %>_weventreswitch(hmi, wev0, &hmi->evt);
2586 <%= self.main_name() %>_weventswitch(hmi, wev0, &hmi->evt);
2589 <%= self.main_name() %>_weventbutdn(hmi, wev0, &hmi->evt);
2593 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_COMMON_KEYDOWN;
2594 hmi->evt.data.common_keydown.keycode = wev0->e.data.key.code;
2595 hmi->evt.data.common_keydown.keytop = wev0->e.data.key.keytop;
2596 hmi->evt.data.common_keydown.stat = wev0->e.stat;
2602 oprc_dev(&wev0->e, NULL, 0);
2605 <%= self.main_name() %>_receivemessage(hmi, &hmi->evt);
2608 hmi->evt.type = <%= self.main_name().upcase %>EVENT_TYPE_COMMON_MENU;
2609 hmi->evt.data.common_menu.pos = wev0->s.pos;
2618 erb = ERB.new(script, nil, '-');
2622 def generate_struct()
2625 str += w.generate_source_struct();
2628 #define <%= self.main_name().upcase %>_FLAG_SWITCHBUTDN 0x00000001
2630 struct <%= self.main_name() %>_t_ {
2632 <%= self.main_name() %>event_t evt;
2634 <%- @win.each do |w| -%>
2635 <%= w.struct_name() %>_t *<%= w.struct_name() %>;
2640 erb = ERB.new(script, nil, '-');
2641 str += erb.result(binding)
2644 def generate_windowfunctions()
2647 str += w.generate_source_functions(self.main_name());
2652 def generate_source_new_del_wrappers()
2654 <%- @win.each do |w| -%>
2655 EXPORT <%= w.struct_name() %>_t* <%= self.main_name() %>_new<%= w.struct_name() %>(<%= self.main_name() %>_t *hmi, <%= w.generate_initialize_arguments() %>)
2657 <%- if w.is_attr_subwindow -%>
2658 if (parent == NULL) {
2662 if (hmi-><%= w.struct_name() %> != NULL) {
2665 hmi-><%= w.struct_name() %> = <%= w.struct_name() %>_new(<%= w.generate_initialize_arguments_values() %>);
2666 return hmi-><%= w.struct_name() %>;
2669 EXPORT VOID <%= self.main_name() %>_delete<%= w.struct_name() %>(<%= self.main_name() %>_t *hmi, <%= w.struct_name() %>_t *window)
2671 <%= w.struct_name() %>_delete(hmi-><%= w.struct_name() %>);
2672 hmi-><%= w.struct_name() %> = NULL;
2677 EXPORT <%= self.main_name() %>_t* <%= self.main_name() %>_new()
2679 <%= self.main_name() %>_t *hmi;
2681 hmi = (<%= self.main_name() %>_t *)malloc(sizeof(<%= self.main_name() %>_t));
2686 <%- @win.each do |w| -%>
2687 hmi-><%= w.struct_name() %> = NULL;
2693 EXPORT VOID <%= self.main_name() %>_delete(<%= self.main_name() %>_t *hmi)
2695 <%- @win.each do |w| -%>
2696 if (hmi-><%= w.struct_name() %> != NULL) {
2697 <%= w.struct_name() %>_delete(hmi-><%= w.struct_name() %>);
2704 erb = ERB.new(script, nil, '-');
2708 def generate_source_mainfunctions()
2711 str += w.generate_new_del_functions();
2713 str += self.generate_source_new_del_wrappers()
2717 def generate_source()
2719 str += self.generate_struct();
2720 str += self.generate_windowfunctions();
2721 str += self.generate_source_mainloop();
2722 str += self.generate_source_mainfunctions();
2729 def generate_header(filename, data)
2730 fd = File.open(filename, "w");
2731 fd.puts data.lisence_header();
2734 /* This file is automatically generated. */
2737 #include <btron/dp.h>
2738 #include <btron/hmi.h>
2741 fd.puts "#ifndef __" + filename.upcase.gsub(/\./, '_') + "__";
2742 fd.puts "#define __" + filename.upcase.gsub(/\./, '_') + "__";
2744 fd.puts data.generate_header();
2748 def generate_source(filename, data)
2749 fd = File.open(filename, "w");
2750 fd.puts data.lisence_source();
2753 /* This file is automatically generated. */
2756 fd.puts data.generate_source_include_files();
2758 fd.puts data.generate_source();
2764 yaml = YAML.load_file(ARGV[0]);
2765 data = HMIData.new(yaml);
2767 fname_header = yaml["generator"]["output_header"]
2768 fname_source = yaml["generator"]["output_source"]
2770 generate_header(fname_header, data);
2771 generate_source(fname_source, data);