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

Last change on this file since 6717 was 6717, checked in by jrpelegrina, 20 months ago

Fixed files and addded logrotate

File size: 6.9 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        #def set_css_info                       
96                       
97        def load_info(self,info):
98
99                for item in info:
100                        order=item
101                        #if info[item]["type"]!="file":
102                        for element in info[item]["pkg_list"]:
103                                name=element["name"]
104                                self.new_epi_box(name,order)
105
106                        '''     
107                        else:
108                                name=info[item]["name"]
109                                self.new_epi_box(name,order)
110                        '''
111                self.get_icon_toupdate()       
112
113        #def load_info                         
114
115       
116        def new_epi_box(self,name,order):
117               
118                hbox=Gtk.HBox()
119                if self.core.epiManager.pkg_info[name]["status"]=="installed":
120                        img=Gtk.Image.new_from_file(self.package_installed)
121                else:
122                        if order==0:
123                                img=Gtk.Image.new_from_file(self.package_availabled)
124                        else:
125                                img=Gtk.Image.new_from_file(self.package_availabled_dep)
126               
127                application_image=img
128                application_image.set_margin_left(10)
129                application_image.set_halign(Gtk.Align.CENTER)
130                application_image.set_valign(Gtk.Align.CENTER)
131                application_image.id=name
132                application_image.pkg=True
133                application_image.status=False
134                application_image.order=order
135                application_info="<span font='Roboto'><b>"+name+"</b></span>"
136                application=Gtk.Label()
137                application.set_markup(application_info)
138                application.set_margin_left(10)
139                application.set_margin_right(15)
140                application.set_margin_top(21)
141                application.set_margin_bottom(21)
142                application.set_width_chars(25)
143                application.set_max_width_chars(25)
144                application.set_xalign(-1)
145                application.set_ellipsize(Pango.EllipsizeMode.END)
146                application.id=name
147                application.pkg=False
148                application.status=False
149                application.order=order
150               
151                info=Gtk.Button()
152                info_image=Gtk.Image.new_from_file(self.info_image)
153                info.add(info_image)
154                info.set_halign(Gtk.Align.CENTER)
155                info.set_valign(Gtk.Align.CENTER)
156                info.set_name("INFO_APP_BUTTON")
157                info.connect("clicked",self.show_info_clicked,hbox)
158                if self.core.epiManager.pkg_info[name]["summary"]!="":
159                        info.set_tooltip_text(_("Press to view application information"))
160                else:
161                        info.set_tooltip_text(_("Info not availabled"))
162       
163                info.id=name
164                info.pkg=False
165                info.order=order
166                info.status=False
167               
168                state=Gtk.Image()
169                state=Gtk.Image.new_from_file(self.initial)
170                state.set_halign(Gtk.Align.CENTER)
171                state.set_valign(Gtk.Align.CENTER)
172                state.id=name
173                state.pkg=False
174                state.status=True
175                state.order=order
176               
177                hbox.pack_start(application_image,False,False,0)
178                hbox.pack_start(application,False,False,0)
179                hbox.pack_end(info,False,False,10)
180                hbox.pack_end(state,False,False,10)
181                hbox.show_all()
182                hbox.set_name("APP_BOX")
183                self.epi_list_box.pack_start(hbox,False,False,5)
184                self.epi_list_box.queue_draw()
185                hbox.queue_draw()
186               
187        #def new_epi_box
188
189
190        def get_icon_toupdate(self):
191
192                self.update_icons={}
193
194                for item in self.epi_list_box.get_children():
195                        tmp={}                 
196                        for element in item.get_children():
197                               
198                                if element.order not in self.update_icons:
199                                        self.update_icons[element.order]=[]
200                                if element.pkg:
201                                        tmp['icon_package']=element
202
203                                if element.status:
204                                        tmp['icon_status']=element
205
206                                       
207                        if len(tmp)>0:
208                                self.update_icons[element.order].append(tmp)
209
210
211        #def get_icon_toupdate                         
212
213
214        def show_info_clicked(self,button,hbox):
215
216                app=hbox.get_children()[1].get_text()
217
218                icon=self.core.epiManager.pkg_info[app]["icon"]
219
220                if icon!="":
221                        debian_name=self.core.epiManager.pkg_info[app]["debian_name"]
222                        component=self.core.epiManager.pkg_info[app]["component"]
223
224                        name=self.core.epiManager.pkg_info[app]["name"]
225                        summary=self.core.epiManager.pkg_info[app]["summary"]
226                        description=self.core.epiManager.pkg_info[app]["description"]
227
228
229                        h=html2text.HTML2Text()
230                        h.body_width=400
231                        txt=h.handle(description)
232                        txt=txt.replace("&lt;", "<")
233                        txt=txt.replace("&gt;", ">")
234                        txt=txt.replace("&amp;", "&")
235
236                        icon=self.core.get_icons.get_icon(debian_name,icon,component)
237                       
238                        self.core.infoBox.icon.set_from_file(icon)
239                        self.core.infoBox.name_label.set_text(name)
240                        self.core.infoBox.summary_label.set_text(summary)
241                        self.core.infoBox.description_label.set_text(txt)
242                        self.core.mainWindow.apply_button.hide()
243                        self.core.mainWindow.uninstall_button.hide()
244                        self.core.mainWindow.return_button.show()
245                        self.core.mainWindow.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
246                        self.core.mainWindow.stack.set_visible_child_name("infoBox")
247
248
249        #def show_info_clicked         
250
251#class EpiBox
252
253from . import Core
Note: See TracBrowser for help on using the repository browser.