Skip to content

Commit 7a43dc6

Browse files
committed
#587 #591 interim support for single file i18n output.
1 parent 7ede91b commit 7a43dc6

21 files changed

Lines changed: 922 additions & 122 deletions

File tree

.idea/modules.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ In any fork, please ensure all text up to here is left unaltered.
2424

2525
## Documentation
2626

27+
```
28+
_____ __ __
29+
/ / / |_ ___| \/ | ___ _ __ _ _
30+
/ / /| __/ __| |\/| |/ _ \ '_ \| | | |
31+
/ / / | || (__| | | | __/ | | | |_| |
32+
/_/_/ \__\___|_| |_|\___|_| |_|\__,_|
33+
documentation
34+
```
35+
2736
* [UI user guide, getting started and other documentation](https://www.thecoderscorner.com/products/arduino-libraries/tc-menu/)
2837
* [TcMenu API Examples and Project Starters repository](https://github.com/TcMenu/tcmenu-examples-starters)
2938
* [Full API embedded documentation](https://www.thecoderscorner.com/ref-docs/tcmenu/html/index.html)

api/tcMenuJavaApi/src/main/java/com/thecoderscorner/menu/domain/AnalogMenuItemBuilder.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,35 @@
66

77
package com.thecoderscorner.menu.domain;
88

9+
import com.thecoderscorner.menu.domain.build.MenuTreeBuilder;
10+
import com.thecoderscorner.menu.domain.util.MenuItemHelper;
11+
12+
import java.util.Objects;
13+
914
/**
1015
* Constructs an AnalogMenuItem using the standard builder pattern. It is possible to either build
1116
* an item from scratch, or start with an existing item and make changes.
1217
*/
1318
public class AnalogMenuItemBuilder extends MenuItemBuilder<AnalogMenuItemBuilder, AnalogMenuItem> {
1419

20+
private final MenuTreeBuilder possibleBuilder;
21+
private final int defVal;
1522
private String unit;
1623
private int maxValue;
1724
private int divisor;
1825
private int offset;
1926
private int step;
2027

28+
public AnalogMenuItemBuilder(MenuTreeBuilder possibleBuilder, int defVal) {
29+
this.possibleBuilder = possibleBuilder;
30+
this.defVal = defVal;
31+
}
32+
33+
public AnalogMenuItemBuilder() {
34+
this.possibleBuilder = null;
35+
defVal = 0;
36+
}
37+
2138
@Override
2239
AnalogMenuItemBuilder getThis() {
2340
return this;
@@ -58,6 +75,17 @@ public AnalogMenuItemBuilder withExisting(AnalogMenuItem other) {
5875
return getThis();
5976
}
6077

78+
/**
79+
* Should only be called if this builder was created with a MenuTreeBuilder
80+
* @return the actual builder
81+
*/
82+
public MenuTreeBuilder endItem() {
83+
AnalogMenuItem analogMenuItem = menuItem();
84+
Objects.requireNonNull(possibleBuilder).rawPushItem(analogMenuItem);
85+
MenuItemHelper.setMenuState(analogMenuItem, defVal, possibleBuilder.asTree());
86+
return possibleBuilder;
87+
}
88+
6189
public AnalogMenuItem menuItem() {
6290
return new AnalogMenuItem(this.name, this.variableName, this.id, this.eepromAddr, this.functionName, this.maxValue,
6391
this.offset, this.divisor, this.step, this.unit, readOnly, localOnly, visible, staticDataInRAM);

api/tcMenuJavaApi/src/main/java/com/thecoderscorner/menu/domain/ScrollChoiceMenuItemBuilder.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,33 @@
11
package com.thecoderscorner.menu.domain;
22

3+
import com.thecoderscorner.menu.domain.build.MenuTreeBuilder;
4+
import com.thecoderscorner.menu.domain.util.MenuItemHelper;
5+
6+
import java.util.Objects;
7+
38
/**
49
* Builds an extensible version of enum that should be used when the number of choices is larger, the choices are in
510
* eeprom, or you need more control at runtime of the choices using the builder pattern.
611
*/
712
public class ScrollChoiceMenuItemBuilder extends MenuItemBuilder<ScrollChoiceMenuItemBuilder, ScrollChoiceMenuItem> {
13+
private final MenuTreeBuilder menuTreeBuilder;
14+
private final int defVal;
815
private int itemWidth;
916
private int eepromOffset;
1017
private int numEntries;
1118
private ScrollChoiceMenuItem.ScrollChoiceMode choiceMode = ScrollChoiceMenuItem.ScrollChoiceMode.ARRAY_IN_EEPROM;
1219
private String variable;
1320

21+
public ScrollChoiceMenuItemBuilder(MenuTreeBuilder menuTreeBuilder, int defVal) {
22+
this.menuTreeBuilder = menuTreeBuilder;
23+
this.defVal = defVal;
24+
}
25+
26+
public ScrollChoiceMenuItemBuilder() {
27+
this.menuTreeBuilder = null;
28+
this.defVal = 0;
29+
}
30+
1431
@Override
1532
ScrollChoiceMenuItemBuilder getThis() {
1633
return this;
@@ -51,6 +68,17 @@ public ScrollChoiceMenuItemBuilder withExisting(ScrollChoiceMenuItem item) {
5168
return getThis();
5269
}
5370

71+
/**
72+
* Should only be called if this builder was created with a MenuTreeBuilder
73+
* @return the actual builder
74+
*/
75+
public MenuTreeBuilder endItem() {
76+
var item = menuItem();
77+
Objects.requireNonNull(menuTreeBuilder).rawPushItem(item);
78+
MenuItemHelper.setMenuState(item, defVal, menuTreeBuilder.asTree());
79+
return menuTreeBuilder;
80+
}
81+
5482
public ScrollChoiceMenuItem menuItem() {
5583
return new ScrollChoiceMenuItem(name, variableName, id, eepromAddr, functionName, itemWidth, eepromOffset, numEntries, choiceMode,
5684
variable, readOnly, localOnly, visible, staticDataInRAM);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.thecoderscorner.menu.domain.build;
2+
3+
public class CallbackDefinition {
4+
private final String callback;
5+
6+
private CallbackDefinition(String callback) {
7+
this.callback = callback;
8+
}
9+
10+
public static CallbackDefinition noCallback() {
11+
return new CallbackDefinition("");
12+
}
13+
14+
public static CallbackDefinition functionCb(String callback) {
15+
if(callback == null) throw new IllegalArgumentException("Callback cannot be null");
16+
if(callback.endsWith("RtCall")) throw new IllegalArgumentException("Not function callback as ends with RtCall");
17+
return new CallbackDefinition(callback);
18+
}
19+
20+
public static CallbackDefinition rtCall(String callback) {
21+
if(callback == null) throw new IllegalArgumentException("Callback cannot be null");
22+
if(callback.endsWith("RtCall")) throw new IllegalArgumentException("We already add RtCall");
23+
return new CallbackDefinition(callback + "RtCall");
24+
}
25+
26+
public String cbText() {
27+
return callback;
28+
}
29+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.thecoderscorner.menu.domain.build;
2+
3+
public class LargeNumberDefinition {
4+
private final int decPlaces;
5+
private final int digitsAllowed;
6+
private final boolean neg;
7+
8+
private LargeNumberDefinition(int decPlaces, int digitsAllowed, boolean neg) {
9+
this.decPlaces = decPlaces;
10+
this.digitsAllowed = digitsAllowed;
11+
this.neg = neg;
12+
}
13+
14+
public int getDecPlaces() {
15+
return decPlaces;
16+
}
17+
18+
public int getDigitsAllowed() {
19+
return digitsAllowed;
20+
}
21+
22+
public boolean isNeg() {
23+
return neg;
24+
}
25+
26+
public static LargeNumberDefinition allowingNegative(int digitsAllowed, int decPlaces) {
27+
return new LargeNumberDefinition(decPlaces, digitsAllowed, true);
28+
}
29+
public static LargeNumberDefinition positiveOnly(int digitsAllowed, int decPlaces) {
30+
return new LargeNumberDefinition(decPlaces, digitsAllowed, false);
31+
}
32+
public static LargeNumberDefinition intAllowingNegative(int digitsAllowed) {
33+
return new LargeNumberDefinition(0, digitsAllowed, true);
34+
}
35+
public static LargeNumberDefinition intPositiveOnly(int digitsAllowed) {
36+
return new LargeNumberDefinition(0, digitsAllowed, false);
37+
}
38+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.thecoderscorner.menu.domain.build;
2+
3+
public enum MenuBuilderFlag {
4+
LOCAL_ONLY, HIDDEN, READ_ONLY, STATIC_IN_RAM, SECURED
5+
}

0 commit comments

Comments
 (0)