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

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

WIP in new gui

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