Skip to content

Commit b034dd9

Browse files
authored
[API 7] Setting Tooltip (#65)
* Feat: Setting Tooltip * fix: use java 8 * Remove empty lines * Check if empty * use UpperCamelCase instead of Full uppercase * Check if empty
1 parent ca95a1f commit b034dd9

File tree

5 files changed

+63
-2
lines changed

5 files changed

+63
-2
lines changed

Annotations/src/main/java/com/christophecvb/touchportal/annotations/Setting.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,17 @@
9999
* @return boolean isReadOnly
100100
*/
101101
boolean isReadOnly() default false;
102+
103+
/**
104+
* Setting Tooltip
105+
*
106+
* @return {@link Tooltip} tooltip
107+
*/
108+
Tooltip tooltip() default @Tooltip(body = "");
109+
110+
@interface Tooltip {
111+
String title() default "";
112+
String body();
113+
String docUrl() default "";
114+
}
102115
}

AnnotationsProcessor/src/main/java/com/christophecvb/touchportal/annotations/processor/SettingProcessor.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ public static Pair<JsonObject, TypeSpec.Builder> process(TouchPortalPluginAnnota
3434
jsonSetting.addProperty(SettingHelper.TYPE, desiredTPType);
3535
jsonSetting.addProperty(SettingHelper.DEFAULT, setting.defaultValue());
3636
jsonSetting.addProperty(SettingHelper.IS_READ_ONLY, setting.isReadOnly());
37+
38+
if (!setting.tooltip().body().isEmpty()) {
39+
JsonObject tooltip = new JsonObject();
40+
41+
tooltip.addProperty(SettingHelper.Tooltip.BODY, setting.tooltip().body());
42+
43+
if (!setting.tooltip().title().isEmpty()) {
44+
tooltip.addProperty(SettingHelper.Tooltip.TITLE, setting.tooltip().title());
45+
}
46+
if (!setting.tooltip().docUrl().isEmpty()) {
47+
tooltip.addProperty(SettingHelper.Tooltip.DOC_URL, setting.tooltip().docUrl());
48+
}
49+
50+
jsonSetting.add(SettingHelper.TOOLTIP, tooltip);
51+
}
52+
3753
switch (desiredTPType) {
3854
case SettingHelper.TYPE_TEXT:
3955
if (setting.maxLength() > 0) {

AnnotationsProcessor/src/main/java/com/christophecvb/touchportal/annotations/processor/utils/SpecUtils.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,31 @@ public static TypeSpec.Builder createSettingTypeSpecBuilder(Element settingEleme
197197
stateTypeSpecBuilder.addField(SpecUtils.getStaticFinalDoubleFieldSpec("max_value", setting.maxValue()));
198198
}
199199

200+
if (!setting.tooltip().body().isEmpty()) {
201+
stateTypeSpecBuilder.addType(createSettingTooltipTypeSpecBuilder(setting.tooltip()).build());
202+
}
203+
200204
return stateTypeSpecBuilder;
201205
}
202206

207+
/**
208+
* Generates a TypeSpec.Builder with Constants for the {@link Setting.Tooltip}
209+
*
210+
* @param tooltip {@link Setting.Tooltip}
211+
* @return TypeSpec.Builder tooltipTypeSpecBuilder
212+
*/
213+
public static TypeSpec.Builder createSettingTooltipTypeSpecBuilder(Setting.Tooltip tooltip) {
214+
TypeSpec.Builder tooltipTypeSpecBuilder = TypeSpec.classBuilder("Tooltip").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
215+
tooltipTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("body", tooltip.body()));
216+
if (!tooltip.title().isEmpty()) {
217+
tooltipTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("title", tooltip.title()));
218+
}
219+
if (!tooltip.title().isEmpty()) {
220+
tooltipTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("docUrl", tooltip.docUrl()));
221+
}
222+
return tooltipTypeSpecBuilder;
223+
}
224+
203225
/**
204226
* Generates a TypeSpec.Builder with Constants for the {@link State}
205227
*

Helpers/src/main/java/com/christophecvb/touchportal/helpers/SettingHelper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ public class SettingHelper {
3939
public static final String MIN_VALUE = "minValue";
4040
public static final String MAX_VALUE = "maxValue";
4141
public static final String IS_READ_ONLY = "readOnly";
42+
public static final String TOOLTIP = "tooltip";
43+
44+
public static class Tooltip {
45+
public static final String TITLE = "title";
46+
public static final String BODY = "body";
47+
public static final String DOC_URL = "docUrl";
48+
}
4249

4350
/**
4451
* Get the generated Setting Name

SampleJava/src/main/java/com/christophecvb/touchportal/samplejava/TouchPortalSampleJavaPlugin.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131

3232
import java.io.File;
3333
import java.util.HashMap;
34-
import java.util.Objects;
3534
import java.util.logging.Level;
3635
import java.util.logging.Logger;
3736

@@ -80,7 +79,11 @@ private enum Categories {
8079
/**
8180
* Setting of type text definition example
8281
*/
83-
@Setting(name = "IP", defaultValue = "localhost", maxLength = 15)
82+
@Setting(name = "IP", defaultValue = "localhost", maxLength = 15, tooltip = @Setting.Tooltip(
83+
title = "IP address",
84+
body = "ip address to connect to",
85+
docUrl = "https://example.com"
86+
))
8487
private String ipSetting;
8588

8689
/**

0 commit comments

Comments
 (0)