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

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

WIP in Gui

File size: 5.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
45
46
47                self.window=builder.get_object("main_window")
48                self.update_box=builder.get_object("update_box")
49               
50                self.version_label=builder.get_object("version_label")
51                self.number_packages_label=builder.get_object("number_packages_label")
52                self.size_update_label=builder.get_object("size_update_label")
53                self.view_packages_button_box=builder.get_object("view_packages_button_box")
54                self.view_packages_eb=builder.get_object("view_packages_eventbox")
55                self.view_packages_label=builder.get_object("view_packages_label")
56
57                self.update_button=builder.get_object("update_button")
58                self.update_button.connect("button-press-event",self.install_packages)
59
60
61                self.update_button_label=builder.get_object("update_button_label")
62
63               
64                self.terminal_label=builder.get_object("terminal_label")
65                self.viewport=builder.get_object("viewport")
66                self.terminal_scrolled=builder.get_object("terminalScrolledWindow")
67                self.vterminal=Vte.Terminal()
68                font_terminal = Pango.FontDescription("monospace normal 10")
69                self.vterminal.set_font(font_terminal)
70                self.terminal_scrolled.add(self.vterminal)
71                self.pbar=builder.get_object("progressbar")
72                self.pbar_label=builder.get_object("pbar_label")
73               
74
75                self.cancel_button_box=builder.get_object("cancel_button_box")
76                self.cancel_eb=builder.get_object("cancel_button_eventbox")
77                self.cancel_eb.connect("button-press-event", self.quit)
78                self.cancel_label=builder.get_object("cancel_button_label")
79
80
81                self.window.add(self.update_box)
82
83                self.window.show_all()
84                self.terminal_scrolled.hide()
85                self.viewport.hide()
86                self.terminal_label.hide()
87                self.pbar_label.hide()
88                self.pbar.hide()
89               
90                self.window.connect("destroy",self.quit)
91               
92               
93                self.set_css_info()
94                self.get_update_info()
95
96                Gtk.main()
97
98
99        def set_css_info(self):
100       
101                css = """
102
103
104                #WHITE_BACKGROUND {
105                        background-image:-gtk-gradient (linear, left top, left bottom, from (#ffffff),  to (#ffffff));;
106               
107                }
108
109                #BUTTON_LABEL{
110                        color:white;
111                        font: Roboto 10;
112                }
113
114                #DISABLED_BUTTON_OVER{
115                        background-image:-gtk-gradient (linear, left top, left bottom, from (#888888),  to (#888888));;
116                }
117               
118                #DISABLED_BUTTON{
119                        background-image:-gtk-gradient (linear, left top, left bottom, from (#666666),  to (#666666));;
120                }
121               
122                #CANCEL_BUTTON{
123                        background-image:-gtk-gradient (linear, left top, left bottom, from (#D32F2F),  to (#D32F2F));;
124                }
125               
126                #CANCEL_BUTTON_OVER{
127                        background-image:-gtk-gradient (linear, left top, left bottom, from (#F44336),  to (#F44336));;
128                }
129
130                #BUTTON_COLOR {
131                        background-image:-gtk-gradient (linear, left top, left bottom, from (#448AFF),  to (#448AFF));;
132               
133                }
134               
135                #UPDATE_BUTTON_LABEL{
136                        color:white;
137                        font: Roboto 11;
138                }
139               
140                #UPDATE_BUTTON_COLOR {
141                        background-image:-gtk-gradient (linear, left top, left bottom, from (#09b815),  to (#09b815));;
142               
143                }
144               
145                #BLUE_FONT {
146                        color: #3366cc;
147                        font: Roboto 10;
148                       
149                }       
150               
151
152                #LABEL_OPTION{
153               
154                        color: #808080;
155                        font: Roboto 11;
156                }
157               
158                """
159
160                self.style_provider=Gtk.CssProvider()
161                self.style_provider.load_from_data(css)
162                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
163                self.view_packages_button_box.set_name("BUTTON_COLOR")
164                self.view_packages_label.set_name("BUTTON_LABEL")
165
166                self.cancel_button_box.set_name("BUTTON_COLOR")
167                self.cancel_label.set_name("BUTTON_LABEL")     
168
169                self.version_label.set_name("LABEL_OPTION")     
170                self.number_packages_label.set_name("LABEL_OPTION")
171                self.size_update_label.set_name("LABEL_OPTION")
172                self.update_button_label.set_name("UPDATE_BUTTON_LABEL")
173                self.update_button.set_name("UPDATE_BUTTON_COLOR")
174                self.terminal_label.set_name("LABEL_OPTION")
175
176        def execute(self):
177               
178                self.vterminal.spawn_sync(
179                        Vte.PtyFlags.DEFAULT,
180                        os.environ['HOME'],
181                        ["/usr/sbin/dpkg-reconfigure", "xdm"],
182                        [],
183                        GLib.SpawnFlags.DO_NOT_REAP_CHILD,
184                        None,
185                        None,
186                )
187
188                               
189        def install_packages(self,widget, event=None):
190                self.t=threading.Thread(target=self.execute,args=())
191                self.t.daemon=True
192                self.t.start()
193                GLib.timeout_add(100,self.pulsate_pbar)
194                self.pbar.show()
195                self.viewport.show()
196                self.terminal_scrolled.show()
197                self.terminal_label.show()
198                msg_terminal=_("Update process details")
199                self.terminal_label.set_markup(msg_terminal)
200                               
201       
202        def get_update_info(self):
203                self.version_update="16.160916"
204                self.number_pkg="15"
205                self.size_update="100 Mb"
206               
207                msg_version=_("Version available: ")+"<span><b>"+self.version_update+"</b></span>"
208                msg_number=_("Number packages: ")+"<span><b>"+self.number_pkg+"</b></span>"
209                msg_size=_("Size of update: ")+"<span><b>"+self.size_update+"</b></span>"
210               
211                self.version_label.set_markup(msg_version)
212                self.number_packages_label.set_markup(msg_number)
213                self.size_update_label.set_markup(msg_size)
214               
215        def pulsate_pbar(self):
216                if self.t.is_alive():
217                        self.pbar.pulse()
218                else:
219                        self.pbar.hide()
220                       
221
222        def quit(self,widget,event=None):
223               
224                Gtk.main_quit() 
225
226#class LliurexMirror
227
228at=LliurexUp()         
Note: See TracBrowser for help on using the repository browser.