]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/utils.h
Add test for absence of events from wxSpinCtrlDouble ctor.
[wxWidgets.git] / interface / wx / utils.h
index 6e13e3a3dd5acffe5bc4f9d32e8fbc3552e58fbf..5573a19b93e4f89b9e6a6234f04b1cc1f6f8e600 100644 (file)
@@ -2,10 +2,59 @@
 // Name:        utils.h
 // Purpose:     interface of various utility classes and functions
 // Author:      wxWidgets team
-// RCS-ID:      $Id$
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
+/**
+    Signal constants used by wxProcess.
+*/
+enum wxSignal
+{
+    wxSIGNONE = 0,  //!< verify if the process exists under Unix
+    wxSIGHUP,
+    wxSIGINT,
+    wxSIGQUIT,
+    wxSIGILL,
+    wxSIGTRAP,
+    wxSIGABRT,
+    wxSIGEMT,
+    wxSIGFPE,
+    wxSIGKILL,      //!< forcefully kill, dangerous!
+    wxSIGBUS,
+    wxSIGSEGV,
+    wxSIGSYS,
+    wxSIGPIPE,
+    wxSIGALRM,
+    wxSIGTERM       //!< terminate the process gently
+};
+
+/**
+    Return values for wxProcess::Kill.
+*/
+enum wxKillError
+{
+    wxKILL_OK,              //!< no error
+    wxKILL_BAD_SIGNAL,      //!< no such signal
+    wxKILL_ACCESS_DENIED,   //!< permission denied
+    wxKILL_NO_PROCESS,      //!< no such process
+    wxKILL_ERROR            //!< another, unspecified error
+};
+
+enum wxKillFlags
+{
+    wxKILL_NOCHILDREN = 0,  //!< don't kill children
+    wxKILL_CHILDREN = 1     //!< kill children
+};
+
+enum wxShutdownFlags
+{
+    wxSHUTDOWN_FORCE    = 1, //!< can be combined with other flags (MSW-only)
+    wxSHUTDOWN_POWEROFF = 2, //!< power off the computer
+    wxSHUTDOWN_REBOOT   = 4, //!< shutdown and reboot
+    wxSHUTDOWN_LOGOFF   = 8  //!< close session (currently MSW-only)
+};
+
+
 /**
     @class wxWindowDisabler
 
@@ -142,6 +191,8 @@ bool wxIsBusy();
     @note This function is categorized as a GUI one and so is not thread-safe.
 
     @header{wx/utils.h}
+
+    @library{wxcore}
 */
 void wxBell();
 
@@ -153,7 +204,9 @@ void wxBell();
     doesn't otherwise handle this event.
 
     @since 2.9.0
+
     @see wxGetLibraryVersionInfo()
+
     @header{wx/utils.h}
 */
 void wxInfoMessageBox(wxWindow* parent);
@@ -167,8 +220,11 @@ void wxInfoMessageBox(wxWindow* parent);
     Get wxWidgets version information.
 
     @since 2.9.2
+
     @see wxVersionInfo
+
     @header{wx/utils.h}
+
     @library{wxcore}
 */
 wxVersionInfo wxGetLibraryVersionInfo();
@@ -349,6 +405,9 @@ void wxEnableTopLevelWindows(bool enable = true);
     Find the deepest window at the given mouse position in screen coordinates,
     returning the window if found, or @NULL if not.
 
+    This function takes child windows at the given position into account even
+    if they are disabled. The hidden children are however skipped by it.
+
     @header{wx/utils.h}
 */
 wxWindow* wxFindWindowAtPoint(const wxPoint& pt);
