1 /*
   2  * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation. Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javafx.scene.control.test.tabpane;
  27 
  28 import javafx.beans.value.ChangeListener;
  29 import javafx.beans.value.ObservableValue;
  30 import javafx.event.ActionEvent;
  31 import javafx.event.Event;
  32 import javafx.event.EventHandler;
  33 import javafx.geometry.Side;
  34 import javafx.scene.Scene;
  35 import javafx.scene.control.ButtonBuilder;
  36 import javafx.scene.control.ChoiceBox;
  37 import javafx.scene.control.ContextMenu;
  38 import javafx.scene.control.Label;
  39 import javafx.scene.control.ListView;
  40 import javafx.scene.control.MenuItem;
  41 import javafx.scene.control.Tab;
  42 import javafx.scene.control.TabPane;
  43 import javafx.scene.control.TextField;
  44 import javafx.scene.control.Tooltip;
  45 import javafx.scene.layout.HBox;
  46 import javafx.scene.layout.Pane;
  47 import javafx.scene.layout.VBox;
  48 import test.javaclient.shared.InteroperabilityApp;
  49 import test.javaclient.shared.Utils;
  50 
  51 public class TabPaneApp2 extends InteroperabilityApp {
  52 
  53     public final static String TEST_PANE_ID = "TestPane";
  54     public final static String CLEAR_BTN_ID = "Clear";
  55     public final static String RESET_BTN_ID = "Reset";
  56     public final static String ADD_SINGLE_BTN_ID = "Add single item";
  57     public final static String ADD_SINGLE_AT_POS_BTN_ID = "Add single item at pos";
  58     public final static String DISABLE_SINGLE_AT_POS_BTN_ID = "Disable single item at pos";
  59     public final static String REMOVE_SINGLE_AT_POS_BTN_ID = "Remove single item at pos";
  60     public final static String REMOVE_POS_EDIT_ID = "Remove at pos";
  61     public final static String ADD_POS_EDIT_ID = "Add at pos";
  62     public final static String DISABLE_POS_EDIT_ID = "Disable at pos";
  63     public final static String LAST_SELECTED_ID = "Last selected";
  64     public final static String SHOWN_CHECK_ID = "Shown";
  65     public final static String SHOWING_CHECK_ID = "Showing";
  66     public final static String SIDE_CB_ID = "Side";
  67     public final static String ERROR_ID = "Error";
  68     public final static String EVENT_LIST_ID = "Event list";
  69     public final static String TAB_ITEM = "Tab ";
  70     public final static int TABS_NUM = 10;
  71 
  72     VBox root;
  73     Label last_selected;
  74     Label error;
  75     ListView<String> eventList;
  76 
  77     public static void main(String[] args) {
  78         Utils.launch(TabPaneApp2.class, args);
  79     }
  80 
  81     @Override
  82     protected Scene getScene() {
  83         return new TabPaneAppScene();
  84     }
  85 
  86     public class TabPaneAppScene extends Scene {
  87         final TabPane tabPane;
  88 
  89         public TabPaneAppScene() {
  90             super(root = new VBox());
  91 
  92             Utils.addBrowser(this);
  93 
  94             Pane testPane = new Pane();
  95             testPane.setId(TEST_PANE_ID);
  96             testPane.setMinSize(600, 400);
  97             testPane.setPrefSize(600, 400);
  98             testPane.setMaxSize(600, 400);
  99             root.getChildren().add(testPane);
 100 
 101             tabPane = new TabPane();
 102             tabPane.setTranslateX(200);
 103             tabPane.setTranslateY(150);
 104             tabPane.setPrefSize(200, 200);
 105             testPane.getChildren().add(tabPane);
 106 
 107             HBox control_pane = new HBox();
 108             root.getChildren().add(control_pane);
 109 
 110             VBox controls = new VBox(5);
 111             control_pane.getChildren().add(controls);
 112 
 113             error = new Label();
 114             error.setId(ERROR_ID);
 115 
 116             controls.getChildren().add(
 117                     ButtonBuilder.create()
 118                     .text(CLEAR_BTN_ID).id(CLEAR_BTN_ID)
 119                     .onAction(new EventHandler<ActionEvent>() {
 120                         public void handle(ActionEvent t) {
 121                             tabPane.getTabs().clear();
 122                         }
 123                     }).build());
 124 
 125             controls.getChildren().add(
 126                     ButtonBuilder.create()
 127                     .text(RESET_BTN_ID).id(RESET_BTN_ID)
 128                     .onAction(new EventHandler<ActionEvent>() {
 129 
 130                         public void handle(ActionEvent t) {
 131                             reset();
 132                         }
 133                     }).build());
 134 
 135             controls.getChildren().add(
 136                     ButtonBuilder.create()
 137                     .text(ADD_SINGLE_BTN_ID).id(ADD_SINGLE_BTN_ID)
 138                     .onAction(new EventHandler<ActionEvent>() {
 139 
 140                         public void handle(ActionEvent t) {
 141                             tabPane.getTabs().add(new NamedTab(TAB_ITEM + tabPane.getTabs().size()));
 142                         }
 143                     }).build());
 144 
 145             HBox add_position_box = new HBox(5);
 146             controls.getChildren().add(add_position_box);
 147 
 148             final TextField add_position = new TextField("0");
 149             add_position.setId(ADD_POS_EDIT_ID);
 150 
 151             add_position_box.getChildren().add(
 152                     ButtonBuilder.create()
 153                     .text(ADD_SINGLE_AT_POS_BTN_ID).id(ADD_SINGLE_AT_POS_BTN_ID)
 154                     .onAction(new EventHandler<ActionEvent>() {
 155 
 156                         public void handle(ActionEvent t) {
 157                             tabPane.getTabs().add(new NamedTab("Tab " + tabPane.getTabs().size()));
 158                         }
 159                     }).build());
 160 
 161             final Label add_label = new Label("at");
 162             add_position_box.getChildren().add(add_label);
 163 
 164             add_position_box.getChildren().add(add_position);
 165 
 166 
 167             HBox disable_position_box = new HBox(5);
 168             controls.getChildren().add(disable_position_box);
 169 
 170             final TextField disable_position = new TextField("0");
 171             disable_position.setId(DISABLE_POS_EDIT_ID);
 172 
 173             disable_position_box.getChildren().add(
 174                     ButtonBuilder.create()
 175                     .text(DISABLE_SINGLE_AT_POS_BTN_ID).id(DISABLE_SINGLE_AT_POS_BTN_ID)
 176                     .onAction(new EventHandler<ActionEvent>() {
 177 
 178                         public void handle(ActionEvent t) {
 179                             Integer pos = Integer.valueOf(disable_position.getText());
 180                             Tab tab = tabPane.getTabs().get(pos.intValue());
 181                             tab.setDisable(!tab.isDisable());
 182                         }
 183                     }).build());
 184 
 185             final Label disable_label = new Label("at");
 186             disable_position_box.getChildren().add(disable_label);
 187 
 188             disable_position_box.getChildren().add(disable_position);
 189 
 190 
 191             HBox remove_position_box = new HBox(5);
 192             controls.getChildren().add(remove_position_box);
 193 
 194             final TextField remove_position = new TextField("0");
 195             remove_position.setId(REMOVE_POS_EDIT_ID);
 196 
 197             remove_position_box.getChildren().add(
 198                     ButtonBuilder.create()
 199                     .text(REMOVE_SINGLE_AT_POS_BTN_ID).id(REMOVE_SINGLE_AT_POS_BTN_ID)
 200                     .onAction(new EventHandler<ActionEvent>() {
 201 
 202                         public void handle(ActionEvent t) {
 203                             tabPane.getTabs().remove(Integer.valueOf(remove_position.getText()).intValue());
 204                         }
 205                     }).build());
 206 
 207             final Label remove_label = new Label("at");
 208             remove_position_box.getChildren().add(remove_label);
 209 
 210             remove_position_box.getChildren().add(remove_position);
 211 
 212             final ChoiceBox<Side> cb = new ChoiceBox<Side>();
 213             cb.setId(SIDE_CB_ID);
 214             cb.getItems().addAll(Side.values());
 215             cb.getSelectionModel().select(tabPane.getSide());
 216             cb.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
 217                 public void changed(ObservableValue ov, Object t, Object t1) {
 218                     tabPane.setSide(cb.getSelectionModel().getSelectedItem());
 219                 }
 220             });
 221 
 222             controls.getChildren().add(cb);
 223 
 224             HBox last_selected_box = new HBox(5);
 225             controls.getChildren().add(last_selected_box);
 226 
 227             Label prompt_last_selected = new Label(LAST_SELECTED_ID);
 228             last_selected = new Label();
 229             last_selected.setId(LAST_SELECTED_ID);
 230             last_selected_box.getChildren().add(prompt_last_selected);
 231             last_selected_box.getChildren().add(last_selected);
 232             last_selected.setText(String.valueOf(tabPane.getSelectionModel().getSelectedIndex()));
 233 
 234             tabPane.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number> () {
 235                 public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
 236                     last_selected.setText(t1.toString());
 237                 }
 238             });
 239 
 240             controls.getChildren().add(error);
 241 
 242             eventList = new ListView<String>();
 243             eventList.setId(EVENT_LIST_ID);
 244             eventList.setMaxSize(320, 170);
 245 
 246             control_pane.getChildren().add(eventList);
 247 
 248             reset();
 249         }
 250 
 251         protected void reset() {
 252             tabPane.getTabs().clear();
 253             eventList.getItems().clear();
 254             for (int i = 0; i < TABS_NUM; i++) {
 255                 Tab tab = new NamedTab("Tab " + i);
 256                 tab.setTooltip(new Tooltip("Tab " + i));
 257                 ContextMenu menu = new ContextMenu();
 258                 for (int j = 0; j < 3; j++) {
 259                     menu.getItems().add(new MenuItem("Tab " + i + " menu item " + j));
 260                 }
 261                 tab.setContextMenu(menu);
 262                 if (tab.getContextMenu() != menu) {
 263                     error.setText("tab.setContextMenu() fails");
 264                 }
 265                 tabPane.getTabs().add(tab);
 266             }
 267             tabPane.setSide(Side.TOP);
 268             error.setText("");
 269         }
 270 
 271         class NamedTab extends Tab {
 272             public NamedTab(String name) {
 273                 super(name);
 274                 Label label = new Label(name + " content");
 275                 setContent(label);
 276                 EventHandler handler = new EventHandler<Event>() {
 277                     public void handle(Event t) {
 278                         eventList.getItems().add(((Tab)t.getTarget()).getText());
 279                     }
 280                 };
 281                 setOnSelectionChanged(handler);
 282                 if (getOnSelectionChanged() != handler) {
 283                     error.setText("tab.setOnSelectionChanged() fails");
 284                 }
 285             }
 286         }
 287     }
 288 }