Search code examples
eclipseeclipse-pluginswteclipse-rcpjface

SWT FileDialog Browse Location


I have a simple file dialog in my RCP application which lets the users to select a file as per the code snippet below

Label filePathLabel = new Label(composite, SWT.NULL);
filePathLabel.setText("File Path");
Text filePathText = new Text(composite, SWT.BORDER);
filePathText.setText("");
Button browseButton = new Button(composite, SWT.PUSH);
FileDialog fileDialog = new FileDialog(getShell(), SWT.SAVE);
fileDialog.setFilterExtensions(new String[] {"*.txt"});
fileDialog.setFilterNames(new String[] {"Textfiles(*.txt)"});

browseButton.addSelectionListener(new SelectionAdapter() 
 {
  @override
   public void widgetSelected(final SelectionEvent e)
   {
    String path = fileDialog.open();
    if(path != null && !path.isEmpty()) 
    {
     filePathText.setText(path);
    }
   }
 });

The problem I'm facing is that I have not been able to get the previous browse location of the file after I close my RCP application and start it again since all the controls (Text, FileDialog) will be recreated. I save the result of fileDialog.open which returns the path and set the filePathText Text control's setText(Text text) method whenever my WizardPage is reopened to show the previous browse location selected but I loose access to the browse location after I close my RCP application so the next time I reopen my application I have not been able to set the filePathText text to the previously browsed location even though Eclipse does point to the previously browsed location after I click the browse button but I need to know the previously browsed location even before I click browse button so that it can be displayed in the Text control.

I found some suggestions on this site - https://dzone.com/articles/remember-state but I don't think it would help me in remembering the state of the browse location with respect to FileDialog

Please correct me if I'm missing something here.


Solution

  • You use the IDialogSettings mentioned in the link to save and restore information for a wizard. Wizards provide some methods to help.

    In the constructor of your main Wizard class set the dialog settings the Wizard should use. This might be:

    public MyWizard()
    { 
      setDialogSettings(Activator.getDefault().getDialogSettings());
    }
    

    where Activator is the activator for your plug-in (this only works if the activator extends AbstractUIPlugin).

    Once you have done this your WizardPage can access the settings:

    IDialogSettings settings = getDialogSettings()
    

    When the File Dialog returns the location you can save that in the settings:

    settings.put("path", path);
    

    When you are creating the file path Text you can check if you have a saved value:

    String savedPath = settings.get("path");
    if (savedPath != null) {
      filePathText.setText(savedPath);
    }