Changeset 34

Show
Ignore:
Timestamp:
02/23/08 03:25:14 (6 months ago)
Author:
Chris Miller
Message:

Changed dialog processing.

Files:

Legend:

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

    r28 r34  
    211211    final void isDefault(bool byes) // setter 
    212212    { 
    213         if(byes) 
    214         { 
    215             if(isHandleCreated) 
    216                 SetWindowLongA(handle, GWL_ID, IDOK); 
    217         } 
    218         else 
    219         { 
    220             if(isHandleCreated) 
    221                 SetWindowLongA(handle, GWL_ID, 0); 
    222         } 
    223          
    224213        isdef = byes; 
    225214    } 
  • trunk/win32/dfl/control.d

    r32 r34  
    12901290     
    12911291     
     1292    package final bool _hasSelStyle() 
     1293    { 
     1294        return getStyle(ControlStyles.SELECTABLE); 
     1295    } 
     1296     
     1297     
    12921298    /// 
    12931299    // Returns true if this control has the mouse capture. 
     
    37673773     
    37683774     
    3769     package static void _dlgselnext(HWND hwdlg, HWND hwcursel, bool forward, 
     3775    package static void _dlgselnext(Form dlg, HWND hwcursel, bool forward, 
    37703776        bool tabStopOnly = true, bool selectableOnly = false, 
    37713777        bool nested = true, bool wrap = true, 
    37723778        HWND hwchildrenof = null) 
    37733779    { 
     3780        //assert(cast(Form)Control.fromHandle(hwdlg) !is null); 
     3781         
    37743782        if(!hwchildrenof) 
    3775             hwchildrenof = hwdlg
     3783            hwchildrenof = dlg.handle
    37763784        if(forward) 
    37773785        { 
     
    37943802                                if(foundthis) 
    37953803                                { 
    3796                                     DefDlgProcA(hwdlg, WM_NEXTDLGCTL, cast(WPARAM)hw, MAKELPARAM(true, 0)); 
     3804                                    //DefDlgProcA(dlg.handle, WM_NEXTDLGCTL, cast(WPARAM)hw, MAKELPARAM(true, 0)); 
     3805                                    dlg._selectChild(hw); 
    37973806                                    tdone = true; 
    37983807                                    return false; // Break. 
     
    38133822                if(wrap || !foundthis) 
    38143823                { 
    3815                     DefDlgProcA(hwdlg, WM_NEXTDLGCTL, cast(WPARAM)hwfirst, MAKELPARAM(true, 0)); 
     3824                    //DefDlgProcA(dlg.handle, WM_NEXTDLGCTL, cast(WPARAM)hwfirst, MAKELPARAM(true, 0)); 
     3825                    dlg._selectChild(hwfirst); 
    38163826                } 
    38173827            } 
     
    38443854            // If it falls through without finding hwcursel, let it select the last one, even if not wrapping. 
    38453855            if(HWND.init != hwprev) 
    3846                 DefDlgProcA(hwdlg, WM_NEXTDLGCTL, cast(WPARAM)hwprev, MAKELPARAM(true, 0)); 
    3847         } 
    3848     } 
    3849      
    3850      
    3851     package final void _selectNextControl(Control ctrltoplevel, 
     3856                //DefDlgProcA(dlg.handle, WM_NEXTDLGCTL, cast(WPARAM)hwprev, MAKELPARAM(true, 0)); 
     3857                dlg._selectChild(hwprev); 
     3858        } 
     3859    } 
     3860     
     3861     
     3862    package final void _selectNextControl(Form ctrltoplevel, 
    38523863        Control ctrl, bool forward, bool tabStopOnly, bool nested, bool wrap) 
    38533864    { 
     
    38583869        assert(ctrltoplevel.isHandleCreated); 
    38593870         
    3860         _dlgselnext(ctrltoplevel.handle
     3871        _dlgselnext(ctrltoplevel
    38613872            (ctrl && ctrl.isHandleCreated) ? ctrl.handle : null, 
    38623873            forward, tabStopOnly, !tabStopOnly, nested, wrap, 
     
    38653876     
    38663877     
     3878    package final void _selectThisControl() 
     3879    { 
     3880         
     3881    } 
     3882     
     3883     
    38673884    // Only considers child controls of this control. 
    38683885    final void selectNextControl(Control ctrl, bool forward, bool tabStopOnly, bool nested, bool wrap) 
     
    38713888            return; 
    38723889         
    3873         Control ctrltoplevel; 
    3874         ctrltoplevel = findForm(); 
     3890        auto ctrltoplevel = findForm(); 
    38753891        if(ctrltoplevel) 
    38763892            return _selectNextControl(ctrltoplevel, ctrl, forward, tabStopOnly, nested, wrap); 
     
    38943910            return; 
    38953911         
    3896         Control ctrltoplevel; 
    3897         ctrltoplevel = findForm(); 
     3912        auto ctrltoplevel = findForm(); 
    38983913        if(ctrltoplevel && ctrltoplevel !is this) 
    38993914        { 
     
    39133928            if(directed) 
    39143929            { 
    3915                 _dlgselnext(ctrltoplevel.handle, this.handle, forward); 
     3930                _dlgselnext(ctrltoplevel, this.handle, forward); 
    39163931            } 
    39173932            else 
    39183933            { 
    3919                 if(canSelect) 
    3920                     DefDlgProcA(ctrltoplevel.handle, WM_NEXTDLGCTL, cast(WPARAM)this.handle, MAKELPARAM(true, 0)); 
     3934                ctrltoplevel._selectChild(this); 
    39213935            } 
    39223936        } 
  • trunk/win32/dfl/form.d

    r32 r34  
    18381838            if(isMdiChild) 
    18391839            { 
     1840                // Good, make sure client window proc handles it too. 
    18401841                SendMessageA(mdiParent.mdiClient.handle, WM_MDIACTIVATE, cast(WPARAM)handle, 0); 
    18411842                return; 
     
    18741875            { 
    18751876                cbits |= CBits.NOCLOSING; 
    1876                 doHide(); 
     1877                //doHide(); 
     1878                setVisibleCore(false); 
    18771879                //if(!visible) 
    18781880                if(!wmodal) 
     
    22132215                        if(acceptBtn) 
    22142216                        { 
    2215                             acceptBtn.performClick(); 
     2217                            if(HIWORD(msg.wParam) == BN_CLICKED) 
     2218                                acceptBtn.performClick(); 
    22162219                            return; 
    22172220                        } 
     
    22222225                        if(cancelBtn) 
    22232226                        { 
    2224                             cancelBtn.performClick(); 
     2227                            if(HIWORD(msg.wParam) == BN_CLICKED) 
     2228                                cancelBtn.performClick(); 
    22252229                            return; 
    22262230                        } 
     
    25152519     
    25162520     
     2521    package HWND _lastSel; // Last selected, excluding accept button! 
     2522    package HWND _hadfocus; // Before being deactivated. 
     2523     
     2524     
     2525    // Returns if there was a selection. 
     2526    package final bool _selbefore() 
     2527    { 
     2528        bool wasselbtn = false; 
     2529        if(_lastSel) 
     2530        { 
     2531            wasselbtn = true; 
     2532            if(IsChild(this.hwnd, _lastSel)) 
     2533            { 
     2534                auto lastctrl = Control.fromHandle(_lastSel); 
     2535                if(lastctrl) 
     2536                { 
     2537                    auto lastibc = cast(IButtonControl)lastctrl; 
     2538                    if(lastibc) 
     2539                        lastibc.notifyDefault(false); 
     2540                } 
     2541            } 
     2542        } 
     2543        return wasselbtn; 
     2544    } 
     2545     
     2546    package final void _seldeactivate() 
     2547    { 
     2548        if(!_selbefore()) 
     2549        { 
     2550            if(acceptButton) 
     2551                acceptButton.notifyDefault(false); 
     2552        } 
     2553    } 
     2554     
     2555    package final void _selafter(Control ctrl, bool wasselbtn) 
     2556    { 
     2557        _lastSel = _lastSel.init; 
     2558        auto ibc = cast(IButtonControl)ctrl; 
     2559        if(ibc) 
     2560        { 
     2561            if(acceptButton) 
     2562            { 
     2563                if(ibc !is acceptButton) 
     2564                { 
     2565                    acceptButton.notifyDefault(false); 
     2566                    _lastSel = ctrl.hwnd; 
     2567                } 
     2568                //else don't set _lastSel to accept button. 
     2569            } 
     2570            else 
     2571            { 
     2572                _lastSel = ctrl.hwnd; 
     2573            } 
     2574             
     2575            ibc.notifyDefault(true); 
     2576        } 
     2577        else 
     2578        { 
     2579            if(wasselbtn) // Only do it if there was a different button; don't keep doing this. 
     2580            { 
     2581                if(acceptButton) 
     2582                    acceptButton.notifyDefault(true); 
     2583            } 
     2584        } 
     2585    } 
     2586     
     2587    package final void _selactivate() 
     2588    { 
     2589        if(_lastSel) 
     2590        { 
     2591            Control ctrl = Control.fromChildHandle(_lastSel); 
     2592            if(ctrl && ctrl._hasSelStyle()) 
     2593            { 
     2594                auto ibc = cast(IButtonControl)ctrl; 
     2595                if(ibc) 
     2596                { 
     2597                    //ibc.notifyDefault(true); 
     2598                    ctrl.select(); 
     2599                    return; 
     2600                } 
     2601                ctrl.select(); 
     2602            } 
     2603            else 
     2604            { 
     2605                SetFocus(ctrl.hwnd); 
     2606            } 
     2607        } 
     2608        if(acceptButton) 
     2609        { 
     2610            acceptButton.notifyDefault(true); 
     2611        } 
     2612    } 
     2613     
     2614    // Child can be nested at any level. 
     2615    package final void _selectChild(Control ctrl) 
     2616    { 
     2617        if(ctrl.canSelect) 
     2618        { 
     2619            bool wasselbtn = _selbefore(); 
     2620             
     2621            // Need to do some things, like select-all for edit. 
     2622            DefDlgProcA(this.hwnd, WM_NEXTDLGCTL, cast(WPARAM)ctrl.hwnd, MAKELPARAM(true, 0)); 
     2623             
     2624            _selafter(ctrl, wasselbtn); 
     2625        } 
     2626    } 
     2627     
     2628    package final void _selectChild(HWND hw) 
     2629    { 
     2630        Control ctrl = Control.fromHandle(hw); 
     2631        if(ctrl) 
     2632            _selectChild(ctrl); 
     2633    } 
     2634     
     2635     
    25172636    private void _selonecontrol() 
    25182637    { 
     
    25712690                return; 
    25722691             
     2692            case WM_NEXTDLGCTL: 
     2693                if(LOWORD(msg.lParam)) 
     2694                { 
     2695                    _selectChild(cast(HWND)msg.wParam); 
     2696                } 
     2697                else 
     2698                { 
     2699                    _dlgselnext(this, GetFocus(), msg.wParam != 0); 
     2700                } 
     2701                return; 
     2702             
    25732703            case WM_ENABLE: 
    25742704                if(msg.wParam) 
     
    25802710                } 
    25812711                break; 
     2712             
     2713            case WM_ACTIVATE: 
     2714                switch(LOWORD(msg.wParam)) 
     2715                { 
     2716                    case WA_ACTIVE: 
     2717                    case WA_CLICKACTIVE: 
     2718                        _selactivate(); 
     2719                        break; 
     2720                     
     2721                    case WA_INACTIVE: 
     2722                        _seldeactivate(); 
     2723                        _lastSel = GetFocus(); 
     2724                        break; 
     2725                     
     2726                    default: ; 
     2727                } 
     2728                return; 
    25822729             
    25832730            default: 
     
    28072954                                                case Keys.UP, Keys.LEFT: 
    28082955                                                    // Backwards... 
    2809                                                     Control._dlgselnext(form.handle, m.hWnd, false, false, true); 
     2956                                                    Control._dlgselnext(form, m.hWnd, false, false, true); 
    28102957                                                    break; 
    28112958                                                case Keys.DOWN, Keys.RIGHT: 
    28122959                                                    // Forwards... 
    2813                                                     Control._dlgselnext(form.handle, m.hWnd, true, false, true); 
     2960                                                    Control._dlgselnext(form, m.hWnd, true, false, true); 
    28142961                                                    break; 
    28152962                                                default: 
     
    28472994                                            // Backwards... 
    28482995                                            //DefDlgProcA(form.handle, WM_NEXTDLGCTL, 1, MAKELPARAM(FALSE, 0)); 
    2849                                             _dlgselnext(form.handle, m.hWnd, false); 
     2996                                            _dlgselnext(form, m.hWnd, false); 
    28502997                                        } 
    28512998                                        else 
     
    28533000                                            // Forwards... 
    28543001                                            //DefDlgProcA(form.handle, WM_NEXTDLGCTL, 0, MAKELPARAM(FALSE, 0)); 
    2855                                             _dlgselnext(form.handle, m.hWnd, true); 
     3002                                            _dlgselnext(form, m.hWnd, true); 
    28563003                                        } 
    28573004                                    } 
     
    29463093                        break; 
    29473094                     
     3095                    case WM_LBUTTONUP: 
     3096                    case WM_MBUTTONUP: 
     3097                    case WM_RBUTTONUP: 
     3098                        if(m.hWnd != form.hwnd) 
     3099                        { 
     3100                            Control ctrl = Control.fromChildHandle(m.hWnd); 
     3101                            if(ctrl.focused && ctrl.canSelect) 
     3102                            { 
     3103                                bool wasselbtn = form._selbefore(); 
     3104                                form._selafter(ctrl, wasselbtn); 
     3105                            } 
     3106                        } 
     3107                        break; 
     3108                     
    29483109                    default: ; 
    29493110                } 
     
    29653126     
    29663127     
     3128    /+ 
    29673129    package final bool _dlgescape() 
    29683130    { 
     
    29743136        return false; 
    29753137    } 
     3138    +/ 
    29763139     
    29773140