a „oe\ã@sœddlZddlZddlZddlZddlmZmZe ej¡Z e ej ¡Z dd„Z dd„Z dd„Zd d „ZGd d „d ejƒZd d„Zdd„Zedkr˜eƒdS)éN)ÚafxresÚwindowcCs@|d|d}|d|d}|d|d|d|dfS)Néréé©)ÚrectÚwidthZheightrrúCC:\Program Files\Certbot\pkgs\pythonwin\pywin\docking\DockingBar.pyÚ CenterPointsr cCs4|\}}|d||d||d||d|fS©Nrrrrr©rZpointÚxÚyrrr Ú OffsetRectsrcCs4|\}}|d||d||d||d|fSr rr rrr Ú DeflateRectsrcCsH|d|dko|dknoF|d|dkoB|dkSS)Nrrrrr)rÚptrrr ÚPtInRect$src@sâeZdZd3dd„Zdd„ZejejBej Bdfdd„Z d d „Z d d „Z d d„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„ZdS)4Ú DockingBarNcCs¸|durt ¡}tj ||¡d|_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ d|_d|_t ¡|_|j t tj¡¡d|_t tj¡|_t tj¡|_t tj¡|_d|_dS)Nr)é r)éÈréré©rrrr) Úwin32uiZCreateControlBarrÚWndÚ__init__ÚdialogÚ nDockBarIDÚsizeMinÚsizeHorzÚsizeVertÚ sizeFloatÚ bTrackingÚ bInRecalcNCÚcxEdgeÚcxBorderÚ cxGripperZ CreateBrushÚ brushBkgdZCreateSolidBrushÚwin32apiÚ GetSysColorÚwin32conZ COLOR_BTNFACEÚcyBorderZGetSystemMetricsZSM_CYSMCAPTIONÚ cCaptionSizeZSM_CXMINÚ cMinWidthZSM_CYMINÚ cMinHeightÚ rectUndock)ÚselfÚobjrrr r)s* zDockingBar.__init__cCs | ||¡S©N)ZUpdateDialogControls)r1ÚtargetZbDisableIfNoHndlerrrr Ú OnUpdateCmdUIBszDockingBar.OnUpdateCmdUIrc Cs,|tj@r|tj@rJdƒ‚d|_|_|_|_|tj@|j_ t   dt j ¡}t t j||j ¡d¡}|j |||d||¡||f|Ž|_|j ¡s¤Jd|ƒ‚|j ¡} | d| d| d| df|_|_|_|jd|jd|j|jf|_|jd|j|j|jdf|_| ¡dS)Nz Invalid stylerrz5The childCreator function %s did not create a window!rrr)rZCBRS_SIZE_FIXEDÚCBRS_SIZE_DYNAMICÚ rectCloseÚ rectBorderÚ rectGripperÚ rectTrackerZCBRS_ALLÚ_obj_ÚdwStyler)Ú LoadCursorr+Z IDC_ARROWrZRegisterWndClassZ CS_DBLCLKSr(Z GetSafeHandleÚ CreateWindowrZIsWindowÚ GetWindowRectr r!r"r%r&Ú HookMessages) r1ÚparentZ childCreatorÚtitleÚidZstyleZchildCreatorArgsZcursorZwndClassrrrr r>Es0 ÿÿþÿ ÿ þ""zDockingBar.CreateWindowcCsˆ|j tj¡ ¡}|j tj¡ ¡}|r2d}d}n(|d|dd}|d|dd}| ¡rh|jS|rz||jdfS|j d|fS)Niÿrrérr) ÚdockSiteZ GetControlBarrÚAFX_IDW_DOCKBAR_TOPr?ÚAFX_IDW_DOCKBAR_LEFTÚ IsFloatingr"r r!)r1ZbStretchZbHorzZrectTopZrectLeftZnHorzDockBarWidthZnVertDockBarHeightrrr ÚCalcFixedLayoutss ÿÿzDockingBar.CalcFixedLayoutc CsR| ¡r| ¡ ¡ tjd¡|tjtjB@rrtjtj Btj Btj Btj B}|  dd|¡|j ¡|j ||¡S|tj@r‚|jS|tj@r¢||jdf|_|jS| ¡r|j}t ¡}| ¡ ¡ ¡}|j}|tjkr†t|d|d|jƒ|j}t|d|j|d|jƒd} || f|_t |d|d|j|jƒ|j!} t |d|d|jƒd} | | |j"d|j"df|_"|jS|tj#kr t|d|d|jƒ}t|d|j|d|jƒd} || f|_t |d|d|j|jƒ|j!} |j"d| |j"d|j"df|_"|jS|tj$kr´t|d|d|jƒ|j}t|d|d|j|jƒ} || f|_t |d|d|jƒd} | |j"d|j"d|j"df|_"|jS|tj%krt|d|d|jƒ}t|d|d|j|jƒ} || f|_|jS|tj&@r4|jdt|j'd|ƒf|_|jSt|j'd|ƒ|jdfSdS)Nrrrrr)(rHÚ GetParentZ ModifyStylerZMFS_4THICKFRAMEZ LM_HORZDOCKZ LM_VERTDOCKr+Ú SWP_NOSIZEÚ SWP_NOMOVEÚ SWP_NOZORDERZSWP_NOACTIVATEÚSWP_FRAMECHANGEDÚ SetWindowPosrEÚ RecalcLayoutr;ÚCalcDynamicLayoutZ LM_MRUWIDTHr"Z LM_COMMITÚ dockContextr)Z GetCursorPosr?ÚnHitTestZ HTTOPLEFTÚmaxr.r&r-r/Úminr,ZrectFrameDragHorzZ HTTOPRIGHTZ HTBOTTOMLEFTZ HTBOTTOMRIGHTZ LM_LENGTHYr) r1ÚlengthÚmodeÚflagsÚdcrZ windowRectZhittestÚcxÚcyÚtopÚleftrrr rQ‡sžÿþýüÿø     " ÿÿü " ÿÿü  ü   zDockingBar.CalcDynamicLayoutcCsò| ¡dks|jdurdS|d}d}t |t |¡¡}t ||¡\}}}}} } } |jrp| ¡} |j  | ¡dS|  ¡  ¡} | |j kr¨| t j@r¨|jjtj@tjkr¨dS| |_ d|_z0t jt jBt jBt jB}| dd|¡Wd|_nd|_0dS)NrrZPPiiiiirr)Ú GetSafeHwndrrZGetBytesÚstructÚcalcsizeÚunpackr$Ú GetClientRectZ MoveWindowrJZ GetDlgCtrlIDrr+rKr;r<rÚCBRS_BORDER_ANYrLrMrNrO)r1ÚmsgÚlparamÚformatÚbytesÚhwndZ hwndAfterrrrZr[rXÚrcrZswpflagsrrr ÚOnWindowPosChangedès@   ÿþüÿþýÿzDockingBar.OnWindowPosChangedcCsV|tjks|jr |j |||¡S| ¡r>t t dtj ¡¡nt t dtj ¡¡dS©Nrr) r+ÚHTSIZEr#r;Ú OnSetCursorÚIsHorzr)Z SetCursorr=Z IDC_SIZENSZ IDC_SIZEWE)r1rrSZ wMouseMsgrrr rms zDockingBar.OnSetCursorcCs|js dS| d¡dS©Nrr)r#Ú StopTracking©r1rdrrr Ú OnLButtonUp&s zDockingBar.OnLButtonUpcCs0|jdur,|d}| |¡}|j |¡dSdS)Nérr)ÚdockBarZClientToScreenrRÚ StartDrag)r1rdrrrr Ú OnLButtonDown,s    zDockingBar.OnLButtonDowncCs°|jr dS|d}}|d}|tjkrD| ¡sD| ¡ |dd¡nh|tjkrb| ¡sb|j ¡nJ|tj krŒ| ¡sŒ|j durŒ|j  |¡n |tj kr¨| ¡s¨|  ¡ndSdS)Nrrrsr)r#r+Ú HTSYSMENUrHZGetDockingFrameZShowControlBarÚ HTMINBUTTONrRÚ ToggleDockingÚ HTCAPTIONrtrurlÚ StartTracking)r1rdrSÚwparamrrrr ÚOnNcLButtonDown7s&  ÿþý zDockingBar.OnNcLButtonDowncCs|jdur|j ¡dSdSrk)rtrRryrqrrr ÚOnLButtonDblClkMs  zDockingBar.OnLButtonDblClkcCs2|d}}|jdur.|tjkr.|j ¡dSdS)Nrrr)rtr+rzrRry)r1rdrSr|rrr ÚOnNcLButtonDblClkUs   zDockingBar.OnNcLButtonDblClkc Cs|d}}|d}| ¡s"|js&dSt |¡}|d@r@|dB}t |¡}|d@rZ|dB}||f}t|jƒ}| |¡}| ¡rÆ|d|dkrÄ|  |j¡t |jd|d|dfƒ|_|  |j¡nH|d|dkr|  |j¡t |j|d|ddfƒ|_|  |j¡dS)Nrrri€iÿÿr) rHr#r)ZLOWORDZHIWORDr r:Ú ClientToWndrnÚOnInvertTrackerr) r1rdrXr|rerrrZcptrrr Ú OnMouseMove^s.        zDockingBar.OnMouseMovecCs\|\}}}}| ¡|_t|j|jd |jd fƒ|_|jjtjB}|jtjkrÆ|tj @}|j |j |_ |j |j |_ |j|j|_|j|j|_|jd|jd|j |jd|jdf|_nˆ|jtjkrH|tj@}|j |j |_ |j|j |_|j |j|_ |j|j|_|jd|jd|jd|jd|j f|_n|jtjkrÈ|tj@}|j|j |_|j |j|_ |j |j|_ |j|j |_|jd|j |jd|jd|jdf|_n†|jtjkrH|tj@}|j |j |_ |j|j|_|j |j|_ |j|j |_|jd|jd|jd|j |jdf|_nd|_| |¡dS)Nrrrrr)r?r8rr;r<rrcrrFZCBRS_BORDER_BOTTOMr]r'Zbottomr%r\r&ÚrightÚAFX_IDW_DOCKBAR_BOTTOMZCBRS_BORDER_TOPrGZCBRS_BORDER_RIGHTÚAFX_IDW_DOCKBAR_RIGHTZCBRS_BORDER_LEFTÚ SetBarStyle)r1Z bCalcValidZ size_infoZrc0Zrc1Zrc2ÚposZ dwBorderStylerrr Ú OnNcCalcSize}sj  ÿ  ü  ü  ü ü zDockingBar.OnNcCalcSizecCsZ| ¡| ¡}t tj¡}t tj¡}| |j||¡|  |¡|  ¡}|  |d¡dSro) ZEraseNonClientZ GetWindowDCr)r*r+ZCOLOR_BTNHIGHLIGHTÚCOLOR_BTNSHADOWÚ Draw3dRectr8Ú DrawGripperrbZInvalidateRect)r1rdrYZctlZcbrrrrr Ú OnNcPaint¼s    zDockingBar.OnNcPaintcCs| ¡r dS|}| ¡}|d|d|d|df}t|j|ƒrJtjSt|j|ƒr\tjSt|j|ƒrntj St|j |ƒr€tj S|j   |¡SdSro)rHr?rr7r+rwr0rxr9rzr8rlr;Ú OnNcHitTest)r1rZptOrigrrrr rÉs     zDockingBar.OnNcHitTestcCs~| ¡| ddtjtjB¡|j ¡t|jƒ|_ d|_ |j|_ |  ¡sn|j \}}}}|d}||||f|_ |  |j ¡dS)NrrD)Z SetCaptureZ RedrawWindowr+ZRDW_ALLCHILDRENZ RDW_UPDATENOWrEZLockWindowUpdater r8ÚptOldr#r:rnr)r1ÚlÚtÚrÚbrrr r{Üs  zDockingBar.StartTrackingcCs,|d}}|jr(|| ¡kr(| d¡dS)Nrrr)r#r^rp)r1rdrhrerrr ÚOnCaptureChangedîs  zDockingBar.OnCaptureChangedcCsz| |j¡|j ¡d|_| ¡|s,dS|j ¡}| ¡rh|jd}||d|d}|j d}n(|j d}||d|d}|j d}t |jƒ}|j t jkr¾||d|jd}nr|j t jkrä||d |jd}nL|j t jkr ||d|jd}n&|j t jkr0||d |jd}t|t||ƒƒ}| ¡r\|jd|f|_n||j df|_ |j ¡dS)Nrrrr)rr:rEZUnlockWindowUpdater#ZReleaseCapturer?rnr rr!r rrrFrŽr„rGr…rTrUrP)r1ZbAcceptÚrccZnewsizeÚmaxsizeZminsizerrrr rpôs:            zDockingBar.StopTrackingc Cs|d|ddkr(|d|ddks0Jdƒ‚|js:J‚| ¡}|j ¡}t||d|d|d|dfƒ}t|dƒ}tjtjBtjB}|j  d|¡}zdt   ¡}|  |¡}|  |d|df|d|d|d|dftj¡|  |¡W|j |¡n|j |¡0dS)Nrrrrz rect is empty)rr)r#r?rErrr+Z DCX_WINDOWZ DCX_CACHEZDCX_LOCKWINDOWUPDATEZGetDCExrZGetHalftoneBrushZ SelectObjectZPatBltZ PATINVERTZ ReleaseDC)r1rr”ZrcfrXrYZbrushZoldBrushrrr rs$0  &  ý zDockingBar.OnInvertTrackercCs|jtjkp|jtjkSr3)rrrFr„©r1rrr rn/s  þzDockingBar.IsHorzcCs>|\}}|jtjkr ||j}n|jtjkr6||j}||fSr3)rrr„r%r…)r1rrrrrr r€5s     zDockingBar.ClientToWndcCsÚ|jjtj@rdS|j ¡| ¡}| |¡}t||d |d fƒ}|\}}}}|jjtj @r||d|d|f|_ |d|d|d|df|_ |  |j t jt j¡t|j d ƒ|_|  |jt jt j¡|d }|d}|d}|d }||||f}| |tt¡| t|d ƒtt¡n¸|||d|df|_ |d |d|d|df|_ |  |j t jt j¡t|j dƒ|_|  |jt jt j¡|d }|d}|d}|d }||||f}| |tt¡| t|dƒtt¡dS)Nrré(réé éé)ré é&r)rDréé)ióÿÿÿr)rrD)r;r<rZ CBRS_FLOATINGrErPr?ZScreenToClientrZCBRS_ORIENT_HORZr9r7ZDrawFrameControlr+Z DFC_CAPTIONZDFCS_CAPTIONCLOSEr0ZDFCS_CAPTIONMAXrŠÚ clrBtnHilightÚ clrBtnShadow)r1rYZgripperÚglÚgtZgrZgbrrr r‹=sP    ÿ ÿ  ÿ ÿ zDockingBar.DrawGrippercCs”| |jtj¡| |jtj¡| |jtj¡| |jtj ¡| |j tj ¡| |j tj ¡| |jtj¡| |jtj¡| |jtj¡dSr3)Z HookMessagerrr+Z WM_LBUTTONUPrvZWM_LBUTTONDOWNr~ZWM_LBUTTONDBLCLKr}ZWM_NCLBUTTONDOWNrZWM_NCLBUTTONDBLCLKr‚Z WM_MOUSEMOVErŒZ WM_NCPAINTr“ZWM_CAPTURECHANGEDrjZWM_WINDOWPOSCHANGEDr–rrr r@xszDockingBar.HookMessages)N) Ú__name__Ú __module__Ú __qualname__rr5r+ÚWS_CHILDÚ WS_VISIBLErZ CBRS_LEFTr>rIrQrjrmrrrvr}r~rr‚rˆrŒrr{r“rprrnr€r‹r@rrrr r(s4  ù .a3   ? #;rcCs:t ¡}tjtjBtjBtjBtjB}| |d|d¡|S)N)rré–r©iè) rZ CreateEditr+r§r¨Z WS_BORDERZ ES_MULTILINEZ ES_WANTRETURNr>)rAÚdÚesrrr Ú EditCreator‡sÿþýüÿr¬cCshddl}tƒat}t t ¡|dd¡t t ¡t j Bt j Bt j B¡t  t j¡t ¡ tt j¡dS)Nrz Coolbar Demoiÿÿ)Zpywin.mfc.dialogrZbarr¬r>rZ GetMainFramer†Z GetBarStylerZ CBRS_TOOLTIPSZ CBRS_FLYBYr6Z EnableDockingZCBRS_ALIGN_ANYZDockControlBarr„)ZpywinZcreatorrrr Útest”sÿþýÿ r­Ú__main__)r_r)r+rZ pywin.mfcrrr*ZCOLOR_BTNHILIGHTr r‰r¡r rrrrrr¬r­r¤rrrr Ú s&  c