You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/08/18 17:40:20 UTC
svn commit: r805458 - in /incubator/pivot/trunk/wtk:
src/org/apache/pivot/wtk/ src/org/apache/pivot/wtk/skin/terra/
test/org/apache/pivot/wtk/test/
Author: gbrown
Date: Tue Aug 18 15:40:20 2009
New Revision: 805458
URL: http://svn.apache.org/viewvc?rev=805458&view=rev
Log:
Implement support for selection modes in TerraFileBrowserSheetSkin.
Modified:
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInput.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/terra_file_browser_sheet_skin.wtkx
incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/FileBrowserSheetTest.java
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java?rev=805458&r1=805457&r2=805458&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java Tue Aug 18 15:40:20 2009
@@ -42,12 +42,6 @@
private static class FileBrowserSheetListenerList extends ListenerList<FileBrowserSheetListener>
implements FileBrowserSheetListener {
- public void multiSelectChanged(FileBrowserSheet fileBrowserSheet) {
- for (FileBrowserSheetListener listener : this) {
- listener.multiSelectChanged(fileBrowserSheet);
- }
- }
-
public void selectedFolderChanged(FileBrowserSheet fileBrowserSheet, Folder previousSelectedFolder) {
for (FileBrowserSheetListener listener : this) {
listener.selectedFolderChanged(fileBrowserSheet, previousSelectedFolder);
@@ -71,7 +65,6 @@
private Mode mode;
private Folder selectedFolder;
private FileList fileSelection = new FileList();
- private boolean multiSelect = false;
private Filter<File> disabledFileFilter = null;
private FileBrowserSheetListenerList fileBrowserSheetListeners = new FileBrowserSheetListenerList();
@@ -116,7 +109,7 @@
* The currently selected file.
*/
public File getSelectedFile() {
- if (multiSelect) {
+ if (mode == Mode.OPEN_MULTIPLE) {
throw new IllegalStateException("File browser is not in single-select mode.");
}
@@ -162,7 +155,7 @@
throw new IllegalArgumentException("selectedFiles is null.");
}
- if (!multiSelect
+ if (mode != Mode.OPEN_MULTIPLE
&& selectedFiles.getLength() > 1) {
throw new IllegalArgumentException("Multi-select is not enabled.");
}
@@ -196,21 +189,6 @@
setSelectedFiles(new ArrayList<File>());
}
- public boolean isMultiSelect() {
- return multiSelect;
- }
-
- public void setMultiSelect(boolean multiSelect) {
- if (this.multiSelect != multiSelect) {
- // Clear any existing selection
- fileSelection.clear();
-
- this.multiSelect = multiSelect;
-
- fileBrowserSheetListeners.multiSelectChanged(this);
- }
- }
-
public Filter<File> getDisabledFileFilter() {
return disabledFileFilter;
}
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java?rev=805458&r1=805457&r2=805458&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java Tue Aug 18 15:40:20 2009
@@ -30,9 +30,6 @@
* File browser sheet listener adapter.
*/
public static class Adapter implements FileBrowserSheetListener {
- public void multiSelectChanged(FileBrowserSheet fileBrowserSheet) {
- }
-
public void selectedFolderChanged(FileBrowserSheet fileBrowserSheet,
Folder previousSelectedFolder) {
}
@@ -47,13 +44,6 @@
}
/**
- * Called when a file browser sheet's multi-select flag has changed.
- *
- * @param fileBrowserSheet
- */
- public void multiSelectChanged(FileBrowserSheet fileBrowserSheet);
-
- /**
* Called when a file browser sheet's selected folder has changed.
*
* @param fileBrowserSheet
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInput.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInput.java?rev=805458&r1=805457&r2=805458&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInput.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInput.java Tue Aug 18 15:40:20 2009
@@ -216,7 +216,7 @@
// Clear the selection
this.textNode = textNode;
- selectionStart = textNode.getCharacterCount();
+ selectionStart = 0;
selectionLength = 0;
textInputListeners.textNodeChanged(this, previousTextNode);
@@ -289,6 +289,10 @@
}
}
+ public int getTextLength() {
+ return textNode.getCharacterCount();
+ }
+
public void delete(Direction direction) {
if (direction == null) {
throw new IllegalArgumentException("direction is null.");
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java?rev=805458&r1=805457&r2=805458&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java Tue Aug 18 15:40:20 2009
@@ -19,19 +19,25 @@
import java.io.File;
import java.io.IOException;
+import org.apache.pivot.collections.ArrayList;
import org.apache.pivot.collections.Sequence;
import org.apache.pivot.io.Folder;
import org.apache.pivot.serialization.SerializationException;
import org.apache.pivot.util.Filter;
import org.apache.pivot.util.Resources;
+import org.apache.pivot.util.Vote;
import org.apache.pivot.wtk.Button;
import org.apache.pivot.wtk.ButtonPressListener;
import org.apache.pivot.wtk.Component;
import org.apache.pivot.wtk.FileBrowser;
+import org.apache.pivot.wtk.FileBrowserListener;
import org.apache.pivot.wtk.FileBrowserSheet;
import org.apache.pivot.wtk.FileBrowserSheetListener;
import org.apache.pivot.wtk.PushButton;
+import org.apache.pivot.wtk.Sheet;
+import org.apache.pivot.wtk.TablePane;
import org.apache.pivot.wtk.TextInput;
+import org.apache.pivot.wtk.TextInputTextListener;
import org.apache.pivot.wtkx.WTKX;
import org.apache.pivot.wtkx.WTKXSerializer;
@@ -39,19 +45,24 @@
* Terra file browser sheet skin.
*/
public class TerraFileBrowserSheetSkin extends TerraSheetSkin implements FileBrowserSheetListener {
+ @WTKX private TablePane tablePane = null;
+ @WTKX private TablePane.Row saveAsRow = null;
@WTKX private TextInput saveAsTextInput = null;
@WTKX private FileBrowser fileBrowser = null;
@WTKX private PushButton okButton = null;
@WTKX private PushButton cancelButton = null;
private boolean updatingSelection = false;
+ private int selectedDirectoryCount = 0;
@Override
public void install(Component component) {
super.install(component);
final FileBrowserSheet fileBrowserSheet = (FileBrowserSheet)component;
+ final FileBrowserSheet.Mode mode = fileBrowserSheet.getMode();
+ // Load the sheet content
Resources resources;
try {
resources = new Resources(this);
@@ -76,17 +87,66 @@
wtkxSerializer.bind(this, TerraFileBrowserSheetSkin.class);
- okButton.getButtonPressListeners().add(new ButtonPressListener() {
- public void buttonPressed(Button button) {
- updatingSelection = true;
+ saveAsTextInput.getTextInputTextListeners().add(new TextInputTextListener() {
+ public void textChanged(TextInput textInput) {
+ updateOKButtonState();
+ }
+ });
+
+ fileBrowser.getFileBrowserListeners().add(new FileBrowserListener.Adapter() {
+ public void selectedFileAdded(FileBrowser fileBrowser, File file) {
+ file = new File(fileBrowser.getSelectedFolder(), file.getName());
+
+ if (file.isDirectory()) {
+ selectedDirectoryCount++;
+ }
+
+ updateOKButtonState();
+ }
- // TODO If SAVE_AS, get value from saveAsTextInput
- saveAsTextInput.getText();
+ public void selectedFileRemoved(FileBrowser fileBrowser, File file) {
+ file = new File(fileBrowser.getSelectedFolder(), file.getName());
- fileBrowserSheet.setSelectedFiles(fileBrowser.getSelectedFiles());
+ if (file.isDirectory()) {
+ selectedDirectoryCount--;
+ }
- updatingSelection = false;
+ updateOKButtonState();
+ }
+
+ public void selectedFilesChanged(FileBrowser fileBrowser,
+ Sequence<File> previousSelectedFiles) {
+ selectedDirectoryCount = 0;
+
+ Sequence<File> selectedFiles = fileBrowser.getSelectedFiles();
+ for (int i = 0, n = selectedFiles.getLength(); i < n; i++) {
+ File selectedFile = selectedFiles.get(i);
+ selectedFile = new File(fileBrowser.getSelectedFolder(), selectedFile.getName());
+
+ if (selectedFile.isDirectory()) {
+ selectedDirectoryCount++;
+ }
+ }
+
+ if (!fileBrowser.isMultiSelect()) {
+ File selectedFile = fileBrowser.getSelectedFile();
+
+ if (selectedFile == null) {
+ saveAsTextInput.setText("");
+ } else {
+ selectedFile = new File(fileBrowser.getSelectedFolder(), selectedFile.getName());
+ if (!selectedFile.isDirectory()) {
+ saveAsTextInput.setText(selectedFile.getName());
+ }
+ }
+ }
+ updateOKButtonState();
+ }
+ });
+
+ okButton.getButtonPressListeners().add(new ButtonPressListener() {
+ public void buttonPressed(Button button) {
fileBrowserSheet.close(true);
}
});
@@ -97,25 +157,105 @@
}
});
+
+ // Add this as a file browser sheet listener
fileBrowserSheet.getFileBrowserSheetListeners().add(this);
+
+ // Initialize layout and file browser selection state
+ switch (mode) {
+ case OPEN: {
+ if (saveAsRow.getTablePane() != null) {
+ tablePane.getRows().remove(saveAsRow);
+ }
+
+ fileBrowser.setMultiSelect(false);
+ break;
+ }
+
+ case OPEN_MULTIPLE: {
+ if (saveAsRow.getTablePane() != null) {
+ tablePane.getRows().remove(saveAsRow);
+ }
+
+ fileBrowser.setMultiSelect(true);
+ break;
+ }
+
+ case SAVE_AS: {
+ if (saveAsRow.getTablePane() == null) {
+ tablePane.getRows().insert(saveAsRow, 0);
+ }
+
+ fileBrowser.setMultiSelect(false);
+ break;
+ }
+
+ case SAVE_TO: {
+ if (saveAsRow.getTablePane() != null) {
+ tablePane.getRows().remove(saveAsRow);
+ }
+
+ fileBrowser.setMultiSelect(false);
+ break;
+ }
+ }
+
+ selectedFolderChanged(fileBrowserSheet, null);
+ selectedFilesChanged(fileBrowserSheet, null);
+ disabledFileFilterChanged(fileBrowserSheet, null);
}
@Override
public void uninstall() {
FileBrowserSheet fileBrowserSheet = (FileBrowserSheet)getComponent();
- fileBrowserSheet.setContent(null);
+ fileBrowserSheet.setContent(null);
fileBrowserSheet.getFileBrowserSheetListeners().remove(this);
super.uninstall();
}
- public void multiSelectChanged(FileBrowserSheet fileBrowserSheet) {
- // TODO
+ @Override
+ public Vote previewSheetClose(final Sheet sheet, final boolean result) {
+ Vote vote;
+
+ if (result
+ && !okButton.isEnabled()) {
+ vote = Vote.DENY;
+ } else {
+ vote = super.previewSheetClose(sheet, result);
+ }
+
+ if (vote == Vote.APPROVE) {
+ updatingSelection = true;
+
+ FileBrowserSheet fileBrowserSheet = (FileBrowserSheet)sheet;
+ FileBrowserSheet.Mode mode = fileBrowserSheet.getMode();
+
+ switch (mode) {
+ case OPEN:
+ case OPEN_MULTIPLE:
+ case SAVE_TO: {
+ fileBrowserSheet.setSelectedFiles(fileBrowser.getSelectedFiles());
+ break;
+ }
+
+ case SAVE_AS: {
+ String fileName = saveAsTextInput.getText();
+ File selectedFile = new File(fileName);
+ fileBrowserSheet.setSelectedFiles(new ArrayList<File>(selectedFile));
+ break;
+ }
+ }
+
+ updatingSelection = false;
+ }
+
+ return vote;
}
public void selectedFolderChanged(FileBrowserSheet fileBrowserSheet, Folder previousSelectedFolder) {
- // TODO
+ fileBrowser.setSelectedFolder(fileBrowserSheet.getSelectedFolder());
}
public void selectedFilesChanged(FileBrowserSheet fileBrowserSheet, Sequence<File> previousSelectedFiles) {
@@ -125,6 +265,33 @@
}
public void disabledFileFilterChanged(FileBrowserSheet fileBrowserSheet, Filter<File> previousFileFilter) {
- // TODO
+ fileBrowser.setDisabledFileFilter(fileBrowserSheet.getDisabledFileFilter());
+ }
+
+ private void updateOKButtonState() {
+ FileBrowserSheet fileBrowserSheet = (FileBrowserSheet)getComponent();
+
+ FileBrowserSheet.Mode mode = fileBrowserSheet.getMode();
+ Sequence<File> selectedFiles = fileBrowser.getSelectedFiles();
+
+ switch (mode) {
+ case OPEN:
+ case OPEN_MULTIPLE: {
+ okButton.setEnabled(selectedFiles.getLength() > 0
+ && selectedDirectoryCount == 0);
+ break;
+ }
+
+ case SAVE_AS: {
+ okButton.setEnabled(saveAsTextInput.getTextLength() > 0);
+ break;
+ }
+
+ case SAVE_TO: {
+ okButton.setEnabled(selectedDirectoryCount > 0);
+ break;
+ }
+ }
+
}
}
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/terra_file_browser_sheet_skin.wtkx
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/terra_file_browser_sheet_skin.wtkx?rev=805458&r1=805457&r2=805458&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/terra_file_browser_sheet_skin.wtkx (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/terra_file_browser_sheet_skin.wtkx Tue Aug 18 15:40:20 2009
@@ -21,20 +21,20 @@
xmlns="org.apache.pivot.wtk">
<Border styles="{padding:10}">
<content>
- <TablePane styles="{verticalSpacing:8}">
+ <TablePane wtkx:id="tablePane" styles="{verticalSpacing:8}">
<columns>
<TablePane.Column width="1*"/>
</columns>
<rows>
- <TablePane.Row height="-1">
- <BoxPane styles="{verticalAlignment:'center'}">
- <Label text="%saveAs"/>
- <TextInput wtkx:id="saveAsTextInput"/>
+ <TablePane.Row wtkx:id="saveAsRow" height="-1">
+ <BoxPane orientation="vertical" styles="{fill:true}">
+ <BoxPane styles="{verticalAlignment:'center'}">
+ <Label text="%saveAs"/>
+ <TextInput wtkx:id="saveAsTextInput" textSize="32"/>
+ </BoxPane>
+ <Separator styles="{padding:2}"/>
</BoxPane>
</TablePane.Row>
- <TablePane.Row>
- <Separator styles="{padding:2}"/>
- </TablePane.Row>
<TablePane.Row height="1*">
<FileBrowser wtkx:id="fileBrowser"
preferredWidth="420" preferredHeight="220"/>
Modified: incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/FileBrowserSheetTest.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/FileBrowserSheetTest.java?rev=805458&r1=805457&r2=805458&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/FileBrowserSheetTest.java (original)
+++ incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/FileBrowserSheetTest.java Tue Aug 18 15:40:20 2009
@@ -31,7 +31,7 @@
throws Exception {
WTKXSerializer wtkxSerializer = new WTKXSerializer();
- FileBrowserSheet fileOpenSheet = new FileBrowserSheet(FileBrowserSheet.Mode.OPEN);
+ FileBrowserSheet fileOpenSheet = new FileBrowserSheet(FileBrowserSheet.Mode.SAVE_TO);
wtkxSerializer.put("fileOpenSheet", fileOpenSheet);
frame = (Frame)wtkxSerializer.readObject(getClass().getResource("file_browser_sheet_test.wtkx"));