source: lliurex-java-panel/trunk/fuentes/install-files/usr/share/lliurex-java-panel/lliurex-java-panel.py @ 3675

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

Fix css progress bar

  • Property svn:executable set to *
File size: 30.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')
7
8import cairo
9import os
10import threading
11import ConfigParser
12import platform
13import subprocess
14import sys
15import shutil
16from math import pi
17
18from gi.repository import Gtk, Gdk, GObject, GLib, PangoCairo, Pango
19
20import signal
21signal.signal(signal.SIGINT, signal.SIG_DFL)
22
23
24import gettext
25gettext.textdomain('lliurex-java-panel')
26_ = gettext.gettext
27
28
29BASE_DIR="/usr/share/lliurex-java-panel/"
30RSRC_DIR=BASE_DIR+"rsrc/"
31SHADOW_BANNER=RSRC_DIR+"shadow.png"
32UNKNOWN_BANNER=RSRC_DIR+"unknown.png"
33BANNERS_PATH=BASE_DIR+"banners/"
34JAVAS_CONFIG_PATH=BASE_DIR+"supported-javas/"
35SWING_FILE=BASE_DIR+"swing.properties"
36
37
38CURRENT_PLATFORM=platform.machine()
39
40class GridButton:
41       
42        def __init__(self,info):
43               
44                self.info=info
45                self.info["installed"]=False
46                self.info["shadow_alpha"]=0.1
47                self.info["animation_active"]=False
48                self.info["shadow_start"]=0
49                self.info["available"]=True
50               
51                if os.path.exists(BANNERS_PATH+self.info["pkg"]+".png"):
52                        self.info["image"]=BANNERS_PATH+self.info["pkg"]+".png"
53                else:
54                        self.info["image"]=UNKNOWN_BANNER
55               
56        #def init
57       
58       
59#class GridButton
60
61
62class ConfButton:
63       
64        def __init__(self,info):
65               
66                self.txt=info["txt"]
67                self.icon=info["icon"]
68                self.name=info["name"]
69                self.da=None
70                if "active" not in info:
71                        self.active=False
72                else:
73                        self.active=info["active"]
74               
75        #def
76
77#class ConfButton
78       
79       
80class Alternative(Gtk.RadioButton):
81
82        def __init__(self,label,command):
83               
84                Gtk.RadioButton.__init__(self, label)
85                self.command=command
86                #self.connect("toggled",self.alternative_toggled)
87               
88        def alternative_toggled(self,widget):
89               
90                if widget.get_active():
91                        print("* Executing %s ..."%self.command)
92                        os.system(self.command)
93               
94#class Alternative
95
96
97class CpanelButton(Gtk.Button):
98
99        def __init__(self,label,command):
100               
101                Gtk.Button.__init__(self, label)
102                self.command=command
103                self.connect("clicked",self.button_clicked)
104               
105       
106        def button_clicked(self,widget):
107               
108                print("* Executing %s ..."%self.command)
109                os.system(self.command)
110               
111#class CpanelButton
112
113
114
115class ConfigurationParser:
116       
117        def __init__(self):
118                pass
119       
120        def load_plugin(self,path):
121       
122                try:
123                        config = ConfigParser.ConfigParser()
124                        config.optionxform=str
125                        config.read(path)
126                        if config.has_section("JAVA"):
127                                info={}
128                                info["pkg"]=config.get("JAVA","pkg")
129                                info["name"]=config.get("JAVA","name")
130                                info["cmd"]=config.get("JAVA","cmd")
131                                info["swing"]=config.get("JAVA","swing")
132                                return GridButton(info)
133                               
134                except Exception as e:
135                        print e
136                        return None
137       
138       
139#class ConfigParser
140
141
142class CustomColor:
143       
144        def __init__(self,r,g,b):
145               
146                self.r=r/255.0
147                self.g=g/255.0
148                self.b=b/255.0
149
150#class CustomColor             
151
152class AwesomeTabs:
153       
154        def __init__(self):
155               
156                self.configuration_parser=ConfigurationParser()
157               
158                self.current_tab=-1
159                self.current_width=0
160                self.animation_left=False
161                self.animation_right=False
162               
163                self.current_red_width=0
164                self.current_red_pos=0
165                self.configuration_start=0
166               
167                self.first_run=True
168                self.update_alternatives=False
169               
170                self.current_grid_width=0
171                self.current_grid_height=0
172               
173                self.max_grid_width=2
174               
175                self.dark_gray=CustomColor(130.0,151.0,161.0)
176                self.light_gray=CustomColor(185.0,195.0,195.0)
177               
178                self.green=CustomColor(74.0,166.,69.0)
179                self.light_green=CustomColor(88.0,208.0,86.0)
180               
181               
182                self.conf_light=CustomColor(49.0,55.0,66.0)
183                self.conf_dark=CustomColor(30.0,36.0,42.0)
184               
185                self.conf_light_shadow=CustomColor(107.0,116.0,137.0)
186                self.conf_dark_shadow=CustomColor(0,0,0)
187               
188                self.current_conf_height=0
189                self.conf_buttons=[]
190                self.start_gui()
191               
192               
193        #def __init__
194       
195       
196       
197        def start_gui(self):
198               
199                builder=Gtk.Builder()
200                builder.set_translation_domain('lliurex-java-panel')
201                glade_path=RSRC_DIR+"lliurex-java-panel.ui"
202                builder.add_from_file(glade_path)
203               
204                self.installers_eb=builder.get_object("installers_eventbox")
205                self.installers_eb.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
206                self.installers_eb.connect("button-press-event",self.label_clicked,0)
207               
208                self.configuration_eb=builder.get_object("configuration_eventbox")
209                self.configuration_eb.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
210                self.configuration_eb.connect("button-press-event",self.label_clicked,1)
211               
212                self.installers_label=builder.get_object("installers_label")
213                self.configuration_label=builder.get_object("configuration_label")
214                self.alternatives_label=builder.get_object("alternatives_label")
215               
216                self.top_divider_da=builder.get_object("top_divider_drawingarea")
217                self.bottom_divider_da=builder.get_object("bottom_divider_drawingarea")
218                #self.install_da.connect("draw",self.drawing_label_event,0)
219                self.top_divider_da.connect("draw",self.draw_top_divider)
220                self.bottom_divider_da.connect("draw",self.draw_bottom_divider)
221               
222                self.button_scroll=builder.get_object("button_scrolledwindow")
223                self.main_box=builder.get_object("main_box")
224                self.close_eb=builder.get_object("close_eventbox")
225                self.close_da=builder.get_object("close_drawingarea")
226                self.close_eb.connect("button-press-event",self.quit)
227                self.close_da.connect("draw",self.draw_close_button)
228               
229               
230                self.stack = Gtk.Stack()
231                self.stack.set_transition_duration(1000)
232                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
233               
234                self.installers_grid=builder.get_object("button_grid")
235                self.configuration_box=builder.get_object("configuration_box")
236               
237                '''
238                grid=GridButton("oracle-java6","Oracle Java 6")
239                self.add_grid_button(grid)
240               
241                grid=GridButton("oracle-java7","Oracle Java 7")
242                self.add_grid_button(grid)
243               
244                grid=GridButton("oracle-java8","Oracle Java 8")
245                self.add_grid_button(grid)
246               
247                grid=GridButton("openjdk6","Open JRE 6")
248                self.add_grid_button(grid)
249               
250                grid=GridButton("openjdk7","Open JRE 7")
251                self.add_grid_button(grid)
252                '''
253               
254                       
255               
256               
257                self.stack.add_titled(self.button_scroll, "installers", "Installers")
258                self.stack.add_titled(self.configuration_box, "configuration", "Configuration")
259               
260                self.main_box.add(self.stack)
261               
262                self.main_window=builder.get_object("main_window")
263               
264               
265                self.main_window.connect("destroy",self.quit)
266               
267               
268                self.progress_window=builder.get_object("progress_window")
269                self.pbar=builder.get_object("progressbar")
270                self.progress_window.set_transient_for(self.main_window)
271               
272                self.gather_window=builder.get_object("gather_window")
273                self.gather_pbar=builder.get_object("progressbar1")
274                self.progress_label=builder.get_object("progress_label")
275               
276                self.label_clicked(None,None,0)
277               
278                self.confbutton_grid=builder.get_object("confbutton_grid")
279               
280                info={}
281                info["txt"]="Control Panel"
282                info["icon"]=RSRC_DIR+"control_panel.png"
283                info["name"]="cpanel"
284                info["active"]=True
285               
286                self.add_conf_button(info)
287               
288                info["txt"]="Java Web Start"
289                info["icon"]=RSRC_DIR+"java_conf.png"
290                info["name"]="jws"
291                info["active"]=False
292               
293                self.add_conf_button(info)
294               
295                info["txt"]="Java Runtime\nEnvironment"
296                info["icon"]=RSRC_DIR+"java_conf.png"
297                info["name"]="jre"
298               
299                self.add_conf_button(info)
300               
301                info["txt"]="Firefox Plugin"
302                info["icon"]=RSRC_DIR+"firefox.png"
303                info["name"]="firefox"
304               
305                self.add_conf_button(info)
306               
307                self.configuration_box=builder.get_object("configuration_box")
308                self.alternatives_box=builder.get_object("alternatives_box")
309               
310                self.conf_stack=Gtk.Stack()
311                self.conf_stack.set_transition_duration(500)
312                self.conf_stack.set_transition_type(Gtk.StackTransitionType.UNDER_DOWN)
313               
314                self.alternatives_box.pack_start(self.conf_stack,True,True,0)
315               
316                self.build_cpanel_alternatives()
317                self.build_jws_alternatives()
318                self.build_jre_alternatives()
319                self.build_firefox_alternatives()
320                self.configuration_box.show_all()
321
322                self.set_css_info()
323               
324                #self.main_window.show_all()
325                self.gather_window.show_all()
326                GLib.timeout_add(100,self.pulsate_gathering_info)
327               
328                self.t=threading.Thread(target=self.gather_info)
329                self.t.daemon=True
330                self.t.start()
331               
332               
333                GObject.threads_init()         
334                Gtk.main()
335               
336        #def start_gui
337       
338        def gather_info(self):
339               
340                import time
341                base_apt_cmd="apt-cache policy "
342               
343                gbs=[]
344               
345                for item in sorted(os.listdir(JAVAS_CONFIG_PATH)):
346                        if os.path.isfile(JAVAS_CONFIG_PATH+item):
347                                gb=self.configuration_parser.load_plugin(JAVAS_CONFIG_PATH+item)
348                                if gb!=None:
349                                        sys.stdout.write("* Checking %s ...\t"%gb.info["pkg"])
350                                        gb.info["installed"]=self.is_installed(gb.info["pkg"])
351                                        sys.stdout.write("%s\n"%gb.info["installed"])
352                                        base_apt_cmd += "%s "%gb.info["pkg"]
353                                        gbs.append(gb)
354                                       
355                p=subprocess.Popen([base_apt_cmd],shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)     
356                output=p.communicate()
357               
358                for gb in gbs:
359                       
360                        if gb.info["pkg"] not in output[0]:
361                                print(" [!] %s not available [!] "%gb.info["pkg"])
362                                gb.info["available"]=False
363                        else:   
364                                self.add_grid_button(gb)       
365                       
366               
367
368       
369        #def gather_info
370       
371        def pulsate_gathering_info(self):
372               
373                self.gather_pbar.pulse()
374               
375                if not self.t.is_alive():
376                       
377                        self.gather_window.hide()
378                        self.main_window.show_all()
379               
380                return self.t.is_alive()
381               
382        #def pulsate_gathering
383       
384        def set_css_info(self):
385               
386                css = """
387               
388                #BLUE {
389                        background-image:-gtk-gradient (linear, left top, left bottom, from (#0f72ff),  to (#0f72ff));;
390               
391                }
392               
393                #BLACK{
394                        background-image:-gtk-gradient (linear, left top, left bottom, from (#000000),  to (#000000));;
395               
396                }
397               
398               
399                #BACK_GRADIENT{
400                        background-image:-gtk-gradient (linear, left top, left bottom, from (#ffffff), to (#eceff3));;
401                }
402               
403                #WHITE {
404                        color: white;
405                        text-shadow: 0px 1px black;
406                }
407               
408                #MAIN_LABEL_ENABLED{
409                        color: #8297a1;
410                        font: Quattrocento Sans Bold 18;
411                }
412               
413                #ALTERNATIVES_LABEL{
414                        color: #8297a1;
415                        font: Quattrocento Sans Bold 12;
416                }
417               
418                #MAIN_LABEL_DISABLED{
419                        color: #c9d4e2;
420                        font: Quattrocento Sans Bold 18;
421                }
422               
423                #RED_PROGRESS{
424                       
425                        background-color: #FF0000;
426                        border: 0px;
427
428                }
429
430                .progressbar {
431                        background-color: #ff0000;
432                }
433
434                GtkProgressBar.trough, .level-bar.trough {
435                        border: none;
436                        border-radius: 3px;
437                        background-color: #cfd6e6;
438                }
439
440                #DARK_BACK{
441                        background-color: #070809;
442                }
443               
444                #GREEN {
445                        background-image:-gtk-gradient (linear, left top, left bottom, from (#41ff70),  to (#41ff70));;
446               
447                }
448               
449                #ORANGE {
450                        background-image:-gtk-gradient (linear, left top, left bottom, from (#ff7f2a),  to (#ff7f2a));;
451               
452                }
453               
454                #LIGHTBLUE {
455                        -unico-border-gradient: -gtk-gradient (linear, left top, left bottom,
456                        from (shade (#ff0000, 0.68)),
457                        to (shade (#ff0000, 0.68)));
458               
459                }
460               
461
462
463                .radio#RED {
464                  -gtk-icon-source: -gtk-scaled(url("/usr/share/lliurex-java-panel/rsrc/radio-unchecked.png"), url("/usr/share/lliurex-java-panel/rsrc/radio-unchecked.png")); }
465
466               
467               
468                .radio:checked#RED {
469                  -gtk-icon-source: -gtk-scaled(url("/usr/share/lliurex-java-panel/rsrc/radio-checked.png"), url("/usr/share/lliurex-java-panel/rsrc/radio-checked.png")); }
470
471                GtkButton#RED GtkLabel {
472                        color: #8297a1;
473                        font: Quattrocento Sans 11;
474                }
475
476
477                """
478                self.style_provider=Gtk.CssProvider()
479                self.style_provider.load_from_data(css)
480                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
481               
482                self.main_window.set_name("BACK_GRADIENT")
483                self.installers_label.set_name("MAIN_LABEL_ENABLED")
484                self.alternatives_label.set_name("ALTERNATIVES_LABEL")
485                self.configuration_label.set_name("MAIN_LABEL_DISABLED")
486                #self.pbar.set_name("RED_PROGRESS")
487                self.gather_pbar.set_name("RED_PROGRESS")
488                self.confbutton_grid.set_name("DARK_BACK")
489                self.progress_label.set_name("ALTERNATIVES_LABEL")
490               
491               
492        #def css_info
493
494       
495        def is_installed(self,pkg):
496               
497               
498                p=subprocess.Popen(["dpkg-query -W -f='${db:Status-Status}' %s"%pkg],shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
499                output=p.communicate()
500               
501                if output[0]=="installed":
502                        return True
503                       
504                return False
505               
506               
507        #def is_installed
508       
509        def quit(self,widget,event=None):
510               
511                Gtk.main_quit()
512               
513        #def quit
514       
515        def execute(self,command):
516               
517                self.thread_ret=-1
518               
519                self.thread_ret=os.system(command)
520               
521        #def execute
522       
523       
524        def pulsate_pbar(self,grid_button,da):
525               
526                if self.t.is_alive():
527                       
528                        self.pbar.pulse()
529                       
530                       
531                if not self.t.is_alive():
532                        self.progress_window.hide()
533                        if self.thread_ret==0:
534                                grid_button.info["installed"]=True
535                                self.update_alternatives=True
536                                self.copy_swing_file(grid_button.info["swing"])
537                        da.queue_draw()
538                       
539                return self.t.is_alive()
540       
541        #def pulsate_pbar
542
543        def copy_swing_file(self,destPath):
544
545                if not os.path.exists(os.path.join(destPath,"swing.properties")):
546                        shutil.copy2(SWING_FILE,destPath)
547
548        def add_conf_button(self,info):
549               
550                cb=ConfButton(info)
551                da=Gtk.DrawingArea()
552                da.set_size_request(110,123)
553                da.connect("draw",self.draw_configure_button,cb)
554                da.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
555                da.connect("button-press-event",self.conf_clicked,cb)
556                da.show()
557                self.confbutton_grid.attach(da,0,self.current_conf_height,1,1)
558                self.current_conf_height+=1
559                self.conf_buttons.append(cb)
560                cb.da=da
561               
562               
563        #deff add_conf_button
564       
565
566        def build_cpanel_alternatives(self):
567               
568                tmp_box=Gtk.VBox()
569               
570                alternative_list=[]
571                cpanel_label_list=[]
572                cpanel_cmd_list=[]
573               
574                # build alternatives list here
575               
576                # ############### #
577                try:           
578                        java_cmd='update-alternatives --list java | grep -v "gij"'
579                        java_cmd_list=(subprocess.check_output(java_cmd, shell=True)).split("\n")
580                        java_label='update-alternatives --list java | grep -v "gij" | cut -d"/" -f5'
581                        java_label_list=(subprocess.check_output(java_label, shell=True)).split("\n")
582                       
583                        i=0
584                        for item in java_label_list:
585                       
586                                if java_label_list[i]!='':
587                                        if not ('openjdk' in java_label_list[i]):
588                                                cpanel_label_list.append(item)
589                                                cpanel_cmd_list.append(java_cmd_list[i].replace("bin/java", "bin/ControlPanel"))
590                                        i+=1
591                               
592                        if len(cpanel_label_list)>0:   
593                                for x in cpanel_label_list:
594                                        j=cpanel_label_list.index(x)
595                                        a=CpanelButton(x.upper(),cpanel_cmd_list[j])
596                                        #a.set_name("RED")
597                                        #alternative_list.append(a)
598                                        tmp_box.pack_start(a,False,False,15)
599                except Exception as e:
600                        print e
601                '''     
602                if len(alternative_list) > 0:
603                        for alternative in alternative_list[1:]:
604                                alternative.join_group(alternative_list[0])
605                               
606               
607               
608                for alternative in alternative_list:
609                        alternative.connect("toggled",alternative.alternative_toggled)
610                '''
611                               
612                self.conf_stack.add_titled(tmp_box, "cpanel", "Control Panel")
613
614               
615        #def build_cpanel_alternatives 
616       
617       
618        def build_jws_alternatives(self):
619       
620                tmp_box=Gtk.VBox()
621               
622                alternative_list=[]
623                jws_label_list=[]
624                jws_cmd_list=[]
625               
626                # build alternatives list here
627               
628                # ############### #
629                try:
630                        java_cmd='update-alternatives --list javaws | grep -v "gij"'
631                        java_cmd_list=(subprocess.check_output(java_cmd, shell=True)).split("\n")
632                        java_label='update-alternatives --list javaws | grep -v "gij" | cut -d"/" -f5'
633                        java_label_list=(subprocess.check_output(java_label, shell=True)).split("\n")
634                        i=0
635                        for item in java_label_list:
636                                if java_label_list[i]!='':
637                                        jws_label_list.append(item)
638                                        jws_cmd_list.append('update-alternatives --set javaws ' + java_cmd_list[i])
639                                        i+=1
640               
641                        if len(jws_label_list)>0:
642                                for x in jws_label_list:
643                                        j=jws_label_list.index(x)
644                                        a=Alternative(x.upper(),jws_cmd_list[j])
645                                        a.set_name("RED")
646                                        alternative_list.append(a)
647                                        tmp_box.pack_start(a,False,False,15)
648                       
649                        if len(alternative_list) > 0:
650                                for alternative in alternative_list[1:]:
651                                        alternative.join_group(alternative_list[0])
652                except Exception as e:
653                        print e         
654                                                               
655                # get jws configured actually
656               
657                # ################ #
658                try:
659                        jws_configured_cmd='update-alternatives --get-selections |grep javaws$' 
660                        jws_configured_label= (subprocess.check_output(jws_configured_cmd, shell=True)).split("/")[4]   
661                        k=jws_label_list.index(jws_configured_label)
662                        alternative_list[k].set_active(True)
663                except Exception as e:
664                        print e
665                        try:
666                                jws_remove=(subprocess.check_output(jws_configured_cmd, shell=True)).split()[2]
667                                remove_alternative='update-alternatives --remove "javaws"' + ' "'+ jws_remove+'"'
668                                os.system(remove_alternative)
669                                jws_configured_cmd='update-alternatives --get-selections |grep javaws$' 
670                                jws_configured_label= (subprocess.check_output(jws_configured_cmd, shell=True)).split("/")[4]
671                                k=jws_label_list.index(jws_configured_label)
672                                alternative_list[k].set_active(True)
673                        except Exception as e:
674                                print e
675                       
676                       
677                for alternative in alternative_list:
678                        alternative.connect("toggled",alternative.alternative_toggled)
679               
680                self.conf_stack.add_titled(tmp_box, "jws", "Java Web Start")
681
682               
683        #def  build_jws_alternatives
684       
685       
686        def build_jre_alternatives(self):
687       
688                tmp_box=Gtk.VBox()
689               
690                alternative_list=[]
691                jre_label_list=[]
692                jre_cmd_list=[]
693
694                # build alternatives list here
695               
696                # ############### #
697                try:   
698                        java_cmd='update-alternatives --list java | grep -v "gij"'
699                        java_cmd_list=(subprocess.check_output(java_cmd, shell=True)).split("\n")
700                        java_label='update-alternatives --list java | grep -v "gij" | cut -d"/" -f5'
701                        java_label_list=(subprocess.check_output(java_label, shell=True)).split("\n")
702               
703                        i=0
704                        for item in java_label_list:
705                                if java_label_list[i]!='':
706                                        jre_label_list.append(item)
707                                        jre_cmd_list.append('update-alternatives --set java ' + java_cmd_list[i])
708                                        i+=1
709                               
710                        if len(java_label_list)>0:
711                                for x in jre_label_list:
712                                        j=jre_label_list.index(x)
713                                        a=Alternative(x.upper(),jre_cmd_list[j])
714                                        a.set_name("RED")
715                                        alternative_list.append(a)
716                                        tmp_box.pack_start(a,False,False,15)
717                       
718                        if len(alternative_list) > 0:
719                                for alternative in alternative_list[1:]:
720                                        alternative.join_group(alternative_list[0])
721                except Exception as e:
722                        print e
723                # get jre configured actually
724               
725                # ################ #
726                try:
727                        jre_configured_cmd='update-alternatives --get-selections |grep java$' 
728                        jre_configured_label= (subprocess.check_output(jre_configured_cmd, shell=True)).split("/")[4]   
729                        k=jre_label_list.index(jre_configured_label)
730                        alternative_list[k].set_active(True)
731                except Exception as e:
732                        print e
733               
734                for alternative in alternative_list:
735                        alternative.connect("toggled",alternative.alternative_toggled)
736               
737               
738                self.conf_stack.add_titled(tmp_box, "jre", "JRE Selector")
739
740               
741        #def build_jre_alternatives
742
743       
744        def build_firefox_alternatives(self):
745       
746                tmp_box=Gtk.VBox()
747               
748                alternative_list=[]
749                firefox_label_list=[]
750                firefox_cmd_list=[]     
751               
752                # build alternatives list here
753               
754                # ############### #
755                try:
756                        javaplugin_cmd='update-alternatives --list mozilla-javaplugin.so | grep -v "gij"' 
757                        javaplugin_cmd_list=(subprocess.check_output(javaplugin_cmd, shell=True)).split("\n")
758                        javaplugin_label='update-alternatives --list mozilla-javaplugin.so | grep -v "gij" | cut -d"/" -f5'
759                        javaplugin_label_list=(subprocess.check_output(javaplugin_label, shell=True)).split("\n")
760                        i=0
761                        for item in javaplugin_label_list:
762                                if javaplugin_label_list[i]!='':
763                                        firefox_label_list.append(item)
764                                        firefox_cmd_list.append('update-alternatives --set mozilla-javaplugin.so ' + javaplugin_cmd_list[i])
765                                        i+=1
766               
767                        if len(firefox_label_list)>0:
768                                for x in firefox_label_list:
769                                        j=firefox_label_list.index(x)
770                                        a=Alternative(x.upper(),firefox_cmd_list[j])
771                                        a.set_name("RED")
772                                        alternative_list.append(a)
773                                        tmp_box.pack_start(a,False,False,15)
774                       
775                        if len(alternative_list) > 0:
776                                for alternative in alternative_list[1:]:
777                                        alternative.join_group(alternative_list[0])
778                except Exception as e:
779                        print e         
780                               
781                                       
782                # get mozilla plugin configured actually
783               
784                # ################ #
785                try:
786                        firefox_configured_cmd='update-alternatives --get-selections |grep mozilla-javaplugin.so' 
787                        firefox_configured_label= (subprocess.check_output(firefox_configured_cmd, shell=True)).split("/")[4]   
788               
789                        k=firefox_label_list.index(firefox_configured_label)
790                        alternative_list[k].set_active(True)
791                except Exception as e:
792                        print e
793               
794                for alternative in alternative_list:
795                        alternative.connect("toggled",alternative.alternative_toggled)
796               
797                self.conf_stack.add_titled(tmp_box, "firefox", "Firefox Alternatives")
798
799               
800        #def  build_firefox_alternatives
801       
802        def refresh_alternatives(self):
803               
804                cpanel_alter=self.conf_stack.get_child_by_name("cpanel")
805                self.conf_stack.remove(cpanel_alter)
806                jws_alter=self.conf_stack.get_child_by_name("jws")
807                self.conf_stack.remove(jws_alter)
808                jre_alter=self.conf_stack.get_child_by_name("jre")
809                self.conf_stack.remove(jre_alter)
810                firefox_alter=self.conf_stack.get_child_by_name("firefox")
811                self.conf_stack.remove(firefox_alter)
812                self.build_cpanel_alternatives()
813                self.build_jws_alternatives()
814                self.build_jre_alternatives()
815                self.build_firefox_alternatives()
816                self.configuration_box.show_all()
817               
818                try:
819                        self.conf_stack.set_visible_child_name(self.cb_active)
820                except:
821                        self.conf_stack.set_visible_child_name("cpanel")
822                       
823                self.update_alternatives=False 
824               
825        #def refresh_alternatives       
826               
827        def add_grid_button(self,grid_button):
828               
829                da=Gtk.DrawingArea()
830                da.set_size_request(140,148)
831                da.add_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.BUTTON_PRESS_MASK )
832               
833                da.connect("draw",self.draw_button,grid_button)
834                da.connect("motion-notify-event",self.mouse_over,grid_button)
835                da.connect("leave_notify_event",self.mouse_left,grid_button)
836                da.connect("button-press-event",self.button_clicked,grid_button)
837               
838               
839                #button.connect("motion-notify-event",self.mouse_over,app,image)
840                da.show()
841                self.installers_grid.attach(da,self.current_grid_width,self.current_grid_height,1,1)
842               
843                self.current_grid_width+=1
844               
845                if self.current_grid_width > self.max_grid_width:
846                        self.current_grid_width=0
847                        self.current_grid_height+=1
848                       
849        #def add_grid_button
850       
851       
852        def conf_clicked(self,widget,event,cb):
853               
854                for item in self.conf_buttons:
855                        item.active=False
856                        item.da.queue_draw()
857                       
858                cb.active=True
859                self.cb_active=cb.name
860                self.conf_stack.set_visible_child_name(cb.name)
861                widget.queue_draw()
862               
863        #def conf_clicked
864       
865       
866        def button_clicked(self,widget,event,grid_button):
867               
868                self.t=threading.Thread(target=self.execute,args=(grid_button.info["cmd"],))
869                self.t.daemon=True
870                self.t.start()
871                GLib.timeout_add(100,self.pulsate_pbar,grid_button,widget)
872                self.progress_window.show()
873               
874               
875        #def button_clicked
876       
877       
878        def draw_configure_button(self,widget,ctx,cb):
879               
880                if cb.active:
881                        ctx.set_source_rgba(self.conf_light.r,self.conf_light.g,self.conf_light.b,1)
882                        ctx.rectangle(0,0,110,123)
883                        ctx.fill()
884                       
885                        ctx.set_source_rgba(1,0,0,1)
886                        ctx.move_to(0,0)
887                        ctx.rectangle(0,1,5,121)
888                        ctx.fill()
889                       
890                else:
891                        ctx.set_source_rgba(self.conf_dark.r,self.conf_dark.g,self.conf_dark.b,1)
892                        ctx.rectangle(0,0,110,123)
893                        ctx.fill()
894               
895               
896               
897                ctx.move_to(0,0)
898                ctx.set_source_rgba(self.conf_light_shadow.r,self.conf_light_shadow.g,self.conf_light_shadow.b,1)
899                ctx.rectangle(0,0,110,1)
900                ctx.fill()
901               
902                ctx.move_to(0,0)
903                ctx.set_source_rgba(self.conf_dark_shadow.r,self.conf_dark_shadow.g,self.conf_dark_shadow.b,1)
904                ctx.rectangle(0,121,110,2)
905                ctx.fill()
906               
907                ctx.move_to(0,0)
908                img=cairo.ImageSurface.create_from_png(cb.icon)
909                ctx.set_source_surface(img,33,22)
910                ctx.paint()
911               
912                pctx = PangoCairo.create_layout(ctx)
913                desc = Pango.font_description_from_string ("Quattrocento Sans Bold 10")
914                pctx.set_font_description(desc)
915                pctx.set_markup(cb.txt)
916                ctx.set_source_rgba(self.light_gray.r,self.light_gray.g,self.light_gray.b,1)
917                width=pctx.get_pixel_size()[0]
918                ctx.move_to((110-width)/2,80)
919                PangoCairo.show_layout(ctx, pctx)
920               
921        #def draw_configure_button
922       
923
924        def draw_button(self,widget,ctx,grid_button):
925               
926                ctx.move_to(0,0)
927                img=cairo.ImageSurface.create_from_png(SHADOW_BANNER)
928                ctx.set_source_surface(img,0,grid_button.info["shadow_start"])
929                ctx.paint_with_alpha(grid_button.info["shadow_alpha"])
930               
931                ctx.move_to(0,0)
932                img=cairo.ImageSurface.create_from_png(grid_button.info["image"])
933                ctx.set_source_surface(img,0,0)
934                ctx.paint()
935               
936                ctx.move_to(0,0)
937                ctx.set_source_rgba(1,1,1,1)
938                ctx.rectangle(0,110,140,30)
939                ctx.fill()
940               
941               
942                ctx.set_source_rgba(self.dark_gray.r,self.dark_gray.g,self.dark_gray.b,1)
943               
944                pctx = PangoCairo.create_layout(ctx)
945                desc = Pango.font_description_from_string ("Quattrocento Sans Bold 10")
946                pctx.set_font_description(desc)
947                pctx.set_markup(grid_button.info["name"])
948                ctx.move_to(5,118)
949                PangoCairo.show_layout(ctx, pctx)
950                width=pctx.get_pixel_size()[0]
951               
952               
953               
954                if grid_button.info["installed"]:
955               
956                        desc = Pango.font_description_from_string ("Quattrocento Sans Bold 8")
957                        pctx.set_font_description(desc)
958                        ctx.set_source_rgba(self.green.r,self.green.g,self.green.b,1)
959                        txt=_("Installed")
960                        pctx.set_markup(txt)
961                        width=pctx.get_pixel_size()[0]
962                        ctx.move_to(140-width-5,120)
963                        PangoCairo.show_layout(ctx, pctx)
964                       
965                       
966                        #ctx.set_source_rgba(self.light_green.r,self.light_green.g,self.light_green.b,1)
967                        ctx.rectangle(5,139,130,1)
968                        ctx.fill()
969               
970               
971        #def draw_button
972       
973       
974        def drawing_label_event(self,widget,ctx,id):
975               
976                if id==self.current_tab:
977
978                        lg1 = cairo.LinearGradient(0.0,0.0, 300.0, 3.0)
979                        lg1.add_color_stop_rgba(0, 0, 1, 1, 0)
980                        lg1.add_color_stop_rgba(0.5, 0, 1, 1, 1)
981                        lg1.add_color_stop_rgba(1, 0, 1, 1, 0)
982                        ctx.rectangle(0, 0, 300, 3)
983                        ctx.set_source(lg1)
984                        ctx.fill()
985                       
986        #drawing_label_event
987       
988       
989        def draw_close_button(self,widget,ctx):
990               
991               
992                button_border=22
993               
994                pctx = PangoCairo.create_layout(ctx)
995                desc = Pango.font_description_from_string ("Quattrocento Sans Bold 12")
996                pctx.set_font_description(desc)
997               
998                pctx.set_markup(_("CLOSE"))
999                width=pctx.get_pixel_size()[0]
1000                widget.set_size_request(width+button_border*2,30)
1001               
1002                ctx.set_source_rgba(1,1,0,1)
1003                xx=0
1004                yx=0
1005                widthx=width+44
1006                heightx=30
1007                radius=5
1008               
1009                r=47.0
1010                g=167.0
1011                b=223.0
1012                alpha=1.0
1013               
1014                r=r/255.0
1015                g=g/255.0
1016                b=b/255.0
1017               
1018                r2=83
1019                g2=153
1020                b2=252
1021               
1022                r2=r2/255.0
1023                g2=g2/255.0
1024                b2=b2/255.0
1025               
1026               
1027                lg1 = cairo.LinearGradient(0.0,0.0, 90.0, 0)
1028                lg1.add_color_stop_rgba(0, r, g, b, 1)
1029                lg1.add_color_stop_rgba(1, r2, g2, b2, 1)
1030                ctx.set_source(lg1)
1031               
1032               
1033                ctx.move_to (xx + radius, yx);
1034                ctx.arc (xx + widthx - radius, yx + radius, radius, pi * 1.5, pi * 2);
1035                ctx.arc (xx + widthx - radius, yx + heightx - radius, radius, 0, pi * .5);
1036                ctx.arc (xx + radius, yx + heightx - radius, radius, pi * .5, pi);
1037                ctx.arc (xx + radius, yx + radius, radius, pi , pi * 1.5);
1038                ctx.fill ();
1039               
1040                ctx.set_source_rgb(0.9,0.9,0.9)
1041                ctx.move_to(button_border,7)
1042                PangoCairo.show_layout(ctx, pctx)
1043               
1044        #def draw_close_button
1045
1046       
1047        def draw_top_divider(self,widget,ctx):
1048               
1049                r=self.light_gray.r
1050                g=self.light_gray.g
1051                b=self.light_gray.b
1052                alpha=1.0
1053               
1054               
1055                ctx.set_source_rgba(r,g,b,alpha)
1056                ctx.rectangle(0,1,510,3)
1057                ctx.fill()
1058               
1059                width=0
1060
1061                if self.first_run:
1062               
1063                        pctx = PangoCairo.create_layout(ctx)
1064                        desc = Pango.font_description_from_string ("Quattrocento Sans Bold 18")
1065                        pctx.set_font_description(desc)
1066                        pctx.set_markup(_("Installers"))
1067                        self.installers_width=pctx.get_pixel_size()[0]
1068                        pctx.set_markup(_("Configuration"))
1069                        self.configuration_width=pctx.get_pixel_size()[0]
1070                       
1071                        self.first_run=False
1072                       
1073                if self.current_tab==0:
1074                        width=self.installers_width
1075                else:
1076                        width=self.configuration_width
1077                        self.configuration_start=469-width
1078                       
1079                ctx.set_source_rgba(1.0,0,0,alpha)
1080               
1081                               
1082                if not self.animation_left and not self.animation_right:
1083               
1084                        if self.current_tab==0:
1085                                ctx.rectangle(0,0,width,3)
1086                               
1087                                self.current_red_width=width
1088                                self.current_red_start=0
1089                               
1090                        else:
1091                                ctx.rectangle(469-width,0,width,3)
1092                                self.current_red_width=width
1093                                self.current_red_start=469-width
1094                       
1095                       
1096                        ctx.fill()
1097               
1098                else:
1099               
1100                        ctx.rectangle(self.current_red_start,0,self.current_red_width,3)
1101                        ctx.fill()
1102               
1103               
1104        #def draw_top_divider
1105       
1106       
1107        def draw_bottom_divider(self,widget,ctx):
1108               
1109                r=self.dark_gray.r
1110                g=self.dark_gray.g
1111                b=self.dark_gray.b
1112                alpha=1.0
1113               
1114                ctx.set_source_rgba(r,g,b,alpha)
1115                ctx.rectangle(0,1,500,3)
1116                ctx.fill()
1117               
1118        #def draw_bottom_divider
1119       
1120       
1121        def mouse_over(self,widget,event,grid_button):
1122               
1123                grid_button.info["animation_active"]=False
1124                if grid_button.info["shadow_alpha"] <0.5 :
1125                        grid_button.info["shadow_alpha"]+=0.1
1126                        widget.queue_draw()
1127                        return True
1128                       
1129                return False
1130               
1131        #def mouse_over
1132
1133       
1134        def mouse_left(self,widget,event,grid_button):
1135               
1136                if not grid_button.info["animation_active"]:
1137                       
1138                        grid_button.info["animation_active"]=True
1139                        GLib.timeout_add(10,self.restore_shadow_alpha,grid_button,widget)
1140                       
1141        #def mouse_left
1142
1143       
1144        def restore_shadow_alpha(self,grid_button,widget):
1145
1146                if grid_button.info["shadow_alpha"] >0.2 :
1147                        grid_button.info["shadow_alpha"]-=0.1
1148               
1149                       
1150                        widget.queue_draw()
1151                        return True
1152                       
1153                grid_button.info["animation_active"]=False
1154                return False
1155               
1156        #def  restore_shadow_alpha
1157       
1158        def update_divider_right(self):
1159               
1160                if self.configuration_width > self.installers_width:
1161               
1162
1163                        if self.current_red_width < self.configuration_width:
1164                                self.current_red_width+=1
1165                        if self.current_red_start < self.configuration_start:
1166                                self.current_red_start+=1
1167                       
1168                       
1169                        if self.current_red_width >= self.configuration_width and self.current_red_start >= self.configuration_start:
1170                               
1171                                self.animation_right=False
1172                               
1173                        self.top_divider_da.queue_draw()
1174                       
1175                else:
1176                       
1177                        if self.current_red_width > self.configuration_width:
1178                                self.current_red_width-=1
1179                        if self.current_red_start < self.configuration_start:
1180                                self.current_red_start+=1
1181                       
1182                       
1183                        if self.current_red_width <= self.configuration_width and self.current_red_start >= self.configuration_start:
1184                               
1185                                self.animation_right=False
1186                               
1187                        self.top_divider_da.queue_draw()
1188               
1189                return self.animation_right
1190               
1191        #def update_divider_right
1192       
1193        def update_divider_left(self):
1194               
1195               
1196                if self.configuration_width > self.installers_width:
1197
1198                        if self.current_red_width > self.installers_width:
1199                                self.current_red_width-=1
1200                        if self.current_red_start > 0:
1201                                self.current_red_start-=1
1202                       
1203                       
1204                        if self.current_red_width <= self.installers_width and self.current_red_start <= 0:
1205                               
1206                                self.animation_left=False
1207                               
1208                        self.top_divider_da.queue_draw()
1209                       
1210                else:
1211                       
1212                        if self.current_red_width < self.installers_width:
1213                                self.current_red_width+=1
1214                        if self.current_red_start > 0:
1215                                self.current_red_start-=1
1216                       
1217                       
1218                        if self.current_red_width >= self.installers_width and self.current_red_start <= 0:
1219                               
1220                                self.animation_left=False
1221                               
1222                        self.top_divider_da.queue_draw()
1223               
1224                return self.animation_left
1225               
1226        #def update_divider_left
1227       
1228
1229       
1230        def label_clicked(self,widget,event,id):
1231               
1232                if id==0 and self.current_tab!=id:
1233                        try:
1234                               
1235                                self.stack.set_visible_child_name("installers")
1236                                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
1237                                self.installers_label.set_name("MAIN_LABEL_ENABLED")
1238                                self.configuration_label.set_name("MAIN_LABEL_DISABLED")
1239                                if not self.first_run:
1240                                        self.animation_left=True
1241                                        self.animation_right=False
1242                                        GLib.timeout_add(1,self.update_divider_left)
1243                                       
1244                               
1245                        except Exception as e:
1246                                print e
1247               
1248                if id==1 and self.current_tab!=id:
1249                        try:
1250
1251                                self.stack.set_visible_child_name("configuration")
1252                                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
1253                                self.installers_label.set_name("MAIN_LABEL_DISABLED")
1254                                self.configuration_label.set_name("MAIN_LABEL_ENABLED")
1255                                self.animation_right=True
1256                                self.animation_left=False
1257                                GLib.timeout_add(1,self.update_divider_right)
1258                                if self.update_alternatives:
1259                                        self.refresh_alternatives()
1260                               
1261                        except:
1262                                pass
1263               
1264                self.current_tab=id
1265               
1266        #def label_clicked
1267       
1268
1269       
1270#awesome tabs
1271
1272if __name__=="__main__":
1273       
1274        at=AwesomeTabs()
Note: See TracBrowser for help on using the repository browser.