images = Lists.newArrayList();
+ images.add(UiConsts.IMAGE_LOGO_1024);
+ images.add(UiConsts.IMAGE_LOGO_512);
+ images.add(UiConsts.IMAGE_LOGO_256);
+ images.add(UiConsts.IMAGE_LOGO_128);
+ images.add(UiConsts.IMAGE_LOGO_64);
+ images.add(UiConsts.IMAGE_LOGO_48);
+ images.add(UiConsts.IMAGE_LOGO_32);
+ images.add(UiConsts.IMAGE_LOGO_24);
+ images.add(UiConsts.IMAGE_LOGO_16);
+ jFrame.setIconImages(images);
+ }
+}
diff --git a/src/main/java/com/luoboduner/moo/info/util/SystemUtil.java b/src/main/java/com/luoboduner/moo/info/util/SystemUtil.java
new file mode 100644
index 0000000..1fb5838
--- /dev/null
+++ b/src/main/java/com/luoboduner/moo/info/util/SystemUtil.java
@@ -0,0 +1,42 @@
+package com.luoboduner.moo.info.util;
+
+import java.io.File;
+
+/**
+ * System util
+ *
+ * @author RememBerBer
+ * @since 2021/11/08.
+ */
+public class SystemUtil {
+ private static final String OS_NAME = System.getProperty("os.name");
+ private static final String OS_ARCH = System.getProperty("os.arch");
+ private static final String VM_VENDOR = System.getProperty("java.vm.vendor");
+ private static final String USER_HOME = System.getProperty("user.home");
+ public static final String CONFIG_HOME = USER_HOME + File.separator + ".MooInfo";
+
+ /**
+ * log file dir
+ */
+ public final static String LOG_DIR = USER_HOME + File.separator + ".MooInfo" + File.separator + "logs" + File.separator;
+
+ public static boolean isMacOs() {
+ return OS_NAME.contains("Mac");
+ }
+
+ public static boolean isMacM1() {
+ return OS_NAME.contains("Mac") && "aarch64".equals(OS_ARCH);
+ }
+
+ public static boolean isWindowsOs() {
+ return OS_NAME.contains("Windows");
+ }
+
+ public static boolean isLinuxOs() {
+ return OS_NAME.contains("Linux");
+ }
+
+ public static boolean isJBR() {
+ return VM_VENDOR.contains("JetBrains");
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/luoboduner/moo/info/util/UIUtil.java b/src/main/java/com/luoboduner/moo/info/util/UIUtil.java
new file mode 100644
index 0000000..6f09989
--- /dev/null
+++ b/src/main/java/com/luoboduner/moo/info/util/UIUtil.java
@@ -0,0 +1,64 @@
+package com.luoboduner.moo.info.util;
+
+import com.luoboduner.moo.info.App;
+import lombok.extern.slf4j.Slf4j;
+
+import java.awt.*;
+
+/**
+ * UI custom tools
+ *
+ * @author RememBerBer
+ * @since 2021/11/10.
+ */
+@Slf4j
+public class UIUtil {
+
+ /**
+ * Get screen specifications
+ *
+ * author by darcula@com.bulenkov
+ * see https://github.com/bulenkov/Darcula
+ *
+ * @return
+ */
+ public static float getScreenScale() {
+ int dpi = 96;
+
+ try {
+ dpi = Toolkit.getDefaultToolkit().getScreenResolution();
+ } catch (HeadlessException var2) {
+ }
+
+ float scale = 1.0F;
+ if (dpi < 120) {
+ scale = 1.0F;
+ } else if (dpi < 144) {
+ scale = 1.25F;
+ } else if (dpi < 168) {
+ scale = 1.5F;
+ } else if (dpi < 192) {
+ scale = 1.75F;
+ } else {
+ scale = 2.0F;
+ }
+
+ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ log.info("screen dpi:{},width:{},height:{}", dpi, screenSize.getWidth(), screenSize.getHeight());
+
+ return scale;
+ }
+
+ /**
+ * the theme is dark or not
+ *
+ * @return
+ */
+ public static boolean isDarkLaf() {
+ return "Darcula".equals(App.config.getTheme())
+ || "Darcula(Recommended)".equals(App.config.getTheme())
+ || "Flat Dark".equals(App.config.getTheme())
+ || "Flat Darcula".equals(App.config.getTheme())
+ || "Flat Darcula(Recommended)".equals(App.config.getTheme());
+ }
+}
diff --git a/src/main/java/com/luoboduner/moo/info/util/UpgradeUtil.java b/src/main/java/com/luoboduner/moo/info/util/UpgradeUtil.java
new file mode 100644
index 0000000..e736a3f
--- /dev/null
+++ b/src/main/java/com/luoboduner/moo/info/util/UpgradeUtil.java
@@ -0,0 +1,136 @@
+package com.luoboduner.moo.info.util;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.luoboduner.moo.info.App;
+import com.luoboduner.moo.info.bean.VersionSummary;
+import com.luoboduner.moo.info.ui.UiConsts;
+import com.luoboduner.moo.info.ui.dialog.UpdateInfoDialog;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.swing.*;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Upgrade tool class
+ *
+ * @author RememBerBer
+ * @since 2021/11/08.
+ */
+@Slf4j
+public class UpgradeUtil {
+
+ public static void checkUpdate(boolean initCheck) {
+ // current version
+ String currentVersion = UiConsts.APP_VERSION;
+
+ // Get information about the latest version from github
+ String versionSummaryJsonContent = HttpUtil.get(UiConsts.CHECK_VERSION_URL);
+ if (StringUtils.isEmpty(versionSummaryJsonContent) && !initCheck) {
+ JOptionPane.showMessageDialog(App.mainFrame,
+ "Check for timeouts, follow GitHub Release!", "Network error",
+ JOptionPane.INFORMATION_MESSAGE);
+ return;
+ } else if (StringUtils.isEmpty(versionSummaryJsonContent) || versionSummaryJsonContent.contains("404: Not Found")) {
+ return;
+ }
+ versionSummaryJsonContent = versionSummaryJsonContent.replace("\n", "");
+
+ VersionSummary versionSummary = JSON.parseObject(versionSummaryJsonContent, VersionSummary.class);
+ // The latest version
+ String newVersion = versionSummary.getCurrentVersion();
+ String versionIndexJsonContent = versionSummary.getVersionIndex();
+ // Version index
+ Map versionIndexMap = JSON.parseObject(versionIndexJsonContent, Map.class);
+ // list of version details
+ List versionDetailList = versionSummary.getVersionDetailList();
+
+ if (newVersion.compareTo(currentVersion) > 0) {
+ // The current version index
+ int currentVersionIndex = Integer.parseInt(versionIndexMap.get(currentVersion));
+ // Version update log:
+ StringBuilder versionLogBuilder = new StringBuilder("Surprise the new version! Download it now?
");
+ VersionSummary.Version version;
+ for (int i = currentVersionIndex + 1; i < versionDetailList.size(); i++) {
+ version = versionDetailList.get(i);
+ versionLogBuilder.append("").append(version.getVersion()).append("
");
+ versionLogBuilder.append("").append(version.getTitle()).append("
");
+ versionLogBuilder.append("").append(version.getLog().replaceAll("\\n", "
")).append("
");
+ }
+ String versionLog = versionLogBuilder.toString();
+
+ UpdateInfoDialog updateInfoDialog = new UpdateInfoDialog();
+ updateInfoDialog.setHtmlText(versionLog);
+ updateInfoDialog.setNewVersion(newVersion);
+ updateInfoDialog.pack();
+ updateInfoDialog.setVisible(true);
+ } else {
+ if (!initCheck) {
+ JOptionPane.showMessageDialog(App.mainFrame,
+ "It's the latest version!", "Congratulations",
+ JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+ }
+
+ /**
+ * Smooth upgrade
+ * The version update scripts and sql methods involved are as idempotent as possible to avoid repeated upgrade operations due to unusual interruptions such as power failures and deaths during the upgrade process
+ */
+ public static void smoothUpgrade() {
+ // Get the current version
+ String currentVersion = UiConsts.APP_VERSION;
+ // Get the before upgrade version
+ String beforeVersion = App.config.getBeforeVersion();
+
+ if (currentVersion.compareTo(beforeVersion) <= 0) {
+ // If both are consistent, no upgrade action is performed
+ return;
+ } else {
+ log.info("Smooth upgrade begins");
+
+ // Then take the index for both versions
+ String versionSummaryJsonContent = FileUtil.readString(UiConsts.class.getResource("/version_summary.json"), CharsetUtil.UTF_8);
+ versionSummaryJsonContent = versionSummaryJsonContent.replace("\n", "");
+ VersionSummary versionSummary = JSON.parseObject(versionSummaryJsonContent, VersionSummary.class);
+ String versionIndex = versionSummary.getVersionIndex();
+ Map versionIndexMap = JSON.parseObject(versionIndex, Map.class);
+ int currentVersionIndex = Integer.parseInt(versionIndexMap.get(currentVersion));
+ int beforeVersionIndex = Integer.parseInt(versionIndexMap.get(beforeVersion));
+ log.info("Older version{}", beforeVersion);
+ log.info("Current version{}", currentVersion);
+ // Traverses the index range
+ beforeVersionIndex++;
+ for (int i = beforeVersionIndex; i <= currentVersionIndex; i++) {
+ log.info("Update the version index {} begin", i);
+ // Perform updates to each version index, from far to nearby time
+ upgrade(i);
+ log.info("Update the version index {} finished", i);
+ }
+
+ // If the upgrade is complete and successful, the version number prior to the upgrade is assigned to the current version
+ App.config.setBeforeVersion(currentVersion);
+ App.config.save();
+ log.info("Smooth upgrade ends");
+ }
+ }
+
+ /**
+ * Execute the upgrade script
+ *
+ * @param versionIndex Version index
+ */
+ private static void upgrade(int versionIndex) {
+ log.info("Start with the upgrade script, version index:{}", versionIndex);
+ switch (versionIndex) {
+ case 21:
+ break;
+ default:
+ }
+ log.info("The upgrade script ends, the version index:{}", versionIndex);
+ }
+}
diff --git a/src/main/resources/icons/MooTool-logo-64.png b/src/main/resources/icons/MooTool-logo-64.png
new file mode 100644
index 0000000..7ab8bef
Binary files /dev/null and b/src/main/resources/icons/MooTool-logo-64.png differ
diff --git a/src/main/resources/icons/WePush-logo-64.png b/src/main/resources/icons/WePush-logo-64.png
new file mode 100644
index 0000000..5ec975c
Binary files /dev/null and b/src/main/resources/icons/WePush-logo-64.png differ
diff --git a/src/main/resources/icons/loading_dark.gif b/src/main/resources/icons/loading_dark.gif
new file mode 100644
index 0000000..5d4800a
Binary files /dev/null and b/src/main/resources/icons/loading_dark.gif differ
diff --git a/src/main/resources/icons/logo-1024.png b/src/main/resources/icons/logo-1024.png
new file mode 100644
index 0000000..ceffd98
Binary files /dev/null and b/src/main/resources/icons/logo-1024.png differ
diff --git a/src/main/resources/icons/logo-128.png b/src/main/resources/icons/logo-128.png
new file mode 100644
index 0000000..e47bb84
Binary files /dev/null and b/src/main/resources/icons/logo-128.png differ
diff --git a/src/main/resources/icons/logo-16.png b/src/main/resources/icons/logo-16.png
new file mode 100644
index 0000000..8e82a50
Binary files /dev/null and b/src/main/resources/icons/logo-16.png differ
diff --git a/src/main/resources/icons/logo-24.png b/src/main/resources/icons/logo-24.png
new file mode 100644
index 0000000..6d2471e
Binary files /dev/null and b/src/main/resources/icons/logo-24.png differ
diff --git a/src/main/resources/icons/logo-256.png b/src/main/resources/icons/logo-256.png
new file mode 100644
index 0000000..6b1d1b4
Binary files /dev/null and b/src/main/resources/icons/logo-256.png differ
diff --git a/src/main/resources/icons/logo-32.png b/src/main/resources/icons/logo-32.png
new file mode 100644
index 0000000..994918d
Binary files /dev/null and b/src/main/resources/icons/logo-32.png differ
diff --git a/src/main/resources/icons/logo-48.png b/src/main/resources/icons/logo-48.png
new file mode 100644
index 0000000..9949749
Binary files /dev/null and b/src/main/resources/icons/logo-48.png differ
diff --git a/src/main/resources/icons/logo-512.png b/src/main/resources/icons/logo-512.png
new file mode 100644
index 0000000..950b59e
Binary files /dev/null and b/src/main/resources/icons/logo-512.png differ
diff --git a/src/main/resources/icons/logo-64.png b/src/main/resources/icons/logo-64.png
new file mode 100644
index 0000000..8f7250f
Binary files /dev/null and b/src/main/resources/icons/logo-64.png differ
diff --git a/src/main/resources/icons/wx-zanshang.jpg b/src/main/resources/icons/wx-zanshang.jpg
new file mode 100644
index 0000000..9d66362
Binary files /dev/null and b/src/main/resources/icons/wx-zanshang.jpg differ
diff --git a/src/main/resources/theme/Cyan.theme.json b/src/main/resources/theme/Cyan.theme.json
new file mode 100644
index 0000000..021630a
--- /dev/null
+++ b/src/main/resources/theme/Cyan.theme.json
@@ -0,0 +1,293 @@
+{
+ "name": "Cyan light",
+ "dark": false,
+ "author": "Olga Berdnikova",
+
+ "editorScheme": "/themes/cyanScheme.xml",
+
+ "ui": {
+ "*": {
+ "background": "#e4e6eb",
+ "foreground": "#1d1d1d",
+
+ "selectionBackground": "#3eb2c2",
+ "selectionBackgroundInactive": "#d0d5db",
+ "selectionInactiveBackground": "#d0d5db",
+ "lightSelectionBackground": "#d3e4eb",
+
+ "disabledForeground": "#b1b1b1",
+ "disabledText": "#b1b1b1",
+ "inactiveForeground": "#b1b1b1",
+
+ "infoForeground": "#787878",
+ "modifiedItemForeground": "#00a9bf",
+
+ "separatorColor": "#bec5cd",
+ "borderColor": "#bec5cd",
+
+ "underlineColor": "#0ab0d1"
+ },
+
+ "ActionButton": {
+ "hoverBackground": "#d0d3d9",
+ "hoverBorderColor": "#d0d3d9",
+ "pressedBackground": "#c3c7cf",
+ "pressedBorderColor": "#c3c7cf"
+ },
+
+ "Borders": {
+ "color": "#bec5cd",
+ "ContrastBorderColor": "#bec5cd"
+ },
+
+ "Button": {
+ "startBorderColor": "#b0b9c3",
+ "endBorderColor": "#b0b9c3",
+ "default": {
+ "foreground": "#FFFFFF",
+ "startBackground": "#28a4c3",
+ "endBackground": "#28a4c3",
+ "startBorderColor": "#258aa4",
+ "endBorderColor": "#258aa4",
+ "focusedBorderColor": "#82d3dd"
+ }
+ },
+
+ "ComboBox": {
+ "background": "#eef0f4",
+ "nonEditableBackground": "#FFFFFF",
+ "ArrowButton.background": "#FFFFFF"
+ },
+ "ComboBoxButton.background": "#FFFFFF",
+ "ComboPopup.border": "1,1,1,1,b0b9c3",
+
+ "CompletionPopup": {
+ "foreground": "#404040",
+ "infoForeground": "#8c8c8c",
+ "selectionBackground": "#bce2e6",
+ "selectionInactiveBackground": "#d7dbe0",
+ "matchForeground": "#00a0d1",
+ "selectionForeground": "#404040",
+ "selectionInfoForeground": "#8c8c8c",
+ "matchSelectionForeground": "#00a0d1"
+ },
+
+ "Component": {
+ "borderColor": "#b0b9c3",
+ "focusedBorderColor": "#31b1d0",
+ "focusColor": "#5fc5de"
+ },
+
+ "Counter": {
+ "background": "#9AA7B0",
+ "foreground": "#FFFFFF"
+ },
+
+ "DefaultTabs": {
+ "inactiveUnderlineColor": "#8699a6",
+ "hoverBackground": "#ced2d9"
+ },
+
+ "DragAndDrop": {
+ "areaBackground": "#4cb2c733"
+ },
+
+ "Editor": {
+ "background": "#d0d3d9",
+ "foreground": "#808080",
+ "shortcutForeground": "#1b9bb6"
+ },
+
+ "EditorPane.inactiveBackground": "#e4e6eb",
+
+ "EditorTabs": {
+ "selectedBackground": "#f3f3f3",
+ "inactiveMaskColor": "#4752661A",
+
+ "underlineColor": "#29abcb",
+
+ "underlinedTabBackground": "#f2f4f5",
+ "inactiveColoredFileBackground": "#a6a9b350",
+ "hoverBackground": "#b9bdc999"
+ },
+
+ "DebuggerTabs.selectedBackground": "#e4e6eb",
+
+ "FileColor.Yellow": "#f2efda",
+ "FileColor.Green": "#d8f0e2",
+ "FileColor.Blue": "#d3f0f4",
+
+ "Label.errorForeground": "#C7222D",
+
+ "Link": {
+ "activeForeground": "#009eb3",
+ "hoverForeground": "#009eb3",
+ "pressedForeground": "#009eb3",
+ "visitedForeground": "#009eb3",
+ "secondaryForeground": "#7ac2cc"
+ },
+
+ "List.background": "#eef0f4",
+
+ "Notification": {
+ "MoreButton.innerBorderColor": "#bec5cd",
+ "errorBackground": "#f5e1e4",
+ "errorBorderColor": "#e695a3",
+ "ToolWindow": {
+ "informativeBackground": "#ccedcf",
+ "informativeBorderColor": "#8ebd91",
+ "warningBackground": "#f0e4c0",
+ "warningBorderColor": "#d9b857",
+ "errorBackground": "#fad7dd",
+ "errorBorderColor": "#e68a99"
+ }
+ },
+
+ "PasswordField.background": "#FFFFFF",
+
+ "Plugins": {
+ "background": "#f5f7fa",
+ "SearchField.background": "#FFFFFF",
+ "SectionHeader.foreground": "#808080",
+ "SectionHeader.background": "#edeef2",
+ "Tab.selectedBackground": "#cacccf",
+ "Tab.hoverBackground": "#cacccf"
+ },
+
+ "Popup": {
+ "Header": {
+ "activeBackground": "#d6dae5",
+ "inactiveBackground": "#d6dae5"
+ },
+
+ "separatorColor": "#bec5cd",
+ "separatorForeground": "#919699",
+
+ "Advertiser": {
+ "foreground": "#787878",
+ "background": "#e4e6eb",
+ "borderColor": "#e4e6eb"
+ }
+ },
+
+ "ProgressBar": {
+ "trackColor": "#c4c9d5",
+ "progressColor": "#2b9cb8",
+ "indeterminateStartColor": "#b8dde6",
+ "indeterminateEndColor": "#2b9cb8",
+ "passedEndColor": "#bcebd5",
+ "passedColor": "#1eb070",
+ "failedEndColor": "#e6b8bf",
+ "failedColor": "#dc445d"
+ },
+
+ "SearchEverywhere": {
+ "SearchField.background": "#FFFFFF",
+ "Tab.selectedBackground": "#d1d4d4",
+ "Advertiser.foreground": "#787878"
+ },
+
+ "SearchMatch": {
+ "startBackground": "#ffc466",
+ "endBackground": "#FFC466"
+ },
+
+ "SidePanel.background": "#e4e6eb",
+
+ "SpeedSearch": {
+ "background": "#FFFFFF",
+ "errorForeground": "#C7222D"
+ },
+
+ "TabbedPane": {
+ "hoverColor": "#ced2d9",
+ "focusColor": "#dbebed",
+ "contentAreaColor": "#bec5cd"
+ },
+
+ "Table": {
+ "background": "#eef0f4",
+ "hoverBackground": "#C3D2E366"
+ },
+
+ "TableHeader": {
+ "cellBorder": "3,0,3,0",
+ "background": "#e9ecf0",
+ "bottomSeparatorColor": "#dfe2e6"
+ },
+
+ "TextArea.background": "#FFFFFF",
+
+ "TextField.background": "#FFFFFF",
+
+ "ToggleButton": {
+ "onBackground": "#28a4c3",
+ "offForeground": "#787878",
+ "buttonColor": "#b0b9c3",
+ "borderColor": "#b0b9c3"
+ },
+
+ "ToolTip": {
+ "background": "#f3f6fb",
+ "Actions.background": "#e4e6eb"
+ },
+
+ "ToolWindow": {
+ "Header": {
+ "background": "#d8dee8",
+ "inactiveBackground": "#e4e6eb"
+ },
+ "HeaderTab": {
+ "selectedBackground": "#b9bec7",
+ "hoverBackground": "#b9bdc999",
+ "selectedInactiveBackground": "#CED1D6",
+ "hoverInactiveBackground": "#b9bdc999"
+ },
+ "Button": {
+ "selectedBackground": "#C3C6C9",
+ "hoverBackground": "#C3C6C9"
+ }
+ },
+
+ "Tree.background": "#eef0f4",
+
+ "WelcomeScreen": {
+ "Details.background": "#eef0f4",
+ "Projects.actions.background": "#E1E4EB"
+ }
+ },
+
+ "icons": {
+ "ColorPalette": {
+ "Actions.Grey": "#696d78",
+ "Actions.Red": "#e0516b",
+ "Actions.Blue": "#348def",
+ "Actions.Green": "#29a66c",
+ "Actions.Yellow": "#e3b610",
+
+ "Objects.Grey": "#858994",
+ "Objects.RedStatus": "#dc445d",
+ "Objects.Red": "#de4765",
+ "Objects.Pink": "#f070a5",
+ "Objects.Yellow": "#e6ba29",
+ "Objects.Green": "#1eb070",
+ "Objects.Blue": "#499df2",
+ "Objects.Purple": "#bc8af2",
+ "Objects.YellowDark": "#b79108",
+ "Objects.BlackText": "#26282b",
+
+ "Checkbox.Background.Default": "#f3f3f3",
+ "Checkbox.Border.Default": "#8a9199",
+ "Checkbox.Background.Selected": "#28a4c3",
+ "Checkbox.Border.Selected": "#2896b2",
+ "Checkbox.Foreground.Selected": "#FFFFFF",
+ "Checkbox.Focus.Wide": "#5fc5de",
+ "Checkbox.Focus.Thin.Default": "#98a0aa4c",
+ "Checkbox.Focus.Thin.Selected": "#82d3dd",
+ "Checkbox.Background.Disabled": "#e4e6eb",
+ "Checkbox.Border.Disabled": "#babfc4",
+ "Checkbox.Foreground.Disabled": "#babfc4"
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/resources/theme/DarkPurple.theme.json b/src/main/resources/theme/DarkPurple.theme.json
new file mode 100644
index 0000000..2cfc2ba
--- /dev/null
+++ b/src/main/resources/theme/DarkPurple.theme.json
@@ -0,0 +1,421 @@
+{
+ "name": "Dark purple",
+ "dark": true,
+ "author": "JetBrains",
+
+ "editorScheme": "/themes/darkPurpleScheme.xml",
+
+ "ui": {
+ "*": {
+ "background": "#2C2C3B",
+ "foreground": "#D0D0D9",
+
+ "infoForeground": "#6d6a80",
+
+ "selectionBackground": "#713a91",
+ "selectionForeground": "#D0D0D9",
+ "selectionInactiveBackground": "#3d3952",
+ "selectionBackgroundInactive": "#3d3952",
+
+ "lightSelectionBackground": "#3a324a",
+ "lightSelectionForeground": "#D0D0D9",
+ "lightSelectionInactiveBackground": "#3d3952",
+ "lightSelectionInactiveForeground":"#D0D0D9",
+
+ "disabledBackground": "#2C2C3B",
+ "inactiveBackground": "#2C2C3B",
+
+ "disabledForeground": "#646078",
+ "disabledText": "#646078",
+ "inactiveForeground": "#646078",
+
+ "acceleratorForeground": "#D0D0D9",
+ "acceleratorSelectionForeground": "#D0D0D9",
+
+ "errorForeground": "#dd3962",
+
+ "borderColor": "#4E4C63",
+ "disabledBorderColor": "#45405C",
+
+ "focusColor": "#693687",
+ "focusedBorderColor": "#814F9E",
+
+ "separatorForeground": "#6d6a80",
+ "separatorColor": "#4e4b61",
+ "lineSeparatorColor": "#55506b",
+
+ "modifiedItemForeground": "#b279f2"
+ },
+
+ "ActionButton": {
+ "hoverBackground": "#453e57",
+ "hoverBorderColor": "#453E57",
+ "pressedBackground": "#49415c",
+ "pressedBorderColor": "#49415C",
+ "focusedBorderColor": "#476fcc"
+ },
+
+ "Button": {
+ "startBackground": "#45405C",
+ "endBackground": "#45405C",
+ "startBorderColor": "#544F70",
+ "endBorderColor": "#544F70",
+ "shadowColor": "#27282B",
+
+ "default": {
+ "foreground": "#D0D0D9",
+ "startBackground": "#6B388F",
+ "endBackground": "#6B388F",
+ "startBorderColor": "#7C519C",
+ "endBorderColor": "#7C519C",
+ "focusedBorderColor": "#8465a6",
+ "focusColor": "#784299",
+ "shadowColor": "#27282B"
+ }
+ },
+
+ "Borders": {
+ "color": "#1a1721",
+ "ContrastBorderColor": "#1a1721"
+ },
+
+ "ComboBox": {
+ "nonEditableBackground": "#3A384D",
+ "background": "#343445",
+ "ArrowButton": {
+ "iconColor": "#9A97A8",
+ "disabledIconColor": "#454554",
+ "nonEditableBackground": "#3A384D"
+ }
+ },
+
+ "ComboPopup.border": "1,1,1,1,64647A",
+
+ "CompletionPopup": {
+ "matchForeground": "#ED94FF",
+ "matchSelectionForeground": "#ED94FF",
+ "selectionInactiveBackground": "#44405c",
+ "nonFocusedMask": "#00000033",
+ "selectionBackground": "#623380"
+ },
+
+ "Component": {
+ "errorFocusColor": "#993750",
+ "inactiveErrorFocusColor": "#522530",
+ "warningFocusColor": "#8c812b",
+ "inactiveWarningFocusColor": "#47441f",
+ "iconColor": "#77728fCC",
+ "hoverIconColor": "#8b85a6"
+ },
+
+ "Counter": {
+ "background": "#FFFFFF80",
+ "foreground": "#000000"
+ },
+
+ "DebuggerPopup.borderColor": "#524e66",
+
+ "DebuggerTabs.selectedBackground": "#332C40",
+
+ "DefaultTabs": {
+ "underlineColor": "#9649cc",
+ "inactiveUnderlineColor": "#877399",
+ "hoverBackground": "#dfb3ff1a"
+ },
+
+ "DragAndDrop": {
+ "areaForeground": "#D0D0D9",
+ "areaBackground": "#5d476680",
+ "areaBorderColor": "#343142"
+ },
+
+ "Editor": {
+ "background": "#1D1D26",
+ "foreground": "#6d6a80",
+ "shortcutForeground": "#6E86FF"
+ },
+
+ "EditorPane.inactiveBackground": "#2C2C3B",
+
+ "EditorTabs": {
+ "selectedForeground": "#D0D0D9",
+ "selectedBackground": "#343445",
+ "inactiveMaskColor": "#0d0d0d33",
+
+ "underlineColor": "#904ac2",
+
+ "underlinedTabBackground": "#363647",
+ "inactiveColoredFileBackground": "#2C2C3B80",
+
+ "borderColor": "#1a1721"
+ },
+
+ "FileColor": {
+ "Yellow": "#45243b",
+ "Green": "#213d37",
+ "Blue": "#1f3557",
+ "Violet": "#2a2754",
+ "Orange": "#402e23",
+ "Rose": "#4a2d59"
+ },
+
+ "InplaceRefactoringPopup.borderColor": "#474359",
+
+ "Link": {
+ "activeForeground": "#7094ff",
+ "hoverForeground": "#7094FF",
+ "pressedForeground": "#7094FF",
+ "visitedForeground": "#7094FF"
+ },
+
+ "MenuBar.borderColor": "#1a1721",
+
+ "NavBar.borderColor": "#1a1721",
+
+ "Notification": {
+ "background": "#3d394d",
+ "borderColor": "#57506e",
+
+ "errorForeground": "#D0D0D9",
+ "errorBackground": "#4d232e",
+ "errorBorderColor": "#802e44",
+
+ "MoreButton.innerBorderColor": "#1a1721",
+
+ "ToolWindow": {
+ "informativeForeground": "#D0D0D9",
+ "informativeBackground": "#2e4280",
+ "informativeBorderColor": "#17254d",
+
+ "warningForeground": "#D0D0D9",
+ "warningBackground": "#735822",
+ "warningBorderColor": "#403013",
+
+ "errorForeground": "#D0D0D9",
+ "errorBackground": "#802d43",
+ "errorBorderColor": "#4d1c2b"
+ }
+ },
+
+ "MemoryIndicator": {
+ "allocatedBackground": "#352140",
+ "usedBackground": "#533473"
+ },
+
+ "ParameterInfo": {
+ "background": "#463f57",
+ "foreground": "#ababb3",
+ "infoForeground": "ababb3",
+ "currentOverloadBackground": "#6A6173",
+ "currentParameterForeground": "#D0D0D9"
+ },
+
+ "Plugins": {
+ "Tab": {
+ "selectedForeground": "#D0D0D9",
+ "selectedBackground": "#593f73",
+ "hoverBackground": "#593F73"
+ },
+
+ "SearchField.borderColor": "#1a1721",
+ "SearchField.background": "#252533",
+ "SectionHeader.background": "#3d3952",
+ "tagBackground": "#4c4766",
+ "tagForeground": "#D0D0D9",
+
+ "Button": {
+ "installForeground": "#8862b3",
+ "installBorderColor":"#8862b3",
+ "installFillForeground": "#D0D0D9",
+ "installFillBackground": "#713a91",
+ "updateForeground":"#D0D0D9",
+ "updateBackground": "#713a91",
+ "updateBorderColor": "#713a91"
+ }
+ },
+
+ "Popup": {
+ "paintBorder": true,
+ "borderColor": "#4e4b61",
+ "inactiveBorderColor": "#343142",
+ "Toolbar.borderColor": "#1a1721",
+ "Header.activeBackground": "#453A5C",
+ "Header.inactiveBackground": "#453A5C",
+ "Advertiser": {
+ "foreground": "#8785a6",
+ "borderColor": "#4e4b61",
+ "borderInsets": "4,8,3,0"
+ }
+ },
+
+ "PopupMenu": {
+ "borderWidth": 1,
+ "borderInsets": "4,1,4,1"
+ },
+
+ "ProgressBar": {
+ "trackColor": "#1D1D26",
+ "progressColor": "#a85ed6",
+ "indeterminateStartColor": "#a85ed6",
+ "indeterminateEndColor": "#402e4d",
+ "failedColor": "#bd3c5f",
+ "failedEndColor": "#472c33",
+ "passedColor": "#239E62",
+ "passedEndColor": "#2b4242"
+ },
+
+ "SearchEverywhere": {
+ "Header.background": "#3a394d",
+ "Tab": {
+ "selectedForeground": "#D0D0D9",
+ "selectedBackground": "#5c3d7a"
+ },
+ "SearchField":{
+ "background": "#252533",
+ "borderColor": "#1a1721"
+ },
+ "Advertiser.foreground": "#8785a6"
+ },
+
+ "SearchMatch": {
+ "startBackground": "#cca929",
+ "endBackground": "#cca929"
+ },
+
+ "SearchOption.selectedBackground": "#424885",
+
+ "SpeedSearch": {
+ "foreground": "#D0D0D9",
+ "borderColor": "#69418c",
+ "background": "#5c3a7a",
+ "errorForeground": "#ff80a1"
+ },
+
+ "StatusBar.borderColor": "#1a1721",
+
+ "TabbedPane": {
+ "underlineColor": "#9649cc",
+ "disabledUnderlineColor": "#5e5b6b",
+ "contentAreaColor": "#1a1721",
+ "hoverColor": "#dfb3ff1a",
+ "focusColor": "#523366"
+ },
+
+ "TableHeader": {
+ "cellBorder": "3,0,3,0",
+ "background": "#363445",
+ "separatorColor": "#1a1721",
+ "bottomSeparatorColor": "#282430"
+ },
+
+ "Table": {
+ "stripeColor": "#323242",
+ "hoverBackground": "#00000028"
+ },
+
+ "TextArea": {
+ "background": "#3A384D",
+ "selectionBackground": "#69418c"
+ },
+
+ "TextField": {
+ "background": "#3A384D",
+ "selectionBackground": "#69418c"
+ },
+
+ "ToggleButton": {
+ "onForeground": "#D0D0D9",
+ "onBackground": "#543073",
+ "offForeground": "#9f9fa6",
+ "offBackground": "#2C2C3B",
+ "buttonColor": "#666380",
+ "borderColor": "#666380"
+ },
+
+ "ToolTip": {
+ "background": "#463f57",
+ "Actions.background": "#323245",
+ "infoForeground": "#8985a1",
+ "shortcutForeground": "#8985A1"
+ },
+
+ "ToolWindow": {
+ "Header": {
+ "background": "#453A5C",
+ "inactiveBackground": "#2C2C3B",
+ "borderColor": "#1a1721"
+ },
+
+ "HeaderTab": {
+ "selectedBackground": "#0a0a0a66",
+ "selectedInactiveBackground": "#0a0a0a4D",
+ "hoverBackground": "#dfb3ff1a",
+ "hoverInactiveBackground": "#dfb3ff1a"
+ },
+
+ "Button": {
+ "hoverBackground": "#1e1e24",
+ "selectedBackground": "#1e1e24",
+ "selectedForeground": "#D0D0D9"
+ }
+ },
+
+ "Tree.rowHeight": 20,
+
+ "ValidationTooltip": {
+ "errorBackground": "#802d43",
+ "errorBorderColor": "#4d1c2b",
+ "warningBackground": "#735822",
+ "warningBorderColor": "#403013"
+ },
+
+ "VersionControl": {
+ "Log.Commit": {
+ "currentBranchBackground": "#202340",
+ "unmatchedForeground": "#6d6a80",
+ "hoveredBackground": "#000000B9"
+ },
+ "FileHistory.Commit.selectedBranchBackground": "#202340"
+ },
+
+ "WelcomeScreen": {
+ "Projects.selectionInactiveBackground": "#713a91",
+ "separatorColor": "#1a1721",
+ "Details.background": "#26262E",
+ "Projects.actions.background": "#343445"
+ }
+ },
+
+ "icons": {
+ "ColorPalette": {
+ "Actions.Grey": "#a4a1b3",
+ "Actions.Red": "#c63a5d",
+ "Actions.Yellow": "#caba2d",
+ "Actions.Green": "#25ad6b",
+ "Actions.Blue": "#4d85ff",
+ "Actions.GreyInline.Dark": "#9f99bfb3",
+
+ "Objects.Grey": "#9790ad",
+ "Objects.RedStatus": "#dd3962",
+ "Objects.Red": "#c63a5d",
+ "Objects.Pink": "#f98b9e",
+ "Objects.Yellow": "#caba2d",
+ "Objects.Green": "#239e62",
+ "Objects.Blue": "#598bff",
+ "Objects.Purple": "#af71e0",
+ "Objects.BlackText": "#000000ff",
+ "Objects.YellowDark": "#988c26",
+ "Objects.GreenAndroid": "#78c257",
+
+ "Checkbox.Background.Default.Dark": "#343445",
+ "Checkbox.Border.Default.Dark": "#756b8c",
+ "Checkbox.Foreground.Selected.Dark": "#a4a1b3",
+ "Checkbox.Focus.Wide.Dark": "#723b94",
+ "Checkbox.Focus.Thin.Default.Dark": "#8a64b3",
+ "Checkbox.Focus.Thin.Selected.Dark": "#8a64b3",
+ "Checkbox.Background.Disabled.Dark": "#2C2C3B",
+ "Checkbox.Border.Disabled.Dark": "#4c4766",
+ "Checkbox.Foreground.Disabled.Dark": "#565073"
+ }
+ }
+}
diff --git a/src/main/resources/theme/Light.theme.json b/src/main/resources/theme/Light.theme.json
new file mode 100644
index 0000000..531ad96
--- /dev/null
+++ b/src/main/resources/theme/Light.theme.json
@@ -0,0 +1,145 @@
+{
+ "name": "IntelliJ Light",
+ "dark": false,
+ "author": "JetBrains",
+ "editorScheme": "/themes/Light.xml",
+
+ "colors": {
+ "foreground": "#000000",
+ "infoPanelForeground": "#808080",
+ "infoInputForeground": "#999999",
+ "disabledForeground": "#8C8C8C",
+ "selectionForeground": "#FFFFFF",
+ "linkForeground": "#2470B3",
+
+ "border": "#D1D1D1",
+ "componentBorder": "#C4C4C4",
+ "lightBorder": "#d9d9d9",
+ "windowsPopupBorder": "#adadad",
+
+ "panel": "#F2F2F2"
+ },
+
+ "ui": {
+ "*": {
+ "foreground": "foreground",
+ "acceleratorForeground": "foreground",
+ "caretForeground": "foreground",
+ "selectedForeground": "foreground",
+ "selectionInactiveForeground": "foreground",
+
+ "selectionBackground": "#2675BF",
+ "selectionBackgroundInactive": "#D5D5D5",
+ "selectionInactiveBackground": "#D5D5D5",
+
+ "disabledForeground": "disabledForeground",
+ "disabledText": "disabledForeground",
+ "inactiveForeground": "disabledForeground",
+
+ "modifiedItemForeground": "#005ad9",
+
+ "acceleratorSelectionForeground": "selectionForeground",
+
+ "separatorColor": "border",
+ "separatorForeground": "infoInputForeground"
+ },
+
+ "Borders": {
+ "color": "border",
+ "ContrastBorderColor": "border"
+ },
+
+ "Button": {
+ "shadowColor": "#A6A6A600",
+ "startBorderColor": "componentBorder",
+ "endBorderColor": "componentBorder",
+ "default": {
+ "foreground": "selectionForeground",
+ "startBackground": "#528CC7",
+ "endBackground": "#4989CC",
+ "startBorderColor": "#487EB8",
+ "endBorderColor": "#346DAD",
+ "shadowColor": "#A6A6A600",
+ "focusedBorderColor": "#A9C9F5"
+ }
+ },
+
+ "ComboBox": {
+ "background": "#FFFFFF",
+ "nonEditableBackground": "#FFFFFF",
+ "ArrowButton.background": "#fafafa"
+ },
+
+ "ComboBoxButton.background": "#FFFFFF",
+
+ "CompletionPopup": {
+ "selectionBackground": "#c5dffc",
+ "selectionInactiveBackground": "#e0e0e0"
+ },
+
+ "Component": {
+ "borderColor": "componentBorder",
+ "infoForeground": "infoInputForeground"
+ },
+
+ "DefaultTabs.background": "panel",
+
+ "EditorTabs.underlinedTabBackground": "#ffffff",
+
+ "Editor": {
+ "background": "#cccccc",
+ "foreground": "#737373",
+ "shortcutForeground": "#4274A6"
+ },
+
+ "Label": {
+ "errorForeground": "#C7222D",
+ "infoForeground": "infoPanelForeground"
+ },
+
+ "Link": {
+ "activeForeground": "linkForeground",
+ "hoverForeground": "linkForeground",
+ "pressedForeground": "linkForeground",
+ "visitedForeground": "linkForeground",
+ "secondaryForeground": "#77a8d9"
+ },
+
+ "Notification": {
+ "borderColor": "border"
+ },
+
+ "Menu.borderColor": "lightBorder",
+
+ "Panel.background": "panel",
+
+ "PasswordField.background": "#FFFFFF",
+
+ "Popup": {
+ "separatorColor": "lightBorder",
+ "Advertiser.borderColor": "border",
+ "borderColor": "windowsPopupBorder"
+ },
+
+ "ProgressBar": {
+ "trackColor": "#D1D1D1",
+ "progressColor": "#1E82E6",
+ "indeterminateStartColor": "#91C5F2",
+ "indeterminateEndColor": "#1E82E6"
+ },
+
+ "StatusBar.borderColor": "border",
+
+ "ToolWindow.Header.inactiveBackground": "panel",
+
+ "Tree.rowHeight": 20
+ },
+
+ "icons": {
+ "ColorPalette": {
+ "Checkbox.Border.Default": "#b0b0b0",
+ "Checkbox.Background.Selected": "#4F9EE3",
+ "Checkbox.Border.Selected": "#4B97D9"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/version_summary.json b/src/main/resources/version_summary.json
new file mode 100644
index 0000000..8acae24
--- /dev/null
+++ b/src/main/resources/version_summary.json
@@ -0,0 +1,19 @@
+{
+ "currentVersion": "1.0.0",
+ "versionIndex": {
+ "0.0.0": "0",
+ "1.0.0": "1"
+ },
+ "versionDetailList": [
+ {
+ "version": "0.0.0",
+ "title": "The underlying version",
+ "log": "The underlying version\n"
+ },
+ {
+ "version": "1.0.0",
+ "title": "The first version",
+ "log": "The first version\n"
+ }
+ ]
+}
\ No newline at end of file