source: lliurex-up/trunk/fuentes/lliurex-up-gui/lliurex-up @ 2653

Last change on this file since 2653 was 2653, checked in by jrpelegrina, 3 years ago

WIP in gui

File size: 7.5 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import gi
5gi.require_version('Gtk', '3.0')
6gi.require_version('PangoCairo', '1.0')
7gi.require_version('Vte', '2.91')
8
9import cairo
10import os
11import threading
12import ConfigParser
13import platform
14import subprocess
15import sys
16
17from gi.repository import Gtk, Gdk, GObject, GLib, PangoCairo, Pango, Vte
18
19import signal
20signal.signal(signal.SIGINT, signal.SIG_DFL)
21
22import gettext
23gettext.textdomain('lliurex-up')
24_ = gettext.gettext
25
26
27
28RSRC_DIR="rsrc/"
29
30
31class LliurexUp:
32
33        def __init__(self):
34
35                self.start_gui()
36
37        def start_gui(self):
38               
39                builder=Gtk.Builder()
40               
41                glade_path=RSRC_DIR+"lliurex-up.ui"
42                builder.add_from_file(glade_path)
43
44                self.stack = Gtk.Stack()
45                self.stack.set_transition_duration(1000)
46                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
47
48
49                self.window=builder.get_object("main_window")
50                self.main_box=builder.get_object("main_box")
51
52                self.gather_box=builder.get_object("gather_box")
53                self.yes_button_box=builder.get_object("yes_button_box")
54                self.yes_button_label=builder.get_object("yes_button_label")
55                self.no_button_box=builder.get_object("no_button_box")
56                self.no_button_eb=builder.get_object("no_button_eventbox")
57                self.no_button_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK)
58                self.no_button_eb.connect("button-release-event", self.no_button_clicked)
59                self.no_button_label=builder.get_object("no_button_label")
60                self.gather_logo_box=builder.get_object("gather_logo_box")
61                self.gather_label=builder.get_object("gather_label")
62
63                self.update_box=builder.get_object("update_box")
64               
65                self.version_label=builder.get_object("version_label")
66                self.number_packages_label=builder.get_object("number_packages_label")
67                self.size_update_label=builder.get_object("size_update_label")
68                self.view_packages_button_box=builder.get_object("view_packages_button_box")
69                self.view_packages_eb=builder.get_object("view_packages_eventbox")
70                self.view_packages_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK)
71                self.view_packages_eb.connect("button-release-event", self.view_packages_clicked)
72                self.view_packages_label=builder.get_object("view_packages_label")
73
74                self.update_button=builder.get_object("update_button")
75                self.update_button.connect("button-press-event",self.install_packages)
76
77
78                self.update_button_label=builder.get_object("update_button_label")
79
80               
81                self.terminal_label=builder.get_object("terminal_label")
82                self.viewport=builder.get_object("viewport")
83                self.terminal_scrolled=builder.get_object("terminalScrolledWindow")
84                self.vterminal=Vte.Terminal()
85                font_terminal = Pango.FontDescription("monospace normal 10")
86                self.vterminal.set_font(font_terminal)
87                self.terminal_scrolled.add(self.vterminal)
88                self.pbar=builder.get_object("progressbar")
89                #self.pbar_label=builder.get_object("pbar_label")
90               
91
92                self.cancel_button_box=builder.get_object("cancel_button_box")
93                self.cancel_eb=builder.get_object("cancel_button_eventbox")
94                self.cancel_eb.connect("button-press-event", self.quit)
95                self.cancel_label=builder.get_object("cancel_button_label")
96
97
98                self.packages_box=builder.get_object("packages_box")
99
100                self.stack.add_titled(self.gather_box,"gather","Gather")
101                self.stack.add_titled(self.update_box,"update", "Update")
102                self.stack.add_titled(self.packages_box, "packages", "Packages")
103
104                self.main_box.add(self.stack)
105
106                self.window.show_all()
107                self.terminal_scrolled.hide()
108                self.viewport.hide()
109                self.terminal_label.hide()
110                #self.pbar_label.hide()
111                self.pbar.show()
112               
113                self.window.connect("destroy",self.quit)
114               
115               
116                self.set_css_info()
117                self.get_update_info()
118
119                Gtk.main()
120
121
122        def set_css_info(self):
123       
124                css = """
125
126
127                #WHITE_BACKGROUND {
128                        background-image:-gtk-gradient (linear, left top, left bottom, from (#ffffff),  to (#ffffff));;
129               
130                }
131
132                #BUTTON_LABEL{
133                        color:white;
134                        font: Roboto 10;
135                }
136
137                #DISABLED_BUTTON_OVER{
138                        background-image:-gtk-gradient (linear, left top, left bottom, from (#888888),  to (#888888));;
139                }
140               
141                #DISABLED_BUTTON{
142                        background-image:-gtk-gradient (linear, left top, left bottom, from (#666666),  to (#666666));;
143                }
144               
145                #CANCEL_BUTTON{
146                        background-image:-gtk-gradient (linear, left top, left bottom, from (#D32F2F),  to (#D32F2F));;
147                }
148               
149                #CANCEL_BUTTON_OVER{
150                        background-image:-gtk-gradient (linear, left top, left bottom, from (#F44336),  to (#F44336));;
151                }
152
153                #BUTTON_COLOR {
154                        background-image:-gtk-gradient (linear, left top, left bottom, from (#448AFF),  to (#448AFF));;
155               
156                }
157               
158                #UPDATE_BUTTON_LABEL{
159                        color:white;
160                        font: Roboto 11;
161                }
162               
163                #UPDATE_BUTTON_COLOR {
164                        background-image:-gtk-gradient (linear, left top, left bottom, from (#43A047),  to (#43A047));;
165               
166                }
167               
168                #GATHER_ICON_COLOR {
169                        background-image:-gtk-gradient (linear, left top, left bottom, from (#b0bec5),  to (#b0bec5));;
170               
171                }
172               
173               
174                #BLUE_FONT {
175                        color: #3366cc;
176                        font: Roboto 10;
177                       
178                }       
179               
180
181                #LABEL_OPTION{
182               
183                        color: #808080;
184                        font: Roboto 11;
185                }
186               
187                """
188
189                self.style_provider=Gtk.CssProvider()
190                self.style_provider.load_from_data(css)
191                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
192               
193                self.update_box.set_name("WHITE_BACKGROUN")
194                self.gather_logo_box.set_name("GATHER_ICON_COLOR")
195                self.gather_label.set_name("BLUE_FONT")
196
197                self.yes_button_box.set_name("BUTTON_COLOR")
198                self.yes_button_label.set_name("BUTTON_LABEL")
199
200                self.no_button_box.set_name("BUTTON_COLOR")
201                self.no_button_label.set_name("BUTTON_LABEL")
202
203                self.view_packages_button_box.set_name("BUTTON_COLOR")
204                self.view_packages_label.set_name("BUTTON_LABEL")
205
206                self.cancel_button_box.set_name("BUTTON_COLOR")
207                self.cancel_label.set_name("BUTTON_LABEL")     
208
209                self.version_label.set_name("LABEL_OPTION")     
210                self.number_packages_label.set_name("LABEL_OPTION")
211                self.size_update_label.set_name("LABEL_OPTION")
212                self.update_button_label.set_name("UPDATE_BUTTON_LABEL")
213                self.update_button.set_name("UPDATE_BUTTON_COLOR")
214                self.terminal_label.set_name("LABEL_OPTION")
215
216        def execute(self):
217               
218                self.vterminal.spawn_sync(
219                        Vte.PtyFlags.DEFAULT,
220                        os.environ['HOME'],
221                        ["/usr/sbin/dpkg-reconfigure", "xdm"],
222                        [],
223                        GLib.SpawnFlags.DO_NOT_REAP_CHILD,
224                        None,
225                        None,
226                )
227
228                               
229        def install_packages(self,widget, event=None):
230                self.t=threading.Thread(target=self.execute,args=())
231                self.t.daemon=True
232                self.t.start()
233                GLib.timeout_add(100,self.pulsate_pbar)
234                self.pbar.show()
235                self.viewport.show()
236                self.terminal_scrolled.show()
237                self.terminal_label.show()
238                msg_terminal=_("Update process details")
239                self.terminal_label.set_markup(msg_terminal)
240                               
241       
242        def get_update_info(self):
243                self.version_update="16.160916"
244                self.number_pkg="15"
245                self.size_update="100 Mb"
246               
247                msg_version=_("Version available: ")+"<span foreground='#3366cc'><b>"+self.version_update+"</b></span>"
248                msg_number=_("Number packages: ")+"<span foreground='#3366cc'><b>"+self.number_pkg+"</b></span>"
249                msg_size=_("Size of update: ")+"<span foreground='#3366cc'><b>"+self.size_update+"</b></span>"
250               
251                self.version_label.set_markup(msg_version)
252                self.number_packages_label.set_markup(msg_number)
253                self.size_update_label.set_markup(msg_size)
254               
255        def pulsate_pbar(self):
256                if not self.t.is_alive():
257                        self.pbar.pulse()
258                else:
259                        self.pbar.hide()
260                       
261        def view_packages_clicked(self,widget,event):
262                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
263                self.stack.set_visible_child_name("packages")
264
265        def no_button_clicked(self,widget,event):
266                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
267                self.stack.set_visible_child_name("update")     
268
269
270        def quit(self,widget,event=None):
271               
272                Gtk.main_quit() 
273
274#class LliurexMirror
275
276at=LliurexUp()         
Note: See TracBrowser for help on using the repository browser.