diff --git a/core.windows/nbproject/project.xml b/core.windows/nbproject/project.xml --- a/core.windows/nbproject/project.xml +++ b/core.windows/nbproject/project.xml @@ -214,10 +214,9 @@ org.netbeans.core.nativeaccess org.netbeans.modules.visualweb.gravy + org.netbeans.core.windows.actions org.netbeans.core.windows.nativeaccess org.netbeans.core.windows.view.ui.tabcontrol - org.netbeans.core.windows.resources - org.netbeans.core.windows.actions diff --git a/core.windows/src/org/netbeans/core/windows/view/dnd/DragAndDropFeedbackVisualizer.java b/core.windows/src/org/netbeans/core/windows/view/dnd/DragAndDropFeedbackVisualizer.java --- a/core.windows/src/org/netbeans/core/windows/view/dnd/DragAndDropFeedbackVisualizer.java +++ b/core.windows/src/org/netbeans/core/windows/view/dnd/DragAndDropFeedbackVisualizer.java @@ -54,7 +54,7 @@ import javax.swing.SwingUtilities; import org.netbeans.core.windows.nativeaccess.NativeWindowSystem; import org.netbeans.core.windows.options.WinSysPrefs; -import org.netbeans.core.windows.view.ui.Tabbed; +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; /** * diff --git a/core.windows/src/org/netbeans/core/windows/view/dnd/DragWindow.java b/core.windows/src/org/netbeans/core/windows/view/dnd/DragWindow.java --- a/core.windows/src/org/netbeans/core/windows/view/dnd/DragWindow.java +++ b/core.windows/src/org/netbeans/core/windows/view/dnd/DragWindow.java @@ -59,7 +59,7 @@ import javax.swing.SwingUtilities; import javax.swing.Timer; import org.netbeans.core.windows.options.WinSysPrefs; -import org.netbeans.core.windows.view.ui.Tabbed; +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; /** * diff --git a/core.windows/src/org/netbeans/core/windows/view/dnd/TopComponentDragSupport.java b/core.windows/src/org/netbeans/core/windows/view/dnd/TopComponentDragSupport.java --- a/core.windows/src/org/netbeans/core/windows/view/dnd/TopComponentDragSupport.java +++ b/core.windows/src/org/netbeans/core/windows/view/dnd/TopComponentDragSupport.java @@ -44,6 +44,7 @@ +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; import java.awt.AWTEvent; import java.awt.Color; import java.awt.Component; diff --git a/core.windows/src/org/netbeans/core/windows/view/ui/AbstractModeContainer.java b/core.windows/src/org/netbeans/core/windows/view/ui/AbstractModeContainer.java --- a/core.windows/src/org/netbeans/core/windows/view/ui/AbstractModeContainer.java +++ b/core.windows/src/org/netbeans/core/windows/view/ui/AbstractModeContainer.java @@ -43,6 +43,7 @@ package org.netbeans.core.windows.view.ui; +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; import java.lang.reflect.Field; import org.netbeans.core.windows.Constants; import org.netbeans.core.windows.ModeImpl; diff --git a/core.windows/src/org/netbeans/core/windows/view/ui/DefaultSeparateContainer.java b/core.windows/src/org/netbeans/core/windows/view/ui/DefaultSeparateContainer.java --- a/core.windows/src/org/netbeans/core/windows/view/ui/DefaultSeparateContainer.java +++ b/core.windows/src/org/netbeans/core/windows/view/ui/DefaultSeparateContainer.java @@ -43,6 +43,7 @@ package org.netbeans.core.windows.view.ui; +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; import java.text.MessageFormat; import javax.swing.plaf.basic.BasicHTML; import org.netbeans.core.windows.Constants; @@ -53,7 +54,6 @@ import org.netbeans.core.windows.view.dnd.TopComponentDroppable; import org.netbeans.core.windows.view.dnd.WindowDnDManager; import org.netbeans.core.windows.view.dnd.ZOrderManager; -import org.netbeans.core.windows.view.ui.tabcontrol.TabbedAdapter; import org.openide.util.NbBundle; import org.openide.windows.TopComponent; @@ -64,6 +64,8 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.netbeans.core.windows.options.WinSysPrefs; +import org.netbeans.swing.tabcontrol.customtabs.TabbedComponentFactory; +import org.openide.util.Lookup; import org.openide.windows.WindowManager; @@ -110,13 +112,7 @@ } protected Tabbed createTabbed() { - Tabbed tabbed; - if(getKind() == Constants.MODE_KIND_EDITOR) { - tabbed = new TabbedAdapter(Constants.MODE_KIND_EDITOR); - } else { - tabbed = new TabbedAdapter(Constants.MODE_KIND_VIEW); - } - return tabbed; +return Lookup.getDefault().lookup(TabbedComponentFactory.class).getTabbedComponent(getKind()); } protected void updateTitle (String title) { diff --git a/core.windows/src/org/netbeans/core/windows/view/ui/DefaultSplitContainer.java b/core.windows/src/org/netbeans/core/windows/view/ui/DefaultSplitContainer.java --- a/core.windows/src/org/netbeans/core/windows/view/ui/DefaultSplitContainer.java +++ b/core.windows/src/org/netbeans/core/windows/view/ui/DefaultSplitContainer.java @@ -43,17 +43,19 @@ package org.netbeans.core.windows.view.ui; +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; import org.netbeans.core.windows.Constants; import org.netbeans.core.windows.WindowManagerImpl; import org.netbeans.core.windows.view.ModeView; import org.netbeans.core.windows.view.ViewElement; import org.netbeans.core.windows.view.dnd.TopComponentDroppable; import org.netbeans.core.windows.view.dnd.WindowDnDManager; -import org.netbeans.core.windows.view.ui.tabcontrol.TabbedAdapter; import org.openide.windows.TopComponent; import javax.swing.*; import java.awt.*; +import org.netbeans.swing.tabcontrol.customtabs.TabbedComponentFactory; +import org.openide.util.Lookup; /** @@ -91,13 +93,7 @@ } protected Tabbed createTabbed() { - Tabbed tabbed; - if(getKind() == Constants.MODE_KIND_EDITOR) { - tabbed = new TabbedAdapter(Constants.MODE_KIND_EDITOR); - } else { - tabbed = new TabbedAdapter(Constants.MODE_KIND_VIEW); - } - return tabbed; + return Lookup.getDefault().lookup(TabbedComponentFactory.class).getTabbedComponent(getKind()); } protected void updateTitle(String title) { diff --git a/core.windows/src/org/netbeans/core/windows/view/ui/DefaultTabbedComponentFactory.java b/core.windows/src/org/netbeans/core/windows/view/ui/DefaultTabbedComponentFactory.java new file mode 100644 --- /dev/null +++ b/core.windows/src/org/netbeans/core/windows/view/ui/DefaultTabbedComponentFactory.java @@ -0,0 +1,58 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common + * Development and Distribution License("CDDL") (collectively, the + * "License"). You may not use this file except in compliance with the + * License. You can obtain a copy of the License at + * http://www.netbeans.org/cddl-gplv2.html + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the + * specific language governing permissions and limitations under the + * License. When distributing the software, include this License Header + * Notice in each file and include the License file at + * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the + * License Header, with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * If you wish your version of this file to be governed by only the CDDL + * or only the GPL Version 2, indicate your decision by adding + * "[Contributor] elects to include this software in this distribution + * under the [CDDL or GPL Version 2] license." If you do not indicate a + * single choice of license, a recipient has the option to distribute + * your version of this file under either the CDDL, the GPL Version 2 or + * to extend the choice of license to its licensees as provided above. + * However, if you add GPL Version 2 code and therefore, elected the GPL + * Version 2 license, then the option applies only if the new code is + * made subject to such option by the copyright holder. + * + * Contributor(s): + * + * Portions Copyrighted 2009 Sun Microsystems, Inc. + */ + +/** + * + * @author eppleton + */ + +package org.netbeans.core.windows.view.ui; + +import org.netbeans.swing.tabcontrol.customtabs.*; +import org.netbeans.core.windows.view.ui.tabcontrol.*; +import org.openide.util.lookup.ServiceProvider; + + +@ServiceProvider(service=TabbedComponentFactory.class) +public class DefaultTabbedComponentFactory implements TabbedComponentFactory{ + public Tabbed getTabbedComponent(int type) { + return new TabbedAdapter(type); + } + +} diff --git a/core.windows/src/org/netbeans/core/windows/view/ui/TabbedHandler.java b/core.windows/src/org/netbeans/core/windows/view/ui/TabbedHandler.java --- a/core.windows/src/org/netbeans/core/windows/view/ui/TabbedHandler.java +++ b/core.windows/src/org/netbeans/core/windows/view/ui/TabbedHandler.java @@ -43,6 +43,7 @@ package org.netbeans.core.windows.view.ui; +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; import org.netbeans.core.windows.Constants; import org.netbeans.core.windows.actions.ActionUtils; import org.netbeans.core.windows.actions.MaximizeWindowAction; diff --git a/core.windows/src/org/netbeans/core/windows/view/ui/slides/SlideBar.java b/core.windows/src/org/netbeans/core/windows/view/ui/slides/SlideBar.java --- a/core.windows/src/org/netbeans/core/windows/view/ui/slides/SlideBar.java +++ b/core.windows/src/org/netbeans/core/windows/view/ui/slides/SlideBar.java @@ -72,7 +72,7 @@ import org.netbeans.core.windows.Constants; import org.netbeans.core.windows.Switches; import org.netbeans.core.windows.WindowManagerImpl; -import org.netbeans.core.windows.view.ui.Tabbed; +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; import org.netbeans.core.windows.view.ui.tabcontrol.TabbedAdapter; import org.netbeans.swing.tabcontrol.SlideBarDataModel; import org.netbeans.swing.tabcontrol.SlidingButton; diff --git a/core.windows/src/org/netbeans/core/windows/view/ui/slides/SlideBarContainer.java b/core.windows/src/org/netbeans/core/windows/view/ui/slides/SlideBarContainer.java --- a/core.windows/src/org/netbeans/core/windows/view/ui/slides/SlideBarContainer.java +++ b/core.windows/src/org/netbeans/core/windows/view/ui/slides/SlideBarContainer.java @@ -65,7 +65,7 @@ import org.netbeans.core.windows.view.ui.AbstractModeContainer; import org.netbeans.core.windows.view.ui.ModeComponent; import org.netbeans.core.windows.view.dnd.TopComponentDroppable; -import org.netbeans.core.windows.view.ui.Tabbed; +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; import org.openide.windows.TopComponent; diff --git a/core.windows/src/org/netbeans/core/windows/view/ui/slides/TabbedSlideAdapter.java b/core.windows/src/org/netbeans/core/windows/view/ui/slides/TabbedSlideAdapter.java --- a/core.windows/src/org/netbeans/core/windows/view/ui/slides/TabbedSlideAdapter.java +++ b/core.windows/src/org/netbeans/core/windows/view/ui/slides/TabbedSlideAdapter.java @@ -62,7 +62,7 @@ import org.netbeans.core.windows.Switches; import org.netbeans.core.windows.WindowManagerImpl; import org.netbeans.core.windows.actions.ActionUtils; -import org.netbeans.core.windows.view.ui.Tabbed; +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; import org.netbeans.swing.tabcontrol.DefaultTabDataModel; import org.netbeans.core.windows.view.dnd.DragAndDropFeedbackVisualizer; import org.netbeans.swing.tabcontrol.SlideBarDataModel; diff --git a/core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/TabbedAdapter.java b/core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/TabbedAdapter.java --- a/core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/TabbedAdapter.java +++ b/core.windows/src/org/netbeans/core/windows/view/ui/tabcontrol/TabbedAdapter.java @@ -49,7 +49,7 @@ import org.netbeans.core.windows.Constants; import org.netbeans.core.windows.Debug; import org.netbeans.core.windows.WindowManagerImpl; -import org.netbeans.core.windows.view.ui.Tabbed; +import org.netbeans.swing.tabcontrol.customtabs.Tabbed; import org.netbeans.swing.tabcontrol.ComponentConverter; import org.netbeans.swing.tabcontrol.TabData; import org.netbeans.swing.tabcontrol.TabbedContainer; diff --git a/o.n.swing.tabcontrol/apichanges.xml b/o.n.swing.tabcontrol/apichanges.xml --- a/o.n.swing.tabcontrol/apichanges.xml +++ b/o.n.swing.tabcontrol/apichanges.xml @@ -104,6 +104,25 @@ + + + Added new Service Provider Interface TabbedComponentFactory to allow changing the Tabbed Implementation + + + + + +

