source: bell-scheduler/trunk/fuentes/bell-scheduler/python3-bellscheduler/BellBox.py @ 6871

Last change on this file since 6871 was 6871, checked in by jrpelegrina, 19 months ago

Fix files and added translations

File size: 10.4 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 sys
9import os
10
11
12from . import settings
13import gettext
14gettext.textdomain(settings.TEXT_DOMAIN)
15_ = gettext.gettext
16
17
18class BellBox(Gtk.VBox):
19       
20        def __init__(self):
21               
22                Gtk.VBox.__init__(self)
23               
24                self.core=Core.Core.get_core()
25               
26                builder=Gtk.Builder()
27                builder.set_translation_domain(settings.TEXT_DOMAIN)
28                ui_path=self.core.ui_path
29                builder.add_from_file(ui_path)
30
31                self.css_file=self.core.rsrc_dir+"bell-scheduler.css"
32                self.edit_image=self.core.rsrc_dir+"edit.svg"
33                self.delete_image=self.core.rsrc_dir+"trash.svg"
34                self.main_box=builder.get_object("bell_data_box")
35                self.bell_box=builder.get_object("bell_box")
36                self.scrolledwindow=builder.get_object("scrolledwindow")
37                self.bell_list_box=builder.get_object("bell_list_box")
38                self.bell_list_vp=builder.get_object("bell_list_viewport")
39                self.image_nodisp=self.core.rsrc_dir+"image_nodisp.svg"
40                self.pack_start(self.main_box,True,True,0)
41                self.set_css_info()
42                               
43        #def __init__
44
45        def set_css_info(self):
46               
47                self.style_provider=Gtk.CssProvider()
48
49                f=Gio.File.new_for_path(self.css_file)
50                self.style_provider.load_from_file(f)
51
52                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
53                               
54        #def set_css_info                       
55                       
56        def init_bell_list(self):
57       
58                tmp=self.core.bellBox.bell_list_box.get_children()
59                for item in tmp:
60                        self.bell_list_box.remove(item)
61
62        #def init_bell_list
63                       
64
65        def draw_bell(self,search,args=None):
66
67                self.init_bell_list()
68
69                if not search:
70                        self.bells_list=self.core.mainWindow.bells_info
71                        order=self.core.mainWindow.order_bells         
72                else:
73                        self.bells_list=self.core.mainWindow.search_list
74                        order=self.core.mainWindow.search_order
75
76                last_change=args
77                for item in order:
78                        self.new_bell_box(item,last_change)
79
80        #def draw_bell         
81
82        def new_bell_box(self,id_bell,args=None):
83
84                self.days_on=0
85                self.error_sound=False
86
87                hbox=Gtk.HBox()
88                hbox_cron=Gtk.VBox()
89                hour_info=self.core.bellmanager.format_time(id_bell)[2]
90                bell_hour=Gtk.Label()
91                bell_hour.set_text(hour_info)
92                bell_hour.set_name("TIME_LABEL")
93                bell_hour.set_margin_left(15)
94                bell_hour.set_margin_right(15)
95                bell_hour.set_margin_top(5)
96                bell_hour.set_margin_bottom(0)
97                bell_hour.id=id_bell
98               
99                hbox_week=Gtk.HBox()
100                monday_inf=Gtk.Label()
101                monday_inf.set_text(_("M"))
102                monday_inf.set_margin_left(10)
103                monday_inf.set_margin_bottom(12)
104                monday_inf.set_width_chars(2)
105                monday_inf.set_max_width_chars(2)
106                monday_inf.id=id_bell
107                day_css=self.format_weekdays(self.bells_list[id_bell],0)
108                monday_inf.set_name(day_css)
109
110                thuesday_inf=Gtk.Label()
111                thuesday_inf.set_text(_("T"))
112                thuesday_inf.set_margin_left(1)
113                thuesday_inf.set_margin_bottom(12)
114                thuesday_inf.set_width_chars(2)
115                thuesday_inf.set_max_width_chars(2)
116                thuesday_inf.id=id_bell
117                day_css=self.format_weekdays(self.bells_list[id_bell],1)
118                thuesday_inf.set_name(day_css)
119
120                wednesday_inf=Gtk.Label()
121                wednesday_inf.set_text(_("W"))
122                wednesday_inf.set_margin_left(1)
123                wednesday_inf.set_margin_bottom(12)
124                wednesday_inf.set_width_chars(2)
125                wednesday_inf.set_max_width_chars(2)
126                wednesday_inf.id=id_bell
127                day_css=self.format_weekdays(self.bells_list[id_bell],2)
128                wednesday_inf.set_name(day_css)
129
130                thursday_inf=Gtk.Label()
131                thursday_inf.set_text(_("R"))
132                thursday_inf.set_margin_left(1)
133                thursday_inf.set_margin_bottom(12)
134                thursday_inf.set_width_chars(2)
135                thursday_inf.set_max_width_chars(2)
136                thursday_inf.id=id_bell
137                day_css=self.format_weekdays(self.bells_list[id_bell],3)
138                thursday_inf.set_name(day_css)
139
140                friday_inf=Gtk.Label()
141                friday_inf.set_text(_("F"))
142                friday_inf.set_margin_left(1)
143                friday_inf.set_margin_bottom(12)
144                friday_inf.set_width_chars(2)
145                friday_inf.set_max_width_chars(2)
146                friday_inf.id=id_bell
147                day_css=self.format_weekdays(self.bells_list[id_bell],4)
148                friday_inf.set_name(day_css)
149
150                hbox_week.pack_start(monday_inf,False,False,2)
151                hbox_week.pack_start(thuesday_inf,False,False,2)
152                hbox_week.pack_start(wednesday_inf,False,False,2)
153                hbox_week.pack_start(thursday_inf,False,False,2)
154                hbox_week.pack_start(friday_inf,False,False,2)
155
156                image=Gtk.Image()
157                pixbuf=self.format_image_size(id_bell)
158                image=Gtk.Image.new_from_pixbuf(pixbuf)
159                image.set_margin_left(30)
160                image.set_halign(Gtk.Align.CENTER)
161                image.set_valign(Gtk.Align.CENTER)
162                image_id=id_bell
163
164                hbox_description=Gtk.VBox()
165                description=Gtk.Label()
166                description.set_text(self.bells_list[id_bell]["name"])
167                description.set_margin_left(10)
168                description.set_margin_right(5)
169                description.set_margin_top(20)
170                description.set_margin_bottom(1)
171                description.set_width_chars(20)
172                description.set_max_width_chars(20)
173                description.set_xalign(-1)
174                description.set_ellipsize(Pango.EllipsizeMode.START)
175                description.set_name("BELL_DESCRIPTION")
176                description.set_valign(Gtk.Align.START)
177
178                sound=Gtk.Label()
179                sound_path=self.load_sound_path(id_bell)
180                sound.set_text(sound_path)
181                sound.set_margin_left(10)
182                sound.set_margin_right(5)
183                sound.set_margin_bottom(15)
184                sound.set_width_chars(20)
185                sound.set_max_width_chars(20)
186                sound.set_xalign(-1)
187                sound.set_ellipsize(Pango.EllipsizeMode.START)
188               
189                sound.set_valign(Gtk.Align.START)
190                hbox_description.pack_start(description,False,False,15)
191                hbox_description.pack_start(sound,False,False,1)
192
193                delete=Gtk.Button()
194                delete_image=Gtk.Image.new_from_file(self.delete_image)
195                delete.add(delete_image)
196                delete.set_margin_right(15)
197                delete.set_halign(Gtk.Align.CENTER)
198                delete.set_valign(Gtk.Align.CENTER)
199                delete.set_name("DELETE_ITEM_BUTTON")
200                delete.connect("clicked",self.delete_bell_clicked,hbox)
201                delete.set_tooltip_text(_("Delete bell"))
202                edit=Gtk.Button()
203                edit_image=Gtk.Image.new_from_file(self.edit_image)
204                edit.add(edit_image)
205                edit.set_halign(Gtk.Align.CENTER)
206                edit.set_valign(Gtk.Align.CENTER)
207                edit.set_name("EDIT_ITEM_BUTTON")
208                edit.connect("clicked",self.edit_bell_clicked,hbox)
209                edit.set_tooltip_text(_("Edit bell"))
210
211                switch_button=Gtk.Switch()
212                switch_button.set_halign(Gtk.Align.CENTER)
213                switch_button.set_valign(Gtk.Align.CENTER)
214                switch_button.set_tooltip_text(_("Activate or deactivate bell"))
215               
216                if self.days_on>0:
217                        if not self.error_sound:
218                                sound.set_name("BELL_SOUND")
219                                if self.bells_list[id_bell]["active"]:
220                                        switch_button.set_active(True)
221                        else:
222                                sound.set_name("BELL_ERROR_SOUND")
223                                self.bells_list[id_bell]["active"]=False
224                                self.core.bellmanager.save_conf(self.bells_list,id_bell,"active")
225                                switch_button.set_sensitive(False)
226                                switch_button.set_active(False)         
227                else:
228                        switch_button.set_sensitive(False)             
229       
230
231                switch_button.connect("notify::active",self.on_switch_activaded,hbox)
232
233                hbox_cron.pack_start(bell_hour,False,False,5)
234                hbox_cron.pack_end(hbox_week,False,False,5)
235                hbox.pack_start(hbox_cron,False,False,5)
236                hbox.pack_start(image,False,False,5)
237                hbox.pack_start(hbox_description,False,False,5)
238                hbox.pack_end(delete,False,False,5)
239                hbox.pack_end(edit,False,False,5)
240                hbox.pack_end(switch_button,False,False,5)
241                hbox.show_all()
242
243                if str(id_bell)==str(args):
244                        hbox.set_name("CHANGE_BOX")
245                else:
246                        hbox.set_name("APP_BOX")
247                self.bell_list_box.pack_start(hbox,False,False,5)
248                self.bell_list_box.queue_draw()
249                hbox.queue_draw()       
250
251        #def new_bell_box       
252               
253        def format_weekdays(self,bell,day):
254               
255                weekdays=bell["weekdays"]
256                day_f=weekdays[str(day)]
257                if day_f:
258                        self.days_on+=1
259                        return("DAY_LABEL_ON")
260                else:
261                        return("DAY_LABEL_OFF") 
262
263        #def format_weekdays           
264
265
266        def load_sound_path(self,bell):
267               
268                path=self.bells_list[bell]["sound"]["path"]
269                option=self.bells_list[bell]["sound"]["option"]
270
271               
272                if option!="url":
273                        if os.path.exists(path):
274                                if option=="file":
275                                        file=os.path.basename(path)
276                                        return file
277                                else:
278                                        return path     
279                        else:
280                                self.error_sound=True
281                                msg=self.core.mainWindow.get_msg(29)
282                                self.core.mainWindow.loading_errors=True
283                                return msg     
284                else:
285                                return path
286
287        #def load_sound_path                   
288               
289        def format_image_size(self,bell):
290
291                image_path=self.bells_list[bell]["image"]["path"]
292                image=Gtk.Image()
293                if os.path.exists(image_path):
294                        image.set_from_file(image_path)
295                else:
296                        image.set_from_file(self.image_nodisp)
297                        self.core.mainWindow.loading_errors=True
298
299                pixbuf=image.get_pixbuf()
300                pixbuf=pixbuf.scale_simple(80,80,GdkPixbuf.InterpType.BILINEAR)
301               
302                return pixbuf
303
304        #def format_image_size 
305
306
307        def delete_bell_clicked(self,button,hbox):
308
309               
310                dialog = Gtk.MessageDialog(None,0,Gtk.MessageType.WARNING, Gtk.ButtonsType.YES_NO, "BELL SCHEDULER")
311                dialog.format_secondary_text(_("Do you want delete the bell?"))
312                response=dialog.run()
313                dialog.destroy()
314               
315                if response==Gtk.ResponseType.YES:
316                        bell_to_remove=hbox.get_children()[0].get_children()[0].id
317                        self.core.mainWindow.bells_info.pop(bell_to_remove)
318                        #self.core.bellmanager.write_conf(self.core.mainWindow.bells_info)
319                        result=self.core.bellmanager.save_conf(self.core.mainWindow.bells_info,bell_to_remove,"remove")
320                        if result['status']:
321                                self.bell_list_box.remove(hbox)
322                                self.core.mainWindow.manage_message(False,14)
323                        else:
324                                self.core.mainWindow.manage_message(True,result['code'])
325
326        #def delete_bell_clicked               
327                       
328               
329        def edit_bell_clicked(self,button,hbox):
330
331                bell_to_edit=hbox               
332                bell_to_edit=bell_to_edit.get_children()[0].get_children()[0].id
333                self.core.editBox.init_form()
334                self.core.editBox.render_form()
335                self.core.editBox.load_values(bell_to_edit)
336                self.core.mainWindow.manage_menubar(False)
337                self.core.mainWindow.manage_down_buttons(True)
338                self.core.mainWindow.stack_opt.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
339                self.core.mainWindow.stack_opt.set_visible_child_name("editBox")               
340
341        #def edit_bell_clicked         
342
343        def on_switch_activaded (self,switch,gparam,hbox):
344
345                bell_to_edit=hbox               
346                bell_to_edit=bell_to_edit.get_children()[0].get_children()[0].id
347                turn_on=False
348
349                if switch.get_active():
350                        self.bells_list[bell_to_edit]["active"]=True
351                        turn_on=True
352                        #self.core.mainWindow.manage_message(False,16)
353                       
354                else:
355                        self.bells_list[bell_to_edit]["active"]=False
356                        #self.core.mainWindow.manage_message(False,17)
357
358                #self.core.bellmanager.write_conf(self.bells_list)     
359                result=self.core.bellmanager.save_conf(self.bells_list,bell_to_edit,"active")
360                if result['status']:
361                        if turn_on:
362                                self.core.mainWindow.manage_message(False,16)
363                        else:
364                                self.core.mainWindow.manage_message(False,17)
365                else:
366                        self.core.mainWindow.manage_message(True,result['code'])                       
367
368        #def on_switch_activaded       
369
370                       
371
372#class BellBox
373
374from . import Core
Note: See TracBrowser for help on using the repository browser.