]> git.saurik.com Git - wxWidgets.git/commitdiff
added SetLabelText() and EscapeMnemonics()
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 31 Dec 2008 14:14:07 +0000 (14:14 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 31 Dec 2008 14:14:07 +0000 (14:14 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57689 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/control.h
interface/wx/control.h
src/common/ctrlcmn.cpp

index 746013b90ec32387c8e9f1b7cbb8e51ffe7bf378..39cc386957074891c3a311a386e5200a314f4567 100644 (file)
@@ -433,6 +433,7 @@ All (GUI):
 - Added wxArtProvider::GetNativeSizeHint(); GetSizeHint() as well as
   GetNativeSizeHint() now return more sensible values in wxMSW and wxMac and
   no longer return bogus values.
+- Added wxControl::SetLabelText() and EscapeMnemonics().
 
 wxGTK:
 
index 2bf0c472ad1641e23aafe0e2e44d6af336a62ad9..3d745c679ef9bd33ca12084c15bfbb11c050730e 100644 (file)
@@ -53,9 +53,6 @@ public:
     // get the control alignment (left/right/centre, top/bottom/centre)
     int GetAlignment() const { return m_windowStyle & wxALIGN_MASK; }
 
-    // get just the text of the label, without mnemonic characters ('&')
-    wxString GetLabelText() const { return GetLabelText(GetLabel()); }
-
     virtual void SetLabel(const wxString& label)
     {
         m_labelOrig = label;
@@ -72,6 +69,14 @@ public:
         return m_labelOrig;
     }
 
+    // get just the text of the label, without mnemonic characters ('&')
+    wxString GetLabelText() const { return GetLabelText(GetLabel()); }
+
+    void SetLabelText(const wxString& text)
+    {
+        return SetLabel(EscapeMnemonics(text));
+    }
+
     // static utilities:
 
     // replaces parts of the string with ellipsis if needed
@@ -84,6 +89,9 @@ public:
     // removes the mnemonics characters
     static wxString RemoveMnemonics(const wxString& str);
 
+    // escapes (by doubling them) the mnemonics
+    static wxString EscapeMnemonics(const wxString& str);
+
     // return the accel index in the string or -1 if none and puts the modified
     // string into second parameter if non NULL
     static int FindAccelIndex(const wxString& label,
index a0a9fab11111de86acf56c891627e2a8156b8f5c..68f220590fdb4c1e0de5c350553f3b9482ba8eba 100644 (file)
@@ -80,15 +80,50 @@ public:
     */
     static wxString RemoveMnemonics(const wxString& str);
 
+    /**
+        Escape the special mnemonics characters ("&") in the given string.
+
+        This function can be helpful if you need to set the controls label to a
+        user-provided string. If the string contains ampersands, they wouldn't
+        appear on the display but be used instead to indicate that the
+        character following the first of them can be used as a control mnemonic.
+        While this can sometimes be desirable (e.g. to allow the user to
+        configure mnemonics of the controls), more often you will want to use
+        this function before passing a user-defined string to SetLabel().
+        Alternatively, if the label is entirely user-defined, you can just call
+        SetLabelText() directly -- but this function must be used if the label
+        is a combination of a part defined by program containing the control
+        mnemonics and a user-defined part.
+
+        @param text
+            The string such as it should appear on the display.
+        @return
+            The same string with the ampersands in it doubled.
+     */
+    static wxString EscapeMnemonics(const wxString& text);
+
     /**
         Sets the item's text.
 
         Any "&" characters in the @a label are special and indicate that the
         following character is a @e mnemonic for this control and can be used to
         activate it from the keyboard (typically by using @e Alt key in
-        combination with it).
-        To insert a literal ampersand character, you need to double it, i.e. use "&&".
+        combination with it). To insert a literal ampersand character, you need
+        to double it, i.e. use use "&&". If this behaviour is undesirable, use
+        SetLabelText() instead.
     */
     void SetLabel(const wxString& label);
+
+    /**
+        Sets the item's text to exactly the given string.
+
+        Unlike SetLabel(), this function shows exactly the @a text passed to it
+        in the control, without interpreting ampersands in it in any way.
+        Notice that it means that the control can't have any mnemonic defined
+        for it using this function.
+
+        @see EscapeMnemonics()
+     */
+    void SetLabelText(const wxString& text);
 };
 
index 1897047aa0cc9d72824a898d5183eda93fede60c..8cb01a3adb253be0c0b5fdc94ad2a85257e01f6d 100644 (file)
@@ -159,6 +159,14 @@ wxString wxControlBase::RemoveMnemonics(const wxString& str)
     return wxStripMenuCodes(str, wxStrip_Mnemonics);
 }
 
+/* static */
+wxString wxControlBase::EscapeMnemonics(const wxString& text)
+{
+    wxString label(text);
+    label.Replace("&", "&&");
+    return label;
+}
+
 /* static */
 int wxControlBase::FindAccelIndex(const wxString& label, wxString *labelOnly)
 {