Commit c6cb1d225c2d8359daa02931a226d972b9c4fe49

Authored by Stefan Wichmann
1 parent 25940b88

Bugfix 0.18.1 - based on first user feedback

.gitignore 0 → 100644
  1 +calculator-ui_*.zip
.vscode/launch.json
@@ -11,6 +11,8 @@ @@ -11,6 +11,8 @@
11 "modsPath": "C:/Program Files/Factorio/mods", 11 "modsPath": "C:/Program Files/Factorio/mods",
12 "configPath": "C:/Program Files/Factorio/config/config.ini", 12 "configPath": "C:/Program Files/Factorio/config/config.ini",
13 "factorioPath": "C:/Program Files/Factorio/bin/x64/factorio.exe" 13 "factorioPath": "C:/Program Files/Factorio/bin/x64/factorio.exe"
  14 + // "hookSettings": true,
  15 + // "hookData": true
14 } 16 }
15 ] 17 ]
16 } 18 }
17 \ No newline at end of file 19 \ No newline at end of file
CHANGELOG.md
@@ -6,6 +6,15 @@ and this project adheres to the versioning of Factorio, so 0.18.x will be at lea @@ -6,6 +6,15 @@ and this project adheres to the versioning of Factorio, so 0.18.x will be at lea
6 6
7 ## [Released] 7 ## [Released]
8 8
  9 +## [0.18.1] - 2020-06-06
  10 +Based on user feedback updated the mod
  11 +### Added
  12 +- Shortcut for opening the calculator and automatically focus on the input (Default: Ctrl+Shift+C)
  13 +
  14 +### Fixed
  15 +- Rounding removed 0 at the end, will now stand as it should. So 2.0000001 -> 2.00
  16 +- Interpreting "," as "." in the equation, because of some European countries do have a weird keyboard layout
  17 +
9 ## [0.18.0] - 2020-06-06 18 ## [0.18.0] - 2020-06-06
10 ### General 19 ### General
11 - Initial Release of the mod 20 - Initial Release of the mod
calcui-hotkey.lua
@@ -2,14 +2,7 @@ data:extend({ @@ -2,14 +2,7 @@ data:extend({
2 { 2 {
3 type = "custom-input", 3 type = "custom-input",
4 name = "calcui_hotkey", 4 name = "calcui_hotkey",
5 - key_sequence = "CONTROL + N",  
6 - consuming = "none"  
7 - },  
8 - {  
9 - type = "custom-input",  
10 - name = "calcui_toggle",  
11 - key_sequence = "CONTROL + ENTER", 5 + key_sequence = "CONTROL + SHIFT + C",
12 consuming = "none" 6 consuming = "none"
13 } 7 }
14 -}  
15 -)  
16 \ No newline at end of file 8 \ No newline at end of file
  9 +})
