Ticket #2282: design-code-file-icons.patch
File design-code-file-icons.patch, 10.3 KB (added by tanya, 15 years ago) |
---|
-
src/main/java/org/sophie2/main/func/file/dialogs/Icons.java
### Eclipse Workspace Patch 1.0 #P org.sophie2.main.func.file
1 package org.sophie2.main.func.file.dialogs; 2 3 import java.io.File; 4 5 import javax.swing.Icon; 6 7 import org.sophie2.base.commons.util.ImmImage; 8 import org.sophie2.base.skins.SkinElementId; 9 import org.sophie2.base.skins.SkinUtil; 10 import org.sophie2.core.prolib.impl.AutoProperty; 11 import org.sophie2.core.prolib.impl.BaseProObject; 12 import org.sophie2.core.prolib.interfaces.Prop; 13 import org.sophie2.main.func.file.FileIconProvider; 14 15 public class Icons { 16 17 18 @SkinElementId("main.func.file.dialogs.file-icons") 19 public static class FileIcon extends BaseProObject { 20 21 /** 22 * The skin id of the icons for this button. 23 */ 24 public static final String ICONS_PROP_ID = "button-icons"; 25 26 private static FileIcon instance = new FileIcon(); 27 28 private FileIcon() { 29 30 } 31 32 public static FileIcon get() { 33 return instance; 34 } 35 36 public Prop<ImmImage> fileIcon() { 37 class fileIcon extends AutoProperty<ImmImage> { 38 39 @Override 40 protected ImmImage compute() { 41 return SkinUtil.getSkinValue(FileIcon.this.getClass(), ICONS_PROP_ID, ImmImage.class); 42 } 43 } 44 return getBean().makeProp(fileIcon.class); 45 } 46 } 47 48 @SkinElementId("main.func.file.dialogs.text-icons") 49 public static class TextIcon extends FileIcon implements FileIconProvider { 50 51 public Icon getIcon(File file) { 52 if (file.getName().endsWith(".txt")) { 53 return fileIcon().get().toIcon(); 54 } 55 return null; 56 } 57 } 58 } -
src/main/java/org/sophie2/main/func/file/FileIconProvider.java
Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/main/resources/distrib/icons/text.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream
1 package org.sophie2.main.func.file; 2 3 import java.io.File; 4 5 import javax.swing.Icon; 6 7 public interface FileIconProvider { 8 9 public Icon getIcon(File file); 10 } -
src/main/java/org/sophie2/main/func/file/FileFunctionalityModule.java
1 1 package org.sophie2.main.func.file; 2 2 3 import java.awt.datatransfer.DataFlavor; 4 import java.io.File; 3 5 import java.util.List; 4 6 7 import javax.swing.Icon; 8 9 import org.sophie2.base.commons.util.ImageUtil; 5 10 import org.sophie2.base.dialogs.Dialog; 11 import org.sophie2.base.skins.BaseSkinPart; 12 import org.sophie2.base.skins.SkinUtil; 6 13 import org.sophie2.core.modularity.SimpleSophieExtension; 7 14 import org.sophie2.core.modularity.SophieExtension; 8 15 import org.sophie2.core.modularity.SophieExtensionPoint; 9 16 import org.sophie2.core.modularity.SophieModule; 10 17 import org.sophie2.main.func.file.dialogs.FileDialog; 18 import org.sophie2.main.func.file.dialogs.Icons; 11 19 12 20 /** 13 21 * Module class for the file functionality modules … … 17 25 */ 18 26 public class FileFunctionalityModule extends SophieModule { 19 27 28 private static FileFunctionalityModule instance = null; 29 20 30 @Override 21 31 protected void doStart() { 22 // nothing23 32 assert instance == null; 33 instance = this; 24 34 } 25 35 26 36 @Override 27 37 protected void doStop() { 28 // nothing 38 assert instance == this; 39 instance = null; 29 40 } 41 42 /** 43 * Gets the module instance. 44 * 45 * @return the instance or null if not active 46 */ 47 public static FileFunctionalityModule get() { 48 return instance; 49 } 50 51 private FileIconProviderPoint dndDataExtensionPoint = null; 52 53 /** 54 * Gets the extension point for {@link DndProvider} implementations. 55 * 56 * @return The extension point. 57 */ 58 public FileIconProviderPoint getFileIconProviderPoint() { 59 if (this.dndDataExtensionPoint == null) { 60 this.dndDataExtensionPoint = new FileIconProviderPoint(); 61 } 30 62 63 return this.dndDataExtensionPoint; 64 } 65 31 66 @Override 32 67 protected void defineExtensionPoints(List<SophieExtensionPoint<?>> res) { 33 68 //no extension points 69 70 res.add(getFileIconProviderPoint()); 34 71 } 35 72 36 73 @SuppressWarnings("unchecked") … … 38 75 protected void defineExtensions(List<SophieExtension<?>> res) { 39 76 res.add(new SimpleSophieExtension<Dialog>( 40 77 Dialog.class, new FileDialog())); 78 79 res.add(initSkin().asExtension()); 80 81 res.add(new SimpleSophieExtension<FileIconProvider>(FileIconProvider.class, 82 new Icons.TextIcon())); 41 83 } 42 84 85 private BaseSkinPart initSkin() { 86 BaseSkinPart part = new BaseSkinPart(); 87 88 part.add(SkinUtil.getElementId(Icons.FileIcon.class), 89 Icons.FileIcon.ICONS_PROP_ID, 90 ImageUtil.loadIcon("file.png")); 91 92 part.add(SkinUtil.getElementId(Icons.TextIcon.class), 93 Icons.FileIcon.ICONS_PROP_ID, 94 ImageUtil.loadIcon("text.png")); 95 96 return part; 97 } 98 99 100 101 102 public static class FileIconProviderPoint extends SophieExtensionPoint<FileIconProvider> { 103 @Override 104 public Class<FileIconProvider> getExtensionClass() { 105 return FileIconProvider.class; 106 } 107 108 public FileIconProvider getProvider(File file) { 109 for(SophieExtension<FileIconProvider> e : extensions().get()) { 110 FileIconProvider provider = e.getObject(); 111 Icon icon = provider.getIcon(file); 112 if (icon != null) { 113 return provider; 114 } 115 } 116 return null; 117 } 118 } 43 119 } 120 No newline at end of file -
src/main/java/org/sophie2/main/func/file/dialogs/FileDialog.java
Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/main/resources/distrib/icons/sound.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/main/resources/distrib/icons/pdf.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/main/resources/distrib/icons/file.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: src/main/resources/distrib/icons/image.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream
1 1 package org.sophie2.main.func.file.dialogs; 2 2 3 import java.awt.Color; 3 4 import java.awt.Component; 4 5 import java.awt.Dimension; 6 import java.awt.Graphics; 5 7 import java.awt.Insets; 8 import java.awt.Polygon; 6 9 import java.io.File; 7 10 8 11 import javax.swing.Icon; 12 import javax.swing.ImageIcon; 9 13 import javax.swing.JButton; 10 14 import javax.swing.JComponent; 11 15 import javax.swing.JFileChooser; 12 16 import javax.swing.JPanel; 17 import javax.swing.filechooser.FileView; 13 18 19 import org.sophie2.base.commons.util.ImmImage; 14 20 import org.sophie2.base.dialogs.Dialog; 15 21 import org.sophie2.base.dialogs.DialogManager; 22 import org.sophie2.base.skins.SkinElementId; 23 import org.sophie2.base.visual.BaseSwingVisualElement; 24 import org.sophie2.core.logging.SophieLog; 25 import org.sophie2.core.prolib.impl.ResourceProperty; 26 import org.sophie2.core.prolib.interfaces.Prop; 16 27 import org.sophie2.main.dialogs.input.ConfirmDialogInput; 17 28 import org.sophie2.main.dialogs.input.DialogUtils; 18 29 import org.sophie2.main.dialogs.input.FileDialogInput; 19 30 import org.sophie2.main.dialogs.input.FileDialogInput.AccessoryData; 20 31 import org.sophie2.main.dialogs.input.FileDialogInput.FileAccessory; 32 import org.sophie2.main.func.file.FileFunctionalityModule; 33 import org.sophie2.main.func.file.FileIconProvider; 21 34 22 35 /** 23 36 * A file dialog for Sophie2. … … 27 40 public class FileDialog extends Dialog<FileDialogInput, FileDialogInput.FileContainer> { 28 41 29 42 private final JFileChooser fileChooser = new JFileChooser(); 43 44 public FileDialog() { 45 this.fileChooser.setFileView(new SophieFileView()); 46 } 30 47 31 48 @SuppressWarnings("fallthrough") 32 49 @Override … … 149 166 public Class<FileDialogInput.FileContainer> getOutputClass() { 150 167 return FileDialogInput.FileContainer.class; 151 168 } 152 } 169 170 171 class SophieFileView extends FileView { 172 173 public Icon getIcon(File file) { 174 if (file.isDirectory()) { 175 return null; 176 } 177 178 Icon icon = null; 179 icon = new ImageIcon(); 180 181 FileIconProvider provider = 182 FileFunctionalityModule.get().getFileIconProviderPoint().getProvider(file); 183 184 if (provider != null) { 185 icon = provider.getIcon(file); 186 } else { 187 ImmImage fileIcon = Icons.FileIcon.get().fileIcon().get(); 188 if (fileIcon != null) { 189 icon = fileIcon.toIcon(); 190 } 191 } 192 193 return icon; 194 } 195 } 196 } 197