2013-02-28 11:29:05 -05:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: interface/wx/preferences.h
|
|
|
|
// Purpose: wxPreferencesEditor class documentation.
|
|
|
|
// Author: Vaclav Slavik
|
|
|
|
// Created: 2013-02-26
|
|
|
|
// Copyright: (c) 2013 Vaclav Slavik <vslavik@fastmail.fm>
|
|
|
|
// Licence: wxWindows licence
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
/**
|
|
|
|
Manage preferences dialog.
|
|
|
|
|
|
|
|
This class encapsulates the differences -- both in appearance and
|
|
|
|
behaviour -- between preferences dialogs on different platforms. In
|
2020-07-04 16:08:24 -04:00
|
|
|
particular, macOS preferences look very different from the typical notebook
|
|
|
|
control used on other platforms, and both macOS and GTK+ preferences windows
|
2013-02-28 11:29:05 -05:00
|
|
|
are modeless unlike Windows options dialogs that are typically modal.
|
|
|
|
|
|
|
|
wxPreferencesEditor is able to hide the differences by hiding the creation
|
|
|
|
of preferences window from the API. Instead, you create an instance of
|
|
|
|
wxPreferencesEditor and add page descriptions in the form of
|
|
|
|
wxPreferencesPage using its AddPage() method. After setting up the editor
|
|
|
|
object, you must call Show() to present preferences to the user.
|
|
|
|
|
|
|
|
@note Notice that this class is not derived from wxWindow and hence
|
|
|
|
doesn't represent a window, even if its Show() method does create one
|
|
|
|
internally.
|
|
|
|
|
|
|
|
@library{wxcore}
|
|
|
|
|
|
|
|
@since 2.9.5
|
|
|
|
*/
|
|
|
|
class wxPreferencesEditor
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Constructor.
|
|
|
|
|
|
|
|
Creates an empty editor, use AddPage() to add controls to it.
|
2013-05-16 10:42:56 -04:00
|
|
|
|
|
|
|
@param title The title overriding the default title of the top level
|
|
|
|
window used by the editor. It is recommended to not specify this
|
|
|
|
parameter to use the native convention for the preferences dialogs
|
|
|
|
instead.
|
2013-02-28 11:29:05 -05:00
|
|
|
*/
|
2013-05-16 10:42:56 -04:00
|
|
|
wxPreferencesEditor(const wxString& title = wxString());
|
2013-02-28 11:29:05 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Destructor.
|
|
|
|
|
|
|
|
Destroying this object hides the associated preferences window if it is
|
|
|
|
open at the moment.
|
|
|
|
|
|
|
|
The destructor is non-virtual as this class is not supposed to be
|
|
|
|
derived from.
|
|
|
|
*/
|
|
|
|
~wxPreferencesEditor();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Add a new page to the editor.
|
|
|
|
|
|
|
|
The editor takes ownership of the page and will delete it from its
|
|
|
|
destructor (but not sooner).
|
|
|
|
|
|
|
|
@see wxPreferencesPage, wxStockPreferencesPage
|
|
|
|
*/
|
|
|
|
void AddPage(wxPreferencesPage *page);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Show the preferences dialog or bring it to the top if it's already
|
|
|
|
shown.
|
|
|
|
|
|
|
|
Notice that this method may or may not block depending on the platform,
|
|
|
|
i.e. depending on whether the dialog is modal or not.
|
|
|
|
|
|
|
|
@param parent The window that invokes the preferences.
|
|
|
|
Call Dismiss() before it's destroyed.
|
|
|
|
*/
|
2013-05-16 10:43:02 -04:00
|
|
|
virtual void Show(wxWindow* parent);
|
2013-02-28 11:29:05 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Hide the currently shown dialog, if any.
|
|
|
|
|
2013-05-16 10:43:09 -04:00
|
|
|
This is typically called to dismiss the dialog if the object whose
|
|
|
|
preferences it is editing was closed.
|
2013-02-28 11:29:05 -05:00
|
|
|
*/
|
|
|
|
void Dismiss();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns whether changes to values in preferences pages should be
|
|
|
|
applied immediately or only when the user clicks the OK button.
|
|
|
|
|
2020-07-04 16:08:24 -04:00
|
|
|
Currently, changes are applied immediately on macOS and GTK+.
|
2013-02-28 11:29:05 -05:00
|
|
|
|
|
|
|
The preprocessor macro `wxHAS_PREF_EDITOR_APPLY_IMMEDIATELY` is defined
|
|
|
|
in this case as well.
|
|
|
|
*/
|
2019-10-20 05:52:26 -04:00
|
|
|
static bool ShouldApplyChangesImmediately();
|
2013-05-16 10:43:06 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns whether the preferences dialog is shown modally.
|
|
|
|
|
|
|
|
If this method returns false, as it currently does in wxGTK and wxOSX,
|
|
|
|
Show() simply makes the dialog visible and returns immediately. If it
|
|
|
|
returns true, as it does in wxMSW and under the other platforms, then
|
|
|
|
the dialog is shown modally, i.e. Show() blocks until the user
|
|
|
|
dismisses it.
|
|
|
|
|
|
|
|
Notice that it isn't necessary to test the return value of this method
|
|
|
|
to use this class normally, its interface is designed to work in both
|
|
|
|
cases. However it can sometimes be necessary to call it if the program
|
|
|
|
needs to handle modal dialogs specially, e.g. perhaps to block some
|
|
|
|
periodic background update operation while a modal dialog is shown.
|
|
|
|
*/
|
|
|
|
static bool ShownModally();
|
2013-02-28 11:29:05 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
One page of preferences dialog.
|
|
|
|
|
|
|
|
This is the base class for implementation of application's preferences. Its
|
|
|
|
methods return various properties of the page, such as title or icon. The
|
|
|
|
actual page is created by CreateWindow().
|
|
|
|
|
|
|
|
@see wxStockPreferencesPage
|
|
|
|
|
|
|
|
@library{wxcore}
|
|
|
|
|
|
|
|
@since 2.9.5
|
|
|
|
*/
|
|
|
|
class wxPreferencesPage
|
|
|
|
{
|
|
|
|
public:
|
2013-03-05 01:50:37 -05:00
|
|
|
/// Constructor.
|
|
|
|
wxPreferencesPage();
|
|
|
|
|
2013-02-28 11:29:05 -05:00
|
|
|
/// Destructor.
|
2013-03-05 01:50:37 -05:00
|
|
|
virtual ~wxPreferencesPage();
|
2013-02-28 11:29:05 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Return name of the page.
|
|
|
|
|
|
|
|
The name is used for notebook tab's label, icon label etc., depending
|
|
|
|
on the platform.
|
|
|
|
*/
|
|
|
|
virtual wxString GetName() const = 0;
|
|
|
|
|
|
|
|
/**
|
2022-03-10 13:54:58 -05:00
|
|
|
Return the icon to be used for the page on some platforms.
|
2013-02-28 11:29:05 -05:00
|
|
|
|
2020-07-04 16:08:24 -04:00
|
|
|
Currently only used on macOS.
|
2013-02-28 11:29:05 -05:00
|
|
|
|
2022-03-10 13:54:58 -05:00
|
|
|
@note This method is not pure virtual, but must be implemented on the
|
|
|
|
platforms that require it (macOS). The preprocessor symbol
|
2013-02-28 11:29:05 -05:00
|
|
|
`wxHAS_PREF_EDITOR_ICONS` is defined if this method must be
|
|
|
|
implemented.
|
2022-03-10 13:54:58 -05:00
|
|
|
|
|
|
|
@since 3.1.6
|
|
|
|
*/
|
|
|
|
virtual wxBitmapBundle GetIcon() const = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
@deprecated This function is deprecated, override GetIcon() instead.
|
2013-02-28 11:29:05 -05:00
|
|
|
*/
|
|
|
|
virtual wxBitmap GetLargeIcon() const = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
Create a window for this page.
|
|
|
|
|
|
|
|
The window will be placed into the preferences dialog in
|
|
|
|
platform-specific manner. Depending on the platform, this method may
|
|
|
|
be called before showing the preferences window, when switching to its
|
|
|
|
tab or even more than once. Don't make assumptions about the number of
|
|
|
|
times or the specific time when it is called.
|
|
|
|
|
|
|
|
The caller takes ownership of the window.
|
|
|
|
|
|
|
|
wxPanel is usually used, but doesn't have to be.
|
|
|
|
|
|
|
|
@param parent Parent window to use.
|
|
|
|
*/
|
|
|
|
virtual wxWindow *CreateWindow(wxWindow *parent) = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
Specialization of wxPreferencesPage useful for certain commonly used
|
|
|
|
preferences page.
|
|
|
|
|
2020-07-04 16:08:24 -04:00
|
|
|
On macOS, preferences pages named "General" and "Advanced" are commonly used
|
2013-02-28 11:29:05 -05:00
|
|
|
in apps and the OS provides stock icons for them that should be used.
|
2015-06-04 18:54:02 -04:00
|
|
|
Instead of reimplementing this behaviour yourself, you can inherit from
|
2013-02-28 11:29:05 -05:00
|
|
|
wxStockPreferencesPage and get correct title and icon.
|
|
|
|
|
2022-03-10 13:54:58 -05:00
|
|
|
Notice that this class only implements GetName() and GetIcon(), you
|
2013-02-28 11:29:05 -05:00
|
|
|
still have to provide the rest of wxPreferencesPage implementation.
|
|
|
|
|
|
|
|
@library{wxcore}
|
|
|
|
|
|
|
|
@since 2.9.5
|
|
|
|
*/
|
|
|
|
class wxStockPreferencesPage : public wxPreferencesPage
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
/// Kinds of stock pages.
|
|
|
|
enum Kind
|
|
|
|
{
|
|
|
|
/// The "General" page
|
|
|
|
Kind_General,
|
|
|
|
/// The "Advanced" page
|
|
|
|
Kind_Advanced
|
|
|
|
};
|
|
|
|
|
|
|
|
/// Constructor.
|
2013-03-05 01:50:37 -05:00
|
|
|
wxStockPreferencesPage(Kind kind);
|
2013-02-28 11:29:05 -05:00
|
|
|
|
|
|
|
/// Returns the page's kind.
|
2013-03-05 01:50:37 -05:00
|
|
|
Kind GetKind() const;
|
2013-02-28 11:29:05 -05:00
|
|
|
|
|
|
|
/// Reimplemented to return suitable name for the page's kind.
|
|
|
|
virtual wxString GetName() const;
|
2020-07-04 16:08:24 -04:00
|
|
|
/// Reimplemented to return stock icon on macOS.
|
2022-03-10 13:54:58 -05:00
|
|
|
virtual wxBitmapBundle GetIcon() const;
|
2013-02-28 11:29:05 -05:00
|
|
|
};
|