17 \ No newline at end of file 10 \ No newline at end of file
calculator.lua
@@ -29,135 +29,136 @@ end @@ -29,135 +29,136 @@ end
29 -- ---------------------------------------------------------------- 29 -- ----------------------------------------------------------------
30 function show_calculator(player) 30 function show_calculator(player)
31 local root = get_gui_root(player) 31 local root = get_gui_root(player)
32 - destroy_calculator(player)  
33 -  
34 - local calcui = root.add({  
35 - type = "frame",  
36 - name = "calcui",  
37 - style = "dialog_frame",  
38 - direction = "vertical"  
39 - })  
40 -  
41 - local flow = calcui.add({  
42 - type = "flow",  
43 - name = "calcui_flow"  
44 - })  
45 - flow.style.horizontally_stretchable = "on"  
46 -  
47 - flow.add({  
48 - type = "label",  
49 - caption = {"calculator-ui.title"},  
50 - style = "frame_title"  
51 - }).drag_target = calcui  
52 -  
53 - local widget = flow.add({  
54 - type = "empty-widget",  
55 - style = "draggable_space_header",  
56 - name = "calcui_drag"  
57 - })  
58 - widget.drag_target = calcui  
59 - widget.style.horizontally_stretchable = "on"  
60 - widget.style.minimal_width = 24  
61 - widget.style.natural_height = 24  
62 -  
63 - flow.add({  
64 - type = "sprite-button",  
65 - sprite = "utility/close_white",  
66 - style = "frame_action_button",  
67 - name = "calcui_close"  
68 - })  
69 -  
70 - local table = calcui.add({  
71 - type = "table",  
72 - name = "calcui_table",  
73 - column_count = "2",  
74 - vertical_centering = "false"  
75 - })  
76 -  
77 - local col1 = table.add({  
78 - type = "flow",  
79 - name = "calcui_table_col1",  
80 - direction = "vertical"  
81 - })  
82 -  
83 - local display = col1.add({  
84 - type = "textfield",  
85 - style = "calcui_textfield_style",  
86 - caption = "",  
87 - name = "calcui_display"  
88 - })  
89 32
90 - local row1 = col1.add({type="flow", name="calcui_col1_row1", direction="horizontal"})  
91 - row1.add({type="button", style="calcui_button_style", caption="CE", name="calcui_button_CE"}) -- CE = Clear Entry (just this line)  
92 - row1.add({type="button", style="calcui_button_style", caption="C", name="calcui_button_C"}) -- C = Clear (all, past results as well)  
93 - row1.add({type="button", style="calcui_button_style", caption="BS", name="calcui_button_BS"})  
94 - row1.add({type="button", style="calcui_button_style", caption="/", name="calcui_button_DIV"}) 33 + if not root.calcui then
  34 + local calcui = root.add({
  35 + type = "frame",
  36 + name = "calcui",
  37 + style = "dialog_frame",
  38 + direction = "vertical"
  39 + })
  40 +
  41 + local flow = calcui.add({
  42 + type = "flow",
  43 + name = "calcui_flow"
  44 + })
  45 + flow.style.horizontally_stretchable = "on"
  46 +
  47 + flow.add({
  48 + type = "label",
  49 + caption = {"calculator-ui.title"},
  50 + style = "frame_title"
  51 + }).drag_target = calcui
  52 +
  53 + local widget = flow.add({
  54 + type = "empty-widget",
  55 + style = "draggable_space_header",
  56 + name = "calcui_drag"
  57 + })
  58 + widget.drag_target = calcui
  59 + widget.style.horizontally_stretchable = "on"
  60 + widget.style.minimal_width = 24
  61 + widget.style.natural_height = 24
  62 +
  63 + flow.add({
  64 + type = "sprite-button",
  65 + sprite = "utility/close_white",
  66 + style = "frame_action_button",
  67 + name = "calcui_close"
  68 + })
  69 +
  70 + local table = calcui.add({
  71 + type = "table",
  72 + name = "calcui_table",
  73 + column_count = "2",
  74 + vertical_centering = "false"
  75 + })
  76 +
  77 + local col1 = table.add({
  78 + type = "flow",
  79 + name = "calcui_table_col1",
  80 + direction = "vertical"
  81 + })
  82 +
  83 + local display = col1.add({
  84 + type = "textfield",
  85 + style = "calcui_textfield_style",
  86 + caption = "",
  87 + name = "calcui_display"
  88 + })
95 89
96 - local row2 = col1.add({type="flow", name="calcui_col1_row2", direction="horizontal"})  
97 - row2.add({type="button", style="calcui_button_style", caption="7", name="calcui_button_7"})  
98 - row2.add({type="button", style="calcui_button_style", caption="8", name="calcui_button_8"})  
99 - row2.add({type="button", style="calcui_button_style", caption="9", name="calcui_button_9"})  
100 - row2.add({type="button", style="calcui_button_style", caption="*", name="calcui_button_MUL"}) 90 + local row1 = col1.add({type="flow", name="calcui_col1_row1", direction="horizontal"})
  91 + row1.add({type="button", style="calcui_button_style", caption="CE", name="calcui_button_CE"}) -- CE = Clear Entry (just this line)
  92 + row1.add({type="button", style="calcui_button_style", caption="C", name="calcui_button_C"}) -- C = Clear (all, past results as well)
  93 + row1.add({type="button", style="calcui_button_style", caption="BS", name="calcui_button_BS"})
  94 + row1.add({type="button", style="calcui_button_style", caption="/", name="calcui_button_DIV"})
