1 /* Copyright (C) 2005-2011 Fabio Riccardi */ 2 3 package com.lightcrafts.ui.export; 4 5 import com.lightcrafts.image.export.ImageExportOptions; 6 import com.lightcrafts.image.types.ImageType; 7 import com.lightcrafts.image.types.JPEGImageType; 8 import com.lightcrafts.image.types.TIFFImageType; 9 import com.lightcrafts.platform.Platform; 10 11 import javax.swing.*; 12 import java.awt.*; 13 import java.awt.event.ItemEvent; 14 import java.awt.event.ItemListener; 15 import java.io.File; 16 import java.util.ArrayList; 17 import java.util.List; 18 19 public class ExportMultiControls extends JPanel implements ItemListener { 20 21 // Items for an export image type combo box: 22 static class ExportComboItem { 23 24 private ImageExportOptions exportOptions; 25 ExportComboItem(ImageExportOptions exportOptions)26 private ExportComboItem(ImageExportOptions exportOptions) { 27 this.exportOptions = exportOptions; 28 } 29 toString()30 public String toString() { 31 return exportOptions.getImageType().getName(); 32 } 33 getExportOptions()34 private ImageExportOptions getExportOptions() { 35 return exportOptions; 36 } 37 } 38 // Keep track of the expanded/collapsed state of the controls toggle: 39 private ExportCtrlToggle toggle; 40 41 private JComboBox combo; 42 43 private ExportComboItem oldFilter; 44 45 private boolean textResize; 46 47 // An enclosing window, to repack when the advanced options change: 48 private Window window; 49 ExportMultiControls( ImageExportOptions options, Window window, boolean textResize )50 public ExportMultiControls( 51 ImageExportOptions options, Window window, boolean textResize 52 ) { 53 this.window = window; 54 this.textResize = textResize; 55 56 ExportComboItem defaultItem = null; 57 58 // Set up all the image format options: 59 List<ExportComboItem> filters = getAllFilters(); 60 ImageType defaultType = options.getImageType(); 61 62 combo = new JComboBox(); 63 combo.addItemListener(this); 64 65 setLayout(new BorderLayout()); 66 67 // Initialize all the image type filters: 68 for (ExportComboItem filter : filters) { 69 ImageExportOptions filterOptions = filter.getExportOptions(); 70 ImageType filterType = filterOptions.getImageType(); 71 if (defaultType.equals(filterType)) { 72 // For the default filter, use the default options: 73 filter = new ExportComboItem(options); 74 defaultItem = filter; 75 } 76 } 77 // Add the default filter first, so that other filters will inherit 78 // its settings according to ExportLogic.mergeExportOptions(). 79 if (defaultItem != null) { 80 combo.addItem(defaultItem); 81 } 82 for (ExportComboItem filter : filters) { 83 ImageExportOptions filterOptions = filter.getExportOptions(); 84 ImageType filterType = filterOptions.getImageType(); 85 if (! defaultType.equals(filterType)) { 86 combo.addItem(filter); 87 } 88 } 89 if (defaultItem != null) { 90 combo.setSelectedItem(defaultItem); 91 } 92 combo.setMaximumSize(combo.getPreferredSize()); 93 } 94 getSelectedExportOptions()95 public ImageExportOptions getSelectedExportOptions() { 96 ExportComboItem filter = (ExportComboItem) combo.getSelectedItem(); 97 ImageExportOptions options = filter.getExportOptions(); 98 return options; 99 } 100 getAllFilters()101 private static List<ExportComboItem> getAllFilters() { 102 ExportComboItem filter; 103 ArrayList<ExportComboItem> filters = new ArrayList<ExportComboItem>(); 104 105 filter = new ExportComboItem(TIFFImageType.INSTANCE.newExportOptions()); 106 filters.add(filter); 107 108 filter = new ExportComboItem(JPEGImageType.INSTANCE.newExportOptions()); 109 filters.add(filter); 110 111 return filters; 112 } 113 114 // Respond to changes in the export image type combo box: itemStateChanged(ItemEvent event)115 public void itemStateChanged(ItemEvent event) { 116 if (event.getStateChange() == ItemEvent.SELECTED) { 117 ExportComboItem newFilter = 118 (ExportComboItem) combo.getSelectedItem(); 119 120 // The oldFilter may be null, first time an ExportComboItem is set. 121 ImageExportOptions newOptions = newFilter.getExportOptions(); 122 if (oldFilter != null) { 123 ImageExportOptions oldOptions = oldFilter.getExportOptions(); 124 ExportLogic.mergeExportOptions(oldOptions, newOptions); 125 } 126 ExportControls ctrls = new ExportControls(newOptions, textResize); 127 toggle = new ExportCtrlToggle(ctrls, window); 128 129 removeAll(); 130 131 Box comboBox = Box.createHorizontalBox(); 132 comboBox.add(combo); 133 comboBox.add(Box.createHorizontalGlue()); 134 135 add(comboBox, BorderLayout.NORTH); 136 add(toggle); 137 138 if (window != null) { 139 window.pack(); 140 } 141 repaint(); 142 143 oldFilter = newFilter; 144 } 145 } 146 main(String[] args)147 public static void main(String[] args) throws Exception { 148 UIManager.setLookAndFeel(Platform.getPlatform().getLookAndFeel()); 149 150 TIFFImageType.ExportOptions options = 151 TIFFImageType.INSTANCE.newExportOptions(); 152 File dir = new File(System.getProperty("user.home")); 153 File file = new File(dir, "test.tif"); 154 options.setExportFile(file); 155 156 JFrame frame = new JFrame(); 157 158 ExportMultiControls multi = 159 new ExportMultiControls(options, frame, false); 160 161 frame.setContentPane(multi); 162 frame.pack(); 163 frame.setLocationRelativeTo(null); 164 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 165 frame.setVisible(true); 166 } 167 } 168