#!/usr/bin/env python

"""***********************************************************************
** $Id: progressbar.py,v 1.1 2003/06/10 14:51:24 phil Exp $
**
** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
**
** This file is part of an example program for TQt.  This example
** program may be used, distributed and modified without limitation.
**
**************************************************************************"""

#import pdb
import sys
from PyTQt.tqt import *

FALSE = 0
TRUE  = 1

class ProgressBar( TQButtonGroup ):
    # Constructor
    # Creates child widgets of the ProgressBar widget
    def __init__( self, parent=None, name=None ):
        TQButtonGroup.__init__( self, 0, TQt.Horizontal, "Progress Bar", parent, name )
        
        self.timer = TQTimer()
        
        self.setMargin( 10 )
        toplayout = TQGridLayout( self.layout(), 2, 2, 5)
            
        self.setRadioButtonExclusive( TRUE )
        
        # insert three radiobuttons which the user can use
        # to set the speed of the progress and two pushbuttons
        # to start/pause/continue and reset the progress
        self.slow   = TQRadioButton( "&Slow",   self )
        self.normal = TQRadioButton( "&Normal", self )
        self.fast   = TQRadioButton( "&Fast",   self )
        vb1 = TQVBoxLayout( )
        toplayout.addLayout( vb1, 0, 0 )
        vb1.addWidget( self.slow )
        vb1.addWidget( self.normal )
        vb1.addWidget( self.fast )
        
        # two push buttons, one for start, for for reset.
        self.start = TQPushButton( "&Start", self )
        self.reset = TQPushButton( "&Reset", self )
        
        vb2 = TQVBoxLayout()
        toplayout.addLayout( vb2, 0, 1 )
        vb2.addWidget( self.start )
        vb2.addWidget( self.reset )
        
        # Create the progressbar
        self.progress = TQProgressBar( 100, self )
        #self.progress.setStyle( TQMotifStyle() )
        toplayout.addMultiCellWidget( self.progress, 1, 1, 0, 1 )
        
        # connect the clicked() SIGNALs of the pushbuttons to SLOTs
        self.connect( self.start, TQ_SIGNAL("clicked()"), self.slotStart )
        self.connect( self.reset, TQ_SIGNAL("clicked()"), self.slotReset )
        
        # connect the timeout() signal of the progress-timer to a slot
        self.connect( self.timer, TQ_SIGNAL("timeout()"), self.slotTimeout )
        # Let's start with normal speed...
        self.normal.setChecked( TRUE )

        # some contraints
        self.start.setFixedWidth( 80 )
        self.setMinimumWidth( 300 )
        
    # Slot slotStart
    # This slot is called if the user clicks start/pause/continue button
    def slotStart( self ):
        # If the progress bar is at the beginning...
        if self.progress.progress() == -1 :
            # ...set according to the checked speed-radiobutton the
            # the number of steps which are needed to complete the process
            if self.slow.isChecked():
                self.progress.setTotalSteps( 10000 )
            elif self.normal.isChecked() :
                self.progress.setTotalSteps( 1000 )
            else :
                self.progress.setTotalSteps( 50 )
    
            # disable the speed-radiobuttons
            self.slow.setEnabled( FALSE )
            self.normal.setEnabled( FALSE )
            self.fast.setEnabled( FALSE )
            
        # If the progress is not running...
        if not self.timer.isActive() :
            # ...start the timer (and so the progress) with a interval of 1 ms...
            self.timer.start( 1 )
            # ...and rename the start/pause/continue button to Pause
            self.start.setText( "&Pause" )
        else : # if the prgress is running...
            # ...stop the timer (and so the prgress)...
            self.timer.stop()
            # ...and rename the start/pause/continue button to Continue
            self.start.setText( "&Continue" )
    
    # Slot slotReset
    # This slot is called when the user clicks the reset button
    def slotReset( self ):
        # stop the timer and progress
        self.timer.stop()
    
        # rename the start/pause/continue button to Start...
        self.start.setText( "&Start" )
        # ...and enable this button
        self.start.setEnabled( TRUE )
    
        # enable the speed-radiobuttons
        self.slow.setEnabled( TRUE )
        self.normal.setEnabled( TRUE )
        self.fast.setEnabled( TRUE )
    
        # reset the progressbar
        self.progress.reset()
    
    # Slot slotTimeout
    # This slot is called each ms when the timer is
    # active (== progress is running)
    def slotTimeout( self ):
        p = self.progress.progress()

        # If the progress is complete...
        if p == self.progress.totalSteps() :
            # ...rename the start/pause/continue button to Start...
            self.start.setText( "&Start" )
            # ...and disable it...
            self.start.setEnabled( FALSE )
            # ...and return
            return

        # If the process is not complete increase it
        p += 1
        self.progress.setProgress( p )
    

    #TQPushButton *start, *pause, *reset;

def main( args ):
    a = TQApplication( args )
    
    progressbar = ProgressBar()
    progressbar.setCaption("TQt Example - ProgressBar")
    a.setMainWidget(progressbar)
    progressbar.show()
    
    a.exec_loop()
    
if __name__=="__main__":
    main(sys.argv)
