
    e%                     ~    d dl mZ ddlmZmZmZ dgZ G d dej                        Z G d dej                        Z
y)	    )perf_counter   )QtCoreQtGui	QtWidgetsProgressDialogc                        e Zd ZdZg ZddZd Zd Zd Zd Z	d Z
d Zd	 Z fd
Zd Zd Zd Zd Zd Zd Zd Z xZS )r   a  
    Extends QProgressDialog:
    
      * Adds context management so the dialog may be used in `with` statements
      * Allows nesting multiple progress dialogs

    Example::

        with ProgressDialog("Processing..", minVal, maxVal) as dlg:
            # do stuff
            dlg.setValue(i)   ## could also use dlg += 1
            if dlg.wasCanceled():
                raise Exception("Processing canceled by user")
    c
                    d| _         d| _        d| _        d| _        g | _        |	| _        d| _        t        j                  j                         t        j                  j                         j                         k(  }
|xs |
 | _        | j                  ryd}|d}d}|| _        t        j                   j#                  | |||||       |	du r.t%        t&        j(                        dkD  r| j+                  d       n| j+                  |       | j-                  t        j.                  j0                  j2                         | j5                  | j7                                |r| j9                  d       yy)a  
        ============== ================================================================
        **Arguments:**
        labelText      (required)
        cancelText     Text to display on cancel button, or None to disable it.
        minimum
        maximum
        parent       
        wait           Length of time (im ms) to wait before displaying dialog
        busyCursor     If True, show busy cursor until dialog finishes
        disable        If True, the progress dialog will not be displayed
                       and calls to wasCanceled() will always return False.
                       If ProgressDialog is entered from a non-gui thread, it will
                       always be disabled.
        nested         (bool) If True, then this progress bar will be displayed inside
                       any pre-existing progress dialogs that also allow nesting.
        ============== ================================================================
        NF Tr   i   @)nestedLayout_nestableWidgets_nestingReady
_topDialog_subBarsnested_lastProcessEventsr   QThreadcurrentThreadQCoreApplicationinstancethreaddisabled
busyCursorr   QProgressDialog__init__lenr   
allDialogssetMinimumDurationsetWindowModalityQtWindowModalityWindowModalsetValueminimumsetCancelButton)self	labelTextr$   maximum
cancelTextparentwaitr   disabler   isGuiThreadnoCancels               B/usr/lib/python3/dist-packages/pyqtgraph/widgets/ProgressDialog.pyr   zProgressDialog.__init__   s;   ( ! $" #'nn2248O8O8X8X8Z8a8a8cc4O==JH$!!**4JQXZ`a T>c.";";<q@##E*##D)vyy77CCDdlln%  &     c                    | j                   r| S | j                  rTt        j                  j	                  t        j                  t        j                  j                  j                               | j                  rlt        t        j                        dkD  rPt        j                  d   }|j                  |        || _        |j"                  j%                  | j&                         t        j                  j)                  |        | S Nr   )r   r   r   QApplicationsetOverrideCursorr   QCursorr   r    CursorShape
WaitCursorr   r   r   r   _addSubDialogr   canceledconnectcancelappend)r&   	topDialogs     r/   	__enter__zProgressDialog.__enter__Q   s    ==K??""44U]]699CXCXCcCc5de;;3~889A=&11!4I##D)'DO&&t{{3!!((.r0   c                 <   | j                   ry | j                  rt        j                  j	                          | j
                  | j
                  j                  |        t        j                  j                  d       | j                  | j                                y )N)r   r   r   r3   restoreOverrideCursorr   _removeSubDialogr   r   popr#   r(   )r&   exTypeexValueexTraces       r/   __exit__zProgressDialog.__exit__a   sg    ==??""88:??&OO,,T2!!%%b)dlln%r0   c                 f    | j                   r| S | j                  | j                         |z          | S )z4Use inplace-addition operator for easy incrementing.)r   r#   valuer&   vals     r/   __iadd__zProgressDialog.__iadd__n   s*    ==Kdjjl3&'r0   c                    | j                          |j                         \  }}d}t        | j                        D ]m  \  }}|j                  s| j                  j                  |       |j                          |j                  d        | j                  j                  ||       d} n |s| j                  j                  |       | j                  j                         dkD  r9| j                  j                  d       | j                  j                         dkD  r9| j                  D ]  }| j                  j                  |        y )NFTr   )_prepareNesting_extractWidgets	enumerater   hiddenrC   hide	setParentinsertr<   r   counttakeAt	addWidget)r&   dlgbarbtninsertedibar2bs           r/   r8   zProgressDialog._addSubDialogu   s    	&&(S . 	FAd{{!!!$		t$$$Q,	 MM  % %%'!+$$Q' %%'!+ 	+A''*	+r0   c                 J    |j                         \  }}|j                          y N)rO   rR   )r&   rX   rY   rZ   s       r/   rB   zProgressDialog._removeSubDialog   s     &&(S
