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
     
     1package org.sophie2.main.func.file.dialogs; 
     2 
     3import java.io.File; 
     4 
     5import javax.swing.Icon; 
     6 
     7import org.sophie2.base.commons.util.ImmImage; 
     8import org.sophie2.base.skins.SkinElementId; 
     9import org.sophie2.base.skins.SkinUtil; 
     10import org.sophie2.core.prolib.impl.AutoProperty; 
     11import org.sophie2.core.prolib.impl.BaseProObject; 
     12import org.sophie2.core.prolib.interfaces.Prop; 
     13import org.sophie2.main.func.file.FileIconProvider; 
     14 
     15public 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
    
     
     1package org.sophie2.main.func.file; 
     2 
     3import java.io.File; 
     4 
     5import javax.swing.Icon; 
     6 
     7public interface FileIconProvider { 
     8 
     9        public Icon getIcon(File file); 
     10} 
  • src/main/java/org/sophie2/main/func/file/FileFunctionalityModule.java

     
    11package org.sophie2.main.func.file; 
    22 
     3import java.awt.datatransfer.DataFlavor; 
     4import java.io.File; 
    35import java.util.List; 
    46 
     7import javax.swing.Icon; 
     8 
     9import org.sophie2.base.commons.util.ImageUtil; 
    510import org.sophie2.base.dialogs.Dialog; 
     11import org.sophie2.base.skins.BaseSkinPart; 
     12import org.sophie2.base.skins.SkinUtil; 
    613import org.sophie2.core.modularity.SimpleSophieExtension; 
    714import org.sophie2.core.modularity.SophieExtension; 
    815import org.sophie2.core.modularity.SophieExtensionPoint; 
    916import org.sophie2.core.modularity.SophieModule; 
    1017import org.sophie2.main.func.file.dialogs.FileDialog; 
     18import org.sophie2.main.func.file.dialogs.Icons; 
    1119 
    1220/** 
    1321 * Module class for the file functionality modules 
     
    1725 */ 
    1826public class FileFunctionalityModule extends SophieModule { 
    1927 
     28        private static FileFunctionalityModule instance = null; 
     29 
    2030        @Override 
    2131        protected void doStart() { 
    22                 // nothing 
    23  
     32                assert instance == null; 
     33                instance = this; 
    2434        } 
    2535 
    2636        @Override 
    2737        protected void doStop() { 
    28                 // nothing 
     38                assert instance == this; 
     39                instance = null; 
    2940        } 
     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                } 
    3062 
     63                return this.dndDataExtensionPoint; 
     64        } 
     65         
    3166        @Override 
    3267        protected void defineExtensionPoints(List<SophieExtensionPoint<?>> res) { 
    3368                //no extension points 
     69                 
     70                res.add(getFileIconProviderPoint()); 
    3471        } 
    3572 
    3673        @SuppressWarnings("unchecked") 
     
    3875        protected void defineExtensions(List<SophieExtension<?>> res) { 
    3976                res.add(new SimpleSophieExtension<Dialog>( 
    4077                                                Dialog.class, new FileDialog())); 
     78                 
     79                res.add(initSkin().asExtension()); 
     80                 
     81                res.add(new SimpleSophieExtension<FileIconProvider>(FileIconProvider.class, 
     82                                new Icons.TextIcon())); 
    4183        } 
    4284 
     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        } 
    43119} 
     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
    
     
    11package org.sophie2.main.func.file.dialogs; 
    22 
     3import java.awt.Color; 
    34import java.awt.Component; 
    45import java.awt.Dimension; 
     6import java.awt.Graphics; 
    57import java.awt.Insets; 
     8import java.awt.Polygon; 
    69import java.io.File; 
    710 
    811import javax.swing.Icon; 
     12import javax.swing.ImageIcon; 
    913import javax.swing.JButton; 
    1014import javax.swing.JComponent; 
    1115import javax.swing.JFileChooser; 
    1216import javax.swing.JPanel; 
     17import javax.swing.filechooser.FileView; 
    1318 
     19import org.sophie2.base.commons.util.ImmImage; 
    1420import org.sophie2.base.dialogs.Dialog; 
    1521import org.sophie2.base.dialogs.DialogManager; 
     22import org.sophie2.base.skins.SkinElementId; 
     23import org.sophie2.base.visual.BaseSwingVisualElement; 
     24import org.sophie2.core.logging.SophieLog; 
     25import org.sophie2.core.prolib.impl.ResourceProperty; 
     26import org.sophie2.core.prolib.interfaces.Prop; 
    1627import org.sophie2.main.dialogs.input.ConfirmDialogInput; 
    1728import org.sophie2.main.dialogs.input.DialogUtils; 
    1829import org.sophie2.main.dialogs.input.FileDialogInput; 
    1930import org.sophie2.main.dialogs.input.FileDialogInput.AccessoryData; 
    2031import org.sophie2.main.dialogs.input.FileDialogInput.FileAccessory; 
     32import org.sophie2.main.func.file.FileFunctionalityModule; 
     33import org.sophie2.main.func.file.FileIconProvider; 
    2134 
    2235/** 
    2336 * A file dialog for Sophie2. 
     
    2740public class FileDialog extends Dialog<FileDialogInput, FileDialogInput.FileContainer> { 
    2841 
    2942        private final JFileChooser fileChooser = new JFileChooser(); 
     43         
     44        public FileDialog() { 
     45                this.fileChooser.setFileView(new SophieFileView()); 
     46        } 
    3047 
    3148        @SuppressWarnings("fallthrough") 
    3249        @Override 
     
    149166        public Class<FileDialogInput.FileContainer> getOutputClass() { 
    150167                return FileDialogInput.FileContainer.class; 
    151168        } 
    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