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, 3 years ago

Fix css progress bar

  • Property svn:executable set to *
File size: 30.9 KB
RevLine 
[1984]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
[1995]13import subprocess
14import sys
[3668]15import shutil
[1984]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
[1986]29BASE_DIR="/usr/share/lliurex-java-panel/"
30RSRC_DIR=BASE_DIR+"rsrc/"
31SHADOW_BANNER=RSRC_DIR+"shadow.png"
[1992]32UNKNOWN_BANNER=RSRC_DIR+"unknown.png"
[1984]33BANNERS_PATH=BASE_DIR+"banners/"
34JAVAS_CONFIG_PATH=BASE_DIR+"supported-javas/"
[3668]35SWING_FILE=BASE_DIR+"swing.properties"
[1984]36
[3668]37
[1984]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
[1995]49                self.info["available"]=True
[1984]50               
51                if os.path.exists(BANNERS_PATH+self.info["pkg"]+".png"):
52                        self.info["image"]=BANNERS_PATH+self.info["pkg"]+".png"
53                else:
[1992]54                        self.info["image"]=UNKNOWN_BANNER
[1984]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               
[2014]94#class Alternative
[1984]95
96
[2014]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               
[2071]105       
[2014]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
[1984]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")
[3668]131                                info["swing"]=config.get("JAVA","swing")
[1984]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
[2020]150#class CustomColor             
151
[1984]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
[2071]168                self.update_alternatives=False
[1984]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               
[2020]193        #def __init__
[1984]194       
195       
196       
197        def start_gui(self):
198               
199                builder=Gtk.Builder()
[2020]200                builder.set_translation_domain('lliurex-java-panel')
[2022]201                glade_path=RSRC_DIR+"lliurex-java-panel.ui"
[1984]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               
[2001]222                self.button_scroll=builder.get_object("button_scrolledwindow")
223                self.main_box=builder.get_object("main_box")
[1984]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               
[1995]254                       
[1984]255               
256               
[2001]257                self.stack.add_titled(self.button_scroll, "installers", "Installers")
[1984]258                self.stack.add_titled(self.configuration_box, "configuration", "Configuration")
259               
[2001]260                self.main_box.add(self.stack)
[1984]261               
262                self.main_window=builder.get_object("main_window")
263               
[1995]264               
[1984]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               
[1995]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               
[1984]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"
[1986]282                info["icon"]=RSRC_DIR+"control_panel.png"
[1984]283                info["name"]="cpanel"
284                info["active"]=True
285               
286                self.add_conf_button(info)
287               
288                info["txt"]="Java Web Start"
[1986]289                info["icon"]=RSRC_DIR+"java_conf.png"
[1984]290                info["name"]="jws"
291                info["active"]=False
292               
293                self.add_conf_button(info)
294               
295                info["txt"]="Java Runtime\nEnvironment"
[1986]296                info["icon"]=RSRC_DIR+"java_conf.png"
[1984]297                info["name"]="jre"
298               
299                self.add_conf_button(info)
300               
301                info["txt"]="Firefox Plugin"
[1986]302                info["icon"]=RSRC_DIR+"firefox.png"
[1984]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()
[1995]320                self.configuration_box.show_all()
[1984]321
[1995]322                self.set_css_info()
[1984]323               
[1995]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               
[1984]333                GObject.threads_init()         
334                Gtk.main()
335               
[2020]336        #def start_gui
[1984]337       
[1995]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
[1984]368       
[1995]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       
[1984]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                }
[3675]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
[1984]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
[1995]463                .radio#RED {
[1984]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               
[1995]468                .radio:checked#RED {
[1984]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
[1995]471                GtkButton#RED GtkLabel {
[1984]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")
[3675]486                #self.pbar.set_name("RED_PROGRESS")
[1995]487                self.gather_pbar.set_name("RED_PROGRESS")
[1984]488                self.confbutton_grid.set_name("DARK_BACK")
[1995]489                self.progress_label.set_name("ALTERNATIVES_LABEL")
[1984]490               
491               
492        #def css_info
493
494       
[1995]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               
[2020]507        #def is_installed
[1995]508       
[1984]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
[2071]535                                self.update_alternatives=True
[3668]536                                self.copy_swing_file(grid_button.info["swing"])
[1984]537                        da.queue_draw()
538                       
539                return self.t.is_alive()
540       
541        #def pulsate_pbar
542
[3668]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
[1984]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       
[2020]565
[1984]566        def build_cpanel_alternatives(self):
[2071]567               
[1984]568                tmp_box=Gtk.VBox()
569               
570                alternative_list=[]
[2020]571                cpanel_label_list=[]
572                cpanel_cmd_list=[]
[1984]573               
574                # build alternatives list here
575               
576                # ############### #
[2094]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")
[2020]582                       
[2094]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
[2025]591                               
[2094]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
[2014]601                '''     
[1984]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)
[2014]610                '''
[2020]611                               
[1984]612                self.conf_stack.add_titled(tmp_box, "cpanel", "Control Panel")
613
614               
[2020]615        #def build_cpanel_alternatives 
[1984]616       
617       
618        def build_jws_alternatives(self):
619       
620                tmp_box=Gtk.VBox()
621               
622                alternative_list=[]
[2020]623                jws_label_list=[]
624                jws_cmd_list=[]
[2094]625               
[1984]626                # build alternatives list here
627               
628                # ############### #
[2094]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
[1984]640               
[2094]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)
[1984]648                       
[2094]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         
[2020]654                                                               
655                # get jws configured actually
656               
657                # ################ #
[2039]658                try:
[2094]659                        jws_configured_cmd='update-alternatives --get-selections |grep javaws$' 
660                        jws_configured_label= (subprocess.check_output(jws_configured_cmd, shell=True)).split("/")[4]   
[2039]661                        k=jws_label_list.index(jws_configured_label)
662                        alternative_list[k].set_active(True)
663                except Exception as e:
664                        print e
[2094]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
[2039]675                       
[2094]676                       
[1984]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               
[2020]683        #def  build_jws_alternatives
[1984]684       
685       
686        def build_jre_alternatives(self):
687       
688                tmp_box=Gtk.VBox()
689               
690                alternative_list=[]
[2020]691                jre_label_list=[]
692                jre_cmd_list=[]
693
[1984]694                # build alternatives list here
695               
696                # ############### #
[2094]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")
[1984]702               
[2094]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
[2039]709                               
[2094]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)
[1984]717                       
[2094]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
[2020]723                # get jre configured actually
724               
725                # ################ #
[2039]726                try:
[2094]727                        jre_configured_cmd='update-alternatives --get-selections |grep java$' 
728                        jre_configured_label= (subprocess.check_output(jre_configured_cmd, shell=True)).split("/")[4]   
[2039]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               
[1984]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               
[2020]741        #def build_jre_alternatives
[1984]742
743       
744        def build_firefox_alternatives(self):
745       
746                tmp_box=Gtk.VBox()
747               
748                alternative_list=[]
[2020]749                firefox_label_list=[]
750                firefox_cmd_list=[]     
[1984]751               
752                # build alternatives list here
753               
754                # ############### #
[2094]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
[1984]766               
[2094]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)
[2020]774                       
[2094]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         
[1984]780                               
[2020]781                                       
782                # get mozilla plugin configured actually
783               
784                # ################ #
[2094]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]   
[2020]788               
[2039]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               
[1984]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               
[2020]800        #def  build_firefox_alternatives
[1984]801       
[2071]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               
[1984]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
[2071]859                self.cb_active=cb.name
[1984]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)
[1995]959                        txt=_("Installed")
[1984]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)
[2020]1066                        pctx.set_markup(_("Installers"))
[1984]1067                        self.installers_width=pctx.get_pixel_size()[0]
[2020]1068                        pctx.set_markup(_("Configuration"))
[1984]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               
[2020]1118        #def draw_bottom_divider
[1984]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                       
[2020]1141        #def mouse_left
[1984]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               
[2020]1156        #def  restore_shadow_alpha
[1984]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               
[2020]1191        #def update_divider_right
[1984]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               
[2020]1226        #def update_divider_left
[1984]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)
[2071]1258                                if self.update_alternatives:
1259                                        self.refresh_alternatives()
[1984]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       
[2014]1274        at=AwesomeTabs()
Note: See TracBrowser for help on using the repository browser.