diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/guide/creator/theme/ThemeToggleGuide.java b/designer-realize/src/main/java/com/fr/design/mainframe/guide/creator/theme/ThemeToggleGuide.java index 2387a470c..36d34b124 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/guide/creator/theme/ThemeToggleGuide.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/guide/creator/theme/ThemeToggleGuide.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.guide.creator.theme; +import com.fr.base.theme.FormTheme; import com.fr.base.theme.FormThemeConfig; import com.fr.base.theme.TemplateTheme; import com.fr.design.file.HistoryTemplateListCache; @@ -12,6 +13,7 @@ import com.fr.design.mainframe.guide.GuideIds; import com.fr.design.mainframe.guide.base.Guide; import com.fr.design.mainframe.guide.base.GuideBuilder; import com.fr.design.mainframe.guide.base.GuideLifecycleAdaptor; +import com.fr.design.mainframe.guide.base.GuideManager; import com.fr.design.mainframe.guide.creator.GuideCreateUtils; import com.fr.design.mainframe.guide.creator.GuideSceneHelper; import com.fr.design.mainframe.guide.scene.ClickScene; @@ -20,6 +22,7 @@ import com.fr.design.mainframe.guide.scene.GuideScene; import com.fr.design.mainframe.guide.scene.GuideSceneLifecycleAdaptor; import com.fr.design.mainframe.guide.tip.BubbleTip; import com.fr.design.mainframe.guide.tip.GuideTip; +import com.fr.design.mainframe.theme.AsyncThemeFetcher; import com.fr.design.mainframe.theme.TemplateThemeBlock; import com.fr.design.mainframe.theme.TemplateThemeGridPagesPane; import com.fr.design.mainframe.theme.dialog.TemplateThemeUsingDialog; @@ -27,12 +30,17 @@ import com.fr.design.utils.ComponentUtils; import javax.swing.SwingUtilities; import java.awt.Component; +import java.util.List; import java.util.TimerTask; public class ThemeToggleGuide { + private static final int PAGE_THEME_COUNT = 9; + private static final int DEFAULT_THEME_INDEX = 4; private static TemplateThemeUsingDialog themeDialog; private static String TARGET_XCREATOR_NAME = "chart00"; private static String filePath; + private static int themeLoadCount; + private static int selectedThemeIndex; public static Guide createGuide() { GuideScene scene1 = createScene1(); @@ -55,15 +63,38 @@ public class ThemeToggleGuide { .registerLifecycle(new GuideLifecycleAdaptor() { @Override public boolean prepared() { - filePath = GuideCreateUtils.openGuideFile("/com/fr/report/guide/template", "toggle_theme", ".frm"); - EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_WIDGET_SETTINGS); - return true; + List themeNames = FormThemeConfig.getInstance().getThemeNames(); + themeLoadCount = Math.min(themeNames.size(), PAGE_THEME_COUNT); + if (themeLoadCount == 0) { + GuideManager.getInstance().getCurrentGuide().terminate(); + } + selectedThemeIndex = Math.min(themeLoadCount - 1, DEFAULT_THEME_INDEX); + int lazyCount = themeLoadCount; + AsyncThemeFetcher asyncThemeFetcher = new AsyncThemeFetcher<>(PAGE_THEME_COUNT, FormThemeConfig.getInstance()); + for (int index = 0; index < lazyCount; index++) { + asyncThemeFetcher.submit(themeNames.get(index), new AsyncThemeFetcher.AsyncThemeFetchCallbackAdapter(){ + @Override + public void afterCachedFetch(FormTheme theme) { + themeLoadCount--; + if (themeLoadCount == 0) { + filePath = GuideCreateUtils.openGuideFile("/com/fr/report/guide/template", "toggle_theme", ".frm"); + EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_WIDGET_SETTINGS); + asyncThemeFetcher.shutdown(); + GuideManager.getInstance().getCurrentGuide().start(); + } + } + }); + } + return false; } @Override public void onEnd() { closeTemplateThemeUsingDialog(); GuideCreateUtils.deleteGuideFile(filePath); + filePath = null; + themeLoadCount = 0; + selectedThemeIndex = 0; } }) .getGuide(); @@ -118,7 +149,7 @@ public class ThemeToggleGuide { scene.registerLifecycle(new GuideSceneLifecycleAdaptor() { @Override public boolean prepared() { - String name = FormThemeConfig.getInstance().getThemeNames().get(4); + String name = FormThemeConfig.getInstance().getThemeNames().get(selectedThemeIndex); Component component = ComponentUtils.findComponentByName(themeDialog.getContentPane(), name); if (component instanceof TemplateThemeBlock) { scene.addClickTarget(component, ClickScene.ClickType.LEFT, true);