/*! * 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.reporting.designer.core.settings.ui; import org.pentaho.reporting.designer.core.settings.DateFormatModel; import org.pentaho.reporting.designer.core.settings.NumberFormatModel; import org.pentaho.reporting.designer.core.settings.SettingsMessages; import org.pentaho.reporting.designer.core.settings.WorkspaceSettings; import org.pentaho.reporting.designer.core.util.IconLoader; import org.pentaho.reporting.engine.classic.core.metadata.MaturityLevel; import javax.swing.*; import javax.swing.UIManager.LookAndFeelInfo; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.ActionEvent; /** * User: Martin Date: 01.03.2006 Time: 18:15:58 */ public class GeneralSettingsPanel extends JPanel implements SettingsPlugin { private class EnableVersionCheckerSelectionHandler implements ChangeListener { private EnableVersionCheckerSelectionHandler() { } public void stateChanged( final ChangeEvent e ) { notifyDevBuilds.setEnabled( enableVersionChecker.isSelected() ); } } private class LookAndFeelModel extends DefaultComboBoxModel { private LookAndFeelInfo lnfs[]; private int selectedIndex; public LookAndFeelModel() { lnfs = UIManager.getInstalledLookAndFeels(); selectedIndex = -1; } public int getSize() { return lnfs.length; } public Object getElementAt( final int index ) { // display value return lnfs[ index ].getName(); } public Object getSelectedItem() { if ( selectedIndex >= 0 ) { return lnfs[ selectedIndex ].getName(); } return null; } public void setSelectedItem( final Object anObject ) { // based on classname (or if that fails, try based on LNF name) for ( int i = 0; anObject != null && i < lnfs.length; i++ ) { final LookAndFeelInfo lnf = lnfs[ i ]; if ( lnf.getClassName().equalsIgnoreCase( anObject.toString() ) ) { selectedIndex = i; return; } } for ( int i = 0; anObject != null && i < lnfs.length; i++ ) { final LookAndFeelInfo lnf = lnfs[ i ]; if ( lnf.getName().equalsIgnoreCase( anObject.toString() ) ) { selectedIndex = i; return; } } selectedIndex = -1; } } private class EditFormatAction extends AbstractAction { private EditFormatAction() { putValue( Action.NAME, SettingsMessages.getInstance().getString( "GeneralSettingsPanel.EditFormat.Name" ) ); } /** * Invoked when an action occurs. */ public void actionPerformed( final ActionEvent e ) { final Window window = SwingUtilities.getWindowAncestor( GeneralSettingsPanel.this ); final FormatEditorDialog dialog; if ( window instanceof Dialog ) { dialog = new FormatEditorDialog( (Dialog) window ); } else if ( window instanceof Frame ) { dialog = new FormatEditorDialog( (Frame) window ); } else { dialog = new FormatEditorDialog(); } final FormatEditorDialog.Result o = dialog.editArray( dateFormats, numberFormats ); if ( o == null ) { return; } dateFormats = o.getDateFormats(); numberFormats = o.getNumberFormats(); } } private JCheckBox showExpertItems; private JCheckBox openLastReport; private JCheckBox showDeprecatedItems; private JCheckBox showDebugItems; private JCheckBox experimentalFeatures; private JCheckBox notifyDevBuilds; private JCheckBox enableVersionChecker; private LookAndFeelModel lookAndFeelModel; private JTextField dateFormatField; private JTextField timeFormatField; private JTextField datetimeFormatField; private JCheckBox showIndexColumns; private String[] dateFormats; private String[] numberFormats; private DateFormatModel dateFormatModel; private NumberFormatModel numberFormatModel; public GeneralSettingsPanel() { setLayout( new BorderLayout() ); dateFormatModel = new DateFormatModel(); numberFormatModel = new NumberFormatModel(); dateFormats = new String[ 0 ]; numberFormats = new String[ 0 ]; final WorkspaceSettings workspaceSettings = WorkspaceSettings.getInstance(); dateFormatField = new JTextField(); dateFormatField.setColumns( 50 ); timeFormatField = new JTextField(); timeFormatField.setColumns( 50 ); datetimeFormatField = new JTextField(); datetimeFormatField.setColumns( 50 ); lookAndFeelModel = new LookAndFeelModel(); lookAndFeelModel.setSelectedItem( workspaceSettings.getLNF() ); enableVersionChecker = new JCheckBox( SettingsMessages.getInstance().getString ( "GeneralSettingsPanel.EnableVersionChecker" ) ); enableVersionChecker.setSelected( workspaceSettings.isUseVersionChecker() ); enableVersionChecker.addChangeListener( new EnableVersionCheckerSelectionHandler() ); notifyDevBuilds = new JCheckBox ( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.NotifyUnsupportedVersions" ) ); notifyDevBuilds.setSelected( workspaceSettings.isNotifyForAllBuilds() ); notifyDevBuilds.setEnabled( workspaceSettings.isUseVersionChecker() ); experimentalFeatures = new JCheckBox ( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.EnableCommunityFeatures" ) ); experimentalFeatures.setSelected( workspaceSettings.isExperimentalFeaturesVisible() ); showIndexColumns = new JCheckBox ( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.ShowIndexColumns" ) ); showIndexColumns.setSelected( workspaceSettings.isShowIndexColumns() ); showDeprecatedItems = new JCheckBox ( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.ShowDeprecatedItems" ) ); showDeprecatedItems.setSelected( workspaceSettings.isShowDeprecatedItems() ); showExpertItems = new JCheckBox ( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.ShowExpertItems" ) ); showExpertItems.setSelected( workspaceSettings.isShowExpertItems() ); showDebugItems = new JCheckBox ( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.ShowDebugItems" ) ); showDebugItems.setSelected( workspaceSettings.isDebugFeaturesVisible() ); openLastReport = new JCheckBox ( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.OpenLastReport" ) ); openLastReport.setSelected( workspaceSettings.isShowExpertItems() ); final JPanel contentPanel = new JPanel(); contentPanel.setLayout( new GridBagLayout() ); final GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; contentPanel.add( createUpdatesPanel(), c ); c.gridx = 0; c.gridy = 1; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; contentPanel.add( createLookandFeelPanel(), c ); c.gridx = 0; c.gridy = 2; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; contentPanel.add( createDataFormatSettings(), c ); c.gridx = 0; c.gridy = 3; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; contentPanel.add( createOtherSettings(), c ); add( contentPanel, BorderLayout.NORTH ); reset(); } private JPanel createLookandFeelPanel() { final JComboBox lookAndFeels = new JComboBox( lookAndFeelModel ); final JPanel lookAndFeelPanel = new JPanel( new GridBagLayout() ); lookAndFeelPanel.setBorder( BorderFactory.createTitledBorder ( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.LookAndFeel" ) ) ); final GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.weightx = 1; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.WEST; lookAndFeelPanel.add( lookAndFeels, c ); return lookAndFeelPanel; } private JPanel createUpdatesPanel() { final JPanel updatesPanel = new JPanel(); updatesPanel.setLayout( new GridBagLayout() ); updatesPanel.setBorder( BorderFactory.createTitledBorder( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.Updates" ) ) ); final GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets( 0, 0, 0, 0 ); c.gridx = 0; c.gridy = 0; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( enableVersionChecker, c ); c.gridx = 0; c.gridy = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( notifyDevBuilds, c ); return updatesPanel; } private JPanel createOtherSettings() { final JPanel updatesPanel = new JPanel(); updatesPanel.setLayout( new GridBagLayout() ); updatesPanel.setBorder( BorderFactory.createTitledBorder ( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.OtherSettings" ) ) ); GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.gridwidth = 2; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( showIndexColumns, c ); c = new GridBagConstraints(); c.gridx = 0; c.gridy = 1; c.gridwidth = 2; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( experimentalFeatures, c ); c = new GridBagConstraints(); c.gridx = 0; c.gridy = 2; c.gridwidth = 2; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( showDeprecatedItems, c ); c = new GridBagConstraints(); c.gridx = 0; c.gridy = 3; c.gridwidth = 2; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( showExpertItems, c ); c = new GridBagConstraints(); c.gridx = 0; c.gridy = 5; c.gridwidth = 2; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( showDebugItems, c ); c = new GridBagConstraints(); c.gridx = 0; c.gridy = 6; c.gridwidth = 2; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( openLastReport, c ); return updatesPanel; } private JPanel createDataFormatSettings() { final JPanel updatesPanel = new JPanel(); updatesPanel.setLayout( new GridBagLayout() ); updatesPanel.setBorder( BorderFactory.createTitledBorder ( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.DataFormatSettings" ) ) ); GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.gridwidth = 2; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( experimentalFeatures, c ); c = new GridBagConstraints(); c.gridx = 0; c.gridy = 10; c.gridwidth = 1; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel .add( new JLabel( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.DateFormatLabel" ) ), c ); c = new GridBagConstraints(); c.gridx = 1; c.gridy = 10; c.gridwidth = 1; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( dateFormatField, c ); c = new GridBagConstraints(); c.gridx = 0; c.gridy = 11; c.gridwidth = 1; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel .add( new JLabel( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.TimeFormatLabel" ) ), c ); c = new GridBagConstraints(); c.gridx = 1; c.gridy = 11; c.gridwidth = 1; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( timeFormatField, c ); c = new GridBagConstraints(); c.gridx = 0; c.gridy = 12; c.gridwidth = 1; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel .add( new JLabel( SettingsMessages.getInstance().getString( "GeneralSettingsPanel.DatetimeFormatLabel" ) ), c ); c = new GridBagConstraints(); c.gridx = 1; c.gridy = 12; c.gridwidth = 1; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; updatesPanel.add( datetimeFormatField, c ); c = new GridBagConstraints(); c.gridx = 1; c.gridy = 13; c.gridwidth = 1; c.anchor = GridBagConstraints.WEST; updatesPanel.add( new JButton( new EditFormatAction() ), c ); return updatesPanel; } public JComponent getComponent() { return this; } public Icon getIcon() { return IconLoader.getInstance().getGeneralSettingsIcon32(); } public String getTitle() { return SettingsMessages.getInstance().getString( "SettingsDialog.General" ); } public ValidationResult validate( final ValidationResult result ) { return result; } public void apply() { if ( experimentalFeatures.isSelected() ) { WorkspaceSettings.getInstance().setMaturityLevel( MaturityLevel.Community ); } else { WorkspaceSettings.getInstance().setMaturityLevel( MaturityLevel.Production ); } WorkspaceSettings.getInstance().setNotifyForAllBuilds( notifyDevBuilds.isSelected() ); WorkspaceSettings.getInstance().setUseVersionChecker( enableVersionChecker.isSelected() ); WorkspaceSettings.getInstance().setDateFormatPattern( dateFormatField.getText() ); WorkspaceSettings.getInstance().setDatetimeFormatPattern( datetimeFormatField.getText() ); WorkspaceSettings.getInstance().setTimeFormatPattern( timeFormatField.getText() ); WorkspaceSettings.getInstance().setShowIndexColumns( showIndexColumns.isSelected() ); WorkspaceSettings.getInstance().setShowDeprecatedItems( showDeprecatedItems.isSelected() ); WorkspaceSettings.getInstance().setShowExpertItems( showExpertItems.isSelected() ); WorkspaceSettings.getInstance().setDebugFeaturesVisible( showDebugItems.isSelected() ); WorkspaceSettings.getInstance().setReopenLastReport( openLastReport.isSelected() ); if ( lookAndFeelModel.getSelectedItem() != null ) { WorkspaceSettings.getInstance().setLNF( lookAndFeelModel.getSelectedItem().toString() ); } dateFormatModel.setNumberFormats( dateFormats ); numberFormatModel.setNumberFormats( numberFormats ); } public void reset() { dateFormatField.setText( WorkspaceSettings.getInstance().getDateFormatPattern() ); datetimeFormatField.setText( WorkspaceSettings.getInstance().getDatetimeFormatPattern() ); timeFormatField.setText( WorkspaceSettings.getInstance().getTimeFormatPattern() ); MaturityLevel maturityLevel = WorkspaceSettings.getInstance().getMaturityLevel(); experimentalFeatures.setSelected( !MaturityLevel.Limited.isMature( maturityLevel ) ); lookAndFeelModel.setSelectedItem( WorkspaceSettings.getInstance().getLNF() ); notifyDevBuilds.setSelected( WorkspaceSettings.getInstance().isNotifyForAllBuilds() ); enableVersionChecker.setSelected( WorkspaceSettings.getInstance().isUseVersionChecker() ); showIndexColumns.setSelected( WorkspaceSettings.getInstance().isShowIndexColumns() ); showDeprecatedItems.setSelected( WorkspaceSettings.getInstance().isShowDeprecatedItems() ); showExpertItems.setSelected( WorkspaceSettings.getInstance().isShowExpertItems() ); showDebugItems.setSelected( WorkspaceSettings.getInstance().isDebugFeaturesVisible() ); openLastReport.setSelected( WorkspaceSettings.getInstance().isReopenLastReport() ); dateFormats = dateFormatModel.getNumberFormats(); numberFormats = numberFormatModel.getNumberFormats(); } }