Changeset 20

Show
Ignore:
Timestamp:
12/04/06 18:43:56 (2 years ago)
Author:
lindquist
Message:

Better preferredSize for button widgets. Avoids text clipping issues.
Made ToggleGroup?.addButton a typesafe variadic.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/minwin/button.d

    r11 r20  
    5454} 
    5555version (SimpleToggleGroup) { 
     56    private import minwin.dialog; 
    5657    // manages selected state between several ToggleButtons 
    5758    class ToggleGroup { 
    5859        AbstractToggleButton[] buttons; 
    59         void addButton(AbstractToggleButton b) { 
    60             buttons ~= b; 
    61             b.actionDelegate ~= &select; 
     60        void addButton(AbstractToggleButton[] btns ...) { 
     61            buttons ~= btns; 
     62            foreach(b; btns) { 
     63                b.actionDelegate ~= &select; 
     64            } 
    6265        } 
    6366        void select(Component c) { 
     
    9093 
    9194    template PreferredSizeImpl() { 
     95        const int paddingX; 
     96        const int paddingY; 
    9297        Point preferredSize() { 
    9398            int width,height; 
     
    105110                ReleaseDC(peer,dc); 
    106111            } 
    107             width = s.cx > 63 ? s.cx+12 : 75; 
    108             height = s.cy > 23 ? s.cy : 23; 
     112            width = s.cx > 75-paddingX ? s.cx+paddingX*2 : 75; 
     113            height = s.cy > 23-paddingY ? s.cy+paddingY*2 : 23; 
    109114            if (userPreferredWidth_data > 0) 
    110115                width = userPreferredWidth_data; 
     
    150155    class Button : AbstractButton { 
    151156        this(Component parent, char[] intext, char[] name = "") { 
     157            paddingX = GetSystemMetrics(SM_CXFIXEDFRAME)*2; 
     158            paddingY = GetSystemMetrics(SM_CXFIXEDFRAME)*2; 
    152159            PeerForAdd parentp = parent.getPeerForAdd(); 
    153160            text_data = intext; 
     
    165172    class CheckBox : AbstractToggleButton { 
    166173        this(Component parent, char[] intext, char[] name = "") { 
     174            paddingX = GetSystemMetrics(SM_CXMENUCHECK); 
     175            paddingY = GetSystemMetrics(SM_CYFIXEDFRAME)*2; 
    167176            PeerForAdd parentp = parent.getPeerForAdd(); 
    168177            text_data = intext; 
     
    181190    class RadioButton : AbstractToggleButton { 
    182191        this(Component parent, char[] intext, char[] name = "") { 
     192            paddingX = GetSystemMetrics(SM_CXMENUCHECK); 
     193            paddingY = GetSystemMetrics(SM_CYFIXEDFRAME)*2; 
    183194            PeerForAdd parentp = parent.getPeerForAdd(); 
    184195            text_data = intext; 
     
    197208    class ToggleButton : AbstractToggleButton { 
    198209        this(Component parent, char[] intext, char[] name = "") { 
     210            paddingX = GetSystemMetrics(SM_CXFIXEDFRAME)*2; 
     211            paddingY = GetSystemMetrics(SM_CYFIXEDFRAME)*2; 
    199212            PeerForAdd parentp = parent.getPeerForAdd(); 
    200213            text_data = intext; 
     
    391404    class ToggleGroup { 
    392405        HeavyAbstractToggleButton[] buttons; 
    393         void addButton(HeavyAbstractToggleButton b) { 
    394             RadioButton rb = cast(RadioButton)b; 
    395             if (rb is null) { 
    396                 buttons ~= b; 
    397                 b.actionDelegate ~= &select; 
    398             } else { 
    399                 // set the RadioButton group to its sibling, if any 
    400                 if (buttons.length != 0) { 
    401                     GtkRadioButton* rbpeer1 = cast(GtkRadioButton*)buttons[0].peer; 
    402                     GtkRadioButton* rbpeer = cast(GtkRadioButton*)rb.peer; 
    403                     GSList* group = gtk_radio_button_get_group(rbpeer1); 
    404                     gtk_radio_button_set_group(rbpeer,group); 
     406        void addButton(HeavyAbstractToggleButton[] btns ...) { 
     407            buttons ~= btns; 
     408            foreach(b; btns) { 
     409                RadioButton rb = cast(RadioButton)b; 
     410                if (rb is null) { 
     411                    b.actionDelegate ~= &select; 
     412                } else { 
     413                    // set the RadioButton group to its sibling, if any 
     414                    if (buttons.length != 0) { 
     415                        GtkRadioButton* rbpeer1 = cast(GtkRadioButton*)buttons[0].peer; 
     416                        GtkRadioButton* rbpeer = cast(GtkRadioButton*)rb.peer; 
     417                        GSList* group = gtk_radio_button_get_group(rbpeer1); 
     418                        gtk_radio_button_set_group(rbpeer,group); 
     419                    } 
    405420                } 
    406                 buttons ~= b; 
    407421            } 
    408422        }