[Git][wxwidgets/wxwidgets][master] Parts of Updates to or activation of wxChoice, wxStaticBitmap, wxCheckbox on iOS (#25899, #25846)

1 view
Skip to first unread message

Vadim Zeitlin (@_VZ_)

unread,
Oct 20, 2025, 3:08:44 PMOct 20
to wx-commi...@googlegroups.com

Vadim Zeitlin pushed to branch master at wxWidgets / wxWidgets

Commits:

  • 55508626
    by Stefan Csomor at 2025-10-20T20:44:00+02:00
    Parts of Updates to or activation of wxChoice, wxStaticBitmap, wxCheckbox on iOS (#25899, #25846)
    
    * iOS only parts of #25846
    
    Activate and use wxBitmapBundle in wxStaticBitmap
    Activate wxChoice and implement EVT_CHOICE
    Small correction about Resource directory on IOS
    Implement label next to checkbox
    
    * fixing trailing whitespace
    
    * fixing whitespace

10 changed files:

Changes:

  • Makefile.in
    ... ... @@ -5606,6 +5606,7 @@ COND_TOOLKIT_OSX_IPHONE___GUI_SRC_OBJECTS = \
    5606 5606
     	monodll_iphone_anybutton.o \
    
    5607 5607
     	monodll_iphone_button.o \
    
    5608 5608
     	monodll_iphone_checkbox.o \
    
    5609
    +	monodll_iphone_choice.o \
    
    5609 5610
     	monodll_iphone_colour.o \
    
    5610 5611
     	monodll_iphone_dialog.o \
    
    5611 5612
     	monodll_iphone_evtloop.o \
    
    ... ... @@ -7387,6 +7388,7 @@ COND_TOOLKIT_OSX_IPHONE___GUI_SRC_OBJECTS_1 = \
    7387 7388
     	monolib_iphone_anybutton.o \
    
    7388 7389
     	monolib_iphone_button.o \
    
    7389 7390
     	monolib_iphone_checkbox.o \
    
    7391
    +	monolib_iphone_choice.o \
    
    7390 7392
     	monolib_iphone_colour.o \
    
    7391 7393
     	monolib_iphone_dialog.o \
    
    7392 7394
     	monolib_iphone_evtloop.o \
    
    ... ... @@ -9314,6 +9316,7 @@ COND_TOOLKIT_OSX_IPHONE___GUI_SRC_OBJECTS_2 = \
    9314 9316
     	coredll_iphone_anybutton.o \
    
    9315 9317
     	coredll_iphone_button.o \
    
    9316 9318
     	coredll_iphone_checkbox.o \
    
    9319
    +	coredll_iphone_choice.o \
    
    9317 9320
     	coredll_iphone_colour.o \
    
    9318 9321
     	coredll_iphone_dialog.o \
    
    9319 9322
     	coredll_iphone_evtloop.o \
    
    ... ... @@ -10823,6 +10826,7 @@ COND_TOOLKIT_OSX_IPHONE___GUI_SRC_OBJECTS_3 = \
    10823 10826
     	corelib_iphone_anybutton.o \
    
    10824 10827
     	corelib_iphone_button.o \
    
    10825 10828
     	corelib_iphone_checkbox.o \
    
    10829
    +	corelib_iphone_choice.o \
    
    10826 10830
     	corelib_iphone_colour.o \
    
    10827 10831
     	corelib_iphone_dialog.o \
    
    10828 10832
     	corelib_iphone_evtloop.o \
    
    ... ... @@ -16130,6 +16134,9 @@ monodll_iphone_button.o: $(srcdir)/src/osx/iphone/button.mm $(MONODLL_ODEP)
    16130 16134
     monodll_iphone_checkbox.o: $(srcdir)/src/osx/iphone/checkbox.mm $(MONODLL_ODEP)
    
    16131 16135
     	$(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/checkbox.mm
    
    16132 16136
     
    
    16137
    +monodll_iphone_choice.o: $(srcdir)/src/osx/iphone/choice.mm $(MONODLL_ODEP)
    
    16138
    +	$(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/choice.mm
    
    16139
    +
    
    16133 16140
     monodll_iphone_colour.o: $(srcdir)/src/osx/iphone/colour.mm $(MONODLL_ODEP)
    
    16134 16141
     	$(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/colour.mm
    
    16135 16142
     
    
    ... ... @@ -20909,6 +20916,9 @@ monolib_iphone_button.o: $(srcdir)/src/osx/iphone/button.mm $(MONOLIB_ODEP)
    20909 20916
     monolib_iphone_checkbox.o: $(srcdir)/src/osx/iphone/checkbox.mm $(MONOLIB_ODEP)
    
    20910 20917
     	$(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/checkbox.mm
    
    20911 20918
     
    
    20919
    +monolib_iphone_choice.o: $(srcdir)/src/osx/iphone/choice.mm $(MONOLIB_ODEP)
    
    20920
    +	$(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/choice.mm
    
    20921
    +
    
    20912 20922
     monolib_iphone_colour.o: $(srcdir)/src/osx/iphone/colour.mm $(MONOLIB_ODEP)
    
    20913 20923
     	$(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/colour.mm
    
    20914 20924
     
    
    ... ... @@ -26357,6 +26367,9 @@ coredll_iphone_button.o: $(srcdir)/src/osx/iphone/button.mm $(COREDLL_ODEP)
    26357 26367
     coredll_iphone_checkbox.o: $(srcdir)/src/osx/iphone/checkbox.mm $(COREDLL_ODEP)
    
    26358 26368
     	$(CXXC) -c -o $@ $(COREDLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/checkbox.mm
    
    26359 26369
     
    
    26370
    +coredll_iphone_choice.o: $(srcdir)/src/osx/iphone/choice.mm $(COREDLL_ODEP)
    
    26371
    +	$(CXXC) -c -o $@ $(COREDLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/choice.mm
    
    26372
    +
    
    26360 26373
     coredll_iphone_colour.o: $(srcdir)/src/osx/iphone/colour.mm $(COREDLL_ODEP)
    
    26361 26374
     	$(CXXC) -c -o $@ $(COREDLL_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/colour.mm
    
    26362 26375
     
    
    ... ... @@ -30107,6 +30120,9 @@ corelib_iphone_button.o: $(srcdir)/src/osx/iphone/button.mm $(CORELIB_ODEP)
    30107 30120
     corelib_iphone_checkbox.o: $(srcdir)/src/osx/iphone/checkbox.mm $(CORELIB_ODEP)
    
    30108 30121
     	$(CXXC) -c -o $@ $(CORELIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/checkbox.mm
    
    30109 30122
     
    
    30123
    +corelib_iphone_choice.o: $(srcdir)/src/osx/iphone/choice.mm $(CORELIB_ODEP)
    
    30124
    +	$(CXXC) -c -o $@ $(CORELIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/choice.mm
    
    30125
    +
    
    30110 30126
     corelib_iphone_colour.o: $(srcdir)/src/osx/iphone/colour.mm $(CORELIB_ODEP)
    
    30111 30127
     	$(CXXC) -c -o $@ $(CORELIB_OBJCXXFLAGS) $(srcdir)/src/osx/iphone/colour.mm
    
    30112 30128
     
    

  • build/bakefiles/files.bkl
    ... ... @@ -2377,6 +2377,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
    2377 2377
         src/osx/iphone/anybutton.mm
    
    2378 2378
         src/osx/iphone/button.mm
    
    2379 2379
         src/osx/iphone/checkbox.mm
    
    2380
    +    src/osx/iphone/choice.mm
    
    2380 2381
         src/osx/iphone/colour.mm
    
    2381 2382
         src/osx/iphone/dialog.mm
    
    2382 2383
         src/osx/iphone/evtloop.mm
    

  • build/cmake/files.cmake
    ... ... @@ -2231,6 +2231,7 @@ set(OSX_IPHONE_SRC
    2231 2231
         src/osx/iphone/anybutton.mm
    
    2232 2232
         src/osx/iphone/button.mm
    
    2233 2233
         src/osx/iphone/checkbox.mm
    
    2234
    +    src/osx/iphone/choice.mm
    
    2234 2235
         src/osx/iphone/colour.mm
    
    2235 2236
         src/osx/iphone/dialog.mm
    
    2236 2237
         src/osx/iphone/evtloop.mm
    

  • build/files
    ... ... @@ -2232,6 +2232,7 @@ OSX_IPHONE_SRC =
    2232 2232
         src/osx/iphone/anybutton.mm
    
    2233 2233
         src/osx/iphone/button.mm
    
    2234 2234
         src/osx/iphone/checkbox.mm
    
    2235
    +    src/osx/iphone/choice.mm
    
    2235 2236
         src/osx/iphone/colour.mm
    
    2236 2237
         src/osx/iphone/dialog.mm
    
    2237 2238
         src/osx/iphone/evtloop.mm
    

  • build/osx/wxcocoa.xcodeproj/project.pbxproj The diff for this file was not included because it is too large.
  • build/osx/wxiphone.xcodeproj/project.pbxproj The diff for this file was not included because it is too large.
  • interface/wx/stdpaths.h
    ... ... @@ -368,6 +368,7 @@ public:
    368 368
             - Unix: @c prefix/share/appinfo
    
    369 369
             - Windows: the directory where the executable file is located
    
    370 370
             - Mac: @c appinfo.app/Contents/Resources bundle subdirectory
    
    371
    +        - iOS: @c appinfo.app bundle subdirectory
    
    371 372
     
    
    372 373
             @since 2.7.0
    
    373 374
     
    

  • src/osx/iphone/checkbox.mm
    ... ... @@ -12,6 +12,7 @@
    12 12
     #if wxUSE_CHECKBOX
    
    13 13
     
    
    14 14
     #include "wx/checkbox.h"
    
    15
    +#include "wx/stattext.h"
    
    15 16
     #include "wx/osx/private.h"
    
    16 17
     
    
    17 18
     @interface wxUISwitch : UISwitch
    
    ... ... @@ -37,29 +38,60 @@
    37 38
     class wxCheckBoxIPhoneImpl : public wxWidgetIPhoneImpl
    
    38 39
     {
    
    39 40
     public:
    
    40
    -    wxCheckBoxIPhoneImpl(wxWindowMac *wxpeer, UISwitch *v)
    
    41
    +    wxCheckBoxIPhoneImpl(wxWindowMac *wxpeer, UISwitch *v, wxStaticText *l)
    
    41 42
         : wxWidgetIPhoneImpl(wxpeer, v)
    
    42 43
         {
    
    43 44
             m_control = v;
    
    45
    +        m_label = l;
    
    44 46
         }
    
    45 47
     
    
    46
    -    wxInt32  GetValue() const
    
    48
    +    wxInt32  GetValue() const override
    
    47 49
         {
    
    48 50
             return [m_control isOn] ? 1 : 0;
    
    49 51
         }
    
    50 52
     
    
    51
    -    void SetValue( wxInt32 v )
    
    53
    +    void SetValue( wxInt32 v ) override
    
    52 54
         {
    
    53 55
             [m_control setOn:v != 0 animated:NO];
    
    54 56
         }
    
    57
    +
    
    58
    +    // a blog on spacing in iOS
    
    59
    +    // https://uxdesign.cc/designing-widgets-for-ios-macos-and-ipados-the-ultimate-guide-737fb284a9df
    
    60
    +    const int widthOfSpace = 9;
    
    61
    +
    
    62
    +    void Move(int x, int y, int width, int height) override
    
    63
    +    {
    
    64
    +        wxWidgetIPhoneImpl::Move( x, y, width, height );
    
    65
    +
    
    66
    +        int checkboxWidth = 0;
    
    67
    +        int checkboxHeight = 0;
    
    68
    +        // get size of checkbox
    
    69
    +        wxWidgetIPhoneImpl::GetSize( checkboxWidth, checkboxHeight );
    
    70
    +
    
    71
    +        // get size of label
    
    72
    +        wxSize sz = m_label->GetSize();
    
    73
    +
    
    74
    +        int offset = (checkboxHeight-sz.y) / 2;
    
    75
    +
    
    76
    +        m_label->SetPosition( wxPoint(x + checkboxWidth+widthOfSpace, y+offset) );
    
    77
    +    }
    
    78
    +
    
    79
    +    void GetSize( int &width, int &height ) const override
    
    80
    +    {
    
    81
    +        wxWidgetIPhoneImpl::GetSize( width, height );
    
    82
    +        wxSize sz = m_label->GetSize();
    
    83
    +        width += widthOfSpace + sz.x;
    
    84
    +    }
    
    85
    +
    
    55 86
     private:
    
    56 87
         UISwitch* m_control;
    
    88
    +    wxStaticText*  m_label;
    
    57 89
     };
    
    58 90
     
    
    59 91
     wxWidgetImplType* wxWidgetImpl::CreateCheckBox( wxWindowMac* wxpeer,
    
    60
    -                                    wxWindowMac* WXUNUSED(parent),
    
    92
    +                                    wxWindowMac* parent,
    
    61 93
                                         wxWindowID WXUNUSED(id),
    
    62
    -                                    const wxString& WXUNUSED(label),
    
    94
    +                                    const wxString& label,
    
    63 95
                                         const wxPoint& pos,
    
    64 96
                                         const wxSize& size,
    
    65 97
                                         long style,
    
    ... ... @@ -68,10 +100,15 @@ wxWidgetImplType* wxWidgetImpl::CreateCheckBox( wxWindowMac* wxpeer,
    68 100
         CGRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
    
    69 101
         wxUISwitch* v = [[wxUISwitch alloc] initWithFrame:r];
    
    70 102
     
    
    103
    +    wxStaticText* text = new wxStaticText( parent, -1, label );
    
    104
    +
    
    71 105
     //    if (style & wxCHK_3STATE)
    
    72 106
     //        [v setAllowsMixedState:YES];
    
    73 107
     
    
    74
    -    wxCheckBoxIPhoneImpl* c = new wxCheckBoxIPhoneImpl( wxpeer, v );
    
    108
    +    wxCheckBoxIPhoneImpl* c = new wxCheckBoxIPhoneImpl( wxpeer, v, text );
    
    109
    +
    
    110
    +    c->Move( pos.x, pos.y, size.y, size.y );
    
    111
    +
    
    75 112
         return c;
    
    76 113
     }
    
    77 114
     
    

  • src/osx/iphone/choice.mm
    ... ... @@ -83,6 +83,12 @@
    83 83
         [self selectRow:v inComponent:0 animated:NO];
    
    84 84
     }
    
    85 85
     
    
    86
    +- (void) pickerView: (UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent: (NSInteger)component
    
    87
    +{
    
    88
    +    wxWidgetIPhoneImpl* impl = (wxWidgetIPhoneImpl* ) wxWidgetImpl::FindFromWXWidget( pickerView );
    
    89
    +    wxChoice *choice = (wxChoice*) impl->GetWXPeer();
    
    90
    +    choice->SendSelectionChangedEvent(wxEVT_CHOICE);
    
    91
    +}
    
    86 92
     
    
    87 93
     
    
    88 94
     @end
    
    ... ... @@ -119,6 +125,10 @@ public:
    119 125
             [((wxUIPickerView*)m_osxView).rows replaceObjectAtIndex:pos withObject:cftext.AsNSString()];
    
    120 126
         }
    
    121 127
     
    
    128
    +    wxInt32 GetValue() const override
    
    129
    +    {
    
    130
    +        return [((wxUIPickerView*)m_osxView) selectedRowInComponent:0 ];
    
    131
    +    }
    
    122 132
     private:
    
    123 133
     };
    
    124 134
     
    

  • src/osx/iphone/statbmp.mm
    ... ... @@ -28,6 +28,7 @@
    28 28
     #endif
    
    29 29
     
    
    30 30
     #include "wx/osx/private.h"
    
    31
    +#include "wx/private/bmpbndl.h"
    
    31 32
     
    
    32 33
     class wxStaticBitmapIPhoneImpl : public wxWidgetIPhoneImpl
    
    33 34
     {
    
    ... ... @@ -46,6 +47,13 @@ public :
    46 47
             // although NSControl has this method, NSImageView throws an exception if it is called
    
    47 48
         }
    
    48 49
     
    
    50
    +    void SetBitmap( const wxBitmapBundle& bitmap ) wxOVERRIDE
    
    51
    +    {
    
    52
    +        UIImageView* v = (UIImageView*) m_osxView;
    
    53
    +        [v setImage: wxOSXGetImageFromBundle(bitmap)];
    
    54
    +        [v setNeedsDisplay];
    
    55
    +    }
    
    56
    +
    
    49 57
         void SetScaleMode(wxStaticBitmap::ScaleMode scaleMode)
    
    50 58
         {
    
    51 59
             UIImageView* v = (UIImageView*) m_osxView;
    


View it on GitLab.
You're receiving this email because of your account on gitlab.com. Manage all notifications · Help Notification message regarding https://gitlab.com/wxwidgets/wxwidgets/-/commit/5550862651146739cf43e07b95d3963241506715 at 1760987318

Reply all
Reply to author
Forward
0 new messages