Difference between revisions of "Roadmap to Windows"

From GNUstepWiki
Jump to navigation Jump to search
 
(3 intermediate revisions by 3 users not shown)
Line 1: Line 1:
= Introduction =
+
This page is the starter for the "Road to Windows", a goal of the GNUstep project to deliver a very [[What is Native on Windows|native]] implementation.  GNUstep currently works very well on Windows, but does not entirely blend in.  The hope is that by completing the tasks discussed here that it will help GNUstep be a better Windows "citizen."
  
This page is the starter for the "Road to Windows", a goal of the GNUstep project to deliver a very [[What is Native on Windows|native]] implementation.
 
 
Windows has many differences with *nix and OpenStep generally. These need to be dealt with in a way that delivers a 'Windows experience' to the end users but doesn't compromise the OpenStep API.
 
Windows has many differences with *nix and OpenStep generally. These need to be dealt with in a way that delivers a 'Windows experience' to the end users but doesn't compromise the OpenStep API.
Some differences are expected.
+
Some differences are expected, but must be minimised in order to maximise software portability.
  
 
If you'd like to work on any of these tasks you should put your hand up in gnustep-discuss or e-mail [[User:Sheldon|me]] directly.
 
If you'd like to work on any of these tasks you should put your hand up in gnustep-discuss or e-mail [[User:Sheldon|me]] directly.
 
= Core Modules =
 
  
 
== Make ==
 
== Make ==
  
Relies on a unix shell
+
* Relies on a unix shell: We use MSYS and the mingw32 toolchain to provide a very unix-like build environment.
  We use MSYS and the mingw32 toolchain to provide a very unix-like build environment.
 
 
 
 
* Make doesn't support paths with spaces. Fundamental design flaw. Ideally we'd like a solution to this.
 
* Make doesn't support paths with spaces. Fundamental design flaw. Ideally we'd like a solution to this.
* Current implementation of 'make install' assumes *nix which doesn't really apply.
+
* Current implementation of 'make install' assumes *nix which doesn't really apply. What does this mean?
  
 
== Base ==
 
== Base ==
  
NSDate
+
=== General ===
* Olsen <-> Windows timezone name mapping
+
 
* knownTimeZoneNames returns Olsen
+
* More flexible layout mechanism (what needs doing for this) & options to control in config file. What does this mean? perhaps we actually need a less flexible mechanism, but the 'right' one?
* timeZoneWithName takes Olsen
+
* Win32 "native" mechanism over-rides ... but for what?
* unicode improvements (I have code for this...)
+
 
 +
=== GSXML ===
  
