Changeset 34
- Timestamp:
- 02/23/08 03:25:14 (6 months ago)
- Files:
-
- trunk/win32/dfl/button.d (modified) (1 diff)
- trunk/win32/dfl/control.d (modified) (10 diffs)
- trunk/win32/dfl/form.d (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/win32/dfl/button.d
r28 r34 211 211 final void isDefault(bool byes) // setter 212 212 { 213 if(byes)214 {215 if(isHandleCreated)216 SetWindowLongA(handle, GWL_ID, IDOK);217 }218 else219 {220 if(isHandleCreated)221 SetWindowLongA(handle, GWL_ID, 0);222 }223 224 213 isdef = byes; 225 214 } trunk/win32/dfl/control.d
r32 r34 1290 1290 1291 1291 1292 package final bool _hasSelStyle() 1293 { 1294 return getStyle(ControlStyles.SELECTABLE); 1295 } 1296 1297 1292 1298 /// 1293 1299 // Returns true if this control has the mouse capture. … … 3767 3773 3768 3774 3769 package static void _dlgselnext( HWND hwdlg, HWND hwcursel, bool forward,3775 package static void _dlgselnext(Form dlg, HWND hwcursel, bool forward, 3770 3776 bool tabStopOnly = true, bool selectableOnly = false, 3771 3777 bool nested = true, bool wrap = true, 3772 3778 HWND hwchildrenof = null) 3773 3779 { 3780 //assert(cast(Form)Control.fromHandle(hwdlg) !is null); 3781 3774 3782 if(!hwchildrenof) 3775 hwchildrenof = hwdlg;3783 hwchildrenof = dlg.handle; 3776 3784 if(forward) 3777 3785 { … … 3794 3802 if(foundthis) 3795 3803 { 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); 3797 3806 tdone = true; 3798 3807 return false; // Break. … … 3813 3822 if(wrap || !foundthis) 3814 3823 { 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); 3816 3826 } 3817 3827 } … … 3844 3854 // If it falls through without finding hwcursel, let it select the last one, even if not wrapping. 3845 3855 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, 3852 3863 Control ctrl, bool forward, bool tabStopOnly, bool nested, bool wrap) 3853 3864 { … … 3858 3869 assert(ctrltoplevel.isHandleCreated); 3859 3870 3860 _dlgselnext(ctrltoplevel .handle,3871 _dlgselnext(ctrltoplevel, 3861 3872 (ctrl && ctrl.isHandleCreated) ? ctrl.handle : null, 3862 3873 forward, tabStopOnly, !tabStopOnly, nested, wrap, … … 3865 3876 3866 3877 3878 package final void _selectThisControl() 3879 { 3880 3881 } 3882 3883 3867 3884 // Only considers child controls of this control. 3868 3885 final void selectNextControl(Control ctrl, bool forward, bool tabStopOnly, bool nested, bool wrap) … … 3871 3888 return; 3872 3889 3873 Control ctrltoplevel; 3874 ctrltoplevel = findForm(); 3890 auto ctrltoplevel = findForm(); 3875 3891 if(ctrltoplevel) 3876 3892 return _selectNextControl(ctrltoplevel, ctrl, forward, tabStopOnly, nested, wrap); … … 3894 3910 return; 3895 3911 3896 Control ctrltoplevel; 3897 ctrltoplevel = findForm(); 3912 auto ctrltoplevel = findForm(); 3898 3913 if(ctrltoplevel && ctrltoplevel !is this) 3899 3914 { … … 3913 3928 if(directed) 3914 3929 { 3915 _dlgselnext(ctrltoplevel .handle, this.handle, forward);3930 _dlgselnext(ctrltoplevel, this.handle, forward); 3916 3931 } 3917 3932 else 3918 3933 { 3919 if(canSelect) 3920 DefDlgProcA(ctrltoplevel.handle, WM_NEXTDLGCTL, cast(WPARAM)this.handle, MAKELPARAM(true, 0)); 3934 ctrltoplevel._selectChild(this); 3921 3935 } 3922 3936 } trunk/win32/dfl/form.d
r32 r34 1838 1838 if(isMdiChild) 1839 1839 { 1840 // Good, make sure client window proc handles it too. 1840 1841 SendMessageA(mdiParent.mdiClient.handle, WM_MDIACTIVATE, cast(WPARAM)handle, 0); 1841 1842 return; … … 1874 1875 { 1875 1876 cbits |= CBits.NOCLOSING; 1876 doHide(); 1877 //doHide(); 1878 setVisibleCore(false); 1877 1879 //if(!visible) 1878 1880 if(!wmodal) … … 2213 2215 if(acceptBtn) 2214 2216 { 2215 acceptBtn.performClick(); 2217 if(HIWORD(msg.wParam) == BN_CLICKED) 2218 acceptBtn.performClick(); 2216 2219 return; 2217 2220 } … … 2222 2225 if(cancelBtn) 2223 2226 { 2224 cancelBtn.performClick(); 2227 if(HIWORD(msg.wParam) == BN_CLICKED) 2228 cancelBtn.performClick(); 2225 2229 return; 2226 2230 } … … 2515 2519 2516 2520 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 2517 2636 private void _selonecontrol() 2518 2637 { … … 2571 2690 return; 2572 2691 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 2573 2703 case WM_ENABLE: 2574 2704 if(msg.wParam) … … 2580 2710 } 2581 2711 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; 2582 2729 2583 2730 default: … … 2807 2954 case Keys.UP, Keys.LEFT: 2808 2955 // Backwards... 2809 Control._dlgselnext(form .handle, m.hWnd, false, false, true);2956 Control._dlgselnext(form, m.hWnd, false, false, true); 2810 2957 break; 2811 2958 case Keys.DOWN, Keys.RIGHT: 2812 2959 // Forwards... 2813 Control._dlgselnext(form .handle, m.hWnd, true, false, true);2960 Control._dlgselnext(form, m.hWnd, true, false, true); 2814 2961 break; 2815 2962 default: … … 2847 2994 // Backwards... 2848 2995 //DefDlgProcA(form.handle, WM_NEXTDLGCTL, 1, MAKELPARAM(FALSE, 0)); 2849 _dlgselnext(form .handle, m.hWnd, false);2996 _dlgselnext(form, m.hWnd, false); 2850 2997 } 2851 2998 else … … 2853 3000 // Forwards... 2854 3001 //DefDlgProcA(form.handle, WM_NEXTDLGCTL, 0, MAKELPARAM(FALSE, 0)); 2855 _dlgselnext(form .handle, m.hWnd, true);3002 _dlgselnext(form, m.hWnd, true); 2856 3003 } 2857 3004 } … … 2946 3093 break; 2947 3094 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 2948 3109 default: ; 2949 3110 } … … 2965 3126 2966 3127 3128 /+ 2967 3129 package final bool _dlgescape() 2968 3130 { … … 2974 3136 return false; 2975 3137 } 3138 +/ 2976 3139 2977 3140
