Commit c6cb1d225c2d8359daa02931a226d972b9c4fe49
1 parent
25940b88
Bugfix 0.18.1 - based on first user feedback
Showing
8 changed files
with
167 additions
and
138 deletions
.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
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 |