### Eclipse Workspace Patch 1.0
#P sophie
|
|
|
|
| 4 | 4 | import java.awt.Dimension; |
| 5 | 5 | import java.awt.Insets; |
| 6 | 6 | import java.io.File; |
| | 7 | import java.io.IOException; |
| 7 | 8 | |
| 8 | 9 | import javax.swing.Icon; |
| 9 | 10 | import javax.swing.JButton; |
| … |
… |
|
| 13 | 14 | import javax.swing.filechooser.FileFilter; |
| 14 | 15 | import javax.swing.filechooser.FileView; |
| 15 | 16 | |
| | 17 | import org.sophie2.base.commons.util.OSUtil; |
| 16 | 18 | import org.sophie2.base.dialogs.Dialog; |
| 17 | 19 | import org.sophie2.base.dialogs.DialogManager; |
| | 20 | import org.sophie2.core.logging.SophieLog; |
| 18 | 21 | import org.sophie2.main.dialogs.input.ConfirmDialogInput; |
| 19 | 22 | import org.sophie2.main.dialogs.input.DialogUtils; |
| 20 | 23 | import org.sophie2.main.dialogs.input.file.AccessoryData; |
| … |
… |
|
| 33 | 36 | public class FileDialog extends Dialog<FileDialogInput, FileContainer> { |
| 34 | 37 | |
| 35 | 38 | private final JFileChooser fileChooser = new JFileChooser(); |
| 36 | | |
| | 39 | |
| 37 | 40 | /** |
| 38 | 41 | * Constructs {@link FileDialog} with a specific {@link FileView}. |
| 39 | 42 | */ |
| … |
… |
|
| 50 | 53 | |
| 51 | 54 | int selectionMode = (input.isMultiSelectEnabled()) ? |
| 52 | 55 | JFileChooser.FILES_AND_DIRECTORIES : JFileChooser.FILES_ONLY; |
| 53 | | |
| | 56 | |
| 54 | 57 | this.fileChooser.setFileSelectionMode(selectionMode); |
| 55 | 58 | this.fileChooser.resetChoosableFileFilters(); |
| 56 | | |
| | 59 | |
| 57 | 60 | if (input.getFileAccessory() != null) { |
| 58 | 61 | FileAccessory<?> accessory = input.getFileAccessory(); |
| 59 | 62 | accessory.setFileChooser(this.fileChooser); |
| 60 | | |
| | 63 | |
| 61 | 64 | this.fileChooser.setAccessory(accessory.swingComponent().get()); |
| 62 | 65 | } else { |
| 63 | 66 | this.fileChooser.setAccessory(null); |
| 64 | 67 | } |
| 65 | | |
| | 68 | |
| 66 | 69 | FileFilterInfo filterInfo = input.getFilterInfo(); |
| 67 | 70 | for (FileFilter filter : filterInfo.getFilters()) { |
| 68 | 71 | this.fileChooser.addChoosableFileFilter(filter); |
| 69 | 72 | } |
| 70 | | |
| | 73 | |
| 71 | 74 | this.fileChooser.setAcceptAllFileFilterUsed(filterInfo.getUseAcceptAllFilter()); |
| 72 | | |
| | 75 | |
| 73 | 76 | if (filterInfo.getFilters().size() > 0) { |
| 74 | 77 | this.fileChooser.setFileFilter(filterInfo.getFilters().get(0)); |
| 75 | 78 | } |
| 76 | | |
| | 79 | |
| 77 | 80 | this.fileChooser.setSelectedFile(new File(input.getFileName())); |
| 78 | 81 | this.fileChooser.setMultiSelectionEnabled(input.isMultiSelectEnabled()); |
| 79 | 82 | |
| … |
… |
|
| 91 | 94 | case JFileChooser.APPROVE_OPTION: |
| 92 | 95 | File files[] = input.isMultiSelectEnabled() ? this.fileChooser.getSelectedFiles() |
| 93 | 96 | : new File[] { this.fileChooser.getSelectedFile() }; |
| | 97 | |
| 94 | 98 | if (files.length == 1 && files[0].isDirectory()) { |
| 95 | 99 | this.fileChooser.setCurrentDirectory(files[0]); |
| 96 | 100 | break; |
| 97 | 101 | } |
| 98 | | FileContainer fileContainer = peformFileCheck(input, files); |
| | 102 | FileContainer fileContainer = performFileCheck(input, files); |
| 99 | 103 | |
| 100 | 104 | if (fileContainer != null) { |
| 101 | 105 | return fileContainer; |
| … |
… |
|
| 111 | 115 | if (input.getFileAccessory() == null) { |
| 112 | 116 | return null; |
| 113 | 117 | } |
| 114 | | |
| | 118 | |
| 115 | 119 | return input.getFileAccessory().getData(); |
| 116 | 120 | } |
| 117 | | |
| 118 | | private final FileContainer peformFileCheck(FileDialogInput input, File[] files) { |
| | 121 | |
| | 122 | private final FileContainer performFileCheck(FileDialogInput input, File[] files) { |
| 119 | 123 | FileDialogInput.Kind inputKind = input.getKind(); |
| 120 | 124 | |
| 121 | 125 | if (inputKind.equals(FileDialogInput.Kind.SAVE)) { |
| 122 | 126 | assert input.isMultiSelectEnabled() == false : "Cannot save in multiple resouces!"; |
| | 127 | |
| | 128 | boolean writable = true; |
| | 129 | if (OSUtil.isWindows() || OSUtil.isMacOS()) { |
| | 130 | try { |
| | 131 | boolean created = files[0].createNewFile(); |
| | 132 | if (created) { |
| | 133 | files[0].delete(); |
| | 134 | } |
| | 135 | } catch (IOException e) { |
| | 136 | SophieLog.info("File doesn't seem writable", e); |
| | 137 | writable = false; |
| | 138 | } |
| | 139 | } else { |
| | 140 | writable = files[0].getParentFile().canWrite(); |
| | 141 | writable = writable || files[0].exists() && files[0].canWrite(); |
| | 142 | } |
| | 143 | if (!writable) { |
| | 144 | DialogUtils.showErrorDialog(this.fileChooser.getParent(), |
| | 145 | "You don't have permissions to write in this directory.", |
| | 146 | "Permission denied"); |
| | 147 | return null; |
| | 148 | } |
| | 149 | |
| 123 | 150 | if (files[0].exists()) { |
| 124 | 151 | ConfirmDialogInput confirmInput = new ConfirmDialogInput(this.fileChooser |
| 125 | 152 | .getParent(), |
| … |
… |
|
| 145 | 172 | // things. The buttons are the ones that display |
| 146 | 173 | // folder, home, details list and other icons. |
| 147 | 174 | JComponent buttonsComboBox = (JComponent) upperPanel.getComponent(0); |
| 148 | | // buttonsComboBox.setPreferredSize(new Dimention(30)) |
| | 175 | // buttonsComboBox.setPreferredSize(new Dimention(30)) |
| 149 | 176 | for (Component c : buttonsComboBox.getComponents()) { |
| 150 | 177 | if (c instanceof JButton) { |
| 151 | 178 | JButton button = (JButton) c; |
| … |
… |
|
| 185 | 212 | Icon icon = null; |
| 186 | 213 | |
| 187 | 214 | FileIconProvider provider = FileFunctionalityModule.get() |
| 188 | | .getFileIconProviderPoint().getProvider(file); |
| | 215 | .getFileIconProviderPoint().getProvider(file); |
| 189 | 216 | |
| 190 | 217 | if (provider != null) { |
| 191 | 218 | icon = provider.getIcon(file); |