option.tin 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分。
  4. PaoTin++ © 2020~2022 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  5. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  6. */
  7. #var lib_option[META] {
  8. {NAME} {全局选项管理}
  9. {DESC} {为全局选项提供了一个储存位置,并提供一些实用的 API。}
  10. {AUTHOR} {担子炮}
  11. };
  12. #func {lib_option.Init} {
  13. #class lib/option open;
  14. #var gOptions {};
  15. #class lib/option close;
  16. #return {true};
  17. };
  18. #alias {option.Define} {
  19. #local option {%1};
  20. #local type {%2};
  21. #local meaning {%3};
  22. #local default {%4};
  23. #if { "$gOptions[$option]" != "" } {
  24. errLog 选项「$option」已存在,请检查代码。;
  25. #return;
  26. };
  27. #local types {Bool};
  28. #if { "$type" != "{$types}" } {
  29. errLog 不能识别的选项类型: 「$type」,目前仅支持选项类型:{$types};
  30. #return;
  31. };
  32. #if { "$type" == "Bool" && "$default" != "{true|false}" } {
  33. errLog Bool 型的选项值只能是 true 或者 false。;
  34. #return;
  35. };
  36. #var gOptions[$option] {
  37. {name} {$option}
  38. {type} {$type}
  39. {meaning} {$meaning}
  40. {value} {$default}
  41. };
  42. };
  43. #alias {option.List} {
  44. #echo {};
  45. #echo {<128>%+20s %+10s %+30s %+20s} {选项名称} {选项类型} {选项含义} {选项当前值};
  46. #draw Yellow scroll line 1 1 1 83;
  47. #local option {};
  48. #foreach {*gOptions[]} {option} {
  49. #echo {%+20s %+10s %+30s %+20s}
  50. {$gOptions[$option][name]}
  51. {$gOptions[$option][type]}
  52. {$gOptions[$option][meaning]}
  53. {$gOptions[$option][value]};
  54. };
  55. #echo {};
  56. };
  57. #func {option.Get} {
  58. #local {option} {%1};
  59. #if { "$gOptions[$option]" == "" } {
  60. errLog 不存在选项「$option」,请先定义后再使用。;
  61. #return {};
  62. };
  63. #return {$gOptions[$option][value]};
  64. };
  65. #func {option.Set} {
  66. #local {option} {%1};
  67. #local {value} {%2};
  68. #local old {$gOptions[$option][value]};
  69. #if { "$old" == "" } {
  70. errLog 不存在选项「$option」,请先定义后再使用。;
  71. #return {};
  72. };
  73. #var {gOptions[$option][value]} {$value};
  74. #return {$old};
  75. };
  76. #func {option.IsEnable} {
  77. #local option {%1};
  78. #local value {@option.Get{$option}};
  79. #if { "$value" == "true" } {
  80. #return 1;
  81. };
  82. #else {
  83. #return 0;
  84. };
  85. };
  86. #func {option.IsDisable} {
  87. #local option {%1};
  88. #local value {@option.Get{$option}};
  89. #if { "$value" == "false" } {
  90. #return 1;
  91. };
  92. #else {
  93. #return 0;
  94. };
  95. };
  96. #alias {option.Set} {
  97. #local {option} {%1};
  98. #local {value} {%2};
  99. #local _ {@option.Set{$option;{$value}}};
  100. };
  101. #func {option.Toggle} {
  102. #local {option} {%1};
  103. #local value {@option.Get{$option}};
  104. #if { "$value" == "true" } {
  105. option.Disable $option;
  106. infoLog <160>选项「<130>$option<160>」 <110>已禁用。<070>;
  107. };
  108. #elseif { "$value" == "false" } {
  109. option.Enable $option;
  110. infoLog <160>选项「<130>$option<160>」 <120>已启用。<070>;
  111. };
  112. #return {$value};
  113. };
  114. #alias {option.Toggle} {
  115. #local {option} {%1};
  116. #local _ {@option.Toggle{$option}};
  117. };
  118. #alias {option.Enable} {
  119. #local {option} {%1};
  120. option.Set $option {true};
  121. };
  122. #alias {option.Disable} {
  123. #local {option} {%1};
  124. option.Set $option {false};
  125. };