Java Code Examples for docking.widgets.filechooser.GhidraFileChooser#setCurrentDirectory()

The following examples show how to use docking.widgets.filechooser.GhidraFileChooser#setCurrentDirectory() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: KeyBindingUtils.java    From ghidra with Apache License 2.0 6 votes vote down vote up
private static File getFileFromUser(File startingDir) {
	KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
	Component activeComponent = kfm.getActiveWindow();
	GhidraFileChooser fileChooser = new GhidraFileChooser(activeComponent);
	fileChooser.setTitle("Please Select A File");
	fileChooser.setFileFilter(FILE_FILTER);
	fileChooser.setApproveButtonText("OK");
	fileChooser.setCurrentDirectory(startingDir);

	File selectedFile = fileChooser.getSelectedFile();

	// make sure the file has the correct extension
	if ((selectedFile != null) &&
		!selectedFile.getName().endsWith(PREFERENCES_FILE_EXTENSION)) {
		selectedFile = new File(selectedFile.getAbsolutePath() + PREFERENCES_FILE_EXTENSION);
	}

	// save off the last location to which the user navigated so we can
	// return them to that spot if they user the dialog again.
	Preferences.setProperty(LAST_KEY_BINDING_EXPORT_DIRECTORY,
		fileChooser.getCurrentDirectory().getAbsolutePath());

	return selectedFile;
}
 
Example 2
Source File: ToolServicesImpl.java    From ghidra with Apache License 2.0 5 votes vote down vote up
private GhidraFileChooser getFileChooser() {
	GhidraFileChooser newFileChooser = new GhidraFileChooser(null);
	newFileChooser.setFileFilter(new GhidraFileFilter() {
		@Override
		public boolean accept(File file, GhidraFileChooserModel model) {
			if (file == null) {
				return false;
			}

			if (file.isDirectory()) {
				return true;
			}

			return file.getAbsolutePath().toLowerCase().endsWith("tool");
		}

		@Override
		public String getDescription() {
			return "Tools";
		}
	});

	String exportDir = Preferences.getProperty(Preferences.LAST_TOOL_EXPORT_DIRECTORY);
	if (exportDir != null) {
		newFileChooser.setCurrentDirectory(new File(exportDir));
	}

	newFileChooser.setTitle("Export Tool");
	newFileChooser.setApproveButtonText("Export");

	return newFileChooser;
}
 
Example 3
Source File: SaveToolConfigDialog.java    From ghidra with Apache License 2.0 5 votes vote down vote up
/**
 * Pop up a file chooser for the user to look for icon images.
 */
private void browseForIcons() {
	GhidraFileChooser iconFileChooser = new GhidraFileChooser(getComponent());
	iconFileChooser.setFileSelectionMode(GhidraFileChooser.FILES_ONLY);
	iconFileChooser.setTitle("Choose Icon");
	iconFileChooser.setApproveButtonToolTipText("Choose Icon");
	iconFileChooser.setFileFilter(
		new ExtensionFileFilter(new String[] { "gif", "jpg", "bmp", "png" }, "Image Files"));
	String iconDir = Preferences.getProperty(LAST_ICON_DIRECTORY);
	if (iconDir != null) {
		iconFileChooser.setCurrentDirectory(new File(iconDir));
	}
	File file = iconFileChooser.getSelectedFile();
	if (file == null) {
		return;
	}

	String filename = file.getAbsolutePath();
	iconField.setText(filename);

	ToolIconURL url = new ToolIconURL(filename);
	iconListModel.addElement(url);
	iconList.setSelectedValue(url, true);
	setPicture(url);

	Preferences.setProperty(LAST_ICON_DIRECTORY, file.getParent());
}
 
Example 4
Source File: ImportPatternFileActionListener.java    From ghidra with Apache License 2.0 5 votes vote down vote up
@Override
public void actionPerformed(ActionEvent e) {
	GhidraFileChooser fileChooser = new GhidraFileChooser(component);

	fileChooser.setFileSelectionMode(GhidraFileChooser.FILES_ONLY);
	fileChooser.setTitle("Select Pattern File");
	String baseDir = Preferences.getProperty(XML_IMPORT_DIR_PROPERTY);
	if (baseDir != null) {
		fileChooser.setCurrentDirectory(new File(baseDir));
	}
	ExtensionFileFilter xmlFilter = new ExtensionFileFilter("xml", "XML Files");
	fileChooser.setFileFilter(xmlFilter);
	File patternFile = fileChooser.getSelectedFile();
	if (fileChooser.wasCancelled() || patternFile == null) {
		return;
	}
	Preferences.setProperty(XML_IMPORT_DIR_PROPERTY,
		fileChooser.getCurrentDirectory().getAbsolutePath());
	Preferences.store();
	//only clear the patterns if new patterns are loaded from a file
	ResourceFile resource = new ResourceFile(patternFile);
	try {
		PatternPairSet pairSet = ClipboardPanel.parsePatternPairSet(resource);
		if (pairSet == null) {
			return;
		}
		plugin.clearPatterns();
		for (DittedBitSequence pre : pairSet.getPreSequences()) {
			PatternInfoRowObject preRow = new PatternInfoRowObject(PatternType.PRE, pre, null);
			plugin.addPattern(preRow);
		}
		//post patterns can have alignment and context register restrictions
		processPostPatterns(pairSet);
	}
	catch (IOException | SAXException e1) {
		Msg.showError(this, component, "Import Error",
			"Error Importing file " + patternFile.getAbsolutePath(), e1);
	}
	plugin.updateClipboard();
}
 
