core/com.nokia.cpp.utils.ui/src/com/nokia/cpp/internal/api/utils/ui/BrowseDialogUtils.java
author dadubrow
Mon, 01 Feb 2010 13:33:02 -0600
branchRCL_2_4
changeset 860 fd6ae4e6e3d9
permissions -rw-r--r--
(no commit message)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
860
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
     1
/*
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
     3
* All rights reserved.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
     4
* This component and the accompanying materials are made available
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
     6
* which accompanies this distribution, and is available
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
     8
*
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
     9
* Initial Contributors:
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    11
*
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    12
* Contributors:
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    13
*
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    14
* Description: 
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    15
*
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    16
*/
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    17
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    18
package com.nokia.cpp.internal.api.utils.ui;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    19
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    20
import java.io.File;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    21
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    22
import org.eclipse.core.runtime.IPath;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    23
import org.eclipse.swt.widgets.DirectoryDialog;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    24
import org.eclipse.swt.widgets.FileDialog;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    25
import org.eclipse.swt.widgets.Text;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    26
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    27
/**
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    28
 * Utilities to make it easier to use file and directory dialogs which are associated
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    29
 * with text entry fields.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    30
 * <p>
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    31
 * First, promote UI where Browse... starts from the current textual entry rather than
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    32
 * some random place.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    33
 * <p>
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    34
 * Second, overcome terrible SWT behavior:  even if you do set the filter path, then if it 
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    35
 * is not 100% correct, it will again revert to the home directory.  So, find the nearest
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    36
 * directory that <i>does</i> exist.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    37
 */
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    38
public class BrowseDialogUtils {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    39
	/**
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    40
	 * When issuing a "Browse..." command next to a text entry field, initialize
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    41
	 * the dialog with the nearest existing file or directory in that text field.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    42
	 * @param dialog
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    43
	 * @param textEntry
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    44
	 * @pathm defaultPath the path to use when the text entry is empty 
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    45
	 */
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    46
	public static void initializeFrom(FileDialog dialog, Text textEntry, IPath defaultPath) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    47
		if (textEntry != null) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    48
			String existing = textEntry.getText().trim();
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    49
			if (existing.length() > 0) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    50
				initializeFrom(dialog, existing);
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    51
				return;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    52
			}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    53
		}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    54
		if (defaultPath != null) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    55
			initializeFrom(dialog, defaultPath);
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    56
		}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    57
	}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    58
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    59
	/**
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    60
	 * When issuing a "Browse..." command next to a text entry field, initialize
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    61
	 * the dialog with the nearest existing file or directory in that text field.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    62
	 * @param dialog
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    63
	 * @param textEntry
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    64
	 */
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    65
	public static void initializeFrom(FileDialog dialog, Text textEntry) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    66
		if (textEntry == null)
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    67
			return;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    68
		String existing = textEntry.getText().trim();
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    69
		initializeFrom(dialog, existing);
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    70
	}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    71
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    72
	/**
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    73
	 * When issuing a "Browse..." command with an expected file, initialize
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    74
	 * the dialog with the nearest existing file or directory.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    75
	 * @param dialog
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    76
	 * @param path
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    77
	 */
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    78
	public static void initializeFrom(FileDialog dialog, IPath path) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    79
		if (path != null) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    80
			initializeFrom(dialog, path.toOSString());
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    81
		}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    82
	}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    83
	
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    84
	/**
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    85
	 * When issuing a "Browse..." command with an expected file, initialize
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    86
	 * the dialog with the nearest existing file or directory.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    87
	 * @param dialog
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    88
	 * @param path
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    89
	 */
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    90
	public static void initializeFrom(FileDialog dialog, String path) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    91
		if (path != null && path.length() > 0) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    92
			boolean isDirectory = path.endsWith("/") || path.endsWith("\\");
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    93
			File file = new File(path);
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    94
			boolean exists = file.exists();
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    95
			if (exists) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    96
				isDirectory = file.isDirectory();
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    97
			}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    98
			if (!isDirectory) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
    99
				dialog.setFileName(file.getName());
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   100
			}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   101
			if (exists) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   102
				if (file.isAbsolute()) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   103
					dialog.setFilterPath(isDirectory ? file.getAbsolutePath() : file.getParent());
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   104
				}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   105
			} else {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   106
				if (!file.isAbsolute())
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   107
					return;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   108
				File dir = file.getParentFile();
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   109
				while (dir != null && !dir.exists()) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   110
					dir = dir.getParentFile();
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   111
				}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   112
				if (dir != null) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   113
					dialog.setFilterPath(dir.getAbsolutePath());
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   114
				}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   115
			}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   116
		}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   117
	}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   118
	
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   119
	/**
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   120
	 * When issuing a "Browse..." command next to a text entry field, initialize
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   121
	 * the dialog with the nearest existing directory in that text field.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   122
	 * @param dialog
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   123
	 * @param textEntry
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   124
	 * @param defaultPath the default path if the text entry is empty
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   125
	 */
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   126
	public static void initializeFrom(DirectoryDialog dialog, Text textEntry, IPath defaultPath) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   127
		if (textEntry != null) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   128
			String existing = textEntry.getText().trim();
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   129
			if (existing.length() > 0) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   130
				initializeFrom(dialog, existing);
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   131
				return;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   132
			}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   133
		}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   134
		if (defaultPath != null) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   135
			initializeFrom(dialog, defaultPath);
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   136
		}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   137
	}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   138
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   139
	/**
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   140
	 * When issuing a "Browse..." command next to a text entry field, initialize
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   141
	 * the dialog with the nearest existing directory in that text field.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   142
	 * @param dialog
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   143
	 * @param textEntry
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   144
	 */
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   145
	public static void initializeFrom(DirectoryDialog dialog, Text textEntry) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   146
		if (textEntry == null)
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   147
			return;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   148
		String existing = textEntry.getText().trim();
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   149
		initializeFrom(dialog, existing);
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   150
	}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   151
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   152
	/**
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   153
	 * When issuing a "Browse..." command with an expected directory, initialize
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   154
	 * the dialog with the nearest existing path.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   155
	 * @param dialog
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   156
	 * @param path
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   157
	 */
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   158
	public static void initializeFrom(DirectoryDialog dialog, IPath path) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   159
		if (path != null) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   160
			initializeFrom(dialog, path.toOSString());
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   161
		}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   162
	}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   163
	
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   164
	/**
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   165
	 * When issuing a "Browse..." command with an expected directory, initialize
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   166
	 * the dialog with the nearest existing path.
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   167
	 * @param dialog
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   168
	 * @param path
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   169
	 */
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   170
	public static void initializeFrom(DirectoryDialog dialog, String path) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   171
		if (path != null && path.length() > 0) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   172
			File file = new File(path);
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   173
			if (!file.isAbsolute())
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   174
				return;
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   175
			while (file != null && !file.exists()) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   176
				file = file.getParentFile();
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   177
			}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   178
			if (file != null) {
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   179
				dialog.setFilterPath(file.getAbsolutePath());
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   180
			}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   181
		}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   182
	}
fd6ae4e6e3d9 (no commit message)
dadubrow
parents:
diff changeset
   183
}