@@ -399,7 +458,7 @@ int wxFindMenuItemId(wxFrame* frame, const wxString& menuString,
 
     @header{wx/utils.h}
 */
-long wxNewId();
+int wxNewId();
 
 /**
     Ensures that Ids subsequently generated by wxNewId() do not clash with the
@@ -407,7 +466,7 @@ long wxNewId();
 
     @header{wx/utils.h}
 */
-void wxRegisterId(long id);
+void wxRegisterId(int id);
 
 /**
     Opens the @a document in the application associated with the files of this
@@ -458,24 +517,92 @@ bool wxLaunchDefaultApplication(const wxString& document, int flags = 0);
 bool wxLaunchDefaultBrowser(const wxString& url, int flags = 0);
 
 /**
-    Loads a user-defined Windows resource as a string. If the resource is
-    found, the function creates a new character array and copies the data into
-    it. A pointer to this data is returned. If unsuccessful, @NULL is returned.
+    Loads an object from Windows resource file.
 
-    The resource must be defined in the @c .rc file using the following syntax:
+    This function loads the resource with the given name and type from the
+    resources embedded into a Windows application.
 
+    The typical use for it is to load some data from the data files embedded
+    into the program itself. For example, you could have the following fragment
+    in your @c .rc file
     @code
-    myResource TEXT file.ext
+        mydata  MYDATA  "myfile.dat"
+    @endcode
+    and then use it in the following way:
+    @code
+        const void* data = NULL;
+        size_t size = 0;
+        if ( !wxLoadUserResource(&data, &size, "mydata", "MYDATA") ) {
+            ... handle error ...
+        }
+        else {
+            // Use the data in any way, for example:
+            wxMemoryInputStream is(data, size);
+            ... read the data from stream ...
+        }
     @endcode
 
-    Where @c file.ext is a file that the resource compiler can find.
+    @param outData Filled with the pointer to the data on successful return.
+        Notice that this pointer does @em not need to be freed by the caller.
+    @param outLen Filled with the length of the data in bytes.
+    @param resourceName The name of the resource to load.
+    @param resourceType The type of the resource in usual Windows format, i.e.
+        either a real string like "MYDATA" or an integer created by the
+        standard Windows @c MAKEINTRESOURCE() macro, including any constants
+        for the standard resources types like @c RT_RCDATA.
+    @param module The @c HINSTANCE of the module to load the resources from.
+        The current module is used by default.
+    @return true if the data was loaded from resource or false if it couldn't
+        be found (in which case no error is logged) or was found but couldn't
+        be loaded (which is unexpected and does result in an error message).
 
     This function is available under Windows only.
 
+    @library{wxbase}
+
+    @header{wx/utils.h}
+
+    @since 2.9.1
+ */
+bool
+wxLoadUserResource(const void **outData,
+                   size_t *outLen,
+                   const wxString& resourceName,
+                   const wxChar* resourceType = "TEXT",
+                   WXHINSTANCE module = 0);
+
+/**
+    Loads a user-defined Windows resource as a string.
+
+    This is a wrapper for the general purpose overload wxLoadUserResource(const
+    void**, size_t*, const wxString&, const wxChar*, WXHINSTANCE) and can be
+    more convenient for the string data, but does an extra copy compared to the
+    general version.
+
+    @param resourceName The name of the resource to load.
+    @param resourceType The type of the resource in usual Windows format, i.e.
+        either a real string like "MYDATA" or an integer created by the
+        standard Windows @c MAKEINTRESOURCE() macro, including any constants
+        for the standard resources types like @c RT_RCDATA.
+    @param pLen Filled with the length of the returned buffer if it is
+        non-@NULL. This parameter should be used if NUL characters can occur in
+        the resource data. It is new since wxWidgets 2.9.1
+    @param module The @c HINSTANCE of the module to load the resources from.
+        The current module is used by default. This parameter is new since
+        wxWidgets 2.9.1.
+    @return A pointer to the data to be <tt>delete[]<tt>d by caller on success
+        or @NULL on error.
+
+    This function is available under Windows only.
+
+    @library{wxbase}
+
     @header{wx/utils.h}
 */
-wxString wxLoadUserResource(const wxString& resourceName,
-                            const wxString& resourceType = "TEXT");
+char* wxLoadUserResource(const wxString& resourceName,
+                         const wxChar* resourceType = "TEXT",
+                         int* pLen = NULL,
+                         WXHINSTANCE module = 0);
 
 /**
     @deprecated Replaced by wxWindow::Close(). See the
@@ -523,6 +650,22 @@ void wxQsort(void* pbase, size_t total_elems,
 */
 void wxSetDisplayName(const wxString& displayName);
 
+
+/**
+   flags for wxStripMenuCodes
+*/
+enum
+{
+    // strip '&' characters
+    wxStrip_Mnemonics = 1,
+
+    // strip everything after '\t'
+    wxStrip_Accel = 2,
+
+    // strip everything (this is the default)
+    wxStrip_All = wxStrip_Mnemonics | wxStrip_Accel
+};
+
 /**
     Strips any menu codes from @a str and returns the result.
 
@@ -849,7 +992,12 @@ enum
         Under Unix, if the process is the group leader then passing
         wxKILL_CHILDREN to wxKill() kills all children as well as pid.
 
-        This flag is currently ignored under MSW.
+        Under MSW, applies only to console applications and is only supported
+        under NT family (i.e. not under Windows 9x). It corresponds to the
+        native @c CREATE_NEW_PROCESS_GROUP and, in particular, ensures that
+        Ctrl-Break signals will be sent to all children of this process as well
+        to the process itself. Support for this flag under MSW was added in
+        version 2.9.4 of wxWidgets.
      */
     wxEXEC_MAKE_GROUP_LEADER = 4,
 
@@ -875,6 +1023,16 @@ enum
      */
     wxEXEC_NOEVENTS = 16,
 
+    /**
+        Hide child process console under MSW.
+
+        Under MSW, hide the console of the child process if it has one,
+        even if its IO is not redirected.
+
+        This flag is ignored under the other platforms.
+     */
+    wxEXEC_HIDE_CONSOLE = 32,
+
     /**
         Convenient synonym for flags given system()-like behaviour.
      */
@@ -911,18 +1069,22 @@ enum
     wxProcess::OnTerminate() will be called when the process finishes.
     Specifying this parameter also allows you to redirect the standard input
     and/or output of the process being launched by calling
-    wxProcess::Redirect(). If the child process IO is redirected, under Windows
-    the process window is not shown by default (this avoids having to flush an
-    unnecessary console for the processes which don't create any windows
-    anyhow) but a @c wxEXEC_NOHIDE flag can be used to prevent this from
-    happening, i.e. with this flag the child process window will be shown
-    normally.
+    wxProcess::Redirect().
+
+    Under Windows, when launching a console process its console is shown by
+    default but hidden if its IO is redirected. Both of these default
+    behaviours may be overridden: if ::wxEXEC_HIDE_CONSOLE is specified, the
+    console will never be shown. If ::wxEXEC_SHOW_CONSOLE is used, the console
+    will be shown even if the child process IO is redirected. Neither of these
+    flags affect non-console Windows applications or does anything under the
+    other systems.
 
     Under Unix the flag @c wxEXEC_MAKE_GROUP_LEADER may be used to ensure that
     the new process is a group leader (this will create a new session if
     needed). Calling wxKill() passing wxKILL_CHILDREN will kill this process as
     well as all of its children (except those which have started their own
-    session).
+    session). Under MSW, this flag can be used with console processes only and
+    corresponds to the native @c CREATE_NEW_PROCESS_GROUP flag.
 
     The @c wxEXEC_NOEVENTS flag prevents processing of any events from taking
     place while the child process is running. It should be only used for very