Example 5
Source File: RestoreDialog.java    From ghidra with Apache License 2.0 5 votes vote down vote up
/**
 * Creates a directory chooser for selecting the directory where the 
 * archive will be restored..
 * @return the file chooser.
 */
private GhidraFileChooser createDirectoryChooser() {
	GhidraFileChooser fileChooser = new GhidraFileChooser(null);
	// start the browsing in the user's preferred project directory
	File projectDirectory = new File(GenericRunInfo.getProjectsDirPath());
	fileChooser.setFileSelectionMode(GhidraFileChooser.DIRECTORIES_ONLY);
	fileChooser.setCurrentDirectory(projectDirectory);
	fileChooser.setSelectedFile(projectDirectory);

	return fileChooser;
}
 
Example 6
Source File: KeyBindingUtilsTest.java    From ghidra with Apache License 2.0 5 votes vote down vote up
private File findAndTestFileChooser(File path, String filename) throws Exception {
	// get the file chooser and set the file it will use
	GhidraFileChooser fileChooser = waitForDialogComponent(GhidraFileChooser.class);
	if (fileChooser == null) {
		Msg.debug(this, "Couldn't find file chooser");
		printOpenWindows();
		Assert.fail("Did not get the expected GhidraFileChooser");
	}

	// change directories
	if (path != null) {
		fileChooser.setCurrentDirectory(path);
	}
	waitForUpdateOnChooser(fileChooser);

	File currentDirectory = fileChooser.getCurrentDirectory();
	File fileToSelect = new File(currentDirectory, filename);
	fileChooser.setSelectedFile(fileToSelect);
	waitForUpdateOnChooser(fileChooser);

	// press OK on the file chooser
	final JButton okButton = (JButton) getInstanceField("okButton", fileChooser);

	runSwing(() -> okButton.doClick());

	// wait to make sure that there is enough time to write the data
	waitForPostedSwingRunnables();

	// make sure that the file was created or already existed
	File selectedFile = fileChooser.getSelectedFile(false);
	assertTrue("The test file was not created after exporting.", selectedFile.exists());

	return selectedFile;
}
 
Example 7
Source File: ExportPatternFileActionListener.java    From ghidra with Apache License 2.0 4 votes vote down vote up
@Override
public void actionPerformed(ActionEvent e) {

	List<PatternInfoRowObject> selected = clipboardPanel.getLastSelectedObjects();
	if (selected.isEmpty()) {
		return;
	}
	//scan through all of them: must be at least one pre-pattern and 
	//at least one post-pattern
	boolean containsPostPattern = false;
	boolean containsPrePattern = false;
	for (PatternInfoRowObject row : selected) {
		if (row.getPatternType().equals(PatternType.FIRST)) {
			containsPostPattern = true;
		}
		if (row.getPatternType().equals(PatternType.PRE)) {
			containsPrePattern = true;
		}
	}
	if (!containsPostPattern) {
		Msg.showWarn(this, component, "No Post Pattern",
			"Selected patterns must contain at least one post pattern");
		return;
	}
	if (!containsPrePattern) {
		Msg.showWarn(this, component, "No Pre Pattern",
			"Selected patterns must contain at least one pre pattern");
		return;
	}

	boolean proceed = checkConsistencyForExport(selected);
	if (!proceed) {
		return;
	}
	GhidraFileChooser gFileChooser = new GhidraFileChooser(component);
	gFileChooser.setFileSelectionMode(GhidraFileChooser.FILES_ONLY);
	ExtensionFileFilter xmlFilter = new ExtensionFileFilter("xml", "XML Files");
	gFileChooser.setFileFilter(xmlFilter);
	String baseDir = Preferences.getProperty(XML_EXPORT_DIR_PROPERTY);
	if (baseDir != null) {
		gFileChooser.setCurrentDirectory(new File(baseDir));
	}
	gFileChooser.setTitle("Select Export File");
	File outFile = gFileChooser.getSelectedFile();
	if (gFileChooser.wasCancelled() || outFile == null) {
		return;
	}
	Preferences.setProperty(XML_EXPORT_DIR_PROPERTY,
		gFileChooser.getCurrentDirectory().getAbsolutePath());
	Preferences.store();
	BitsInputDialogComponentProvider bitsProvider =
		new BitsInputDialogComponentProvider(BITS_PROVIDER_MESSAGE);
	if (bitsProvider.isCanceled()) {
		return;
	}
	int totalBits = bitsProvider.getTotalBits();
	int postBits = bitsProvider.getPostBits();
	try {
		PatternInfoRowObject.exportXMLFile(selected, outFile, postBits, totalBits);
	}
	catch (IOException e1) {
		Msg.showError(this, component, "IO Error", "IO error exporting pattern xml file", e1);
		e1.printStackTrace();
	}
}