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

Last change on this file since 2791 was 2791, checked in by jrpelegrina, 4 years ago

WIP in new gui

File size: 20.9 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
16import time
17import commands
18
19from gi.repository import Gtk, Gdk, GdkPixbuf, GObject, GLib, PangoCairo, Pango, Vte
20
21import signal
22signal.signal(signal.SIGINT, signal.SIG_DFL)
23
24import gettext
25gettext.textdomain('lliurex-up')
26_ = gettext.gettext
27
28
29
30RSRC_DIR="rsrc/"
31CACHED_ICON="rsrc/cached.png"
32DONE_ICON="rsrc/done.png"
33ERROR_ICON="rsrc/error.png"
34
35class Package:
36
37        def __init__(self,name,version,size,desktop_file,changelog_file):
38
39                self.name=name
40                self.version=version
41                self.size=size
42                self.parse_desktop(desktop_file)
43                self.parse_changelog(changelog_file)
44                self.parse_installed_icon(CACHED_ICON)
45
46        #def__init__
47       
48        def parse_desktop(self,desktop_file):
49               
50                try:
51                        config = ConfigParser.ConfigParser()
52                        config.optionxform=str
53                        config.read(desktop_file)
54                       
55                        if config.has_section("Desktop Entry") and config.has_option("Desktop Entry","Icon"):
56                                self.icon=config.get("Desktop Entry","Icon")
57                        else:
58                                self.icon="package"
59                               
60                except Exception as e:
61                       
62                        self.icon="package"
63                       
64        #def parse_desktop
65       
66        def parse_changelog(self,changelog_file):
67               
68                try:
69                       
70                        f=open(changelog_file,"r")
71                        self.changelog=f.readlines()
72                        f.close()
73                                               
74                except Exception as e:
75                       
76                        self.changelog="Changelog not found"
77
78        #def parse_changelog
79       
80        def parse_installed_icon(self, icon_file):
81               
82                        image=Gtk.Image()
83                        image.set_from_file(icon_file)         
84                        self.installed=image.get_pixbuf()
85                       
86        #def parse_installed_icon
87
88class LliurexUp:
89
90        def __init__(self):
91
92                self.start_gui()
93       
94        #def __init__           
95
96        def start_gui(self):
97               
98                builder=Gtk.Builder()
99               
100                glade_path=RSRC_DIR+"lliurex-up.ui"
101                builder.add_from_file(glade_path)
102
103                self.stack = Gtk.Stack()
104                self.stack.set_transition_duration(1000)
105                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
106
107
108                self.window=builder.get_object("main_window")
109                self.main_box=builder.get_object("main_box")
110                self.pbar=builder.get_object("progressbar")
111                self.pbar_label=builder.get_object("progressbar_label")
112               
113
114                self.cancel_button_box=builder.get_object("cancel_button_box")
115                self.cancel_button_eb=builder.get_object("cancel_button_eventbox")
116                self.cancel_button_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK )
117                self.cancel_button_eb.connect("button-press-event", self.quit)
118                self.cancel_button_eb.connect("motion-notify-event", self.mouse_over_cancel)
119                self.cancel_button_eb.connect("leave-notify-event", self.mouse_exit_cancel)
120                self.cancel_button_label=builder.get_object("cancel_button_label")
121
122
123                self.gather_box=builder.get_object("gather_box")
124                self.yes_button_box=builder.get_object("yes_button_box")
125                self.yes_button_eb=builder.get_object("yes_button_eventbox")
126                self.yes_button_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK )
127                self.yes_button_eb.connect("button-release-event", self.yes_button_clicked)
128                self.yes_button_eb.connect("motion-notify-event", self.mouse_over_yes)
129                self.yes_button_eb.connect("leave-notify-event", self.mouse_exit_yes)
130                self.yes_button_label=builder.get_object("yes_button_label")
131
132                self.no_button_box=builder.get_object("no_button_box")
133                self.no_button_eb=builder.get_object("no_button_eventbox")
134                self.no_button_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK )
135                self.no_button_eb.connect("button-release-event", self.no_button_clicked)
136                self.no_button_eb.connect("motion-notify-event", self.mouse_over_no)
137                self.no_button_eb.connect("leave-notify-event",self.mouse_exit_no)
138                self.no_button_label=builder.get_object("no_button_label")
139                self.gather_logo_box=builder.get_object("gather_logo_box")
140                self.gather_label=builder.get_object("gather_label")
141                self.spinner=builder.get_object("spinner")
142
143                self.update_box=builder.get_object("update_box")
144                self.version_available_label=builder.get_object("version_available_label")
145                self.version_update_label=builder.get_object("version_update_label")
146                self.number_packages_label=builder.get_object("number_packages_label")
147                self.size_update_label=builder.get_object("size_update_label")
148                self.view_packages_button_box=builder.get_object("view_packages_button_box")
149                self.view_packages_eb=builder.get_object("view_packages_eventbox")
150                self.view_packages_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK )
151                self.view_packages_eb.connect("button-release-event", self.view_packages_clicked)
152                self.view_packages_eb.connect("motion-notify-event", self.mouse_over_view_packages)
153                self.view_packages_eb.connect("leave-notify-event", self.mouse_exit_view_packages)
154
155                self.view_packages_label=builder.get_object("view_packages_label")
156
157                self.update_button_box=builder.get_object("update_button_box")
158                self.update_button_eb=builder.get_object("update_button_eventbox")
159                self.update_button_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK)
160                self.update_button_eb.connect("button-release-event", self.upgrade_process)
161                self.update_button_eb.connect("motion-notify-event", self.mouse_over_update_button)
162                self.update_button_eb.connect("leave-notify-event", self.mouse_exit_update_button)
163
164                self.update_button_label=builder.get_object("update_button_label")
165                self.terminal_label=builder.get_object("terminal_label")
166                self.viewport=builder.get_object("viewport")
167                self.terminal_scrolled=builder.get_object("terminalScrolledWindow")
168                self.vterminal=Vte.Terminal()
169                font_terminal = Pango.FontDescription("monospace normal 10")
170                self.vterminal.set_font(font_terminal)
171                self.terminal_scrolled.add(self.vterminal)
172               
173
174                self.packages_box=builder.get_object("packages_box")
175                self.return_arrow_box=builder.get_object("return_arrow_box")
176                self.return_arrow_eb=builder.get_object("return_arrow_eventbox")
177                self.return_arrow_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK)
178                self.return_arrow_eb.connect("button-release-event", self.arrow_clicked)
179                self.return_arrow_eb.connect("motion-notify-event",self.mouse_over_return_arrow)
180                self.return_arrow_eb.connect("leave-notify-event",self.mouse_exit_return_arrow)
181                self.packages_label=builder.get_object("packages_label")
182                self.packages_tv=builder.get_object("packages_treeview")
183                self.changelog_texview=builder.get_object("changelog_textview")
184
185                self.packages_store=Gtk.ListStore(str,str,str,GdkPixbuf.Pixbuf)
186                self.packages_tv.set_model(self.packages_store)
187                column=Gtk.TreeViewColumn("")
188                cell=Gtk.CellRendererPixbuf()
189                cell.set_property("stock-size",Gtk.IconSize.DIALOG)
190                column.pack_start(cell,True)
191                column.add_attribute(cell,"icon-name",0)
192                self.packages_tv.append_column(column)
193               
194                column=Gtk.TreeViewColumn("Package")
195                cell=Gtk.CellRendererText()
196                column.pack_start(cell,True)
197                column.add_attribute(cell,"markup",1)
198                column.set_expand(True)
199
200               
201                self.packages_tv.append_column(column)
202               
203                self.packages_tv.connect("button-release-event",self.package_clicked)
204               
205                column=Gtk.TreeViewColumn("Size")
206                cell=Gtk.CellRendererText()
207                cell.set_property("alignment",Pango.Alignment.CENTER)
208                column.pack_start(cell,False)
209                column.add_attribute(cell,"markup",2)
210                self.packages_tv.append_column(column)         
211
212
213                done_icon=Gtk.Image()
214                done_icon.set_from_file(CACHED_ICON)
215                pixbuf=done_icon.get_pixbuf()
216                column=Gtk.TreeViewColumn("Installed")
217                cell=Gtk.CellRendererPixbuf()
218                column.pack_start(cell,True)
219                column.add_attribute(cell,"pixbuf",3)
220                self.packages_tv.append_column(column)
221               
222                self.changelog_textview=builder.get_object("changelog_textview")
223                self.changelog_label=builder.get_object("changelog_label")
224
225
226                self.stack.add_titled(self.gather_box,"gather","Gather")
227                self.stack.add_titled(self.update_box,"update", "Update")
228                self.stack.add_titled(self.packages_box, "packages", "Packages")
229
230                self.main_box.pack_start(self.stack,True,False,5)
231
232                self.window.show_all()
233                self.terminal_scrolled.hide()
234                self.viewport.hide()
235                self.terminal_label.hide()
236                self.cancel_button_box.hide()
237                self.yes_button_box.hide()
238                self.no_button_box.hide()
239
240                self.pbar_label.show()
241                self.pbar.show()
242               
243                self.window.connect("destroy",self.quit)
244               
245               
246                self.set_css_info()
247               
248                GLib.timeout_add(100,self.pulsate_gathering_info)
249               
250                self.t=threading.Thread(target=self.gather_info)
251                self.t.daemon=True
252                self.t.start()
253                self.spinner.start()
254               
255                self.package_list=[]
256
257                GObject.threads_init()
258                Gtk.main()
259
260        #def start_gui
261       
262        def set_css_info(self):
263       
264                css = """
265
266
267                #WHITE_BACKGROUND {
268                        background-image:-gtk-gradient (linear, left top, left bottom, from (#ffffff),  to (#ffffff));;
269               
270                }
271
272                #BUTTON_LABEL{
273                        color:white;
274                        font: Roboto 10;
275                }
276
277                #DISABLED_BUTTON_OVER{
278                        background-image:-gtk-gradient (linear, left top, left bottom, from (#888888),  to (#888888));;
279                }
280               
281                #DISABLED_BUTTON{
282                        background-image:-gtk-gradient (linear, left top, left bottom, from (#666666),  to (#666666));;
283                }
284               
285                #CANCEL_BUTTON{
286                        background-image:-gtk-gradient (linear, left top, left bottom, from (#D32F2F),  to (#D32F2F));;
287                }
288               
289                #CANCEL_BUTTON_OVER{
290                        background-image:-gtk-gradient (linear, left top, left bottom, from (#F44336),  to (#F44336));;
291                }
292
293                #BUTTON_COLOR {
294                        background-image:-gtk-gradient (linear, left top, left bottom, from (#448AFF),  to (#448AFF));;
295               
296                }
297               
298                #BUTTON_OVER_COLOR {
299                        background-image:-gtk-gradient (linear, left top, left bottom, from (#449fff),  to (#449fff));;
300                       
301               
302                }
303
304                #UPDATE_BUTTON_LABEL{
305                        color:white;
306                        font: Roboto 11;
307                }
308               
309                #UPDATE_BUTTON_COLOR {
310                        background-image:-gtk-gradient (linear, left top, left bottom, from (#43A047),  to (#43A047));;
311               
312                }
313
314                #UPDATE_OVER_COLOR {
315                        background-image:-gtk-gradient (linear, left top, left bottom, from (#53b757),  to (#53b757));;
316               
317                }
318
319                               
320                #GATHER_ICON_COLOR {
321                        background-image:-gtk-gradient (linear, left top, left bottom, from (#b0bec5),  to (#b0bec5));;
322               
323                }
324               
325               
326                #BLUE_FONT {
327                        color: #3366cc;
328                        font: Roboto 10;
329                       
330                }       
331               
332
333                #CHANGELOG_FONT {
334                        color: #3366cc;
335                        font: Roboto 11;
336                       
337                }
338
339                #LABEL_OPTION{
340               
341                        color: #808080;
342                        font: Roboto 11;
343                }
344               
345                #DISABLED_BUTTON{
346                        background-image:-gtk-gradient (linear, left top, left bottom, from (#666666),  to (#666666));;
347                }
348                """
349
350                self.style_provider=Gtk.CssProvider()
351                self.style_provider.load_from_data(css)
352                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
353               
354                self.window.set_name("WHITE_BACKGROUND")
355                self.update_box.set_name("WHITE_BACKGROUND")
356                self.gather_box.set_name("WHITE_BACKGROUND")
357                self.packages_box.set_name("WHITE_BACKGROUND")
358                self.gather_label.set_name("CHANGELOG_FONT")
359                self.pbar_label.set_name("CHANGELOG_FONT")
360
361                self.yes_button_box.set_name("BUTTON_COLOR")
362                self.yes_button_label.set_name("BUTTON_LABEL")
363
364                self.no_button_box.set_name("BUTTON_COLOR")
365                self.no_button_label.set_name("BUTTON_LABEL")
366
367                self.view_packages_button_box.set_name("BUTTON_COLOR")
368                self.view_packages_label.set_name("BUTTON_LABEL")
369
370                self.cancel_button_box.set_name("BUTTON_COLOR")
371                self.cancel_button_label.set_name("BUTTON_LABEL")       
372
373                self.version_available_label.set_name("LABEL_OPTION")
374                self.version_update_label.set_name("LABEL_OPTION")     
375                self.number_packages_label.set_name("LABEL_OPTION")
376                self.size_update_label.set_name("LABEL_OPTION")
377                self.update_button_label.set_name("UPDATE_BUTTON_LABEL")
378                self.update_button_box.set_name("UPDATE_BUTTON_COLOR")
379                self.terminal_label.set_name("LABEL_OPTION")
380
381
382                self.packages_label.set_name("LABEL_OPTION")
383                self.changelog_label.set_name("LABEL_OPTION")
384                self.changelog_texview.set_name("CHANGELOG_FONT")
385                self.return_arrow_box.set_name("BUTTON_COLOR")
386               
387        #def set_css_info       
388
389        def check_lliurexup_version(self):
390
391                print "Checking lliurex-up version"
392                msg_gather="<span><b>"+_("Checking for new version of lliurex-up")+"</b></span>"
393                self.gather_label.set_markup(msg_gather)
394
395
396                is_lliurexup_update=True #Call to the function to get the version of lliurex-up
397                self.updated_percentage(0.5)
398                time.sleep(1)
399
400                if not is_lliurexup_update:
401                        msg_gather="<span><b>"+_("Updating lliurex-up")+"</b></span>"
402                        self.gather_label.set_markup(msg_gather)
403                        is_lliurexup_updated=True # Call to the function to updates lliurex-up
404
405                        while not is_lliurexup_updated:
406                                pass
407                       
408                        time.sleep(2)
409                        msg_gather="<span><b>"+_("Lliurex-up is now updated and will be reboot")+"</b></span>"
410                        self.gather_label.set_markup(msg_gather)
411                        self.updated_percentage(1.0)   
412                        os.execl(sys.executable, sys.executable, *sys.argv)     
413                       
414                        return True
415
416                else:
417                        self.updated_percentage(1.0)
418                        time.sleep(2)
419                        return True
420       
421        #def check_lliurexup_version
422
423        def check_mirror(self):
424                print "Check mirror"
425
426                self.response=-1
427                msg_gather="<span><b>"+_("Checking if mirror exist and there is updated")+"</b></span>"
428                self.gather_label.set_markup(msg_gather)
429                self.updated_percentage(0.5)
430               
431                exist_mirror=False #Call to the function to check mirror
432                time.sleep(1)
433                if not exist_mirror:
434                        self.yes_button_box.show()
435                        self.no_button_box.show()
436                        msg_gather="<span><b>"+_("Do you want to create or update your mirror?")+"</b></span>"
437                        self.gather_label.set_markup(msg_gather)
438               
439                        while self.response==-1:
440                                pass
441
442                        self.yes_button_box.hide()
443                        self.no_button_box.hide()       
444
445                        if self.response==0:
446                                self.updated_percentage(1.0)
447                                time.sleep(1)
448                                return True
449
450                        elif self.response==1:
451                                msg_gather="<span><b>"+_("Updating mirror")+"</b></span>"
452                                self.gather_label.set_markup(msg_gather)
453                                self.updated_percentage(0.75)
454                                is_mirror_updated=True # Call to the function to update mirror
455                                time.sleep(1)
456
457                                while is_mirror_updated==False:
458                                        pass
459                                       
460                self.updated_percentage(1.0)                   
461                 
462                return True
463
464        #def check_mirror
465       
466        def gather_info(self):
467               
468                # self.total_process=3.0
469                # self.total_progress=0.0
470                # self.pbar_rang=1.0
471                # self.percentage=0.0
472                # self.ending_process=0.0
473                #self.updated_percentage(0.0)
474               
475                check_lliurexup=self.check_lliurexup_version()
476                check_mirror=self.check_mirror()
477               
478                while  (not check_lliurexup) & (not check_mirror):             
479                        pass
480
481                msg_gather="<span><b>"+_("Checking for new updates")+"</b></span>"
482                self.gather_label.set_markup(msg_gather)
483               
484                try:
485                        print ("Checking info")
486                        self.updated_percentage(0.5)
487                        p1=subprocess.Popen(["llxcfg-upgrade-version-scripts","details"],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
488                        output=p1.communicate()[0]
489                        f=open("/tmp/.lliurex_up_log","w")
490                        if output!=None:
491                                f.write(output)
492                        f.close()
493                       
494                except:
495                        pass 
496
497        #def gather_info
498
499
500        def pulsate_gathering_info(self):
501
502                       
503                if not self.t.is_alive():
504                       
505                        self.parse_simulate_output("/tmp/.lliurex_up_log")
506                        self.populate_packages_tv()     
507                        self.get_update_info()
508                        self.pbar.hide()
509                        self.pbar_label.hide()
510                        self.spinner.stop()
511                        if len(self.package_list)==0:
512                                msg_gather="<span><b>"+_("Your system is update")+"</b></span>"
513                                self.gather_label.set_markup(msg_gather)
514
515                        else:
516                               
517                                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
518                                self.stack.set_visible_child_name("update")     
519                       
520                        self.cancel_button_box.show()
521
522                return self.t.is_alive()       
523       
524        #def pulsate_gathering         
525       
526        def get_update_info(self):
527
528                self.version_available="16.160916"
529                self.version_update="16.160915"
530                self.number_pkg="15"
531                self.size_update="100 Mb"
532               
533                msg_version_available=_("Version available: ")+"<span foreground='#3366cc'><b>"+self.version_available+"</b></span>"
534                msg_version_update=_("Version to update: ")+"<span foreground='#3366cc'><b>"+self.version_update+"</b></span>"
535
536                msg_number=_("Number packages: ")+"<span foreground='#3366cc'><b>"+self.number_pkg+"</b></span>"
537                msg_size=_("Size of update: ")+"<span foreground='#3366cc'><b>"+self.size_update+"</b></span>"
538               
539                self.version_available_label.set_markup(msg_version_available)
540                self.version_update_label.set_markup(msg_version_update)
541                self.number_packages_label.set_markup(msg_number)
542                self.size_update_label.set_markup(msg_size)
543               
544        #def get_update_info   
545               
546        def updated_percentage(self,completed):
547               
548                #self.process_block=(self.pbar_rang/self.total_process)
549                #self.percentage=self.process_block*completed
550               
551                # if self.percentage==self.process_block:
552                #       self.ending_process=self.ending_process+1
553                #       self.total_progress=self.process_block*self.ending_process
554                # else:
555                #       self.total_progress=self.total_progress+self.percentage
556                               
557                self.pbar.set_fraction(completed)
558               
559                value=completed*100
560                value=format(value,'.2f')
561               
562                msg_percentage="<span><b>"+value+"%"+"</b></span>"
563                self.pbar_label.set_markup(msg_percentage)
564               
565               
566        #def updated_percentage
567               
568        def populate_packages_tv(self):
569               
570                for package in self.package_list:
571                        print package
572                        self.packages_store.append((package.icon,"<span font='Roboto'><b>"+package.name+"</b></span>\n"+"<span font='Roboto' size='small'>"+package.version+"</span>","<span font='Roboto' size='large'><b>"+package.size+"</b></span>",package.installed))
573                       
574                       
575                print len(self.packages_store) 
576               
577        #def populate_packages_tv
578       
579        def parse_simulate_output(self,test_file=None):
580               
581                if test_file!=None:
582                        f=open(test_file,"r")
583                       
584                        for line in f:
585                                if line.find("#")==0:
586                                        pass
587                                else:
588                                        tmp=line.split(";")
589                                        if len(tmp)>4:
590                                                package=Package(tmp[0],tmp[1],tmp[2],tmp[3],tmp[4])
591                                                self.package_list.append(package)
592
593                       
594                else:
595                       
596                        pass   
597
598        #def parse_simulate_output
599       
600        def package_clicked(self,x,y):
601               
602                selection=self.packages_tv.get_selection()
603                model,iter=selection.get_selected()
604                name=self.packages_store.get_value(iter,1)
605                name=name[name.find("<b>")+3:name.find("</b>")]
606                               
607                for package in self.package_list:
608                       
609                        if package.name==name:
610                                self.changelog_textview.get_buffer().set_text("".join(package.changelog))
611                               
612                                break
613       
614        #def package_clicked                   
615
616        def execute_scripts(self):
617               
618                self.vterminal.spawn_sync(
619                        Vte.PtyFlags.DEFAULT,
620                        os.environ['HOME'],
621                        ["/usr/sbin/dpkg-reconfigure", "xdm"],
622                        [],
623                        GLib.SpawnFlags.DO_NOT_REAP_CHILD,
624                        None,
625                        None,
626                )
627
628                self.update_installed_icon("epoptes-client")
629       
630        #def execute           
631                               
632        def upgrade_process(self,widget, event=None):
633       
634                self.total_process=1.0
635                self.total_progress=0.0
636                self.pbar_rang=1.0
637                self.percentage=0.0
638                self.ending_process=0.0
639                self.updated_percentage(0.0)
640
641                self.t=threading.Thread(target=self.execute_scripts,args=())
642                self.t.daemon=True
643                self.t.start()
644                GLib.timeout_add(100,self.pulsate_pbar)
645                self.pbar.show()
646                self.pbar_label.show()
647                self.viewport.show()
648                self.terminal_scrolled.show()
649                self.terminal_label.show()
650                msg_terminal=_("Update process details")
651                self.terminal_label.set_markup(msg_terminal)
652               
653       
654        #def install_packages
655
656        def pulsate_pbar(self):
657
658                if not self.t.is_alive():
659                        self.updated_percentage(0.5)
660                else:
661                        self.pbar.hide()
662                       
663        #def pulsate_pbar
664                       
665        def view_packages_clicked(self,widget,event):
666
667                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
668                self.stack.set_visible_child_name("packages")
669               
670        #def view_packages_clicked     
671       
672
673        def no_button_clicked(self,widget,event):
674               
675                self.response=0 
676               
677        def yes_button_clicked(self,widget,event):
678       
679                self.response=1
680               
681        #def no_button_clicked 
682
683        def arrow_clicked(self,widget,event):
684       
685                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
686                self.stack.set_visible_child_name("update")     
687               
688        #def arrow_clicked
689
690        def update_installed_icon(self,pkg_name):
691       
692                image=Gtk.Image()
693                image.set_from_file(DONE_ICON)         
694                icon=image.get_pixbuf()
695
696                for item in self.packages_store:
697                        name=item[1].split(">")[2]
698                        name=name.split("<")[0]
699                        if name==pkg_name:
700                                item[3]=icon
701               
702                       
703        #def update_installed_icon     
704
705        def mouse_over_yes(self,widget,event):
706                self.yes_button_box.set_name("BUTTON_OVER_COLOR")
707
708        def mouse_exit_yes(self,widget,event):
709                self.yes_button_box.set_name("BUTTON_COLOR")
710
711        def mouse_over_no(self,widget,event):
712                self.no_button_box.set_name("BUTTON_OVER_COLOR")
713
714        def mouse_exit_no(self,widget,event):
715                self.no_button_box.set_name("BUTTON_COLOR")
716                       
717        def mouse_over_view_packages(self,widget,event):
718                self.view_packages_button_box.set_name("BUTTON_OVER_COLOR")     
719
720        def mouse_exit_view_packages(self,widget,event):
721                self.view_packages_button_box.set_name("BUTTON_COLOR")
722
723                       
724        def mouse_over_update_button(self,widget,event):
725                self.update_button_box.set_name("UPDATE_OVER_COLOR")   
726
727        def mouse_exit_update_button(self,widget,event):
728                self.update_button_box.set_name("UPDATE_BUTTON_COLOR")
729
730
731        def mouse_over_cancel(self,widget,event):
732                self.cancel_button_box.set_name("BUTTON_OVER_COLOR")   
733
734        def mouse_exit_cancel(self,widget,event):
735                self.cancel_button_box.set_name("BUTTON_COLOR") 
736
737               
738        def mouse_over_return_arrow(self,widget,event):
739                self.return_arrow_box.set_name("BUTTON_OVER_COLOR")     
740
741        def mouse_exit_return_arrow(self,widget,event):
742                self.return_arrow_box.set_name("BUTTON_COLOR")         
743
744
745
746        def quit(self,widget,event=None):
747               
748                Gtk.main_quit() 
749
750#class LliurexMirror
751
752at=LliurexUp()         
Note: See TracBrowser for help on using the repository browser.