~bzr-pqm/bzr/bzr.dev

1185.49.21 by John Arbash Meinel
Refactored bzrlib/ui.py into a module with the possibility for multiple ui forms.
1
# Copyright (C) 2005 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1185.49.21 by John Arbash Meinel
Refactored bzrlib/ui.py into a module with the possibility for multiple ui forms.
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1185.49.21 by John Arbash Meinel
Refactored bzrlib/ui.py into a module with the possibility for multiple ui forms.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1185.49.21 by John Arbash Meinel
Refactored bzrlib/ui.py into a module with the possibility for multiple ui forms.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
18
19
"""Text UI, write output to the console.
20
"""
21
1996.3.27 by John Arbash Meinel
lazy import getpass in bzrlib.ui.text
22
import sys
23
24
from bzrlib.lazy_import import lazy_import
25
lazy_import(globals(), """
1185.49.22 by John Arbash Meinel
Added get_password to the UIFactory, using it inside of sftp.py
26
import getpass
1996.3.27 by John Arbash Meinel
lazy import getpass in bzrlib.ui.text
27
28
from bzrlib import (
29
    progress,
2294.4.1 by Vincent Ladeuil
Add a UIFactory.get_login method, fix tests.
30
    osutils,
1996.3.27 by John Arbash Meinel
lazy import getpass in bzrlib.ui.text
31
    )
32
""")
33
34
from bzrlib.symbol_versioning import (
35
    deprecated_method,
36
    zero_eight,
37
    )
1687.1.4 by Robert Collins
Add bzrlib.ui.ui_factory.get_boolean().
38
from bzrlib.ui import CLIUIFactory
39
40
41
class TextUIFactory(CLIUIFactory):
1681.1.2 by Robert Collins
* bzrlib.ui.text.TextUIFactory now accepts a bar_type parameter which
42
    """A UI factory for Text user interefaces."""
43
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
44
    def __init__(self,
45
                 bar_type=None,
46
                 stdout=None,
47
                 stderr=None):
1681.1.2 by Robert Collins
* bzrlib.ui.text.TextUIFactory now accepts a bar_type parameter which
48
        """Create a TextUIFactory.
49
50
        :param bar_type: The type of progress bar to create. It defaults to 
51
                         letting the bzrlib.progress.ProgressBar factory auto
52
                         select.
53
        """
54
        super(TextUIFactory, self).__init__()
55
        self._bar_type = bar_type
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
56
        if stdout is None:
57
            self.stdout = sys.stdout
58
        else:
59
            self.stdout = stdout
60
        if stderr is None:
61
            self.stderr = sys.stderr
62
        else:
63
            self.stderr = stderr
1594.1.1 by Robert Collins
Introduce new bzr progress bar api. ui_factory.nested_progress_bar.
64
1687.1.4 by Robert Collins
Add bzrlib.ui.ui_factory.get_boolean().
65
    def prompt(self, prompt):
66
        """Emit prompt on the CLI."""
2294.4.1 by Vincent Ladeuil
Add a UIFactory.get_login method, fix tests.
67
        self.stdout.write(prompt)
1687.1.4 by Robert Collins
Add bzrlib.ui.ui_factory.get_boolean().
68
        
1594.1.2 by Robert Collins
Update news and deprecated the old progress bar api.
69
    @deprecated_method(zero_eight)
1185.49.21 by John Arbash Meinel
Refactored bzrlib/ui.py into a module with the possibility for multiple ui forms.
70
    def progress_bar(self):
1594.1.1 by Robert Collins
Introduce new bzr progress bar api. ui_factory.nested_progress_bar.
71
        """See UIFactory.nested_progress_bar()."""
1185.49.21 by John Arbash Meinel
Refactored bzrlib/ui.py into a module with the possibility for multiple ui forms.
72
        # this in turn is abstract, and creates either a tty or dots
73
        # bar depending on what we think of the terminal
1996.3.27 by John Arbash Meinel
lazy import getpass in bzrlib.ui.text
74
        return progress.ProgressBar()
1185.49.21 by John Arbash Meinel
Refactored bzrlib/ui.py into a module with the possibility for multiple ui forms.
75
1594.1.1 by Robert Collins
Introduce new bzr progress bar api. ui_factory.nested_progress_bar.
76
    def nested_progress_bar(self):
77
        """Return a nested progress bar.
78
        
79
        The actual bar type returned depends on the progress module which
80
        may return a tty or dots bar depending on the terminal.
81
        """
82
        if self._progress_bar_stack is None:
1996.3.27 by John Arbash Meinel
lazy import getpass in bzrlib.ui.text
83
            self._progress_bar_stack = progress.ProgressBarStack(
1681.1.2 by Robert Collins
* bzrlib.ui.text.TextUIFactory now accepts a bar_type parameter which
84
                klass=self._bar_type)
1594.1.1 by Robert Collins
Introduce new bzr progress bar api. ui_factory.nested_progress_bar.
85
        return self._progress_bar_stack.get_nested()
1558.8.1 by Aaron Bentley
Fix overall progress bar's interaction with 'note' and 'warning'
86
87
    def clear_term(self):
88
        """Prepare the terminal for output.
89
90
        This will, clear any progress bars, and leave the cursor at the
91
        leftmost position."""
92
        if self._progress_bar_stack is None:
93
            return
94
        overall_pb = self._progress_bar_stack.bottom()
95
        if overall_pb is not None:
96
            overall_pb.clear()