components/visual-panels/core/src/java/util/com/oracle/solaris/vp/util/swing/DisablableTabTabbedPane.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/visual-panels/core/src/java/util/com/oracle/solaris/vp/util/swing/DisablableTabTabbedPane.java Thu May 24 04:16:47 2012 -0400
@@ -0,0 +1,197 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ */
+
+package com.oracle.solaris.vp.util.swing;
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import com.oracle.solaris.vp.util.misc.finder.Finder;
+import com.oracle.solaris.vp.util.swing.layout.*;
+
+@SuppressWarnings({"serial"})
+public class DisablableTabTabbedPane extends JTabbedPane
+ implements DescendantEnabler {
+
+ //
+ // Inner classes
+ //
+
+ public class TabComponent extends JPanel {
+ //
+ // Instance data
+ //
+
+ private Component mComponent;
+ private JLabel label;
+ private JCheckBox checkBox;
+ private RowLayout layout;
+
+ //
+ // Constructors
+ //
+
+ public TabComponent(String title, Component mComponent) {
+ this.mComponent = mComponent;
+
+ setOpaque(false);
+
+ label = new JLabel(title);
+ checkBox = new JCheckBox();
+ checkBox.setToolTipText(Finder.getString(
+ "tabbedpane.checkbox.tooltip"));
+
+ checkBox.addActionListener(
+ new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ setSelectedComponent(getMainComponent());
+ }
+ });
+
+ GUIUtil.setEnableStateOnSelect(checkBox, true, true,
+ mComponent);
+
+ // Set label and checkbox font
+ setFont(DisablableTabTabbedPane.this.getFont());
+
+ layout = new RowLayout(HorizontalAnchor.FILL);
+ RowLayoutConstraint r = new RowLayoutConstraint(
+ VerticalAnchor.CENTER, GUIUtil.getHalfGap());
+ r.setLayoutIfInvisible(true);
+ layout.setDefaultConstraint(r);
+
+ setLayout(layout);
+ add(label, r);
+ add(checkBox, r);
+ }
+
+ //
+ // Component methods
+ //
+
+ @Override
+ public void setFont(Font font) {
+ super.setFont(font);
+ try {
+ getLabel().setFont(font);
+ getCheckBox().setFont(font);
+ } catch (NullPointerException ignore) {
+ }
+ }
+
+ //
+ // Container methods
+ //
+
+ @Override
+ public RowLayout getLayout() {
+ return layout;
+ }
+
+ //
+ // TabComponent methods
+ //
+
+ public JCheckBox getCheckBox() {
+ return checkBox;
+ }
+
+ public JLabel getLabel() {
+ return label;
+ }
+
+ public Component getMainComponent() {
+ return mComponent;
+ }
+ }
+
+ //
+ // Constructors
+ //
+
+ public DisablableTabTabbedPane() {
+ setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+ }
+
+ //
+ // Component methods
+ //
+
+ @Override
+ public void setEnabled(boolean enabled) {
+ super.setEnabled(enabled);
+
+ if (!enabled) {
+ for (Component component : getComponents()) {
+ GUIUtil.setEnabledRecursive(component, enabled);
+ }
+ } else {
+ for (int i = 0, n = getTabCount(); i < n; i++) {
+ boolean e = enabled;
+
+ Component tComponent = getTabComponentAt(i);
+ if (tComponent != null) {
+ GUIUtil.setEnabledRecursive(tComponent, enabled);
+ if (tComponent instanceof TabComponent) {
+ e = ((TabComponent)tComponent).getCheckBox().
+ isSelected();
+ }
+ }
+
+ Component component = getComponentAt(i);
+ if (component != null) {
+ GUIUtil.setEnabledRecursive(component, e);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void setFont(Font font) {
+ super.setFont(font);
+
+ for (int i = 0, n = getTabCount(); i < n; i++) {
+ Component tComponent = getTabComponentAt(i);
+ if (tComponent != null) {
+ tComponent.setFont(font);
+ }
+ }
+ }
+
+ //
+ // DisablableTabTabbedPane methods
+ //
+
+ public TabComponent addDisablableTab(String title, Component component) {
+ final int i = getTabCount();
+ addTab(null, component);
+
+ TabComponent tComponent = new TabComponent(title, component);
+ setTabComponentAt(i, tComponent);
+
+ return tComponent;
+ }
+}