101 95
102 - local row3 = col1.add({type="flow", name="calcui_col1_row3", direction="horizontal"})  
103 - row3.add({type="button", style="calcui_button_style", caption="4", name="calcui_button_4"})  
104 - row3.add({type="button", style="calcui_button_style", caption="5", name="calcui_button_5"})  
105 - row3.add({type="button", style="calcui_button_style", caption="6", name="calcui_button_6"})  
106 - row3.add({type="button", style="calcui_button_style", caption="-", name="calcui_button_SUB"}) 96 + local row2 = col1.add({type="flow", name="calcui_col1_row2", direction="horizontal"})
  97 + row2.add({type="button", style="calcui_button_style", caption="7", name="calcui_button_7"})
  98 + row2.add({type="button", style="calcui_button_style", caption="8", name="calcui_button_8"})
  99 + row2.add({type="button", style="calcui_button_style", caption="9", name="calcui_button_9"})
  100 + row2.add({type="button", style="calcui_button_style", caption="*", name="calcui_button_MUL"})
107 101
108 - local row4 = col1.add({type="flow", name="calcui_col1_row4", direction="horizontal"})  
109 - row4.add({type="button", style="calcui_button_style", caption="1", name="calcui_button_1"})  
110 - row4.add({type="button", style="calcui_button_style", caption="2", name="calcui_button_2"})  
111 - row4.add({type="button", style="calcui_button_style", caption="3", name="calcui_button_3"})  
112 - row4.add({type="button", style="calcui_button_style", caption="+", name="calcui_button_ADD"}) 102 + local row3 = col1.add({type="flow", name="calcui_col1_row3", direction="horizontal"})
  103 + row3.add({type="button", style="calcui_button_style", caption="4", name="calcui_button_4"})
  104 + row3.add({type="button", style="calcui_button_style", caption="5", name="calcui_button_5"})
  105 + row3.add({type="button", style="calcui_button_style", caption="6", name="calcui_button_6"})
  106 + row3.add({type="button", style="calcui_button_style", caption="-", name="calcui_button_SUB"})
113 107
114 - local row5 = col1.add({type="flow", name="calcui_col1_row5", direction="horizontal"})  
115 - row5.add({type="button", style="calcui_button_style", caption="%", name="calcui_button_PERC"})  
116 - row5.add({type="button", style="calcui_button_style", caption="0", name="calcui_button_0"})  
117 - row5.add({type="button", style="calcui_button_style", caption=".", name="calcui_button_DOT"})  
118 - row5.add({type="button", style="calcui_button_style", caption="=", name="calcui_button_EQU"}) 108 + local row4 = col1.add({type="flow", name="calcui_col1_row4", direction="horizontal"})
  109 + row4.add({type="button", style="calcui_button_style", caption="1", name="calcui_button_1"})
  110 + row4.add({type="button", style="calcui_button_style", caption="2", name="calcui_button_2"})
  111 + row4.add({type="button", style="calcui_button_style", caption="3", name="calcui_button_3"})
  112 + row4.add({type="button", style="calcui_button_style", caption="+", name="calcui_button_ADD"})
119 113
  114 + local row5 = col1.add({type="flow", name="calcui_col1_row5", direction="horizontal"})
  115 + row5.add({type="button", style="calcui_button_style", caption="%", name="calcui_button_PERC"})
  116 + row5.add({type="button", style="calcui_button_style", caption="0", name="calcui_button_0"})
  117 + row5.add({type="button", style="calcui_button_style", caption=".", name="calcui_button_DOT"})
  118 + row5.add({type="button", style="calcui_button_style", caption="=", name="calcui_button_EQU"})
