# HG changeset patch # User John Reimer # Date 1218989063 25200 # Node ID 5073c0da393a7b91dc11b091eaeb180679f730c7 # Parent 9764f08379f2e4650546236d5a315eb4ded9e271 remove backup file diff -r 9764f08379f2 -r 5073c0da393a dwt/widgets/DirectoryDialog.d~ --- a/dwt/widgets/DirectoryDialog.d~ Sat Aug 16 23:12:10 2008 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,343 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2008 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Port to the D programming language: - * Frank Benoit - *******************************************************************************/ -module dwt.widgets.DirectoryDialog; - -import dwt.dwthelper.utils; - - - -import dwt.DWT; -import dwt.DWTException; -import dwt.internal.gtk.OS; -import dwt.widgets.Dialog; -import dwt.widgets.Shell; -import dwt.widgets.Display; - -version(TANGOSVN) { - static import tango.io.model.IFile; -} -else{ - static import tango.io.FileConst; -} -static import tango.text.Util; - -/** - * Instances of this class allow the user to navigate - * the file system and select a directory. - *
- *
Styles:
- *
(none)
- *
Events:
- *
(none)
- *
- *

- * IMPORTANT: This class is intended to be subclassed only - * within the DWT implementation. - *

- * - * @see DirectoryDialog snippets - * @see DWT Example: ControlExample, Dialog tab - * @see Sample code and further information - */ -public class DirectoryDialog : Dialog { - String message = "", filterPath = ""; -version(TANGOSVN) { - static const String SEPARATOR = tango.io.model.IFile.FileConst.PathSeparatorString; -} -else{ - static const String SEPARATOR = tango.io.FileConst.FileConst.PathSeparatorString; -} - -/** - * Constructs a new instance of this class given only its parent. - * - * @param parent a shell which will be the parent of the new instance - * - * @exception IllegalArgumentException - * @exception DWTException - */ -public this (Shell parent) { - this (parent, DWT.APPLICATION_MODAL); -} -/** - * Constructs a new instance of this class given its parent - * and a style value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in - * class DWT which is applicable to instances of this - * class, or must be built by bitwise OR'ing together - * (that is, using the int "|" operator) two or more - * of those DWT style constants. The class description - * lists the style constants that are applicable to the class. - * Style bits are also inherited from superclasses. - *

- * - * @param parent a shell which will be the parent of the new instance - * @param style the style of dialog to construct - * - * @exception IllegalArgumentException - * @exception DWTException - */ -public this (Shell parent, int style) { - super (parent, checkStyle (parent, style)); - checkSubclass (); -} -/** - * Returns the path which the dialog will use to filter - * the directories it shows. - * - * @return the filter path - * - * @see #setFilterPath - */ -public String getFilterPath () { - return filterPath; -} -/** - * Returns the dialog's message, which is a description of - * the purpose for which it was opened. This message will be - * visible on the dialog while it is open. - * - * @return the message - */ -public String getMessage () { - return message; -} -/** - * Makes the dialog visible and brings it to the front - * of the display. - * - * @return a string describing the absolute path of the selected directory, - * or null if the dialog was cancelled or an error occurred - * - * @exception DWTException - */ -public String open () { - bool useChooserDialog = OS.GTK_VERSION >= OS.buildVERSION (2, 4, 10); - if (useChooserDialog) { - return openChooserDialog (); - } else { - return openClassicDialog (); - } -} -String openChooserDialog () { - char* titleBytes = toStringz(title); - auto shellHandle = parent.topHandle (); - auto handle = OS.gtk_file_chooser_dialog_new2 ( - titleBytes, - shellHandle, - OS.GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, - OS.GTK_STOCK_CANCEL (), OS.GTK_RESPONSE_CANCEL, - OS.GTK_STOCK_OK (), OS.GTK_RESPONSE_OK ); - auto pixbufs = OS.gtk_window_get_icon_list (shellHandle); - if (pixbufs !is null) { - OS.gtk_window_set_icon_list (handle, pixbufs); - OS.g_list_free (pixbufs); - } - if (filterPath !is null && filterPath.length > 0) { - String p; - /* filename must be a full path */ - if ( filterPath[ 0 .. SEPARATOR.length ] != SEPARATOR ) { - p ~= SEPARATOR; - p ~= filterPath; - } - else{ - p = filterPath; - } - char* buffer = toStringz(p); - /* - * Bug in GTK. GtkFileChooser may crash on GTK versions 2.4.10 to 2.6 - * when setting a file name that is not a true canonical path. - * The fix is to use the canonical path. - */ - char* ptr = OS.realpath (buffer, null); - if (ptr !is null) { - OS.gtk_file_chooser_set_current_folder (handle, ptr); - OS.g_free (ptr); - } - } - if (message.length > 0) { - char* buffer = toStringz(message); - auto box = OS.gtk_hbox_new (false, 0); - if (box is null) error (DWT.ERROR_NO_HANDLES); - auto label = OS.gtk_label_new (buffer); - if (label is null) error (DWT.ERROR_NO_HANDLES); - OS.gtk_container_add (box, label); - OS.gtk_widget_show (label); - OS.gtk_label_set_line_wrap (label, true); - OS.gtk_label_set_justify (label, OS.GTK_JUSTIFY_CENTER); - OS.gtk_file_chooser_set_extra_widget (handle, box); - } - String answer = null; - Display display = parent !is null ? parent.getDisplay (): Display.getCurrent (); - display.addIdleProc (); - Dialog oldModal = null; - if (OS.gtk_window_get_modal (handle)) { - oldModal = display.getModalDialog (); - display.setModalDialog (this); - } - int signalId = 0; - int /*long*/ hookId = 0; - CallbackData emissionData; - emissionData.display = display; - emissionData.data = handle; - if ((style & DWT.RIGHT_TO_LEFT) !is 0) { - signalId = OS.g_signal_lookup (OS.map.ptr, OS.GTK_TYPE_WIDGET()); - hookId = OS.g_signal_add_emission_hook (signalId, 0, &Display.emissionFunc, &emissionData, null); - } - int response = OS.gtk_dialog_run (handle); - if ((style & DWT.RIGHT_TO_LEFT) !is 0) { - OS.g_signal_remove_emission_hook (signalId, hookId); - } - if (OS.gtk_window_get_modal (handle)) { - display.setModalDialog (oldModal); - } - if (response is OS.GTK_RESPONSE_OK) { - auto path = OS.gtk_file_chooser_get_filename (handle); - if (path !is null) { - uint items_written; - auto utf8Ptr = OS.g_filename_to_utf8 (path, -1, null, &items_written, null); - OS.g_free (path); - if (utf8Ptr !is null) { - answer = utf8Ptr[ 0 .. items_written ].dup; - filterPath = answer; - OS.g_free (utf8Ptr); - } - } - } - display.removeIdleProc (); - OS.gtk_widget_destroy (handle); - return answer; -} -String openClassicDialog () { - char* titleBytes = toStringz(title); - auto handle = OS.gtk_file_selection_new (titleBytes); - if (parent !is null) { - auto shellHandle = parent.topHandle (); - OS.gtk_window_set_transient_for (handle, shellHandle); - auto pixbufs = OS.gtk_window_get_icon_list (shellHandle); - if (pixbufs !is null) { - OS.gtk_window_set_icon_list (handle, pixbufs); - OS.g_list_free (pixbufs); - } - } - String answer = null; - if (filterPath !is null) { - String path = filterPath; - if (path.length > 0 && path[ $-1 .. $ ] != SEPARATOR ) { - path ~= SEPARATOR; - } - char* fileNamePtr = OS.g_filename_from_utf8 (toStringz(path), -1, null, null, null); - OS.gtk_file_selection_set_filename (handle, fileNamePtr); - OS.g_free (fileNamePtr); - } - GtkFileSelection* selection = cast(GtkFileSelection*)handle; - OS.gtk_file_selection_hide_fileop_buttons (handle); - auto fileListParent = OS.gtk_widget_get_parent (selection.file_list); - OS.gtk_widget_hide (selection.file_list); - OS.gtk_widget_hide (fileListParent); - if (message.length > 0) { - auto labelHandle = OS.gtk_label_new (toStringz(message)); - OS.gtk_label_set_line_wrap (labelHandle, true); - OS.gtk_misc_set_alignment (labelHandle, 0.0f, 0.0f); - OS.gtk_container_add (selection.main_vbox, labelHandle); - OS.gtk_box_set_child_packing ( - selection.main_vbox, labelHandle, false, false, 0, OS.GTK_PACK_START); - OS.gtk_widget_show (labelHandle); - } - Display display = parent !is null ? parent.getDisplay (): Display.getCurrent (); - display.addIdleProc (); - Dialog oldModal = null; - if (OS.gtk_window_get_modal (handle)) { - oldModal = display.getModalDialog (); - display.setModalDialog (this); - } - int signalId = 0; - int /*long*/ hookId = 0; - CallbackData emissionData; - emissionData.display = display; - emissionData.data = handle; - if ((style & DWT.RIGHT_TO_LEFT) !is 0) { - signalId = OS.g_signal_lookup (OS.map.ptr, OS.GTK_TYPE_WIDGET()); - hookId = OS.g_signal_add_emission_hook (signalId, 0, &Display.emissionFunc, &emissionData, null); - } - int response = OS.gtk_dialog_run (handle); - if ((style & DWT.RIGHT_TO_LEFT) !is 0) { - OS.g_signal_remove_emission_hook (signalId, hookId); - } - if (OS.gtk_window_get_modal (handle)) { - display.setModalDialog (oldModal); - } - if (response is OS.GTK_RESPONSE_OK) { - char* fileNamePtr = OS.gtk_file_selection_get_filename (handle); - uint items_written; - char* utf8Ptr = OS.g_filename_to_utf8 (fileNamePtr, -1, null, &items_written, null); - if (utf8Ptr !is null) { - String osAnswer = utf8Ptr[ 0 .. items_written ]; - if (osAnswer.length !is 0) { - /* remove trailing separator, unless root directory */ - if ( osAnswer != SEPARATOR && osAnswer[ $-1 .. $ ] == SEPARATOR ) { - osAnswer = osAnswer[ 0 .. $ - 1 ]; - } - answer = filterPath = osAnswer.dup; - } - OS.g_free (utf8Ptr); - } - } - display.removeIdleProc (); - OS.gtk_widget_destroy (handle); - return answer; -} -/** - * Sets the path that the dialog will use to filter - * the directories it shows to the argument, which may - * be null. If the string is null, then the operating - * system's default filter path will be used. - *

- * Note that the path string is platform dependent. - * For convenience, either '/' or '\' can be used - * as a path separator. - *

- * - * @param string the filter path - */ -public void setFilterPath (String string) { - filterPath = string.dup; -} -/** - * Sets the dialog's message, which is a description of - * the purpose for which it was opened. This message will be - * visible on the dialog while it is open. - * - * @param string the message - * - */ -public void setMessage (String string) { - // DWT extension: allow null for zero length string - //if (string is null) error (DWT.ERROR_NULL_ARGUMENT); - message = string.dup; -} -}