# HG changeset patch # User Frank Benoit # Date 1219433765 -7200 # Node ID dc2ae028d2d89e097b20ed6d2c493af311a12be5 # Parent 9995e4a9d2ee3080272f539b120e84bbfde44aaa Fix: DateTime to startup with current Date/Time. diff -r 9995e4a9d2ee -r dc2ae028d2d8 dwt/widgets/DateTime.d --- a/dwt/widgets/DateTime.d Thu Aug 21 17:34:04 2008 +0200 +++ b/dwt/widgets/DateTime.d Fri Aug 22 21:36:05 2008 +0200 @@ -40,6 +40,7 @@ static import tango.text.Util; //static import tango.text.locale.Core; static import tango.text.Text; +static import tango.time.Time; static import tango.time.WallClock; static import tango.time.chrono.Gregorian; static import tango.time.chrono.Calendar; @@ -84,6 +85,17 @@ return instance; } + public this(){ + tango.time.Time.Time time = tango.time.WallClock.WallClock.now(); + tango.time.Time.TimeSpan span = time.time.span; + this.second = span.seconds % 60; + this.minute = span.minutes % 60; + this.hour = span.hours; + auto greg = tango.time.chrono.Gregorian.Gregorian.generic; + this.dayofmonth = greg.getDayOfMonth( time ); + this.month = greg.getMonth( time ); + this.year = greg.getYear( time ); + } int getActualMaximum(int field){ switch( field ){ case YEAR: @@ -288,68 +300,6 @@ } } -/+ -private int getCalendarActualMaximum( tango.time.Time.Time time, int field ){ - int year = cal.getYear( time ); - int month = cal.getMonth( time ); - tango.time.Time.TimeOfDay tod = tango.time.Time.TimeOfDay( time.ticks ); - switch( field ){ - case YEAR: return tango.time.chrono.Gregorian.Gregorian.MAX_YEAR; - case MONTH: return cal.getMonthsInYear( year, tango.time.chrono.Gregorian.Gregorian.AD_ERA ) -1; // Jan is 0, so max is 11 - case DAY_OF_MONTH:return cal.getDaysInMonth( year, month, tango.time.chrono.Gregorian.Gregorian.AD_ERA ) -1; // 1st is 0 - case HOUR:return 23; - case MINUTE:return 59; - case SECOND:return 59; - case AM_PM:return PM; - default: - } -} - -private int getCalendarActualMinimum( tango.time.Time.Time time, int field ){ - switch( field ){ - case YEAR: return 1800; - case MONTH: return 1; - case DAY_OF_MONTH:return 1; - case HOUR:return 0; - case MINUTE:return 0; - case SECOND:return 0; - case AM_PM:return AM; - default: - } -} -private int getCalendarField( tango.time.Time.Time time, int field ){ - switch( field ){ - case YEAR: return cal.getYear( time ); - case MONTH: return cal.getMonth( time ); - case DAY_OF_MONTH:return cal.getDayOfMonth( time ); - default: - } - tango.time.Time.TimeOfDay tod = tango.time.Time.TimeOfDay( time.ticks ); - switch( field ){ - case HOUR:return tod.hours; - case MINUTE:return tod.minutes; - case SECOND:return tod.seconds; - case AM_PM:return tod.hours > 12; - default: - } - assert(false); -} -enum { - AM, - PM, - AM_PM, - HOUR, - MINUTE, - SECOND, - MONTH, - YEAR, - DAY_OF_MONTH, - DAY_SELECTED, - MONTH_CHANGED, - HOUR_OF_DAY -} - -+/ /** * Instances of this class are selectable user interface @@ -371,7 +321,7 @@ *

* IMPORTANT: This class is not intended to be subclassed. *

- * + * * @see DateTime snippets * @see DWT Example: ControlExample * @see Sample code and further information diff -r 9995e4a9d2ee -r dc2ae028d2d8 dwt/widgets/DirectoryDialog.d~ --- a/dwt/widgets/DirectoryDialog.d~ Thu Aug 21 17:34:04 2008 +0200 +++ /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; -} -}