1
# Copyright (C) 2008 Valmantas Paliksa <walmis at balticum-tv dot lt>
2
# Copyright (C) 2008 Tadas Dailyda <tadas at dailyda dot com>
4
# Licensed under the GNU General Public License Version 3
6
# This program is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
16
# You should have received a copy of the GNU General Public License
17
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1
from __future__ import print_function
2
from __future__ import division
3
from __future__ import absolute_import
4
from __future__ import unicode_literals
19
6
from gi.repository import Pango
20
7
from gi.repository import GObject
21
8
from gi.repository import Gtk
22
9
from gi.repository import Gdk
23
from blueman.Functions import get_icon
10
from blueman.Functions import get_icon, dprint
24
11
from blueman.main.SignalTracker import SignalTracker
26
14
class ManagerProgressbar(GObject.GObject):
29
'cancelled' : (GObject.SignalFlags.RUN_LAST, None, ()),
32
def __init__(self, blueman, cancellable=True, text=_("Connecting")):
33
def on_enter(evbox, event):
34
c = Gdk.Cursor.new(Gdk.CursorType.HAND2)
35
self.window.get_window().set_cursor(c)
37
def on_leave(evbox, event):
38
self.window.get_window().set_cursor(None)
40
def on_clicked(evbox, event):
41
self.eventbox.props.sensitive = False
42
self.emit("cancelled")
44
GObject.GObject.__init__(self)
45
self.Blueman = blueman
47
self.cancellable = cancellable
49
self.hbox = hbox = blueman.Builder.get_object("statusbar1")
51
self.progressbar = Gtk.ProgressBar()
53
self.signals = SignalTracker()
55
self.button = Gtk.Image.new_from_pixbuf(get_icon("gtk-stop", 16))
57
self.eventbox = eventbox = Gtk.EventBox()
58
eventbox.add(self.button)
59
eventbox.props.tooltip_text = _("Cancel Operation")
60
self.signals.Handle(eventbox, "enter-notify-event", on_enter)
61
self.signals.Handle(eventbox, "leave-notify-event", on_leave)
62
self.signals.Handle(eventbox, "button-press-event", on_clicked)
65
self.progressbar.set_size_request(100, 15)
66
self.progressbar.set_ellipsize(Pango.EllipsizeMode.END)
67
self.progressbar.set_text(text)
68
self.progressbar.set_pulse_step(0.05)
70
self.window = blueman.Builder.get_object("window")
72
hbox.pack_end(eventbox, True, False, 0)
73
hbox.pack_end(self.progressbar, False, False, 0)
75
if ManagerProgressbar.__instances__ != []:
76
dprint("hiding", ManagerProgressbar.__instances__[-1])
77
ManagerProgressbar.__instances__[-1].hide()
80
if not self.cancellable:
81
self.eventbox.props.sensitive = False
84
self.finalized = False
86
ManagerProgressbar.__instances__.append(self)
88
def connect(self, *args):
89
self.signals.Handle("gobject", super(ManagerProgressbar, self), *args)
92
if self.Blueman.Config.props.show_statusbar == False:
93
self.Blueman.Builder.get_object("statusbar").props.visible = True
96
#if self.Blueman.Stats.hbox.size_request()[0] + self.progressbar.size_request()[0] + 16 > self.Blueman.window.get_size()[0]:
97
# self.Blueman.Stats.hbox.hide_all()
100
self.progressbar.props.visible = True
101
self.eventbox.props.visible = True
102
self.button.props.visible = True
105
self.Blueman.Stats.hbox.show_all()
106
self.progressbar.props.visible = False
107
self.eventbox.props.visible = False
108
self.button.props.visible = False
110
def message(self, msg, timeout=1500):
113
self.set_cancellable(False)
114
GObject.timeout_add(timeout, self.finalize)
118
if not self.finalized:
121
Gdk.Window.set_cursor(self.window.get_window(), None)
122
self.hbox.remove(self.eventbox)
123
self.hbox.remove(self.progressbar)
124
#self.hbox.remove(self.seperator)
125
self.finalized = True
127
if ManagerProgressbar.__instances__[-1] == self:
128
ManagerProgressbar.__instances__.pop()
129
#remove all finalized instances
130
for inst in reversed(ManagerProgressbar.__instances__):
132
ManagerProgressbar.__instances__.pop()
134
#show last active progress bar
138
if ManagerProgressbar.__instances__ == []:
139
if self.Blueman.Config.props.show_statusbar == False:
140
self.Blueman.Builder.get_object("statusbar").props.visible = False
142
self.signals.DisconnectAll()
145
def set_cancellable(self, b, hide=False):
147
self.eventbox.props.visible = True
148
self.eventbox.props.sensitive = True
151
self.eventbox.props.visible = False
153
self.eventbox.props.sensitive = False
155
def set_label(self, label):
156
self.progressbar.props.text = label
158
def fraction(self, frac):
159
if not self.finalized:
160
self.progressbar.set_fraction(frac)
163
return self.gsource != None
167
self.progressbar.pulse()
170
self.gsource = GObject.timeout_add(1000/24, pulse)
173
if self.gsource != None:
174
GObject.source_remove(self.gsource)
175
self.progressbar.set_fraction(0.0)
16
str('cancelled'): (GObject.SignalFlags.RUN_LAST, None, ()),
20
def __init__(self, blueman, cancellable=True, text=_("Connecting")):
21
def on_enter(evbox, event):
22
c = Gdk.Cursor.new(Gdk.CursorType.HAND2)
23
self.window.get_window().set_cursor(c)
25
def on_leave(evbox, event):
26
self.window.get_window().set_cursor(None)
28
def on_clicked(evbox, event):
29
self.eventbox.props.sensitive = False
30
self.emit("cancelled")
32
GObject.GObject.__init__(self)
33
self.Blueman = blueman
35
self.cancellable = cancellable
37
self.hbox = hbox = blueman.Builder.get_object("statusbar1")
39
self.progressbar = Gtk.ProgressBar()
41
self.signals = SignalTracker()
43
self.button = Gtk.Image.new_from_pixbuf(get_icon("process-stop", 16))
45
self.eventbox = eventbox = Gtk.EventBox()
46
eventbox.add(self.button)
47
eventbox.props.tooltip_text = _("Cancel Operation")
48
self.signals.Handle(eventbox, "enter-notify-event", on_enter)
49
self.signals.Handle(eventbox, "leave-notify-event", on_leave)
50
self.signals.Handle(eventbox, "button-press-event", on_clicked)
52
self.progressbar.set_size_request(100, 15)
53
self.progressbar.set_ellipsize(Pango.EllipsizeMode.END)
54
self.progressbar.set_text(text)
55
self.progressbar.set_pulse_step(0.05)
57
self.window = blueman.Builder.get_object("window")
59
hbox.pack_end(eventbox, True, False, 0)
60
hbox.pack_end(self.progressbar, False, False, 0)
62
if ManagerProgressbar.__instances__ != []:
63
dprint("hiding", ManagerProgressbar.__instances__[-1])
64
ManagerProgressbar.__instances__[-1].hide()
67
if not self.cancellable:
68
self.eventbox.props.sensitive = False
71
self.finalized = False
73
ManagerProgressbar.__instances__.append(self)
75
def connect(self, *args):
76
self.signals.Handle("gobject", super(ManagerProgressbar, self), *args)
79
if not self.Blueman.Config["show-statusbar"]:
80
self.Blueman.Builder.get_object("statusbar").props.visible = True
83
# if self.Blueman.Stats.hbox.size_request()[0] + self.progressbar.size_request()[0] + 16 > self.Blueman.window.get_size()[0]:
84
# self.Blueman.Stats.hbox.hide_all()
87
self.progressbar.props.visible = True
88
self.eventbox.props.visible = True
89
self.button.props.visible = True
92
self.Blueman.Stats.hbox.show_all()
93
self.progressbar.props.visible = False
94
self.eventbox.props.visible = False
95
self.button.props.visible = False
97
def message(self, msg, timeout=1500):
100
self.set_cancellable(False)
101
GObject.timeout_add(timeout, self.finalize)
105
if not self.finalized:
108
Gdk.Window.set_cursor(self.window.get_window(), None)
109
self.hbox.remove(self.eventbox)
110
self.hbox.remove(self.progressbar)
111
# self.hbox.remove(self.seperator)
112
self.finalized = True
114
if ManagerProgressbar.__instances__[-1] == self:
115
ManagerProgressbar.__instances__.pop()
116
#remove all finalized instances
117
for inst in reversed(ManagerProgressbar.__instances__):
119
ManagerProgressbar.__instances__.pop()
121
#show last active progress bar
125
if ManagerProgressbar.__instances__ == []:
126
if not self.Blueman.Config["show-statusbar"]:
127
self.Blueman.Builder.get_object("statusbar").props.visible = False
129
self.signals.DisconnectAll()
132
def set_cancellable(self, b, hide=False):
134
self.eventbox.props.visible = True
135
self.eventbox.props.sensitive = True
138
self.eventbox.props.visible = False
140
self.eventbox.props.sensitive = False
142
def set_label(self, label):
143
self.progressbar.props.text = label
145
def fraction(self, frac):
146
if not self.finalized:
147
self.progressbar.set_fraction(frac)
150
return self.gsource != None
154
self.progressbar.pulse()
158
self.gsource = GObject.timeout_add(1000 / 24, pulse)
161
if self.gsource != None:
162
GObject.source_remove(self.gsource)
163
self.progressbar.set_fraction(0.0)