/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * 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.pentaho.di.ui.core; import org.eclipse.jface.action.MenuManager; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.TreeItem; import org.pentaho.di.core.Const; import org.pentaho.di.core.util.Utils; import org.pentaho.ui.xul.containers.XulMenupopup; /** * This class is used to define a number of default values for various settings throughout Kettle. It also contains a * number of static final methods to make your life easier. * * @author Matt * @since 07-05-2003 * */ public class ConstUI { /** * Default icon size */ public static final int ICON_SIZE = 32; public static final int SMALL_ICON_SIZE = 16; public static final int MEDIUM_ICON_SIZE = 24; /** * Default line width for arrows & around icons */ public static final int LINE_WIDTH = 1; /** * Default grid size to which the graphical views snap. */ public static final int GRID_SIZE = 16; /** * The minimal size of a note on a graphical view (width & height) */ public static final int NOTE_MIN_SIZE = 20; /** * Offset between pointer and tooltip position. */ public static final int TOOLTIP_OFFSET = 5; /** * The default red-component of the background color */ public static final int COLOR_BACKGROUND_RED = 255; /** * The default green-component of the background color */ public static final int COLOR_BACKGROUND_GREEN = 255; /** * The default blue-component of the background color */ public static final int COLOR_BACKGROUND_BLUE = 255; /** * The default red-component of the graph background color */ public static final int COLOR_GRAPH_RED = 255; /** * The default green-component of the graph background color */ public static final int COLOR_GRAPH_GREEN = 255; /** * The default blue-component of the graph background color */ public static final int COLOR_GRAPH_BLUE = 255; /** * The default red-component of the tab selected color */ public static final int COLOR_TAB_RED = 240; /** * The default green-component of the tab selected color */ public static final int COLOR_TAB_GREEN = 240; /** * The default blue-component of the tab selected color */ public static final int COLOR_TAB_BLUE = 240; /** * the default canvas refresh interval for running transformations */ public static final int INTERVAL_MS_TRANS_CANVAS_REFRESH = 1000; /** * margin between points of controls */ public static final int SMALL_MARGIN = 5; /** * margin between points of controls */ public static final int MEDUIM_MARGIN = 10; /** * Determine the level of where the TreeItem is position in a tree. * * @param ti * The TreeItem * @return The level of the item in the tree */ public static final int getTreeLevel( TreeItem ti ) { int level = 0; TreeItem parent = ti.getParentItem(); while ( parent != null ) { level++; parent = parent.getParentItem(); } return level; } /** * Get an array of strings containing the path from the given TreeItem to the parent. * * @param ti * The TreeItem to look at * @return An array of string describing the path to the TreeItem. */ public static final String[] getTreeStrings( TreeItem ti ) { int nrlevels = getTreeLevel( ti ) + 1; String[] retval = new String[nrlevels]; int level = 0; retval[nrlevels - 1] = ti.getText(); TreeItem parent = ti.getParentItem(); while ( parent != null ) { level++; retval[nrlevels - level - 1] = parent.getText(); parent = parent.getParentItem(); } return retval; } /** * Return the tree path seperated by Const.FILE_SEPARATOR, starting from a certain depth in the tree. * * @param ti * The TreeItem to get the path for * @param from * The depth to start at, use 0 to get the complete tree. * @return The tree path. */ public static final String getTreePath( TreeItem ti, int from ) { String[] path = getTreeStrings( ti ); if ( path == null ) { return null; } String retval = ""; for ( int i = from; i < path.length; i++ ) { if ( !path[i].equalsIgnoreCase( Const.FILE_SEPARATOR ) ) { retval += Const.FILE_SEPARATOR + path[i]; } } return retval; } /** * Flips the TreeItem from expanded to not expanded or vice-versa. * * @param ti * The TreeItem to flip. */ public static final void flipExpanded( TreeItem ti ) { ti.setExpanded( !ti.getExpanded() ); } public static final TreeItem findTreeItem( TreeItem parent, String name ) { return findTreeItem( parent, null, name ); } /** * Finds a TreeItem with a certain label (name) in a (part of a) tree. * * @param parent * The TreeItem where we start looking. * @param parentName * The name of the parent to match as well (null=not used) * @param name * The name or item label to look for. * @return The TreeItem if the label was found, null if nothing was found. */ public static final TreeItem findTreeItem( TreeItem parent, String parentName, String name ) { return findTreeItem( null, parent, parentName, name ); } private static final TreeItem findTreeItem( TreeItem grandParent, TreeItem parent, String parentName, String name ) { if ( Utils.isEmpty( parentName ) ) { if ( parent.getText().equalsIgnoreCase( name ) ) { return parent; } } else { if ( grandParent != null && grandParent.getText().equalsIgnoreCase( "OTHER" ) ) { System.out.println( "Other" ); } if ( grandParent != null && grandParent.getText().equalsIgnoreCase( parentName ) && parent.getText().equalsIgnoreCase( name ) ) { return parent; } } TreeItem[] ti = parent.getItems(); for ( int i = 0; i < ti.length; i++ ) { TreeItem child = findTreeItem( parent, ti[i], parentName, name ); if ( child != null ) { return child; } } return null; } public static void displayMenu( XulMenupopup xulMenuPopup, Control control ) { MenuManager menuMgr = (MenuManager) xulMenuPopup.getManagedObject(); Menu menu = menuMgr.createContextMenu( control ); menuMgr.updateAll( true ); displayMenu( menu, control ); } public static void displayMenu( Menu menu, Control control ) { Menu oldMenu = control.getMenu(); if ( oldMenu != null && oldMenu != menu ) { oldMenu.setVisible( false ); } // XXX: Stubbing out this line prevents context dialogs from appearing twice // on OS X. Tested on Windows to be sure there is no adverse effect. // Unfortunately, I do *not* understand why this works. I ran it by // mcasters and he didn't know for sure either. // control.setMenu(menu); menu.setVisible( true ); } }