Added new Service Provider Interface TabbedComponentFactory to make it possible to change the implementation of Tabbed +

+

Refactor moved Interface Tabbed from core.windows to make it part of + a public API. Now it can be implemented by alternative controls to the default + implementation (TabbedAdapter). +

+
+ + + +
diff --git a/o.n.swing.tabcontrol/arch.xml b/o.n.swing.tabcontrol/arch.xml --- a/o.n.swing.tabcontrol/arch.xml +++ b/o.n.swing.tabcontrol/arch.xml @@ -79,7 +79,14 @@ modules dependencies. Consequently the package is not intended for external use.
For more information on SwitcherTable and SwitcherTableItem see a javadoc.
- + + API contains Interfaces that can be implemented to replace the default Tabbed Container supplied in org.netbeans.swing.tabcontol with + a custom component, e.g. an implementation based on JTabbedPane. A custom implementation of TabbedComponentFactory needs to be registered + as a Service Provider via the ServiceProvider annotation. The implementation is used by core.windows to create Tabbed Components when required.
For more + Information on TabbedComponentFactory and Tabbed see the javadoc. + +
+ diff --git a/o.n.swing.tabcontrol/manifest.mf b/o.n.swing.tabcontrol/manifest.mf --- a/o.n.swing.tabcontrol/manifest.mf +++ b/o.n.swing.tabcontrol/manifest.mf @@ -1,6 +1,6 @@ Manifest-Version: 1.0 OpenIDE-Module-Localizing-Bundle: org/netbeans/swing/tabcontrol/Bundle.properties OpenIDE-Module: org.netbeans.swing.tabcontrol -OpenIDE-Module-Specification-Version: 1.16 +OpenIDE-Module-Specification-Version: 1.17 AutoUpdate-Essential-Module: true diff --git a/o.n.swing.tabcontrol/nbproject/project.xml b/o.n.swing.tabcontrol/nbproject/project.xml --- a/o.n.swing.tabcontrol/nbproject/project.xml +++ b/o.n.swing.tabcontrol/nbproject/project.xml @@ -74,6 +74,7 @@ org.netbeans.swing.popupswitcher org.netbeans.swing.tabcontrol + org.netbeans.swing.tabcontrol.customtabs org.netbeans.swing.tabcontrol.event org.netbeans.swing.tabcontrol.plaf diff --git a/core.windows/src/org/netbeans/core/windows/view/ui/Tabbed.java b/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/customtabs/Tabbed.java rename from core.windows/src/org/netbeans/core/windows/view/ui/Tabbed.java rename to o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/customtabs/Tabbed.java --- a/core.windows/src/org/netbeans/core/windows/view/ui/Tabbed.java +++ b/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/customtabs/Tabbed.java @@ -21,7 +21,7 @@ * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * - * Contributor(s): + * Contributor(s): maxnitribitt * * The Original Software is NetBeans. The Initial Developer of the Original * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun @@ -40,7 +40,7 @@ */ -package org.netbeans.core.windows.view.ui; +package org.netbeans.swing.tabcontrol.customtabs; import org.openide.windows.TopComponent; @@ -52,13 +52,17 @@ /** - * Interface describing component which is used inside SimpleContainer. - * There will be at two implementations one for view and second one for editor type. + * Interface for a pseudo JTabbedPane API for the actual tab control. + * Default implementation is based on nb specific TabbedContainer. * * @author Peter Zavadsky */ public interface Tabbed { + /** + * Give a visual hint (e.g. blink) to draw attention to this TopComponent + * @param tc + */ public void requestAttention(TopComponent tc); public void cancelRequestAttention(TopComponent tc); diff --git a/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/customtabs/TabbedComponentFactory.java b/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/customtabs/TabbedComponentFactory.java new file mode 100644 --- /dev/null +++ b/o.n.swing.tabcontrol/src/org/netbeans/swing/tabcontrol/customtabs/TabbedComponentFactory.java @@ -0,0 +1,61 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common + * Development and Distribution License("CDDL") (collectively, the + * "License"). You may not use this file except in compliance with the + * License. You can obtain a copy of the License at + * http://www.netbeans.org/cddl-gplv2.html + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the + * specific language governing permissions and limitations under the + * License. When distributing the software, include this License Header + * Notice in each file and include the License file at + * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the + * License Header, with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * If you wish your version of this file to be governed by only the CDDL + * or only the GPL Version 2, indicate your decision by adding + * "[Contributor] elects to include this software in this distribution + * under the [CDDL or GPL Version 2] license." If you do not indicate a + * single choice of license, a recipient has the option to distribute + * your version of this file under either the CDDL, the GPL Version 2 or + * to extend the choice of license to its licensees as provided above. + * However, if you add GPL Version 2 code and therefore, elected the GPL + * Version 2 license, then the option applies only if the new code is + * made subject to such option by the copyright holder. + * + * Contributor(s): + * + * Portions Copyrighted 2009 Sun Microsystems, Inc. + */ + +package org.netbeans.swing.tabcontrol.customtabs; + +/** + * Service Interface used by the Window System for creating NetBeans specific + * Tabbed Containers. Use this if you want to provide an alternative implementation + * (e.g. based on JTabbedPane). + * Implement to return your own implementation of Tabbed. Make it available by + * registering as a ServiceProvider using this annotation: + * @ServiceProvider(service=TabbedComponentFactory.class,supersedes="org.netbeans.core.windows.view.ui.DefaultTabbedComponentFactory" ) + * + * @since 1.17 + * @author maxnitribitt + */ +public interface TabbedComponentFactory { +/** + * Get the Tabbed implementation for this type (Editor / View) + * @param type + * @return + */ + public Tabbed getTabbedComponent(int type); + +}