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