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

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

WIP in swing properties

  • Property svn:executable set to *
File size: 30.8 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                #DARK_BACK{
431                        background-color: #070809;
432                }
433               
434                #GREEN {
435                        background-image:-gtk-gradient (linear, left top, left bottom, from (#41ff70),  to (#41ff70));;
436               
437                }
438               
439                #ORANGE {
440                        background-image:-gtk-gradient (linear, left top, left bottom, from (#ff7f2a),  to (#ff7f2a));;
441               
442                }
443               
444                #LIGHTBLUE {
445                        -unico-border-gradient: -gtk-gradient (linear, left top, left bottom,
446                        from (shade (#ff0000, 0.68)),
447                        to (shade (#ff0000, 0.68)));
448               
449                }
450               
451
452
453                .radio#RED {
454                  -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")); }
455
456               
457               
458                .radio:checked#RED {
459                  -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")); }
460
461                GtkButton#RED GtkLabel {
462                        color: #8297a1;
463                        font: Quattrocento Sans 11;
464                }
465
466
467                """
468                self.style_provider=Gtk.CssProvider()
469                self.style_provider.load_from_data(css)
470                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
471               
472                self.main_window.set_name("BACK_GRADIENT")
473                self.installers_label.set_name("MAIN_LABEL_ENABLED")
474                self.alternatives_label.set_name("ALTERNATIVES_LABEL")
475                self.configuration_label.set_name("MAIN_LABEL_DISABLED")
476                self.pbar.set_name("RED_PROGRESS")
477                self.gather_pbar.set_name("RED_PROGRESS")
478                self.confbutton_grid.set_name("DARK_BACK")
479                self.progress_label.set_name("ALTERNATIVES_LABEL")
480               
481               
482        #def css_info
483
484       
485        def is_installed(self,pkg):
486               
487               
488                p=subprocess.Popen(["dpkg-query -W -f='${db:Status-Status}' %s"%pkg],shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
489                output=p.communicate()
490               
491                if output[0]=="installed":
492                        return True
493                       
494                return False
495               
496               
497        #def is_installed
498       
499        def quit(self,widget,event=None):
500               
501                Gtk.main_quit()
502               
503        #def quit
504       
505        def execute(self,command):
506               
507                self.thread_ret=-1
508               
509                self.thread_ret=os.system(command)
510               
511        #def execute
512       
513       
514        def pulsate_pbar(self,grid_button,da):
515               
516                if self.t.is_alive():
517                       
518                        self.pbar.pulse()
519                       
520                       
521                if not self.t.is_alive():
522                        self.progress_window.hide()
523                        if self.thread_ret==0:
524                                grid_button.info["installed"]=True
525                                self.update_alternatives=True
526                                self.copy_swing_file(grid_button.info["swing"])
527                        da.queue_draw()
528                       
529                return self.t.is_alive()
530       
531        #def pulsate_pbar
532
533        def copy_swing_file(self,destPath):
534
535                if not os.path.exists(os.path.join(destPath,"swing.properties")):
536                        shutil.copy2(SWING_FILE,destPath)
537
538        def add_conf_button(self,info):
539               
540                cb=ConfButton(info)
541                da=Gtk.DrawingArea()
542                da.set_size_request(110,123)
543                da.connect("draw",self.draw_configure_button,cb)
544                da.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
545                da.connect("button-press-event",self.conf_clicked,cb)
546                da.show()
547                self.confbutton_grid.attach(da,0,self.current_conf_height,1,1)
548                self.current_conf_height+=1
549                self.conf_buttons.append(cb)
550                cb.da=da
551               
552               
553        #deff add_conf_button
554       
555
556        def build_cpanel_alternatives(self):
557               
558                tmp_box=Gtk.VBox()
559               
560                alternative_list=[]
561                cpanel_label_list=[]
562                cpanel_cmd_list=[]
563               
564                # build alternatives list here
565               
566                # ############### #
567                try:           
568                        java_cmd='update-alternatives --list java | grep -v "gij"'
569                        java_cmd_list=(subprocess.check_output(java_cmd, shell=True)).split("\n")
570                        java_label='update-alternatives --list java | grep -v "gij" | cut -d"/" -f5'
571                        java_label_list=(subprocess.check_output(java_label, shell=True)).split("\n")
572                       
573                        i=0
574                        for item in java_label_list:
575                       
576                                if java_label_list[i]!='':
577                                        if not ('openjdk' in java_label_list[i]):
578                                                cpanel_label_list.append(item)
579                                                cpanel_cmd_list.append(java_cmd_list[i].replace("bin/java", "bin/ControlPanel"))
580                                        i+=1
581                               
582                        if len(cpanel_label_list)>0:   
583                                for x in cpanel_label_list:
584                                        j=cpanel_label_list.index(x)
585                                        a=CpanelButton(x.upper(),cpanel_cmd_list[j])
586                                        #a.set_name("RED")
587                                        #alternative_list.append(a)
588                                        tmp_box.pack_start(a,False,False,15)
589                except Exception as e:
590                        print e
591                '''     
592                if len(alternative_list) > 0:
593                        for alternative in alternative_list[1:]:
594                                alternative.join_group(alternative_list[0])
595                               
596               
597               
598                for alternative in alternative_list:
599                        alternative.connect("toggled",alternative.alternative_toggled)
600                '''
601                               
602                self.conf_stack.add_titled(tmp_box, "cpanel", "Control Panel")
603
604               
605        #def build_cpanel_alternatives 
606       
607       
608        def build_jws_alternatives(self):
609       
610                tmp_box=Gtk.VBox()
611               
612                alternative_list=[]
613                jws_label_list=[]
614                jws_cmd_list=[]
615               
616                # build alternatives list here
617               
618                # ############### #
619                try:
620                        java_cmd='update-alternatives --list javaws | grep -v "gij"'
621                        java_cmd_list=(subprocess.check_output(java_cmd, shell=True)).split("\n")
622                        java_label='update-alternatives --list javaws | grep -v "gij" | cut -d"/" -f5'
623                        java_label_list=(subprocess.check_output(java_label, shell=True)).split("\n")
624                        i=0
625                        for item in java_label_list:
626                                if java_label_list[i]!='':
627                                        jws_label_list.append(item)
628                                        jws_cmd_list.append('update-alternatives --set javaws ' + java_cmd_list[i])
629                                        i+=1
630               
631                        if len(jws_label_list)>0:
632                                for x in jws_label_list:
633                                        j=jws_label_list.index(x)
634                                        a=Alternative(x.upper(),jws_cmd_list[j])
635                                        a.set_name("RED")
636                                        alternative_list.append(a)
637                                        tmp_box.pack_start(a,False,False,15)
638                       
639                        if len(alternative_list) > 0:
640                                for alternative in alternative_list[1:]:
641                                        alternative.join_group(alternative_list[0])
642                except Exception as e:
643                        print e         
644                                                               
645                # get jws configured actually
646               
647                # ################ #
648                try:
649                        jws_configured_cmd='update-alternatives --get-selections |grep javaws$' 
650                        jws_configured_label= (subprocess.check_output(jws_configured_cmd, shell=True)).split("/")[4]   
651                        k=jws_label_list.index(jws_configured_label)
652                        alternative_list[k].set_active(True)
653                except Exception as e:
654                        print e
655                        try:
656                                jws_remove=(subprocess.check_output(jws_configured_cmd, shell=True)).split()[2]
657                                remove_alternative='update-alternatives --remove "javaws"' + ' "'+ jws_remove+'"'
658                                os.system(remove_alternative)
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                       
666                       
667                for alternative in alternative_list:
668                        alternative.connect("toggled",alternative.alternative_toggled)
669               
670                self.conf_stack.add_titled(tmp_box, "jws", "Java Web Start")
671
672               
673        #def  build_jws_alternatives
674       
675       
676        def build_jre_alternatives(self):
677       
678                tmp_box=Gtk.VBox()
679               
680                alternative_list=[]
681                jre_label_list=[]
682                jre_cmd_list=[]
683
684                # build alternatives list here
685               
686                # ############### #
687                try:   
688                        java_cmd='update-alternatives --list java | grep -v "gij"'
689                        java_cmd_list=(subprocess.check_output(java_cmd, shell=True)).split("\n")
690                        java_label='update-alternatives --list java | grep -v "gij" | cut -d"/" -f5'
691                        java_label_list=(subprocess.check_output(java_label, shell=True)).split("\n")
692               
693                        i=0
694                        for item in java_label_list:
695                                if java_label_list[i]!='':
696                                        jre_label_list.append(item)
697                                        jre_cmd_list.append('update-alternatives --set java ' + java_cmd_list[i])
698                                        i+=1
699                               
700                        if len(java_label_list)>0:
701                                for x in jre_label_list:
702                                        j=jre_label_list.index(x)
703                                        a=Alternative(x.upper(),jre_cmd_list[j])
704                                        a.set_name("RED")
705                                        alternative_list.append(a)
706                                        tmp_box.pack_start(a,False,False,15)
707                       
708                        if len(alternative_list) > 0:
709                                for alternative in alternative_list[1:]:
710                                        alternative.join_group(alternative_list[0])
711                except Exception as e:
712                        print e
713                # get jre configured actually
714               
715                # ################ #
716                try:
717                        jre_configured_cmd='update-alternatives --get-selections |grep java$' 
718                        jre_configured_label= (subprocess.check_output(jre_configured_cmd, shell=True)).split("/")[4]   
719                        k=jre_label_list.index(jre_configured_label)
720                        alternative_list[k].set_active(True)
721                except Exception as e:
722                        print e
723               
724                for alternative in alternative_list:
725                        alternative.connect("toggled",alternative.alternative_toggled)
726               
727               
728                self.conf_stack.add_titled(tmp_box, "jre", "JRE Selector")
729
730               
731        #def build_jre_alternatives
732
733       
734        def build_firefox_alternatives(self):
735       
736                tmp_box=Gtk.VBox()
737               
738                alternative_list=[]
739                firefox_label_list=[]
740                firefox_cmd_list=[]     
741               
742                # build alternatives list here
743               
744                # ############### #
745                try:
746                        javaplugin_cmd='update-alternatives --list mozilla-javaplugin.so | grep -v "gij"' 
747                        javaplugin_cmd_list=(subprocess.check_output(javaplugin_cmd, shell=True)).split("\n")
748                        javaplugin_label='update-alternatives --list mozilla-javaplugin.so | grep -v "gij" | cut -d"/" -f5'
749                        javaplugin_label_list=(subprocess.check_output(javaplugin_label, shell=True)).split("\n")
750                        i=0
751                        for item in javaplugin_label_list:
752                                if javaplugin_label_list[i]!='':
753                                        firefox_label_list.append(item)
754                                        firefox_cmd_list.append('update-alternatives --set mozilla-javaplugin.so ' + javaplugin_cmd_list[i])
755                                        i+=1
756               
757                        if len(firefox_label_list)>0:
758                                for x in firefox_label_list:
759                                        j=firefox_label_list.index(x)
760                                        a=Alternative(x.upper(),firefox_cmd_list[j])
761                                        a.set_name("RED")
762                                        alternative_list.append(a)
763                                        tmp_box.pack_start(a,False,False,15)
764                       
765                        if len(alternative_list) > 0:
766                                for alternative in alternative_list[1:]:
767                                        alternative.join_group(alternative_list[0])
768                except Exception as e:
769                        print e         
770                               
771                                       
772                # get mozilla plugin configured actually
773               
774                # ################ #
775                try:
776                        firefox_configured_cmd='update-alternatives --get-selections |grep mozilla-javaplugin.so' 
777                        firefox_configured_label= (subprocess.check_output(firefox_configured_cmd, shell=True)).split("/")[4]   
778               
779                        k=firefox_label_list.index(firefox_configured_label)
780                        alternative_list[k].set_active(True)
781                except Exception as e:
782                        print e
783               
784                for alternative in alternative_list:
785                        alternative.connect("toggled",alternative.alternative_toggled)
786               
787                self.conf_stack.add_titled(tmp_box, "firefox", "Firefox Alternatives")
788
789               
790        #def  build_firefox_alternatives
791       
792        def refresh_alternatives(self):
793               
794                cpanel_alter=self.conf_stack.get_child_by_name("cpanel")
795                self.conf_stack.remove(cpanel_alter)
796                jws_alter=self.conf_stack.get_child_by_name("jws")
797                self.conf_stack.remove(jws_alter)
798                jre_alter=self.conf_stack.get_child_by_name("jre")
799                self.conf_stack.remove(jre_alter)
800                firefox_alter=self.conf_stack.get_child_by_name("firefox")
801                self.conf_stack.remove(firefox_alter)
802                self.build_cpanel_alternatives()
803                self.build_jws_alternatives()
804                self.build_jre_alternatives()
805                self.build_firefox_alternatives()
806                self.configuration_box.show_all()
807               
808                try:
809                        self.conf_stack.set_visible_child_name(self.cb_active)
810                except:
811                        self.conf_stack.set_visible_child_name("cpanel")
812                       
813                self.update_alternatives=False 
814               
815        #def refresh_alternatives       
816               
817        def add_grid_button(self,grid_button):
818               
819                da=Gtk.DrawingArea()
820                da.set_size_request(140,148)
821                da.add_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.BUTTON_PRESS_MASK )
822               
823                da.connect("draw",self.draw_button,grid_button)
824                da.connect("motion-notify-event",self.mouse_over,grid_button)
825                da.connect("leave_notify_event",self.mouse_left,grid_button)
826                da.connect("button-press-event",self.button_clicked,grid_button)
827               
828               
829                #button.connect("motion-notify-event",self.mouse_over,app,image)
830                da.show()
831                self.installers_grid.attach(da,self.current_grid_width,self.current_grid_height,1,1)
832               
833                self.current_grid_width+=1
834               
835                if self.current_grid_width > self.max_grid_width:
836                        self.current_grid_width=0
837                        self.current_grid_height+=1
838                       
839        #def add_grid_button
840       
841       
842        def conf_clicked(self,widget,event,cb):
843               
844                for item in self.conf_buttons:
845                        item.active=False
846                        item.da.queue_draw()
847                       
848                cb.active=True
849                self.cb_active=cb.name
850                self.conf_stack.set_visible_child_name(cb.name)
851                widget.queue_draw()
852               
853        #def conf_clicked
854       
855       
856        def button_clicked(self,widget,event,grid_button):
857               
858                self.t=threading.Thread(target=self.execute,args=(grid_button.info["cmd"],))
859                self.t.daemon=True
860                self.t.start()
861                GLib.timeout_add(100,self.pulsate_pbar,grid_button,widget)
862                self.progress_window.show()
863               
864               
865        #def button_clicked
866       
867       
868        def draw_configure_button(self,widget,ctx,cb):
869               
870                if cb.active:
871                        ctx.set_source_rgba(self.conf_light.r,self.conf_light.g,self.conf_light.b,1)
872                        ctx.rectangle(0,0,110,123)
873                        ctx.fill()
874                       
875                        ctx.set_source_rgba(1,0,0,1)
876                        ctx.move_to(0,0)
877                        ctx.rectangle(0,1,5,121)
878                        ctx.fill()
879                       
880                else:
881                        ctx.set_source_rgba(self.conf_dark.r,self.conf_dark.g,self.conf_dark.b,1)
882                        ctx.rectangle(0,0,110,123)
883                        ctx.fill()
884               
885               
886               
887                ctx.move_to(0,0)
888                ctx.set_source_rgba(self.conf_light_shadow.r,self.conf_light_shadow.g,self.conf_light_shadow.b,1)
889                ctx.rectangle(0,0,110,1)
890                ctx.fill()
891               
892                ctx.move_to(0,0)
893                ctx.set_source_rgba(self.conf_dark_shadow.r,self.conf_dark_shadow.g,self.conf_dark_shadow.b,1)
894                ctx.rectangle(0,121,110,2)
895                ctx.fill()
896               
897                ctx.move_to(0,0)
898                img=cairo.ImageSurface.create_from_png(cb.icon)
899                ctx.set_source_surface(img,33,22)
900                ctx.paint()
901               
902                pctx = PangoCairo.create_layout(ctx)
903                desc = Pango.font_description_from_string ("Quattrocento Sans Bold 10")
904                pctx.set_font_description(desc)
905                pctx.set_markup(cb.txt)
906                ctx.set_source_rgba(self.light_gray.r,self.light_gray.g,self.light_gray.b,1)
907                width=pctx.get_pixel_size()[0]
908                ctx.move_to((110-width)/2,80)
909                PangoCairo.show_layout(ctx, pctx)
910               
911        #def draw_configure_button
912       
913
914        def draw_button(self,widget,ctx,grid_button):
915               
916                ctx.move_to(0,0)
917                img=cairo.ImageSurface.create_from_png(SHADOW_BANNER)
918                ctx.set_source_surface(img,0,grid_button.info["shadow_start"])
919                ctx.paint_with_alpha(grid_button.info["shadow_alpha"])
920               
921                ctx.move_to(0,0)
922                img=cairo.ImageSurface.create_from_png(grid_button.info["image"])
923                ctx.set_source_surface(img,0,0)
924                ctx.paint()
925               
926                ctx.move_to(0,0)
927                ctx.set_source_rgba(1,1,1,1)
928                ctx.rectangle(0,110,140,30)
929                ctx.fill()
930               
931               
932                ctx.set_source_rgba(self.dark_gray.r,self.dark_gray.g,self.dark_gray.b,1)
933               
934                pctx = PangoCairo.create_layout(ctx)
935                desc = Pango.font_description_from_string ("Quattrocento Sans Bold 10")
936                pctx.set_font_description(desc)
937                pctx.set_markup(grid_button.info["name"])
938                ctx.move_to(5,118)
939                PangoCairo.show_layout(ctx, pctx)
940                width=pctx.get_pixel_size()[0]
941               
942               
943               
944                if grid_button.info["installed"]:
945               
946                        desc = Pango.font_description_from_string ("Quattrocento Sans Bold 8")
947                        pctx.set_font_description(desc)
948                        ctx.set_source_rgba(self.green.r,self.green.g,self.green.b,1)
949                        txt=_("Installed")
950                        pctx.set_markup(txt)
951                        width=pctx.get_pixel_size()[0]
952                        ctx.move_to(140-width-5,120)
953                        PangoCairo.show_layout(ctx, pctx)
954                       
955                       
956                        #ctx.set_source_rgba(self.light_green.r,self.light_green.g,self.light_green.b,1)
957                        ctx.rectangle(5,139,130,1)
958                        ctx.fill()
959               
960               
961        #def draw_button
962       
963       
964        def drawing_label_event(self,widget,ctx,id):
965               
966                if id==self.current_tab:
967
968                        lg1 = cairo.LinearGradient(0.0,0.0, 300.0, 3.0)
969                        lg1.add_color_stop_rgba(0, 0, 1, 1, 0)
970                        lg1.add_color_stop_rgba(0.5, 0, 1, 1, 1)
971                        lg1.add_color_stop_rgba(1, 0, 1, 1, 0)
972                        ctx.rectangle(0, 0, 300, 3)
973                        ctx.set_source(lg1)
974                        ctx.fill()
975                       
976        #drawing_label_event
977       
978       
979        def draw_close_button(self,widget,ctx):
980               
981               
982                button_border=22
983               
984                pctx = PangoCairo.create_layout(ctx)
985                desc = Pango.font_description_from_string ("Quattrocento Sans Bold 12")
986                pctx.set_font_description(desc)
987               
988                pctx.set_markup(_("CLOSE"))
989                width=pctx.get_pixel_size()[0]
990                widget.set_size_request(width+button_border*2,30)
991               
992                ctx.set_source_rgba(1,1,0,1)
993                xx=0
994                yx=0
995                widthx=width+44
996                heightx=30
997                radius=5
998               
999                r=47.0
1000                g=167.0
1001                b=223.0
1002                alpha=1.0
1003               
1004                r=r/255.0
1005                g=g/255.0
1006                b=b/255.0
1007               
1008                r2=83
1009                g2=153
1010                b2=252
1011               
1012                r2=r2/255.0
1013                g2=g2/255.0
1014                b2=b2/255.0
1015               
1016               
1017                lg1 = cairo.LinearGradient(0.0,0.0, 90.0, 0)
1018                lg1.add_color_stop_rgba(0, r, g, b, 1)
1019                lg1.add_color_stop_rgba(1, r2, g2, b2, 1)
1020                ctx.set_source(lg1)
1021               
1022               
1023                ctx.move_to (xx + radius, yx);
1024                ctx.arc (xx + widthx - radius, yx + radius, radius, pi * 1.5, pi * 2);
1025                ctx.arc (xx + widthx - radius, yx + heightx - radius, radius, 0, pi * .5);
1026                ctx.arc (xx + radius, yx + heightx - radius, radius, pi * .5, pi);
1027                ctx.arc (xx + radius, yx + radius, radius, pi , pi * 1.5);
1028                ctx.fill ();
1029               
1030                ctx.set_source_rgb(0.9,0.9,0.9)
1031                ctx.move_to(button_border,7)
1032                PangoCairo.show_layout(ctx, pctx)
1033               
1034        #def draw_close_button
1035
1036       
1037        def draw_top_divider(self,widget,ctx):
1038               
1039                r=self.light_gray.r
1040                g=self.light_gray.g
1041                b=self.light_gray.b
1042                alpha=1.0
1043               
1044               
1045                ctx.set_source_rgba(r,g,b,alpha)
1046                ctx.rectangle(0,1,510,3)
1047                ctx.fill()
1048               
1049                width=0
1050
1051                if self.first_run:
1052               
1053                        pctx = PangoCairo.create_layout(ctx)
1054                        desc = Pango.font_description_from_string ("Quattrocento Sans Bold 18")
1055                        pctx.set_font_description(desc)
1056                        pctx.set_markup(_("Installers"))
1057                        self.installers_width=pctx.get_pixel_size()[0]
1058                        pctx.set_markup(_("Configuration"))
1059                        self.configuration_width=pctx.get_pixel_size()[0]
1060                       
1061                        self.first_run=False
1062                       
1063                if self.current_tab==0:
1064                        width=self.installers_width
1065                else:
1066                        width=self.configuration_width
1067                        self.configuration_start=469-width
1068                       
1069                ctx.set_source_rgba(1.0,0,0,alpha)
1070               
1071                               
1072                if not self.animation_left and not self.animation_right:
1073               
1074                        if self.current_tab==0:
1075                                ctx.rectangle(0,0,width,3)
1076                               
1077                                self.current_red_width=width
1078                                self.current_red_start=0
1079                               
1080                        else:
1081                                ctx.rectangle(469-width,0,width,3)
1082                                self.current_red_width=width
1083                                self.current_red_start=469-width
1084                       
1085                       
1086                        ctx.fill()
1087               
1088                else:
1089               
1090                        ctx.rectangle(self.current_red_start,0,self.current_red_width,3)
1091                        ctx.fill()
1092               
1093               
1094        #def draw_top_divider
1095       
1096       
1097        def draw_bottom_divider(self,widget,ctx):
1098               
1099                r=self.dark_gray.r
1100                g=self.dark_gray.g
1101                b=self.dark_gray.b
1102                alpha=1.0
1103               
1104                ctx.set_source_rgba(r,g,b,alpha)
1105                ctx.rectangle(0,1,500,3)
1106                ctx.fill()
1107               
1108        #def draw_bottom_divider
1109       
1110       
1111        def mouse_over(self,widget,event,grid_button):
1112               
1113                grid_button.info["animation_active"]=False
1114                if grid_button.info["shadow_alpha"] <0.5 :
1115                        grid_button.info["shadow_alpha"]+=0.1
1116                        widget.queue_draw()
1117                        return True
1118                       
1119                return False
1120               
1121        #def mouse_over
1122
1123       
1124        def mouse_left(self,widget,event,grid_button):
1125               
1126                if not grid_button.info["animation_active"]:
1127                       
1128                        grid_button.info["animation_active"]=True
1129                        GLib.timeout_add(10,self.restore_shadow_alpha,grid_button,widget)
1130                       
1131        #def mouse_left
1132
1133       
1134        def restore_shadow_alpha(self,grid_button,widget):
1135
1136                if grid_button.info["shadow_alpha"] >0.2 :
1137                        grid_button.info["shadow_alpha"]-=0.1
1138               
1139                       
1140                        widget.queue_draw()
1141                        return True
1142                       
1143                grid_button.info["animation_active"]=False
1144                return False
1145               
1146        #def  restore_shadow_alpha
1147       
1148        def update_divider_right(self):
1149               
1150                if self.configuration_width > self.installers_width:
1151               
1152
1153                        if self.current_red_width < self.configuration_width:
1154                                self.current_red_width+=1
1155                        if self.current_red_start < self.configuration_start:
1156                                self.current_red_start+=1
1157                       
1158                       
1159                        if self.current_red_width >= self.configuration_width and self.current_red_start >= self.configuration_start:
1160                               
1161                                self.animation_right=False
1162                               
1163                        self.top_divider_da.queue_draw()
1164                       
1165                else:
1166                       
1167                        if self.current_red_width > self.configuration_width:
1168                                self.current_red_width-=1
1169                        if self.current_red_start < self.configuration_start:
1170                                self.current_red_start+=1
1171                       
1172                       
1173                        if self.current_red_width <= self.configuration_width and self.current_red_start >= self.configuration_start:
1174                               
1175                                self.animation_right=False
1176                               
1177                        self.top_divider_da.queue_draw()
1178               
1179                return self.animation_right
1180               
1181        #def update_divider_right
1182       
1183        def update_divider_left(self):
1184               
1185               
1186                if self.configuration_width > self.installers_width:
1187
1188                        if self.current_red_width > self.installers_width:
1189                                self.current_red_width-=1
1190                        if self.current_red_start > 0:
1191                                self.current_red_start-=1
1192                       
1193                       
1194                        if self.current_red_width <= self.installers_width and self.current_red_start <= 0:
1195                               
1196                                self.animation_left=False
1197                               
1198                        self.top_divider_da.queue_draw()
1199                       
1200                else:
1201                       
1202                        if self.current_red_width < self.installers_width:
1203                                self.current_red_width+=1
1204                        if self.current_red_start > 0:
1205                                self.current_red_start-=1
1206                       
1207                       
1208                        if self.current_red_width >= self.installers_width and self.current_red_start <= 0:
1209                               
1210                                self.animation_left=False
1211                               
1212                        self.top_divider_da.queue_draw()
1213               
1214                return self.animation_left
1215               
1216        #def update_divider_left
1217       
1218
1219       
1220        def label_clicked(self,widget,event,id):
1221               
1222                if id==0 and self.current_tab!=id:
1223                        try:
1224                               
1225                                self.stack.set_visible_child_name("installers")
1226                                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
1227                                self.installers_label.set_name("MAIN_LABEL_ENABLED")
1228                                self.configuration_label.set_name("MAIN_LABEL_DISABLED")
1229                                if not self.first_run:
1230                                        self.animation_left=True
1231                                        self.animation_right=False
1232                                        GLib.timeout_add(1,self.update_divider_left)
1233                                       
1234                               
1235                        except Exception as e:
1236                                print e
1237               
1238                if id==1 and self.current_tab!=id:
1239                        try:
1240
1241                                self.stack.set_visible_child_name("configuration")
1242                                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
1243                                self.installers_label.set_name("MAIN_LABEL_DISABLED")
1244                                self.configuration_label.set_name("MAIN_LABEL_ENABLED")
1245                                self.animation_right=True
1246                                self.animation_left=False
1247                                GLib.timeout_add(1,self.update_divider_right)
1248                                if self.update_alternatives:
1249                                        self.refresh_alternatives()
1250                               
1251                        except:
1252                                pass
1253               
1254                self.current_tab=id
1255               
1256        #def label_clicked
1257       
1258
1259       
1260#awesome tabs
1261
1262if __name__=="__main__":
1263       
1264        at=AwesomeTabs()
Note: See TracBrowser for help on using the repository browser.