120 119
121 - local col2 = table.add({  
122 - type = "flow",  
123 - name = "calcui_table_col2",  
124 - direction = "vertical"  
125 - })  
126 120
127 - local result = col2.add({  
128 - type = "label",  
129 - caption = "= ",  
130 - name = "calcui_display_result"  
131 - })  
132 - result.style.font = "default-large"  
133 -  
134 - local rant = col2.add({  
135 - type = "sprite",  
136 - name = "calcui_rant"  
137 - })  
138 -  
139 - col2.add({  
140 - type = "line",  
141 - direction = "horizontal"  
142 - })  
143 -  
144 - local scroll = col2.add({  
145 - type = "scroll-pane",  
146 - name = "calcui_scroll_pane"  
147 - })  
148 - scroll.style.height = 252  
149 -  
150 - local recents = scroll.add({  
151 - type = "table",  
152 - caption = "",  
153 - name = "calcui_result_table",  
154 - column_count = "2"  
155 - })  
156 - recents.style.column_alignments[1] = "right"  
157 -  
158 -  
159 - -- center the gui  
160 - calcui.force_auto_center() 121 + local col2 = table.add({
  122 + type = "flow",
  123 + name = "calcui_table_col2",
  124 + direction = "vertical"
  125 + })
  126 +
  127 + local result = col2.add({
  128 + type = "label",
  129 + caption = "= ",
  130 + name = "calcui_display_result"
  131 + })
  132 + result.style.font = "default-large"
  133 +
  134 + local rant = col2.add({
  135 + type = "sprite",
  136 + name = "calcui_rant"
  137 + })
  138 +
  139 + col2.add({
  140 + type = "line",
  141 + direction = "horizontal"
  142 + })
  143 +
  144 + local scroll = col2.add({
  145 + type = "scroll-pane",
  146 + name = "calcui_scroll_pane"
  147 + })
  148 + scroll.style.height = 252
  149 +
  150 + local recents = scroll.add({
  151 + type = "table",
  152 + caption = "",
  153 + name = "calcui_result_table",
  154 + column_count = "2"
  155 + })
  156 + recents.style.column_alignments[1] = "right"
  157 +
  158 +
  159 + -- center the gui
  160 + calcui.force_auto_center()
  161 + end
161 end 162 end
162 163
163 -- ---------------------------------------------------------------- 164 -- ----------------------------------------------------------------
@@ -176,6 +177,12 @@ function toggle_calculator(player) @@ -176,6 +177,12 @@ function toggle_calculator(player)
176 end 177 end
177 178
178 -- ---------------------------------------------------------------- 179 -- ----------------------------------------------------------------
  180 +function focus_on_input(player)
  181 + local root = get_gui_root(player)
  182 + root.calcui.calcui_table.calcui_table_col1.calcui_display.focus()
  183 +end
  184 +
  185 +-- ----------------------------------------------------------------
179 function clear_equation(player) 186 function clear_equation(player)
180 local root = get_gui_root(player) 187 local root = get_gui_root(player)
181 root.calcui.calcui_table.calcui_table_col1.calcui_display.text = "" 188 root.calcui.calcui_table.calcui_table_col1.calcui_display.text = ""
@@ -234,6 +241,9 @@ function fix_equation(equation) @@ -234,6 +241,9 @@ function fix_equation(equation)
234 -- fix percentage 241 -- fix percentage
235 result = result:gsub("(%%)", "/100") 242 result = result:gsub("(%%)", "/100")
236 243
  244 + -- fix danish keyboard
  245 + result = result:gsub(",", ".")
  246 +
