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 2010/02/10 23:53:31 UTC

svn commit: r908717 - in /pivot/trunk: tutorials/src/org/apache/pivot/tutorials/filebrowsing/ tutorials/src/org/apache/pivot/tutorials/menus/ tutorials/src/org/apache/pivot/tutorials/windows/ wtk-terra/src/org/apache/pivot/wtk/skin/terra/ wtk/src/org/a...

Author: gbrown
Date: Wed Feb 10 22:53:23 2010
New Revision: 908717

URL: http://svn.apache.org/viewvc?rev=908717&view=rev
Log:
Make file browser sheet mode and dialog modal flag properties.

Added:
    pivot/trunk/wtk/src/org/apache/pivot/wtk/DialogListener.java
Modified:
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/filebrowsing/FileBrowsing.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/MenuBars.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/windows/dialog.wtkx
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Alert.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/filebrowsing/FileBrowsing.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/filebrowsing/FileBrowsing.java?rev=908717&r1=908716&r2=908717&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/filebrowsing/FileBrowsing.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/filebrowsing/FileBrowsing.java Wed Feb 10 22:53:23 2010
@@ -65,7 +65,8 @@
                     fileBrowserSheet.setSelectedFile(new File(fileBrowserSheet.getRootDirectory(), "New File"));
                 }
 