r0   c                    | j                   du rt        j                         | _        | j	                  | j                         | j                  j                  dddd       t        j                         | _        | j                  j                  | j                  dddd       t        j                         | _
        | j                  j	                  | j                         | j                         \  }}| j                  j                  |       | j                  j                  |       | j                  j                  |dddd       | j                  j                  dd       | j                  j                  dd       | j                  j                  dd       | j                  j                  dd       d| _         y y )NFr      r   d   T)r   r   QGridLayout
_topLayout	setLayoutsetContentsMarginsQWidget
nestedVBoxrW   QVBoxLayoutr   rO   r   r<   setColumnStretchsetRowStretch)r&   rY   rZ   s      r/   rN   zProgressDialog._prepareNesting   sR   &'335DONN4??+OO..q!Q: (//1DOOO%%dooq!QB ) 5 5 7DOO%%d&7&78 ++-HC'',MM  %OO%%c1aA6OO,,Q4OO,,Q2OO))!S1OO))!Q/!%D- 'r0   c                    | j                   | j                         D cg c]  }t        |t        j                        s|! c}d   }| j                         D cg c]  }t        |t        j
                        s|! c}d   }| j                         D cg c]  }t        |t        j                        s|! c}d   }t        ||      }||f| _         | j                   S c c}w c c}w c c}w r2   )r   children
isinstancer   QLabelQProgressBarQPushButtonProgressWidget)r&   chlabelrY   rZ   sws         r/   rO   zProgressDialog._extractWidgets   s    
   ("&--/VBZIDTDT5URVWXYE $Z":b)BXBX3Y2Z[\]C $Y":b)BWBW3X2YZ[\Cs+B%'ID!$$$ WZYs"   C"C"C';C'C,7C,c                 <    | j                   ry t        | 	  |      S r`   )r   superresizeEvent)r&   ev	__class__s     r/   ry   zProgressDialog.resizeEvent   s    w"2&&r0   c                 f   | j                   ry t        j                  j                  | |       | j	                         t
        j                  j                  j                  k(  rOt               }| j                  || j                  z
  dkD  r&t        j                  j                          || _
        y y y )Ng?)r   r   r   r#   windowModalityr   r    r!   r"   r   r   r3   processEvents)r&   rK   nows      r/   r#   zProgressDialog.setValue   s    ==!!**45  FII$<$<$H$HH.C&&.39P9P3PTW2W&&446*-' 3X Ir0   c                 ^    | j                   ry t        j                  j                  | |       y r`   )r   r   r   setLabelTextrJ   s     r/   r   zProgressDialog.setLabelText   s"    ==!!..tS9r0   c                 ^    | j                   ry t        j                  j                  | |       y r`   )r   r   r   
setMaximumrJ   s     r/   r   zProgressDialog.setMaximum   "    ==!!,,T37r0   c                 ^    | j                   ry t        j                  j                  | |       y r`   )r   r   r   
setMinimumrJ   s     r/   r   zProgressDialog.setMinimum   r   r0   c                 Z    | j                   ryt        j                  j                  |       S NF)r   r   r   wasCanceledr&   s    r/   r   zProgressDialog.wasCanceled   s#    ==((44T::r0   c                 Z    | j                   ryt        j                  j                  |       S r2   )r   r   r   r(   r   s    r/   r(   zProgressDialog.maximum   #    ==((0066r0   c                 Z    | j                   ryt        j                  j                  |       S r2   )r   r   r   r$   r   s    r/   r$   zProgressDialog.minimum   r   r0   )r   rc   CancelN   FFF)__name__
__module____qualname____doc__r   r   r>   rG   rL   r8   rB   rN   rO   ry   r#   r   r   r   r   r(   r$   __classcell__)r{   s   @r/   r   r      s`     J5'n &+8&4% '.:
8
8
;
7
7r0   c                   "    e Zd ZdZd Zd Zd Zy)rs   ztContainer for a label + progress bar that also allows its child widgets
    to be hidden without changing size.
    c                 @   t         j                  j                  |        d| _        t        j                         | _        | j                  | j
                         || _        || _        | j
                  j                  |       | j
                  j                  |       y r   )
r   rh   r   rQ   rj   layoutrf   ru   rY   rW   )r&   ru   rY   s      r/   r   zProgressWidget.__init__   so    ""4(++-t{{#
e$c"r0   c                 l    |j                         t        j                  j                  j                  k(  S r`   )typer   QEventTypePaint)r&   objrz   s      r/   eventFilterzProgressWidget.eventFilter  s#    wwyFMM..4444r0   c                     | j                   | j                  fD ]#  }|j                  |        |j                          % d| _        y )NT)ru   rY   installEventFilterupdaterQ   )r&   widgets     r/   rR   zProgressWidget.hide  s>    zz488, 	F%%d+MMO	 r0   N)r   r   r   r   r   r   rR    r0   r/   rs   rs      s    	#5r0   rs   N)timer   r    r   r   r   __all__r   r   rh   rs   r   r0   r/   <module>r      s=     ) )
j7Y.. j7ZY&& r0   