~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
1687.1.4 by Robert Collins
Add bzrlib.ui.ui_factory.get_boolean().
34
from bzrlib.ui import CLIUIFactory
35
36
37
class TextUIFactory(CLIUIFactory):
1681.1.2 by Robert Collins
* bzrlib.ui.text.TextUIFactory now accepts a bar_type parameter which
38
    """A UI factory for Text user interefaces."""
39
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
40
    def __init__(self,
41
                 bar_type=None,
42
                 stdout=None,
43
                 stderr=None):
1681.1.2 by Robert Collins
* bzrlib.ui.text.TextUIFactory now accepts a bar_type parameter which
44
        """Create a TextUIFactory.
45
46
        :param bar_type: The type of progress bar to create. It defaults to 
47
                         letting the bzrlib.progress.ProgressBar factory auto
48
                         select.
49
        """
50
        super(TextUIFactory, self).__init__()
51
        self._bar_type = bar_type
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
52
        if stdout is None:
53
            self.stdout = sys.stdout
54
        else:
55
            self.stdout = stdout
56
        if stderr is None:
57
            self.stderr = sys.stderr
58
        else:
59
            self.stderr = stderr
1594.1.1 by Robert Collins
Introduce new bzr progress bar api. ui_factory.nested_progress_bar.
60
1687.1.4 by Robert Collins
Add bzrlib.ui.ui_factory.get_boolean().
61
    def prompt(self, prompt):
62
        """Emit prompt on the CLI."""
2294.4.1 by Vincent Ladeuil
Add a UIFactory.get_login method, fix tests.
63
        self.stdout.write(prompt)
1687.1.4 by Robert Collins
Add bzrlib.ui.ui_factory.get_boolean().
64
        
1594.1.1 by Robert Collins
Introduce new bzr progress bar api. ui_factory.nested_progress_bar.
65
    def nested_progress_bar(self):
66
        """Return a nested progress bar.
67
        
68
        The actual bar type returned depends on the progress module which
69
        may return a tty or dots bar depending on the terminal.
70
        """
71
        if self._progress_bar_stack is None:
1996.3.27 by John Arbash Meinel
lazy import getpass in bzrlib.ui.text
72
            self._progress_bar_stack = progress.ProgressBarStack(
1681.1.2 by Robert Collins
* bzrlib.ui.text.TextUIFactory now accepts a bar_type parameter which
73
                klass=self._bar_type)
1594.1.1 by Robert Collins
Introduce new bzr progress bar api. ui_factory.nested_progress_bar.
74
        return self._progress_bar_stack.get_nested()
1558.8.1 by Aaron Bentley
Fix overall progress bar's interaction with 'note' and 'warning'
75
76
    def clear_term(self):
77
        """Prepare the terminal for output.
78
79
        This will, clear any progress bars, and leave the cursor at the
80
        leftmost position."""
81
        if self._progress_bar_stack is None:
82
            return
83
        overall_pb = self._progress_bar_stack.bottom()
84
        if overall_pb is not None:
85
            overall_pb.clear()