package org.chartsy.main.welcome; import java.awt.BorderLayout; import java.lang.ref.WeakReference; import javax.swing.JComponent; import org.chartsy.main.welcome.ui.StartPageContent; import org.openide.ErrorManager; import org.openide.nodes.Node; import org.openide.windows.TopComponent; import org.openide.windows.WindowManager; /** * * @author Viorel */ public class WelcomeComponent extends TopComponent { static final long serialVersionUID = 6021472310161712674L; private static WeakReference<WelcomeComponent> component = new WeakReference<WelcomeComponent>(null); private JComponent content; private boolean initialized = false; private WelcomeComponent() { setLayout(new BorderLayout()); setName("Welcome"); setToolTipText("Welcome"); setDisplayName("Welcome"); setHtmlDisplayName("Welcome"); content = null; initialized = false; putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE); putClientProperty(TopComponent.PROP_DRAGGING_DISABLED, Boolean.TRUE); putClientProperty(TopComponent.PROP_MAXIMIZATION_DISABLED, Boolean.TRUE); putClientProperty(TopComponent.PROP_UNDOCKING_DISABLED, Boolean.TRUE); } private void doInitialize() { if (null == content) { content = new StartPageContent(); add(content, BorderLayout.CENTER); setFocusable(false); } } @Override protected String preferredID() { return "WelcomeComponent"; } @Override public int getPersistenceType() { return TopComponent.PERSISTENCE_ONLY_OPENED; } public static WelcomeComponent createComp() { WelcomeComponent wc = component.get(); if (wc == null) { wc = new WelcomeComponent(); component = new WeakReference<WelcomeComponent>(wc); } return wc; } public static WelcomeComponent findComp() { WelcomeComponent wc = component.get(); if (wc == null) { TopComponent tc = WindowManager.getDefault().findTopComponent("Welcome"); if (tc != null) { if (tc instanceof WelcomeComponent) { wc = (WelcomeComponent) tc; component = new WeakReference<WelcomeComponent>(wc); } else { IllegalStateException exc = new IllegalStateException ("Incorrect settings file. Unexpected class returned." + " Expected:" + WelcomeComponent.class.getName() + " Returned:" + tc.getClass().getName()); ErrorManager.getDefault().notify( ErrorManager.INFORMATIONAL, exc); wc = WelcomeComponent.createComp(); } } else { wc = WelcomeComponent.createComp(); } } return wc; } @Override protected void componentShowing() { if (!initialized) { initialized = true; doInitialize(); Feeds.getDefault().start(); } if (null != content && getComponentCount() == 0) { add(content, BorderLayout.CENTER); } super.componentShowing(); setActivatedNodes(new Node[] {}); } @Override protected void componentOpened() { super.componentOpened(); if (!initialized) { initialized = true; doInitialize(); Feeds.getDefault().start(); } if (null != content && getComponentCount() == 0) { add(content, BorderLayout.CENTER); } } @Override protected void componentHidden() { super.componentHidden(); if (null != content) { remove(content); } } @Override public void requestFocus() { if (null != content) content.requestFocus(); } @Override public boolean requestFocusInWindow() { if (null != content) return content.requestFocusInWindow(); return super.requestFocusInWindow(); } }