/* * Copyright (C) 2010,2011. * AHCP Project (http://code.google.com/p/jacp) * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.jacp.demo.perspectives; import javafx.event.ActionEvent; import javafx.event.Event; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.geometry.Insets; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.ColorPicker; import javafx.scene.control.Tooltip; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jacp.demo.components.util.JACPOptionButtonCreator; import org.jacp.demo.constants.GlobalConstants; import org.jacpfx.api.annotations.Resource; import org.jacpfx.api.annotations.lifecycle.PostConstruct; import org.jacpfx.api.annotations.lifecycle.PreDestroy; import org.jacpfx.api.annotations.perspective.Perspective; import org.jacpfx.api.message.Message; import org.jacpfx.rcp.componentLayout.FXComponentLayout; import org.jacpfx.rcp.componentLayout.PerspectiveLayout; import org.jacpfx.rcp.components.toolBar.JACPHoverMenu; import org.jacpfx.rcp.components.toolBar.JACPToolBar; import org.jacpfx.rcp.context.Context; import org.jacpfx.rcp.perspective.FXPerspective; import org.jacpfx.rcp.util.FXUtil.MessageUtil; import java.util.ResourceBundle; import static org.jacpfx.api.util.ToolbarPosition.*; import static org.jacpfx.rcp.components.toolBar.JACPOptionButtonOrientation.*; /** * Contact perspective; here you define the basic layout for your application * view and declare targets for your UI component. * * @author Andy Moncsek, Patrick Symmangk */ @Perspective(id = "id01", name = "contactPerspective", components = { GlobalConstants.ComponentConstants.COMPONENT_DETAIL_VIEW, GlobalConstants.ComponentConstants.COMPONENT_CHART_VIEW, GlobalConstants.ComponentConstants.COMPONENT_TABLE_VIEW, GlobalConstants.ComponentConstants.COMPONENT_TREE_VIEW, GlobalConstants.CallbackConstants.CALLBACK_CREATOR, GlobalConstants.CallbackConstants.CALLBACK_COORDINATOR, GlobalConstants.CallbackConstants.CALLBACK_ANALYTICS}, viewLocation = "/fxml/contactPerspective.fxml", resourceBundleLocation = "bundles.languageBundle", localeID = "en_US") public class ContactPerspective implements FXPerspective { private final static Log LOGGER = LogFactory .getLog(ContactPerspective.class); private static final String SWITCH_MESSAGE = "switch"; private String topId = "PmainContentTop"; private String bottomId = "PmainContentBottom"; private String detailId = "PdetailComponent"; @FXML private GridPane gridPane1; @FXML private GridPane gridPane2; @FXML private GridPane chartView; @FXML private GridPane detailView; @FXML private AnchorPane chartAnchor; @FXML private AnchorPane detailAnchor; @Resource Context context; @PostConstruct /** * create buttons in tool bars; menu entries */ public void PostConstructPerspective(final FXComponentLayout layout, final ResourceBundle resourceBundle) { LOGGER.debug("PostConstructPerspective ressource:" + resourceBundle); // create button in toolbar; button should switch top and bottom id's final JACPToolBar north = layout.getRegisteredToolBar(NORTH); final JACPToolBar south = layout.getRegisteredToolBar(SOUTH); final JACPToolBar west = layout.getRegisteredToolBar(WEST); final JACPToolBar east = layout.getRegisteredToolBar(EAST); final Button custom = new Button("switch"); custom.setTooltip(new Tooltip("Switch Components")); custom.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(final ActionEvent e) { context.send(SWITCH_MESSAGE); } }); north.addOnEnd(context.getId(), custom); // TEST OPTIONBUTTON ON NORTH north.addOnEnd(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, BOTTOM, 10)); north.addToCenter(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, BOTTOM, 10)); north.add(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, BOTTOM, 10)); west.add(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, RIGHT)); west.addToCenter(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, RIGHT)); west.addOnEnd(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, RIGHT)); east.addOnEnd(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("right Button", layout, LEFT)); east.add(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("right Button", layout, LEFT)); east.addToCenter(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("right Button", layout, LEFT)); south.add(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("bottom Button", layout, TOP)); south.addToCenter(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("bottom Button", layout, TOP)); south.addOnEnd(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("bottom Button", layout, TOP)); JACPHoverMenu menu = new JACPHoverMenu("Hovermenu", layout); VBox p = new VBox(); p.setPadding(new Insets(10)); Button b = new Button("HELLO"); CheckBox check = new CheckBox("checkbox"); p.getChildren().addAll(b , check); ColorPicker picker = new ColorPicker(); menu.getContentPane().getChildren().add(p); north.addToCenter(context.getId(), menu); north.addToCenter(context.getId(), picker); } @PreDestroy public void PreDestroyPerspective(final FXComponentLayout layout) { LOGGER.debug("PreDestroyPerspective"); } @Override public void handlePerspective(final Message<Event, Object> message, final PerspectiveLayout perspectiveLayout) { if (MessageUtil.INIT.equals(message.getMessageBody())) { this.createPerspectiveLayout(perspectiveLayout); } else if (SWITCH_MESSAGE.equals(message.getMessageBody())) { final String tmp = this.topId; this.topId = this.bottomId; this.bottomId = tmp; this.createPerspectiveLayout(perspectiveLayout); } LOGGER.debug("handlePerspective message: " + message.getMessageBody()); } private void createPerspectiveLayout( final PerspectiveLayout perspectiveLayout) { // bind width and height to ensure that the gridpane is always on // fullspan! chartView.minWidthProperty().bind(chartAnchor.widthProperty()); chartView.minHeightProperty().bind(chartAnchor.heightProperty()); detailView.minWidthProperty().bind(detailAnchor.widthProperty()); detailView.minHeightProperty().bind(detailAnchor.heightProperty()); GridPane.setVgrow(perspectiveLayout.getRootComponent(), Priority.ALWAYS); GridPane.setHgrow(perspectiveLayout.getRootComponent(), Priority.ALWAYS); perspectiveLayout.registerTargetLayoutComponent("PleftMenu", gridPane1); // register main content Top perspectiveLayout.registerTargetLayoutComponent(this.topId, gridPane2); // register main content Bottom perspectiveLayout.registerTargetLayoutComponent(this.bottomId, chartView); perspectiveLayout.registerTargetLayoutComponent(this.detailId, detailView); } }