-                fileBrowserSheet.open(window, fileBrowserSheetMode, new SheetCloseListener() {
+                fileBrowserSheet.setMode(fileBrowserSheetMode);
+                fileBrowserSheet.open(window, new SheetCloseListener() {
                     @Override
                     public void sheetClosed(Sheet sheet) {
                         if (sheet.getResult()) {

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/MenuBars.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/MenuBars.java?rev=908717&r1=908716&r2=908717&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/MenuBars.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/MenuBars.java Wed Feb 10 22:53:23 2010
@@ -122,7 +122,7 @@
         Action.getNamedActions().put("fileOpen", new Action() {
             @Override
             public void perform() {
-                fileBrowserSheet.open(window, FileBrowserSheet.Mode.OPEN);
+                fileBrowserSheet.open(window);
             }
         });
 

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/windows/dialog.wtkx
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/windows/dialog.wtkx?rev=908717&r1=908716&r2=908717&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/windows/dialog.wtkx (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/windows/dialog.wtkx Wed Feb 10 22:53:23 2010
@@ -16,7 +16,7 @@
 limitations under the License.
 -->
 
-<Dialog wtkx:id="dialog" title="Dialog"
+<Dialog wtkx:id="dialog" title="Dialog" modal="true"
     xmlns:wtkx="http://pivot.apache.org/wtkx"
     xmlns="org.apache.pivot.wtk">
     <content>

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java?rev=908717&r1=908716&r2=908717&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java Wed Feb 10 22:53:23 2010
@@ -23,6 +23,7 @@
 import org.apache.pivot.wtk.Container;
 import org.apache.pivot.wtk.ContainerMouseListener;
 import org.apache.pivot.wtk.Dialog;
+import org.apache.pivot.wtk.DialogListener;
 import org.apache.pivot.wtk.DialogStateListener;
 import org.apache.pivot.wtk.Dimensions;
 import org.apache.pivot.wtk.Display;
@@ -33,7 +34,8 @@
 /**
  * Dialog skin.
  */
-public class TerraDialogSkin extends TerraFrameSkin implements DialogStateListener {
+public class TerraDialogSkin extends TerraFrameSkin
+    implements DialogListener, DialogStateListener {
     private static final float GOLDEN_SECTION = 0.382f;
 
     private ContainerMouseListener displayMouseListener = new ContainerMouseListener.Adapter() {
@@ -189,6 +191,11 @@
     }
 
     @Override
+    public void modalChanged(Dialog dialog) {
+        // No-op
+    }
+
+    @Override
     public Vote previewDialogClose(Dialog dialog, boolean result) {
         return Vote.APPROVE;
     }

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java?rev=908717&r1=908716&r2=908717&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java Wed Feb 10 22:53:23 2010
@@ -238,45 +238,7 @@
     @Override
     public void windowOpened(Window window) {
         super.windowOpened(window);
-
-        if (window.isOpen()) {
-            // Initialize layout and file browser selection state
-            FileBrowserSheet fileBrowserSheet = (FileBrowserSheet)window;
-            FileBrowserSheet.Mode mode = fileBrowserSheet.getMode();
-
-            fileBrowser.getStyles().put("keyboardFolderTraversalEnabled",
-                (mode != FileBrowserSheet.Mode.SAVE_TO));
-
-            switch (mode) {
-                case OPEN: {
-                    saveAsBoxPane.setVisible(false);
-                    fileBrowser.setMultiSelect(false);
-                    break;
-                }
-
-                case OPEN_MULTIPLE: {
-                    saveAsBoxPane.setVisible(false);
-                    fileBrowser.setMultiSelect(true);
-                    break;
-                }
-
-                case SAVE_AS: {
-                    saveAsBoxPane.setVisible(true);
-                    fileBrowser.setMultiSelect(false);
-                    break;
-                }
-
-                case SAVE_TO: {
-                    saveAsBoxPane.setVisible(false);
-                    fileBrowser.setMultiSelect(false);
-                    break;
-                }
-            }
-
-            disabledFileFilterChanged(fileBrowserSheet, null);
-
-            window.requestFocus();
-        }
+        window.requestFocus();
     }
 
     @Override
@@ -318,6 +280,43 @@
         return vote;
     }
 
+    public void modeChanged(FileBrowserSheet fileBrowserSheet,
+        FileBrowserSheet.Mode previousMode) {
+        FileBrowserSheet.Mode mode = fileBrowserSheet.getMode();
+
+        fileBrowser.getStyles().put("keyboardFolderTraversalEnabled",
+            (mode != FileBrowserSheet.Mode.SAVE_TO));
+
+        switch (mode) {
+            case OPEN: {
+                saveAsBoxPane.setVisible(false);
+                fileBrowser.setMultiSelect(false);
+                break;
+            }
+
+            case OPEN_MULTIPLE: {
+                saveAsBoxPane.setVisible(false);
+                fileBrowser.setMultiSelect(true);
+                break;
+            }
+
+            case SAVE_AS: {
+                saveAsBoxPane.setVisible(true);
+                fileBrowser.setMultiSelect(false);
+                break;
+            }
+
+            case SAVE_TO: {
+                saveAsBoxPane.setVisible(false);
+                fileBrowser.setMultiSelect(false);
+                break;
+            }
+        }
+
+        updateDisabledFileFilter();
+        updateOKButtonState();
+    }
+
     @Override
     public void rootDirectoryChanged(FileBrowserSheet fileBrowserSheet,
         File previousRootDirectory) {
@@ -351,6 +350,11 @@
     @Override
     public void disabledFileFilterChanged(FileBrowserSheet fileBrowserSheet,
         Filter<File> previousDisabledFileFilter) {
+        updateDisabledFileFilter();
+    }
+
+    private void updateDisabledFileFilter() {
+        FileBrowserSheet fileBrowserSheet = (FileBrowserSheet)getComponent();
         Filter<File> disabledFileFilter = fileBrowserSheet.getDisabledFileFilter();
 
         FileBrowserSheet.Mode mode = fileBrowserSheet.getMode();
@@ -365,29 +369,25 @@
         FileBrowserSheet fileBrowserSheet = (FileBrowserSheet)getComponent();
 
         FileBrowserSheet.Mode mode = fileBrowserSheet.getMode();
-        if (mode != null) {
-            Sequence<File> selectedFiles = fileBrowser.getSelectedFiles();
+        Sequence<File> selectedFiles = fileBrowser.getSelectedFiles();
 
-            switch (mode) {
-                case OPEN:
-                case OPEN_MULTIPLE: {
-                    okButton.setEnabled(selectedFiles.getLength() > 0
-                        && selectedDirectoryCount == 0);
-                    break;
-                }
+        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_AS: {
+                okButton.setEnabled(saveAsTextInput.getTextLength() > 0);
+                break;
+            }
 
-                case SAVE_TO: {
-                    okButton.setEnabled(selectedDirectoryCount > 0);
-                    break;
-                }
+            case SAVE_TO: {
+                okButton.setEnabled(selectedDirectoryCount > 0);
+                break;
             }
-        } else {
-            okButton.setEnabled(false);
         }
     }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Alert.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Alert.java?rev=908717&r1=908716&r2=908717&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Alert.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Alert.java Wed Feb 10 22:53:23 2010
@@ -57,11 +57,21 @@
     }
 
     public Alert(MessageType type, String message, Sequence<?> options) {
-        this(type, message, options, null);
+        this(type, message, options, true);
+    }
+
+    public Alert(MessageType type, String message, Sequence<?> options, boolean modal) {
+        this(type, message, options, null, modal);
     }
 
-    @SuppressWarnings("unchecked")
     public Alert(MessageType type, String message, Sequence<?> options, Component body) {
+        this(type, message, options, body, true);
+    }
+
+    @SuppressWarnings("unchecked")
+    public Alert(MessageType type, String message, Sequence<?> options, Component body, boolean modal) {
+        super(modal);
+
         if (type == null) {
             throw new IllegalArgumentException("type is null.");
         }
@@ -158,14 +168,14 @@
     public static void alert(MessageType messageType, String message, Component body, Window owner,
         DialogCloseListener dialogCloseListener) {
         Alert alert = createAlert(messageType, message, body);
-        alert.open(owner.getDisplay(), owner, true, dialogCloseListener);
+        alert.open(owner.getDisplay(), owner, dialogCloseListener);
     }
 
     private static Alert createAlert(MessageType messageType, String message, Component body) {
         List<Object> options = new ArrayList<Object>();
         options.add(resources.get("defaultOption"));
 
-        Alert alert = new Alert(messageType, message, options, body);
+        Alert alert = new Alert(messageType, message, options, body, true);
         alert.setTitle((String)resources.get("defaultTitle"));
         alert.setSelectedOption(0);
 

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java?rev=908717&r1=908716&r2=908717&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java Wed Feb 10 22:53:23 2010
@@ -24,6 +24,16 @@
  * an application and a user.
  */
 public class Dialog extends Frame {
+    private static class DialogListenerList extends ListenerList<DialogListener>
+        implements DialogListener {
+        @Override
+        public void modalChanged(Dialog dialog) {
+            for (DialogListener listener : this) {
+                listener.modalChanged(dialog);
+            }
+        }
+    }
+
     private static class DialogStateListenerList extends ListenerList<DialogStateListener>
         implements DialogStateListener {
         @Override
@@ -54,29 +64,60 @@
 
     private boolean modal = false;
     private DialogCloseListener dialogCloseListener = null;
+
     private boolean result = false;
 
     private boolean closing = false;
 
+    private DialogListenerList dialogListeners = new DialogListenerList();
     private DialogStateListenerList dialogStateListeners = new DialogStateListenerList();
 
     public Dialog() {
-        this(null, null);
+        this(true);
+    }
+
+    public Dialog(boolean modal) {
+        this(null, null, modal);
     }
 
     public Dialog(String title) {
-        this(title, null);
+        this(title, true);
+    }
+
+    public Dialog(String title, boolean modal) {
+        this(title, null, modal);
     }
 
     public Dialog(Component content) {
-        this(null, content);
+        this(content, true);
+    }
+
+    public Dialog(Component content, boolean modal) {
+        this(null, content, modal);
     }
 
     public Dialog(String title, Component content) {
+        this(title, content, true);
+    }
+
+    public Dialog(String title, Component content, boolean modal) {
         super(title, content);
+        this.modal = modal;
+
         installThemeSkin(Dialog.class);
     }
 
+    public boolean isModal() {
+        return modal;
+    }
+
+    public void setModal(boolean modal) {
+        if (this.modal != modal) {
+            this.modal = modal;
+            dialogListeners.modalChanged(this);
+        }
+    }
+
     /**
      * Opens the dialog.
      *
@@ -88,7 +129,7 @@
      */
     @Override
     public final void open(Display display, Window owner) {
-        open(display, owner, owner != null, null);
+        open(display, owner, null);
     }
 
     /**
@@ -101,7 +142,7 @@
      * A listener that will be called when the dialog is closed.
      */
     public final void open(Display display, DialogCloseListener dialogCloseListener) {
-        open(display, null, false, dialogCloseListener);
+        open(display, null, dialogCloseListener);
     }
 
     /**
@@ -118,7 +159,7 @@
             throw new IllegalArgumentException();
         }
 
-        open(owner.getDisplay(), owner, true, dialogCloseListener);
+        open(owner.getDisplay(), owner, dialogCloseListener);
     }
 
     /**
@@ -137,21 +178,17 @@
      * @param dialogCloseListener
      * A listener that will be called when the dialog is closed.
      */
-    public void open(Display display, Window owner, boolean modal, DialogCloseListener dialogCloseListener) {
-        if (modal
-            && owner == null) {
+    public void open(Display display, Window owner, DialogCloseListener dialogCloseListener) {
+        if (modal && owner == null) {
             throw new IllegalArgumentException("Modal dialogs must have an owner.");
         }
 
-        this.modal = modal;
         this.dialogCloseListener = dialogCloseListener;
-
         result = false;
 
         super.open(display, owner);
 
         if (!isOpen()) {
-            this.modal = false;
             this.dialogCloseListener = null;
         }
     }
@@ -182,9 +219,6 @@
                 if (isClosed()) {
                     this.result = result;
 
-                    boolean modal = this.modal;
-                    this.modal = false;
-
                     // Move the owner to the front
                     if (owner != null
                         && owner.isOpen()) {
@@ -209,10 +243,6 @@
         }
     }
 
-    public boolean isModal() {
-        return modal;
-    }
-
     public DialogCloseListener getDialogCloseListener() {
         return dialogCloseListener;
     }
@@ -221,6 +251,10 @@
         return result;
     }
 
+    public ListenerList<DialogListener> getDialogListeners() {
+        return dialogListeners;
+    }
+
     public ListenerList<DialogStateListener> getDialogStateListeners() {
         return dialogStateListeners;
     }

Added: pivot/trunk/wtk/src/org/apache/pivot/wtk/DialogListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/DialogListener.java?rev=908717&view=auto
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/DialogListener.java (added)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/DialogListener.java Wed Feb 10 22:53:23 2010
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pivot.wtk;
+
+/**
+ * Dialog listener interface.
+ */
+public interface DialogListener {
+    /**
+     * Called when a dialog's modal flag has changed.
+     *
+     * @param dialog
+     */
+    public void modalChanged(Dialog dialog);
+}

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java?rev=908717&r1=908716&r2=908717&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java Wed Feb 10 22:53:23 2010
@@ -43,6 +43,14 @@
         extends ListenerList<FileBrowserSheetListener>
         implements FileBrowserSheetListener {
         @Override
+        public void modeChanged(FileBrowserSheet fileBrowserSheet,
+            FileBrowserSheet.Mode previousMode) {
+            for (FileBrowserSheetListener listener : this) {
+                listener.modeChanged(fileBrowserSheet, previousMode);
+            }
+        }
+
+        @Override
         public void rootDirectoryChanged(FileBrowserSheet fileBrowserSheet,
             File previousRootDirectory) {
             for (FileBrowserSheetListener listener : this) {
@@ -76,6 +84,12 @@
     private FileBrowserSheetListenerList fileBrowserSheetListeners = new FileBrowserSheetListenerList();
 
     public FileBrowserSheet() {
+        this(Mode.OPEN);
+    }
+
+    public FileBrowserSheet(Mode mode) {
+        this.mode = mode;
+
         String userHome = System.getProperty("user.home");
         rootDirectory = new File(userHome);
 
@@ -86,6 +100,15 @@
         return mode;
     }
 
+    public void setMode(Mode mode) {
+        Mode previousMode = this.mode;
+
+        if (previousMode != mode) {
+            this.mode = mode;
+            fileBrowserSheetListeners.modeChanged(this, previousMode);
+        }
+    }
+
     public File getRootDirectory() {
         return rootDirectory;
     }
@@ -207,50 +230,6 @@
         }
     }
 
-    public final void open(Window owner, Mode mode) {
-        if (owner == null) {
-            throw new IllegalArgumentException("owner is null");
-        }
-
-        open(owner.getDisplay(), owner, mode, null);
-    }
-
-    public final void open(Window owner, Mode mode, SheetCloseListener sheetCloseListener) {
-        if (owner == null) {
-            throw new IllegalArgumentException("owner is null");
-        }
-
-        open(owner.getDisplay(), owner, mode, sheetCloseListener);
-    }
-
-    @Override
-    public final void open(Display display, Window owner, SheetCloseListener sheetCloseListener) {
-        open(display, owner, Mode.OPEN, sheetCloseListener);
-    }
-
-    public void open(Display display, Window owner, Mode mode, SheetCloseListener sheetCloseListener) {
-        if (mode == null) {
-            throw new IllegalArgumentException("mode is null.");
-        }
-
-        this.mode = mode;
-
-        super.open(display, owner, sheetCloseListener);
-
-        if (!isOpen()) {
-            this.mode = null;
-        }
-    }
-
-    @Override
-    public void close(boolean result) {
-        super.close(result);
-
-        if (isClosed()) {
-            mode = null;
-        }
-    }
-
     public ListenerList<FileBrowserSheetListener> getFileBrowserSheetListeners() {
         return fileBrowserSheetListeners;
     }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java?rev=908717&r1=908716&r2=908717&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java Wed Feb 10 22:53:23 2010
@@ -30,6 +30,11 @@
      */
     public static class Adapter implements FileBrowserSheetListener {
         @Override
+        public void modeChanged(FileBrowserSheet fileBrowserSheet,
+            FileBrowserSheet.Mode previousMode) {
+        }
+
+        @Override
         public void rootDirectoryChanged(FileBrowserSheet fileBrowserSheet,
             File previousRootDirectory) {
         }
@@ -46,6 +51,14 @@
     }
 
     /**
+     * Called when a file browser sheet's mode has changed.
+     *
+     * @param fileBrowserSheet
+     * @param previousMode
+     */
+    public void modeChanged(FileBrowserSheet fileBrowserSheet, FileBrowserSheet.Mode previousMode);
+
+    /**
      * Called when a file browser sheet's root directory has changed.
      *
      * @param fileBrowserSheet