@@ -940,9 +1102,9 @@ enum
         string, i.e. "emacs file.txt".
     @param flags
         Must include either wxEXEC_ASYNC or wxEXEC_SYNC and can also include
-        wxEXEC_NOHIDE, wxEXEC_MAKE_GROUP_LEADER (in either case) or
-        wxEXEC_NODISABLE and wxEXEC_NOEVENTS or wxEXEC_BLOCK, which is equal to
-        their combination, in wxEXEC_SYNC case.
+        wxEXEC_SHOW_CONSOLE, wxEXEC_HIDE_CONSOLE, wxEXEC_MAKE_GROUP_LEADER (in
+        either case) or wxEXEC_NODISABLE and wxEXEC_NOEVENTS or wxEXEC_BLOCK,
+        which is equal to their combination, in wxEXEC_SYNC case.
     @param callback
         An optional pointer to wxProcess.
     @param env
@@ -1115,7 +1277,12 @@ unsigned long wxGetProcessId();
 
     @c wxSIGNONE, @c wxSIGKILL and @c wxSIGTERM have the same meaning under
     both Unix and Windows but all the other signals are equivalent to
-    @c wxSIGTERM under Windows.
+    @c wxSIGTERM under Windows. Moreover, under Windows, @c wxSIGTERM is
+    implemented by posting a message to the application window, so it only
+    works if the application does have windows. If it doesn't, as is notably
+    always the case for the console applications, you need to use @c wxSIGKILL
+    to actually kill the process. Of course, this doesn't allow the process to
+    shut down gracefully and so should be avoided if possible.
 
     Returns 0 on success, -1 on failure. If the @a rc parameter is not @NULL,
     it will be filled with a value from the @c wxKillError enum: