source: epi/trunk/fuentes/epi-gtk/python3-epigtk/EpiBox.py @ 6521

Last change on this file since 6521 was 6521, checked in by jrpelegrina, 21 months ago

Improve performance

File size: 7.5 KB
Line 
1#!/usr/bin/env python3
2
3import gi
4gi.require_version('Gtk', '3.0')
5gi.require_version('Vte', '2.91')
6from gi.repository import Gtk, Pango, GdkPixbuf, Gdk, Gio, GObject,GLib,Vte
7
8import copy
9
10import sys
11import os
12import html2text
13
14from . import settings
15import gettext
16gettext.textdomain(settings.TEXT_DOMAIN)
17_ = gettext.gettext
18
19
20class EpiBox(Gtk.VBox):
21       
22        def __init__(self):
23               
24                Gtk.VBox.__init__(self)
25               
26                self.core=Core.Core.get_core()
27               
28                builder=Gtk.Builder()
29                builder.set_translation_domain(settings.TEXT_DOMAIN)
30                ui_path=self.core.ui_path
31                builder.add_from_file(ui_path)
32
33                self.css_file=self.core.rsrc_dir+"epi-gtk.css"
34
35                self.package_availabled=self.core.rsrc_dir+"package.svg"
36                self.package_availabled_dep=self.core.rsrc_dir+"package_dep.svg"
37                self.package_installed=self.core.rsrc_dir+"package_install.svg"
38                self.package_installed_dep=self.core.rsrc_dir+"package_install_dep.svg"
39                self.info_image=self.core.rsrc_dir+"info.svg"
40                self.initial=self.core.rsrc_dir+"initial.svg"
41                self.terminal_config=self.core.rsrc_dir+"terminal.conf"
42
43
44                self.main_box=builder.get_object("epi_data_box")
45                self.epi_list_label=builder.get_object("epi_list_label")
46                self.epi_box=builder.get_object("epi_box")
47                self.scrolledwindow=builder.get_object("scrolledwindow")
48                self.epi_list_box=builder.get_object("epi_list_box")
49                self.epi_list_vp=builder.get_object("epi_list_viewport")
50                self.epi_depend_label=builder.get_object("epi_depend_label")
51
52                self.terminal_box=builder.get_object("terminal_box")
53                self.terminal_label=builder.get_object("terminal_label")
54                self.viewport=builder.get_object("viewport")
55                self.terminal_scrolled=builder.get_object("terminalScrolledWindow")
56                self.vterminal=Vte.Terminal()
57                self.vterminal.spawn_sync(
58                        Vte.PtyFlags.DEFAULT,
59                        os.environ['HOME'],
60                        #["/usr/sbin/dpkg-reconfigure", "xdm"],
61                        ["/bin/bash","--rcfile",self.terminal_config],
62                        [],
63                        GLib.SpawnFlags.DO_NOT_REAP_CHILD,
64                        None,
65                        None,
66                )
67                font_terminal = Pango.FontDescription("monospace normal 9")
68                self.vterminal.set_font(font_terminal)
69                self.vterminal.set_scrollback_lines(-1)
70                self.vterminal.set_sensitive(True)
71                self.terminal_scrolled.add(self.vterminal)
72                self.pbar_label=builder.get_object("pbar_label")
73                self.pbar=builder.get_object("pbar")
74
75
76                self.pack_start(self.main_box,True,True,0)
77                self.set_css_info()
78               
79
80                               
81        #def __init__
82
83        def set_css_info(self):
84               
85                self.style_provider=Gtk.CssProvider()
86
87                f=Gio.File.new_for_path(self.css_file)
88                self.style_provider.load_from_file(f)
89
90                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
91                self.epi_list_label.set_name("OPTION_LABEL")
92                self.terminal_label.set_name("MSG_LABEL")
93                self.epi_depend_label.set_name("DEPEND_LABEL")
94                               
95                       
96        def load_info(self,info):
97
98                for item in info:
99                        order=item
100                        #if info[item]["type"]!="file":
101                        for element in info[item]["pkg_list"]:
102                                name=element["name"]
103                                self.new_epi_box(name,order)
104
105                        '''     
106                        else:
107                                name=info[item]["name"]
108                                self.new_epi_box(name,order)
109                        '''
110                self.get_icon_toupdate()       
111
112        #def load_info                         
113
114       
115        def new_epi_box(self,name,order):
116               
117                hbox=Gtk.HBox()
118                if self.core.epiManager.pkg_info[name]["status"]=="installed":
119                        img=Gtk.Image.new_from_file(self.package_installed)
120                else:
121                        if order==0:
122                                img=Gtk.Image.new_from_file(self.package_availabled)
123                        else:
124                                img=Gtk.Image.new_from_file(self.package_availabled_dep)
125               
126                application_image=img
127                application_image.set_margin_left(10)
128                application_image.set_halign(Gtk.Align.CENTER)
129                application_image.set_valign(Gtk.Align.CENTER)
130                application_image.id=name
131                application_image.pkg=True
132                application_image.status=False
133                application_image.order=order
134                application_info="<span font='Roboto'><b>"+name+"</b></span>"
135                application=Gtk.Label()
136                application.set_markup(application_info)
137                application.set_margin_left(10)
138                application.set_margin_right(15)
139                application.set_margin_top(21)
140                application.set_margin_bottom(21)
141                application.set_width_chars(25)
142                application.set_max_width_chars(25)
143                application.set_xalign(-1)
144                application.set_ellipsize(Pango.EllipsizeMode.END)
145                application.id=name
146                application.pkg=False
147                application.status=False
148                application.order=order
149               
150                info=Gtk.Button()
151                info_image=Gtk.Image.new_from_file(self.info_image)
152                info.add(info_image)
153                info.set_halign(Gtk.Align.CENTER)
154                info.set_valign(Gtk.Align.CENTER)
155                info.set_name("INFO_APP_BUTTON")
156                info.connect("clicked",self.show_info_clicked,hbox)
157                if self.core.epiManager.pkg_info[name]["summary"]!="":
158                        info.set_tooltip_text(_("Press to view application information"))
159                else:
160                        info.set_tooltip_text(_("Info not availabled"))
161       
162                info.id=name
163                info.pkg=False
164                info.order=order
165                info.status=False
166               
167                state=Gtk.Image()
168                state=Gtk.Image.new_from_file(self.initial)
169                state.set_halign(Gtk.Align.CENTER)
170                state.set_valign(Gtk.Align.CENTER)
171                state.id=name
172                state.pkg=False
173                state.status=True
174                state.order=order
175               
176                hbox.pack_start(application_image,False,False,0)
177                hbox.pack_start(application,False,False,0)
178                hbox.pack_end(info,False,False,10)
179                hbox.pack_end(state,False,False,10)
180                hbox.show_all()
181                hbox.set_name("APP_BOX")
182                self.epi_list_box.pack_start(hbox,False,False,5)
183                self.epi_list_box.queue_draw()
184                hbox.queue_draw()
185               
186        #def new_application_box
187
188
189        def get_icon_toupdate(self):
190
191                self.update_icons={}
192
193                '''
194                for item in self.epi_list_box.get_children():
195                        for element in item.get_children():
196                                if element.order not in self.update_icons:
197                                        self.update_icons[element.order]={}     
198                                        self.update_icons[element.order]['icon_package']=[]
199                                        self.update_icons[element.order]['icon_status']=[]
200                                if element.pkg:
201                                        self.update_icons[element.order]['icon_package'].append(element)
202
203                                if element.status:
204                                        self.update_icons[element.order]['icon_status'].append(element)
205                '''                     
206
207                for item in self.epi_list_box.get_children():
208                        tmp={}                 
209                        for element in item.get_children():
210                               
211                                if element.order not in self.update_icons:
212                                        #self.update_icons[element.order]={}   
213                                        self.update_icons[element.order]=[]
214                                if element.pkg:
215                                        tmp['icon_package']=element
216                                        #self.update_icons[element.order]['icon_package'].append(element)
217
218                                if element.status:
219                                        tmp['icon_status']=element
220
221                                       
222                        if len(tmp)>0:
223                                self.update_icons[element.order].append(tmp)
224
225
226        #def get_icon_toupdate                         
227
228
229        def show_info_clicked(self,button,hbox):
230
231                app=hbox.get_children()[1].get_text()
232
233                icon=self.core.epiManager.pkg_info[app]["icon"]
234
235                if icon!="":
236                        debian_name=self.core.epiManager.pkg_info[app]["debian_name"]
237                        component=self.core.epiManager.pkg_info[app]["component"]
238
239                        name=self.core.epiManager.pkg_info[app]["name"]
240                        summary=self.core.epiManager.pkg_info[app]["summary"]
241                        description=self.core.epiManager.pkg_info[app]["description"]
242
243
244                        h=html2text.HTML2Text()
245                        h.body_width=400
246                        txt=h.handle(description)
247                        txt=txt.replace("&lt;", "<")
248                        txt=txt.replace("&gt;", ">")
249                        txt=txt.replace("&amp;", "&")
250
251                        icon=self.core.get_icons.get_icon(debian_name,icon,component)
252                       
253                        self.core.infoBox.icon.set_from_file(icon)
254                        self.core.infoBox.name_label.set_text(name)
255                        self.core.infoBox.summary_label.set_text(summary)
256                        self.core.infoBox.description_label.set_text(txt)
257                        self.core.mainWindow.apply_button.hide()
258                        self.core.mainWindow.uninstall_button.hide()
259                        self.core.mainWindow.return_button.show()
260                        self.core.mainWindow.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
261                        self.core.mainWindow.stack.set_visible_child_name("infoBox")
262
263
264        #def show_info_clicked         
265
266#class EpiBox
267
268from . import Core
Note: See TracBrowser for help on using the repository browser.