tab_script.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. let tab_script_hscript: zui_handle_t = zui_handle_create();
  2. let tab_script_text_coloring: zui_text_coloring_t = null;
  3. function tab_script_draw(htab: zui_handle_t) {
  4. let ui: zui_t = ui_base_ui;
  5. let statush: i32 = config_raw.layout[layout_size_t.STATUS_H];
  6. if (zui_tab(htab, tr("Script")) && statush > ui_status_default_status_h * zui_SCALE(ui)) {
  7. zui_begin_sticky();
  8. if (config_raw.touch_ui) {
  9. let row: f32[] = [1 / 4, 1 / 4, 1 / 4, 1 / 4];
  10. zui_row(row);
  11. }
  12. else {
  13. let row: f32[] = [1 / 14, 1 / 14, 1 / 14, 1 / 14];
  14. zui_row(row);
  15. }
  16. if (zui_button(tr("Run"))) {
  17. js_eval(tab_script_hscript.text);
  18. }
  19. if (zui_button(tr("Clear"))) {
  20. tab_script_hscript.text = "";
  21. }
  22. if (zui_button(tr("Import"))) {
  23. ui_files_show("js", false, false, function (path: string) {
  24. let b: buffer_t = data_get_blob(path);
  25. tab_script_hscript.text = sys_buffer_to_string(b);
  26. data_delete_blob(path);
  27. });
  28. }
  29. if (zui_button(tr("Export"))) {
  30. ui_files_show("js", true, false, function (path: string) {
  31. let str: string = tab_script_hscript.text;
  32. let f: string = ui_files_filename;
  33. if (f == "") {
  34. f = tr("untitled");
  35. }
  36. path = path + path_sep + f;
  37. if (!ends_with(path, ".js")) {
  38. path += ".js";
  39. }
  40. krom_file_save_bytes(path, sys_string_to_buffer(str));
  41. });
  42. }
  43. zui_end_sticky();
  44. let _font: g2_font_t = ui.ops.font;
  45. let _font_size: i32 = ui.font_size;
  46. let f: g2_font_t = data_get_font("font_mono.ttf");
  47. zui_set_font(ui, f);
  48. ui.font_size = math_floor(15 * zui_SCALE(ui));
  49. zui_set_text_area_line_numbers(true);
  50. zui_set_text_area_scroll_past_end(true);
  51. zui_set_text_area_coloring(tab_script_get_text_coloring());
  52. zui_text_area(tab_script_hscript);
  53. zui_set_text_area_line_numbers(false);
  54. zui_set_text_area_scroll_past_end(false);
  55. zui_set_text_area_coloring(null);
  56. zui_set_font(ui, _font);
  57. ui.font_size = _font_size;
  58. }
  59. }
  60. function tab_script_get_text_coloring(): zui_text_coloring_t {
  61. if (tab_script_text_coloring == null) {
  62. let blob: buffer_t = data_get_blob("text_coloring.json");
  63. tab_script_text_coloring = json_parse(sys_buffer_to_string(blob));
  64. tab_script_text_coloring.default_color = math_floor(tab_script_text_coloring.default_color);
  65. for (let i: i32 = 0; i < tab_script_text_coloring.colorings.length; ++i) {
  66. let coloring: zui_coloring_t = tab_script_text_coloring.colorings[i];
  67. coloring.color = math_floor(coloring.color);
  68. }
  69. }
  70. return tab_script_text_coloring;
  71. }