Difference between revisions of "Cocoa Internals/Dialogs"
m (→Class Override) |
m (→See Also) |
||
Line 24: | Line 24: | ||
Doing that will cause problems using class methods of the sharedPanel (and likely something else) | Doing that will cause problems using class methods of the sharedPanel (and likely something else) | ||
+ | ==File Dialog Options== | ||
+ | Some of the options are not supported, please refer to the table below for the implementation details | ||
+ | {| class="wikitable" | ||
+ | !Options | ||
+ | !Supported | ||
+ | !Description | ||
+ | |- | ||
+ | |ofReadOnly | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofOverwritePrompt | ||
+ | |No | ||
+ | |In macOS prior to 10.15 it was possible to implement the feature by tricking the NSSaveDialog when selecting the name. | ||
+ | |||
+ | However, this ability was removed in 10.15 (due to security considerations?) | ||
+ | |||
+ | So now, overwrite prompt will always show up | ||
+ | |- | ||
+ | |ofHideReadOnly | ||
+ | |No | ||
+ | |There's no concept of "readOnly" files in macOS filesystems. | ||
+ | |||
+ | There's also no configuration in the dialog, to hide files | ||
+ | |- | ||
+ | |ofNoChangeDir | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofShowHelp | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofNoValidate | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofAllowMultiSelect | ||
+ | |Yes | ||
+ | |NSOpenPanel.ofAllowMultiSelect() | ||
+ | |- | ||
+ | |ofExtensionDifferent, | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofPathMustExist | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofFileMustExist | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofCreatePrompt | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofShareAware | ||
+ | |No | ||
+ | |System native dialogs are always share aware OR act within sandbox allowances | ||
+ | |- | ||
+ | |ofNoReadOnlyReturn | ||
+ | |No | ||
+ | |No concept of "readonly" file | ||
+ | |- | ||
+ | |ofNoTestFileCreate | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofNoNetworkButton | ||
+ | |No | ||
+ | |All shares and networks are available or restricted by SandBox limitations | ||
+ | |- | ||
+ | |ofNoLongNames | ||
+ | |No | ||
+ | |Any file can have long name. OSX never suffered from 8.3 limitation | ||
+ | |- | ||
+ | |ofOldStyleDialog | ||
+ | |No | ||
+ | |There's no old style on macOS | ||
+ | ...but, there's an opportunity to use in order to allow some emulation | ||
+ | |- | ||
+ | |ofNoDereferenceLinks | ||
+ | |No | ||
+ | |Links are treated by the system. | ||
+ | |- | ||
+ | |ofNoResolveLinks | ||
+ | |No | ||
+ | |Links are treated by the system | ||
+ | |- | ||
+ | |ofEnableIncludeNotify | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofEnableSizing | ||
+ | |No | ||
+ | |Dialogs are always sizable to the macOS rules | ||
+ | |- | ||
+ | |ofDontAddToRecent | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofForceShowHidden | ||
+ | |Yes | ||
+ | |NSSaveDialog.setShowsHiddenFiles() | ||
+ | |- | ||
+ | |ofViewDetail | ||
+ | |No | ||
+ | | | ||
+ | |- | ||
+ | |ofAutoPreview | ||
+ | |No | ||
+ | | | ||
+ | |} | ||
==See Also== | ==See Also== | ||
*[[Cocoa Internals]] | *[[Cocoa Internals]] | ||
[[Category:macOS]] | [[Category:macOS]] | ||
[[Category:Cocoa]] | [[Category:Cocoa]] |
Revision as of 01:11, 31 May 2020
Common Considerations
Modality
Neither of the Cocoa dialogs (OpenFile, SaveFile, Font or Color) are modal!
Meaning that one can open a dialog and keep using the other application windows and the application menu.
This doesn't work well, if the LCL design, where each dialog is opened by Execute method, which doesn't return until the modal dialog is closed.
For this particular reason, Cocoa WS does the following:
- every dialog is called as the application modal window (preventing other windows of the application from getting any user input)
- the application menu is disabled, until the dialog is closed
- where applicable add "Ok" and "Cancel" buttons are added to dialogs. Indicating a user that the dialog can be closed in order to make the selection.
No restoration
Starting with macOS 10.7 Cocoa will attempt to restore the Application windows between Launches.
It's a nice user feature, which conflicts with LCL. Since LCL adds custom controls to a dialog, and the restoration requires a special "restorationClass" to be provided.
Instead of restoring dialogs, CocoaWS explicitly forbids the restoration of them.
Class Override
Unlike NSApplication, dialog classes cannot be overwritten in the following manner:
TCocoaColorPanel.sharedPanel
Doing that will cause problems using class methods of the sharedPanel (and likely something else)
File Dialog Options
Some of the options are not supported, please refer to the table below for the implementation details
Options | Supported | Description |
---|---|---|
ofReadOnly | No | |
ofOverwritePrompt | No | In macOS prior to 10.15 it was possible to implement the feature by tricking the NSSaveDialog when selecting the name.
However, this ability was removed in 10.15 (due to security considerations?) So now, overwrite prompt will always show up |
ofHideReadOnly | No | There's no concept of "readOnly" files in macOS filesystems.
There's also no configuration in the dialog, to hide files |
ofNoChangeDir | No | |
ofShowHelp | No | |
ofNoValidate | No | |
ofAllowMultiSelect | Yes | NSOpenPanel.ofAllowMultiSelect() |
ofExtensionDifferent, | No | |
ofPathMustExist | No | |
ofFileMustExist | No | |
ofCreatePrompt | No | |
ofShareAware | No | System native dialogs are always share aware OR act within sandbox allowances |
ofNoReadOnlyReturn | No | No concept of "readonly" file |
ofNoTestFileCreate | No | |
ofNoNetworkButton | No | All shares and networks are available or restricted by SandBox limitations |
ofNoLongNames | No | Any file can have long name. OSX never suffered from 8.3 limitation |
ofOldStyleDialog | No | There's no old style on macOS
...but, there's an opportunity to use in order to allow some emulation |
ofNoDereferenceLinks | No | Links are treated by the system. |
ofNoResolveLinks | No | Links are treated by the system |
ofEnableIncludeNotify | No | |
ofEnableSizing | No | Dialogs are always sizable to the macOS rules |
ofDontAddToRecent | No | |
ofForceShowHidden | Yes | NSSaveDialog.setShowsHiddenFiles() |
ofViewDetail | No | |
ofAutoPreview | No |