GSXML
+
* Use single url expansion mechanism for all (no special -//GNUstep//DTD)
* Use single url expansion mechanism for all (no special -//GNUstep//DTD
+
* Organise them clearly somehow ... need tio decide how.
  Add option for loading from URL, not just local files. (cache in ~)
 
  Organise them as
 
    /Library/DTDs/GNUstep/
 
    /Library/DTDs/Apple Computer/
 
    /Library/DTDs/Microsoft/
 
  
=== Additions & Improvements ===
+
=== Logging ===
  
==== General ====
+
* NSLog() should only be used for vital/error messages. These should be localizable.
* More flexible layout mechanism (what needs doing for this) & options to control in config file.
+
* Localize all error output.
* Win32 "native" mechanism over-rides
+
* Should implement FACILITY options for logging to SYSLOG if MacOS-X does this ... should be compatible.
 +
* Use more flexible DebugLog for other output.
  
==== Logging ====
+
=== Dates & Times ===
NSLog() should only be used for vital/error messages. These should be localizable.
 
Localize all error output.
 
  
Should implement FACILITY options for logging to SYSLOG
+
* NSDate
Use more flexible DebugLog for other output.
+
** Olsen <-> Windows timezone name mapping
 +
** knownTimeZoneNames returns Olsen
 +
** timeZoneWithName takes Olsen
 +
** unicode improvements (I have code for this...)
  
==== Dates & Times ====
+
* Install/runtime option for native timezones only
  
* Build option for native timezones only
+
* Add classes for other calendars as soon as we have both windows and unix implementations:
 +
** + GSJulianCalendarDate
 +
** + GSHebrewCalendarDate
 +
** + GSChineseCalendarDate
 +
** + GSJapaneseCalendarDate
 +
** + GSBuddhistCalendarDate
  
* Add classes for other calendars:
+
=== Strings ===
** + NSJulianCalendarDate
 
** + NSHebrewCalendarDate
 
** + NSChineseCalendarDate
 
** + NSJapaneseCalendarDate
 
** + NSBuddhistCalendarDate
 
  
==== Strings ====
+
* NSCaseInsensitiveSearch
NSCaseInsensitiveSearch
+
** Implementation tests
* Implementation tests
+
** Add full Unicode case folding
* Add full Unicode case folding
 
  
NSLiteralSearch
+
* NSLiteralSearch
* Corrections for composed sequences?
+
** Corrections for composed sequences?
  
Composed sequences & Normalisation
+
* Composed sequences & Normalisation
* Check composed sequence handling generally
+
** Check composed sequence handling generally
* Implement additional normalisation forms
+
** Implement additional normalisation forms
* proper (full) collation and comparison
+
** proper (full) collation and comparison
  
UTF32
+
* UTF32
* Doesn't handle non-BMP characters right now.
+
** Does this handle non-BMP characters right now? If not, what needs fixing?
  
NSStringEncoding
+
* NSStringEncoding
* additional encodings for Indian, SE Asia...
+
** additional encodings for Indian, SE Asia...
  
 
== Gui ==
 
== Gui ==
  
Drawing
+
=== General ===
  Some controls are drawn. Others use pre-drawn images. These don't change
 
  in response to color preferences. That should be corrected.
 
  Notable: Radio buttons, check boxes. scrollbar arrows, menu arrows,
 
* Clean drawing code to use right colors from system color map
 
  
  Drawing should be improved generally so that it looks better and is faster
+
* NSMenu
 +
** Want horizontal, in-window menus theme
  
Taskbar
+
* NSPopupButton
  Application icons should appear in the taskbar and on the applications windows in the same way as other windows applications. Behaviour should follow.
+
** Menu shouldn't require continuous mousedown but rather behave like other windows menus when using windows theme.
  
NSImage
+
* NSHelpPanel
* support for more image types
+
** Interface to native windows help system and/or 'normal' help
 +
** [NSApplication showHelp] looks in Resources/(lang).lproj
 +
*** Use Info.plist for name of help book
 +
*** opens "AppName Help.chm" or
 +
*** opens "AppName Help.hlp"
 +
** [NSApplication activateContextHelpMode]
 +
** Need a help generation/editing tool to support both unix and windows style help.
  
NSColor/NSColorList
+
* Logging
* Load System color palette from current desktop settings (I have code for this...)
+
** Use NSLog() only for vital messages
* improve system color startup, don't automatically write System.clr to user folder
+
** Use NSDebugLLog() everywhere else
* get gnustep-back to handle WM_SYSCOLORCHANGE messages
+
** Localise everywhere
* Support ICCM colour profiles and colour correction
 
* +[availableColorLists] should read directory every time. If you need speed, cache yourself
 
  
NSMenu
+
=== Drawing ===
* Want horizontal, in-window menus
 
  
NSPopupButton
+
* Some controls are drawn. Others use pre-drawn images. These don't change in response to color preferences. That should be corrected. Notable: Radio buttons, check boxes. scrollbar arrows, menu arrows. Clean drawing code to use right colors from system color map ... should all go into theme system.
* Menu shouldn't require continuous mousedown but rather behave like other windows menus.
 
  
NSHelpPanel
+
* Drawing should be improved generally so that it looks better and is faster
* Interface to native windows help system
 
* [NSApplication showHelp] looks in Resources/(lang).lproj
 
** Use Info.plist for name of help book
 
** opens "AppName Help.chm" or
 
** opens "AppName Help.hlp"
 
* [NSApplication activateContextHelpMode]
 
  
=== Additions & Improvements ===
+
* Taskbar
 +
** Application icons should appear in the taskbar and on the applications windows in the same way as other windows applications. Behaviour should follow.
  
==== General ====
+
* NSImage
Logging
+
** support for more image types
  Use NSLog() only for vital messages
 
  Use NSDebugLLog() everywhere else
 
  Localise everywhere
 
  
= Additional Elements =
+
* NSColor/NSColorList
 +
** Windows theme code may load System color palette from current desktop settings (I have code for this...)
 +
** improve system color startup, don't automatically write System.clr to user folder
 +
** get gnustep-back to handle WM_SYSCOLORCHANGE messages
 +
** Support ICCM colour profiles and colour correction
 +
** +[availableColorLists] should check directory modification date every time.
  
== Panels ==
+
=== Panels ===
  
NSOpenPanel
+
* NSOpenPanel, NSSavePanel
NSSavePanel
+
** If NSDefaultOpenDirectory isn't set should use "~/" on *nix and "My Documents" on Win32.
* If NSDefaultOpenDirectory isn't set should use "~/" on *nix and "My Documents" on Win32.
+
** Must support multiple drives etc on Win32
* Must support multiple drives etc on Win32
+
** Should have theme able to display as Treeview, rather than Browser
  
+ Should display as Treeview, rather than Browser
+
[[Category:Microsoft Windows]]

Latest revision as of 19:28, 3 April 2009

This page is the starter for the "Road to Windows", a goal of the GNUstep project to deliver a very native implementation. GNUstep currently works very well on Windows, but does not entirely blend in. The hope is that by completing the tasks discussed here that it will help GNUstep be a better Windows "citizen."

Windows has many differences with *nix and OpenStep generally. These need to be dealt with in a way that delivers a 'Windows experience' to the end users but doesn't compromise the OpenStep API. Some differences are expected, but must be minimised in order to maximise software portability.

If you'd like to work on any of these tasks you should put your hand up in gnustep-discuss or e-mail me directly.

Make

  • Relies on a unix shell: We use MSYS and the mingw32 toolchain to provide a very unix-like build environment.
  • Make doesn't support paths with spaces. Fundamental design flaw. Ideally we'd like a solution to this.
  • Current implementation of 'make install' assumes *nix which doesn't really apply. What does this mean?

Base

General

  • More flexible layout mechanism (what needs doing for this) & options to control in config file. What does this mean? perhaps we actually need a less flexible mechanism, but the 'right' one?
  • Win32 "native" mechanism over-rides ... but for what?

GSXML

  • Use single url expansion mechanism for all (no special -//GNUstep//DTD)
  • Organise them clearly somehow ... need tio decide how.

Logging

  • NSLog() should only be used for vital/error messages. These should be localizable.
  • Localize all error output.
  • Should implement FACILITY options for logging to SYSLOG if MacOS-X does this ... should be compatible.
  • Use more flexible DebugLog for other output.

Dates & Times

  • NSDate
    • Olsen <-> Windows timezone name mapping
    • knownTimeZoneNames returns Olsen
    • timeZoneWithName takes Olsen
    • unicode improvements (I have code for this...)
  • Install/runtime option for native timezones only
  • Add classes for other calendars as soon as we have both windows and unix implementations:
    • + GSJulianCalendarDate
    • + GSHebrewCalendarDate
    • + GSChineseCalendarDate
    • + GSJapaneseCalendarDate
    • + GSBuddhistCalendarDate

Strings

  • NSCaseInsensitiveSearch
    • Implementation tests
    • Add full Unicode case folding
  • NSLiteralSearch
    • Corrections for composed sequences?
  • Composed sequences & Normalisation
    • Check composed sequence handling generally
    • Implement additional normalisation forms
    • proper (full) collation and comparison
  • UTF32
    • Does this handle non-BMP characters right now? If not, what needs fixing?
  • NSStringEncoding
    • additional encodings for Indian, SE Asia...

Gui

General

  • NSMenu
    • Want horizontal, in-window menus theme
  • NSPopupButton
    • Menu shouldn't require continuous mousedown but rather behave like other windows menus when using windows theme.
  • NSHelpPanel
    • Interface to native windows help system and/or 'normal' help
    • [NSApplication showHelp] looks in Resources/(lang).lproj
      • Use Info.plist for name of help book
      • opens "AppName Help.chm" or
      • opens "AppName Help.hlp"
    • [NSApplication activateContextHelpMode]
    • Need a help generation/editing tool to support both unix and windows style help.
  • Logging
    • Use NSLog() only for vital messages
    • Use NSDebugLLog() everywhere else
    • Localise everywhere

Drawing

  • Some controls are drawn. Others use pre-drawn images. These don't change in response to color preferences. That should be corrected. Notable: Radio buttons, check boxes. scrollbar arrows, menu arrows. Clean drawing code to use right colors from system color map ... should all go into theme system.
  • Drawing should be improved generally so that it looks better and is faster
  • Taskbar
    • Application icons should appear in the taskbar and on the applications windows in the same way as other windows applications. Behaviour should follow.
  • NSImage
    • support for more image types
  • NSColor/NSColorList
    • Windows theme code may load System color palette from current desktop settings (I have code for this...)
    • improve system color startup, don't automatically write System.clr to user folder
    • get gnustep-back to handle WM_SYSCOLORCHANGE messages
    • Support ICCM colour profiles and colour correction
    • +[availableColorLists] should check directory modification date every time.

Panels

  • NSOpenPanel, NSSavePanel
    • If NSDefaultOpenDirectory isn't set should use "~/" on *nix and "My Documents" on Win32.
    • Must support multiple drives etc on Win32
    • Should have theme able to display as Treeview, rather than Browser