237 return result 247 return result
238 end 248 end
239 249
@@ -253,14 +263,18 @@ function process_equal_key(player, button) @@ -253,14 +263,18 @@ function process_equal_key(player, button)
253 return load("return " .. equation)() 263 return load("return " .. equation)()
254 end) 264 end)
255 root.calcui.calcui_table.calcui_table_col2.calcui_display_result.tooltip = retval 265 root.calcui.calcui_table.calcui_table_col2.calcui_display_result.tooltip = retval
256 - status, retval = pcall(function()  
257 - return tonumber(string.format("%." .. settings.get_player_settings(player)["calcui-decimal-places"].value .. "f", retval)) 266 + status, retval_show = pcall(function()
  267 + local result = string.format("%0." .. settings.get_player_settings(player)["calcui-decimal-places"].value .. "f", retval)
  268 + if result:len() > tostring(retval):len() then
  269 + result = retval
  270 + end
  271 + return result
258 end) 272 end)
259 - if retval == nil or retval == "" then 273 + if retval_show == nil or retval_show == "" then
260 status = false 274 status = false
261 end 275 end
262 if not status then 276 if not status then
263 - retval = "NaN" 277 + retval_show = "NaN"
264 show_rant(player, true) 278 show_rant(player, true)
265 else 279 else
266 if retval <= 0 then 280 if retval <= 0 then
@@ -269,7 +283,7 @@ function process_equal_key(player, button) @@ -269,7 +283,7 @@ function process_equal_key(player, button)
269 show_rant(player, false) 283 show_rant(player, false)
270 end 284 end
271 end 285 end
272 - root.calcui.calcui_table.calcui_table_col2.calcui_display_result.caption = "= " .. retval 286 + root.calcui.calcui_table.calcui_table_col2.calcui_display_result.caption = "= " .. retval_show
273 287
274 -- only write in recent table if actually a result 288 -- only write in recent table if actually a result
275 if status then 289 if status then
@@ -370,7 +384,7 @@ function handle_calcui_click(event, player) @@ -370,7 +384,7 @@ function handle_calcui_click(event, player)
370 -- copy equation to display 384 -- copy equation to display
371 local root = get_gui_root(player) 385 local root = get_gui_root(player)
372 root.calcui.calcui_table.calcui_table_col1.calcui_display.text = root.calcui.calcui_table.calcui_table_col2.calcui_scroll_pane.calcui_result_table[event_name].caption 386 root.calcui.calcui_table.calcui_table_col1.calcui_display.text = root.calcui.calcui_table.calcui_table_col2.calcui_scroll_pane.calcui_result_table[event_name].caption
373 - root.calcui.calcui_table.calcui_table_col1.calcui_display.focus() 387 + focus_on_input(player)
374 end 388 end
375 end 389 end
376 end 390 end
control.lua
@@ -86,7 +86,14 @@ local function on_calcui_command(event) @@ -86,7 +86,14 @@ local function on_calcui_command(event)
86 end 86 end
87 87
88 -- ---------------------------------------------------------------- 88 -- ----------------------------------------------------------------
89 ---script.on_event( "calcui_hotkey", on_hotkey_main ) 89 +local function on_hotkey_main(event)
  90 + local player = game.players[event.player_index]
  91 + show_calculator(player)
  92 + focus_on_input(player)
  93 +end
  94 +
  95 +-- ----------------------------------------------------------------
  96 +script.on_event( "calcui_hotkey", on_hotkey_main )
90 script.on_event( defines.events.on_lua_shortcut, shortcut ) 97 script.on_event( defines.events.on_lua_shortcut, shortcut )
91 script.on_event( defines.events.on_gui_click, on_gui_click) 98 script.on_event( defines.events.on_gui_click, on_gui_click)
92 script.on_event( defines.events.on_gui_confirmed, on_gui_confirmed) 99 script.on_event( defines.events.on_gui_confirmed, on_gui_confirmed)
info.json
1 { 1 {
2 "name": "calculator-ui", 2 "name": "calculator-ui",
3 - "version": "0.18.0", 3 + "version": "0.18.1",
4 "title": "Calculator UI", 4 "title": "Calculator UI",
5 "author": "Wichu", 5 "author": "Wichu",
6 "factorio_version": "0.18", 6 "factorio_version": "0.18",
locale/en/config.cfg
1 [shortcut-name] 1 [shortcut-name]
2 calcui_4func=Calculator 2 calcui_4func=Calculator
3 3
  4 +[controls]
  5 +calcui_hotkey=Focus on input
  6 +
4 [mod-setting-name] 7 [mod-setting-name]
5 calcui-decimal-places=Decimal places 8 calcui-decimal-places=Decimal places
6 calcui-clear-on-calc=Clear equation on calculation 9 calcui-clear-on-calc=Clear equation on calculation