Revision: 5483
          http://sourceforge.net/p/jump-pilot/code/5483
Author:   edso
Date:     2017-07-31 10:48:49 +0000 (Mon, 31 Jul 2017)
Log Message:
-----------
fixing minor issues in OpenFileWizard
- too many events were fired because SelectFilesPanel was initialized on every 
open
- Finish button now active on reopen with previous selected file

Modified Paths:
--------------
    
core/trunk/src/org/openjump/core/ui/plugin/file/open/OpenFileWizardState.java
    core/trunk/src/org/openjump/core/ui/plugin/file/open/SelectFilesPanel.java

Modified: 
core/trunk/src/org/openjump/core/ui/plugin/file/open/OpenFileWizardState.java
===================================================================
--- 
core/trunk/src/org/openjump/core/ui/plugin/file/open/OpenFileWizardState.java   
    2017-07-30 16:26:14 UTC (rev 5482)
+++ 
core/trunk/src/org/openjump/core/ui/plugin/file/open/OpenFileWizardState.java   
    2017-07-31 10:48:49 UTC (rev 5483)
@@ -101,6 +101,7 @@
   public void setupFileLoaders(File[] files, FileLayerLoader fileLayerLoader) {
     Set<File> fileSet = new TreeSet<File>(Arrays.asList(files));
     multiLoaderFiles.clear();
+    fileLoaderFiles.clear();
     // explicit loader chosen
     if (fileLayerLoader != null) {
       fileLoaderMap.clear();

Modified: 
core/trunk/src/org/openjump/core/ui/plugin/file/open/SelectFilesPanel.java
===================================================================
--- core/trunk/src/org/openjump/core/ui/plugin/file/open/SelectFilesPanel.java  
2017-07-30 16:26:14 UTC (rev 5482)
+++ core/trunk/src/org/openjump/core/ui/plugin/file/open/SelectFilesPanel.java  
2017-07-31 10:48:49 UTC (rev 5483)
@@ -121,7 +121,11 @@
   }
 
   private void initialize() {
+    // make sure we only initialize once
+    if (initialized)
+      return;
     initialized = true;
+
     blackboard = PersistentBlackboardPlugIn.get(workbenchContext);
     Registry registry = workbenchContext.getRegistry();
 
@@ -176,8 +180,24 @@
 
     
     PropertyChangeListener changeListener = new PropertyChangeListener() {
+      Object lastNew = null;
+      
       // user selected something in the fc
       public void propertyChange(PropertyChangeEvent evt) {
+        // for some reason JFC calls this once with the File and then
+        // again with a File array for multiselection. NO NEED to update
+        // it two times if only one file was selected though
+        Object newNew = evt.getNewValue();
+        if (newNew instanceof File[] && !(lastNew instanceof File[])){
+          File[] newFiles = (File[])newNew;
+          if (newFiles.length == 1){
+            Object newFile = newFiles[0];
+            if (newFile.equals(lastNew))
+              return;
+          }
+        }
+        lastNew=newNew;
+
         // only listen to fc changes while we're on _this_ panel
         // OSX fc weirdly fires events even when we're on the next panel
         if (state.getCurrentPanel() != KEY){
@@ -184,14 +204,7 @@
           return;
         }
           
-        FileLayerLoader fileLayerLoader = null;
-        File[] files = getSelectedFiles();
-        FileFilter selectedFileFilter = getFileFilter();
-        if (selectedFileFilter instanceof FileLayerLoaderExtensionFilter) {
-          FileLayerLoaderExtensionFilter filter = 
(FileLayerLoaderExtensionFilter)selectedFileFilter;
-          fileLayerLoader = filter.getFileLoader();
-        }
-        state.setupFileLoaders(files, fileLayerLoader);
+        changeState();
         fireInputChanged();
       }
     };
@@ -200,10 +213,31 @@
     addActionListener(new InvokeMethodActionListener(dialog, "next"));
   }
 
+  /**
+   * updating state if file selection changed
+   */
+  private void changeState(){
+    FileLayerLoader fileLayerLoader = null;
+    File[] files = getSelectedFiles();
+    FileFilter selectedFileFilter = getFileFilter();
+    if (selectedFileFilter instanceof FileLayerLoaderExtensionFilter) {
+      FileLayerLoaderExtensionFilter filter = 
(FileLayerLoaderExtensionFilter)selectedFileFilter;
+      fileLayerLoader = filter.getFileLoader();
+    }
+    state.setupFileLoaders(files, fileLayerLoader);
+  }
+  
   public void enteredFromLeft(final Map dataMap) {
     initialize();
     rescanCurrentDirectory();
     state.setCurrentPanel(KEY);
+    // this is needed so that on reopening, when JFC still holds the
+    // old selection, the next button gets activated properly in case
+    // the user really wants to reopen the same file
+    // NOTE: the file is mentioned in the textfield, but no gui selection
+    //       is visible, that is a known JFC bug as far as i could find out
+    changeState();
+    fireInputChanged();
   }
   
   public void enteredFromRight() throws Exception {


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to