/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.mantle.client.solutionbrowser.fileproperties; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CaptionPanel; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.xml.client.Document; import org.pentaho.gwt.widgets.client.filechooser.RepositoryFile; import org.pentaho.mantle.client.messages.Messages; import org.pentaho.mantle.client.objects.SolutionFileInfo; import org.pentaho.mantle.client.solutionbrowser.IFileSummary; import java.util.List; /** * @author wseyler * */ public class SubscriptionsPanel extends VerticalPanel implements IFileModifier { private CheckBox enableSubscriptions = new CheckBox( Messages.getString( "enableSubscription" ) ); //$NON-NLS-1$ private ListBox availableLB = new ListBox( true ); private ListBox appliedLB = new ListBox( true ); private Button moveRightBtn = new Button(); private Button moveLeftBtn = new Button(); private Button moveAllRightBtn = new Button(); private Button moveAllLeftBtn = new Button(); /** * */ public SubscriptionsPanel() { layout(); moveRightBtn.setStylePrimaryName( "pentaho-button" ); moveLeftBtn.setStylePrimaryName( "pentaho-button" ); moveAllRightBtn.setStylePrimaryName( "pentaho-button" ); moveAllLeftBtn.setStylePrimaryName( "pentaho-button" ); enableSubscriptions.getElement().setId( "subscriptionPanelEnableCheck" ); availableLB.getElement().setId( "subscriptionPanelAvailableList" ); appliedLB.getElement().setId( "subscriptionPanelAppliedList" ); moveRightBtn.getElement().setId( "subscriptionPanelMoveRightButton" ); moveLeftBtn.getElement().setId( "subscriptionPanelMoveLeftButton" ); moveAllRightBtn.getElement().setId( "subscriptionPanelMoveAllRightButton" ); moveAllLeftBtn.getElement().setId( "subscriptionPanelMoveAllLeftButton" ); } /** * */ public void layout() { this.setSize( "100%", "100%" ); //$NON-NLS-1$//$NON-NLS-2$ enableSubscriptions.addClickHandler( new ClickHandler() { public void onClick( ClickEvent event ) { updateControls(); } } ); this.add( enableSubscriptions ); this.setSpacing( 10 ); CaptionPanel scheduleCaptionPanel = new CaptionPanel( Messages.getString( "schedule" ) ); //$NON-NLS-1$ FlexTable schedulePanel = new FlexTable(); schedulePanel.setSize( "100%", "100%" ); //$NON-NLS-1$//$NON-NLS-2$ VerticalPanel availablePanel = new VerticalPanel(); availablePanel.add( new Label( Messages.getString( "available" ) ) ); //$NON-NLS-1$ availablePanel.add( availableLB ); availableLB.setVisibleItemCount( 9 ); availableLB.setWidth( "100%" ); //$NON-NLS-1$ VerticalPanel appliedPanel = new VerticalPanel(); appliedPanel.add( new Label( Messages.getString( "current" ) ) ); //$NON-NLS-1$ appliedPanel.add( appliedLB ); appliedLB.setVisibleItemCount( 9 ); appliedLB.setWidth( "100%" ); //$NON-NLS-1$ // Add the buttons VerticalPanel buttonGrid = new VerticalPanel(); buttonGrid.setHorizontalAlignment( HasHorizontalAlignment.ALIGN_CENTER ); buttonGrid.setVerticalAlignment( HasVerticalAlignment.ALIGN_BOTTOM ); buttonGrid.setSpacing( 2 ); moveRightBtn.setText( ">" ); //$NON-NLS-1$ moveRightBtn.setTitle( Messages.getString( "add" ) ); //$NON-NLS-1$ moveRightBtn.setWidth( "30px" ); //$NON-NLS-1$ moveRightBtn.addClickHandler( new ClickHandler() { public void onClick( ClickEvent event ) { moveSelectedToRight(); } } ); buttonGrid.add( moveRightBtn ); moveAllRightBtn.setText( ">>" ); //$NON-NLS-1$ moveAllRightBtn.setTitle( Messages.getString( "addAll" ) ); //$NON-NLS-1$ moveAllRightBtn.setWidth( "30px" ); //$NON-NLS-1$ moveAllRightBtn.addClickHandler( new ClickHandler() { public void onClick( ClickEvent event ) { moveAllToRight(); } } ); buttonGrid.add( moveAllRightBtn ); moveLeftBtn.setText( "<" ); //$NON-NLS-1$ moveLeftBtn.setTitle( Messages.getString( "remove" ) ); //$NON-NLS-1$ moveLeftBtn.setWidth( "30px" ); //$NON-NLS-1$ moveLeftBtn.addClickHandler( new ClickHandler() { public void onClick( ClickEvent event ) { moveSelectedToLeft(); } } ); buttonGrid.add( moveLeftBtn ); moveAllLeftBtn.setText( "<<" ); //$NON-NLS-1$ moveAllLeftBtn.setTitle( Messages.getString( "removeAll" ) ); //$NON-NLS-1$ moveAllLeftBtn.setWidth( "30px" ); //$NON-NLS-1$ moveAllLeftBtn.addClickHandler( new ClickHandler() { public void onClick( ClickEvent event ) { moveAllToLeft(); } } ); buttonGrid.add( moveAllLeftBtn ); // Add the list boxes schedulePanel.setWidget( 0, 0, availablePanel ); schedulePanel.setWidget( 0, 1, buttonGrid ); schedulePanel.setWidget( 0, 2, appliedPanel ); scheduleCaptionPanel.add( schedulePanel ); this.add( scheduleCaptionPanel ); this.setCellHorizontalAlignment( schedulePanel, HasHorizontalAlignment.ALIGN_CENTER ); availablePanel.setWidth( "100%" ); //$NON-NLS-1$ buttonGrid.setWidth( "100%" ); //$NON-NLS-1$ appliedPanel.setWidth( "100%" ); //$NON-NLS-1$ schedulePanel.getCellFormatter().setWidth( 0, 0, "50%" ); //$NON-NLS-1$ schedulePanel.getCellFormatter().setWidth( 0, 2, "50%" ); //$NON-NLS-1$ } /** * */ protected void moveSelectedToRight() { moveItems( availableLB, appliedLB, false ); } /** * */ protected void moveAllToRight() { moveItems( availableLB, appliedLB, true ); } /** * */ protected void moveSelectedToLeft() { moveItems( appliedLB, availableLB, false ); } /** * */ protected void moveAllToLeft() { moveItems( appliedLB, availableLB, true ); } /** * * @param srcLB * @param destLB * @param moveAll */ protected void moveItems( ListBox srcLB, ListBox destLB, boolean moveAll ) { int itemCount = srcLB.getItemCount(); int srcSelectionIndex = srcLB.getSelectedIndex(); deselectAll( destLB ); for ( int i = 0; i < itemCount; i++ ) { if ( moveAll || srcLB.isItemSelected( i ) ) { String value = srcLB.getValue( i ); String name = srcLB.getItemText( i ); destLB.addItem( name, value ); // adds it to the bottom of the destination List destLB.setItemSelected( destLB.getItemCount() - 1, true ); } } removeItems( srcLB, moveAll ); if ( srcLB.getItemCount() > 0 ) { if ( ( srcLB.getItemCount() - 1 ) < srcSelectionIndex ) { srcLB.setSelectedIndex( srcLB.getItemCount() - 1 ); } else { srcLB.setSelectedIndex( srcSelectionIndex ); } } } /** * * @param targetListBox * @param removeAll */ private void removeItems( ListBox targetListBox, boolean removeAll ) { int itemCount = targetListBox.getItemCount(); for ( int i = itemCount - 1; i >= 0; i-- ) { if ( removeAll || targetListBox.isItemSelected( i ) ) { targetListBox.removeItem( i ); } } } /** * @param targetListBox */ private void deselectAll( ListBox targetListBox ) { for ( int i = 0; i < targetListBox.getItemCount(); i++ ) { targetListBox.setItemSelected( i, false ); } } /* * (non-Javadoc) * * @see org.pentaho.mantle.client.solutionbrowser.fileproperties.IFileModifier#apply() */ public void apply() { } @Override public List<RequestBuilder> prepareRequests() { return null; // To change body of implemented methods use File | Settings | File Templates. } /** * * @param fileSummary * @param fileInfo */ public void init( RepositoryFile fileSummary, Document fileInfo ) { } /* * (non-Javadoc) * * @see org.pentaho.mantle.client.solutionbrowser.fileproperties.IFileModifier#init(org.pentaho.mantle.client. * solutionbrowser.FileItem, org.pentaho.mantle.client.objects.SolutionFileInfo) */ public void init( IFileSummary fileSummary, SolutionFileInfo fileInfo ) { updateState(); } /** * */ protected void updateControls() { availableLB.setEnabled( enableSubscriptions.getValue() ); appliedLB.setEnabled( enableSubscriptions.getValue() ); moveAllLeftBtn.setEnabled( enableSubscriptions.getValue() ); moveAllRightBtn.setEnabled( enableSubscriptions.getValue() ); moveLeftBtn.setEnabled( enableSubscriptions.getValue() ); moveRightBtn.setEnabled( enableSubscriptions.getValue() ); } /** * */ private void updateState() { } }