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

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

Add python files

File size: 10.1 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
86                hbox=Gtk.HBox()
87                hbox_cron=Gtk.VBox()
88                hour_info=self.core.bellmanager.format_time(id_bell)[2]
89                bell_hour=Gtk.Label()
90                bell_hour.set_text(hour_info)
91                bell_hour.set_name("TIME_LABEL")
92                bell_hour.set_margin_left(15)
93                bell_hour.set_margin_right(15)
94                bell_hour.set_margin_top(7)
95                bell_hour.set_margin_bottom(1)
96                bell_hour.id=id_bell
97               
98                hbox_week=Gtk.HBox()
99                monday_inf=Gtk.Label()
100                monday_inf.set_text(_("M"))
101                monday_inf.set_margin_left(10)
102                monday_inf.set_margin_bottom(7)
103                monday_inf.set_width_chars(2)
104                monday_inf.set_max_width_chars(2)
105                monday_inf.id=id_bell
106                day_css=self.format_weekdays(self.bells_list[id_bell],0)
107                monday_inf.set_name(day_css)
108
109                thuesday_inf=Gtk.Label()
110                thuesday_inf.set_text(_("T"))
111                thuesday_inf.set_margin_left(1)
112                thuesday_inf.set_margin_bottom(5)
113                thuesday_inf.set_width_chars(2)
114                thuesday_inf.set_max_width_chars(2)
115                thuesday_inf.id=id_bell
116                day_css=self.format_weekdays(self.bells_list[id_bell],1)
117                thuesday_inf.set_name(day_css)
118
119                wednesday_inf=Gtk.Label()
120                wednesday_inf.set_text(_("W"))
121                wednesday_inf.set_margin_left(1)
122                wednesday_inf.set_margin_bottom(5)
123                wednesday_inf.set_width_chars(2)
124                wednesday_inf.set_max_width_chars(2)
125                wednesday_inf.id=id_bell
126                day_css=self.format_weekdays(self.bells_list[id_bell],2)
127                wednesday_inf.set_name(day_css)
128
129                thursday_inf=Gtk.Label()
130                thursday_inf.set_text(_("R"))
131                thursday_inf.set_margin_left(1)
132                thursday_inf.set_margin_bottom(5)
133                thursday_inf.set_width_chars(2)
134                thursday_inf.set_max_width_chars(2)
135                thursday_inf.id=id_bell
136                day_css=self.format_weekdays(self.bells_list[id_bell],3)
137                thursday_inf.set_name(day_css)
138
139                friday_inf=Gtk.Label()
140                friday_inf.set_text(_("F"))
141                friday_inf.set_margin_left(1)
142                friday_inf.set_margin_bottom(5)
143                friday_inf.set_width_chars(2)
144                friday_inf.set_max_width_chars(2)
145                friday_inf.id=id_bell
146                day_css=self.format_weekdays(self.bells_list[id_bell],4)
147                friday_inf.set_name(day_css)
148
149                hbox_week.pack_start(monday_inf,False,False,2)
150                hbox_week.pack_start(thuesday_inf,False,False,2)
151                hbox_week.pack_start(wednesday_inf,False,False,2)
152                hbox_week.pack_start(thursday_inf,False,False,2)
153                hbox_week.pack_start(friday_inf,False,False,2)
154
155                image=Gtk.Image()
156                pixbuf=self.format_image_size(id_bell)
157                image=Gtk.Image.new_from_pixbuf(pixbuf)
158                image.set_margin_left(30)
159                image.set_halign(Gtk.Align.CENTER)
160                image.set_valign(Gtk.Align.CENTER)
161                image_id=id_bell
162
163                hbox_description=Gtk.VBox()
164                description=Gtk.Label()
165                description.set_text(self.bells_list[id_bell]["name"])
166                description.set_margin_left(10)
167                description.set_margin_right(5)
168                description.set_margin_top(20)
169                description.set_margin_bottom(1)
170                description.set_width_chars(20)
171                description.set_max_width_chars(20)
172                description.set_xalign(-1)
173                description.set_ellipsize(Pango.EllipsizeMode.START)
174                description.set_name("BELL_DESCRIPTION")
175                description.set_valign(Gtk.Align.START)
176
177                sound=Gtk.Label()
178                sound_path=self.load_sound_path(id_bell)
179                sound.set_text(sound_path)
180                sound.set_margin_left(10)
181                sound.set_margin_right(5)
182                sound.set_margin_bottom(15)
183                sound.set_width_chars(20)
184                sound.set_max_width_chars(20)
185                sound.set_xalign(-1)
186                sound.set_ellipsize(Pango.EllipsizeMode.START)
187                sound.set_name("BELL_SOUND")
188                sound.set_valign(Gtk.Align.START)
189                hbox_description.pack_start(description,False,False,15)
190                hbox_description.pack_start(sound,False,False,1)
191
192                delete=Gtk.Button()
193                delete_image=Gtk.Image.new_from_file(self.delete_image)
194                delete.add(delete_image)
195                delete.set_margin_right(15)
196                delete.set_halign(Gtk.Align.CENTER)
197                delete.set_valign(Gtk.Align.CENTER)
198                delete.set_name("DELETE_ITEM_BUTTON")
199                delete.connect("clicked",self.delete_bell_clicked,hbox)
200                delete.set_tooltip_text(_("Delete bell"))
201                edit=Gtk.Button()
202                edit_image=Gtk.Image.new_from_file(self.edit_image)
203                edit.add(edit_image)
204                edit.set_halign(Gtk.Align.CENTER)
205                edit.set_valign(Gtk.Align.CENTER)
206                edit.set_name("EDIT_ITEM_BUTTON")
207                edit.connect("clicked",self.edit_bell_clicked,hbox)
208                edit.set_tooltip_text(_("Edit bell"))
209
210                switch_button=Gtk.Switch()
211                switch_button.set_halign(Gtk.Align.CENTER)
212                switch_button.set_valign(Gtk.Align.CENTER)
213                switch_button.set_tooltip_text(_("Activate or deactivate bell"))
214               
215                if self.days_on>0:
216                        if self.bells_list[id_bell]["active"]:
217                                switch_button.set_active(True)
218                else:
219                        switch_button.set_sensitive(False)             
220       
221
222                switch_button.connect("notify::active",self.on_switch_activaded,hbox)
223
224                hbox_cron.pack_start(bell_hour,False,False,5)
225                hbox_cron.pack_end(hbox_week,False,False,5)
226                hbox.pack_start(hbox_cron,False,False,5)
227                hbox.pack_start(image,False,False,5)
228                hbox.pack_start(hbox_description,False,False,5)
229                hbox.pack_end(delete,False,False,5)
230                hbox.pack_end(edit,False,False,5)
231                hbox.pack_end(switch_button,False,False,5)
232                hbox.show_all()
233
234                if str(id_bell)==str(args):
235                        hbox.set_name("CHANGE_BOX")
236                else:
237                        hbox.set_name("APP_BOX")
238                self.bell_list_box.pack_start(hbox,False,False,5)
239                self.bell_list_box.queue_draw()
240                hbox.queue_draw()       
241
242        #def new_bell_box       
243               
244        def format_weekdays(self,bell,day):
245               
246                weekdays=bell["weekdays"]
247                day_f=weekdays[str(day)]
248                if day_f:
249                        self.days_on+=1
250                        return("DAY_LABEL_ON")
251                else:
252                        return("DAY_LABEL_OFF") 
253
254        #def format_weekdays           
255
256
257        def load_sound_path(self,bell):
258               
259                path=self.bells_list[bell]["sound"]["path"]
260                option=self.bells_list[bell]["sound"]["option"]
261
262               
263                if option!="url":
264                        if os.path.exists(path):
265                                if option=="file":
266                                        file=os.path.basename(path)
267                                        return file
268                                else:
269                                        return path     
270                        else:
271                                msg=_("ERROR: File or directory not available")
272                                self.core.mainWindow.loading_errors=True
273                                return msg     
274                else:
275                                return path
276
277        #def load_sound_path                   
278               
279        def format_image_size(self,bell):
280
281                image_path=self.bells_list[bell]["image"]["path"]
282                image=Gtk.Image()
283                if os.path.exists(image_path):
284                        image.set_from_file(image_path)
285                else:
286                        image.set_from_file(self.image_nodisp)
287                        self.core.mainWindow.loading_errors=True
288
289                pixbuf=image.get_pixbuf()
290                pixbuf=pixbuf.scale_simple(80,80,GdkPixbuf.InterpType.BILINEAR)
291               
292                return pixbuf
293
294        #def format_image_size 
295
296
297        def delete_bell_clicked(self,button,hbox):
298
299               
300                dialog = Gtk.MessageDialog(None,0,Gtk.MessageType.WARNING, Gtk.ButtonsType.YES_NO, "BELL SCHEDULER")
301                dialog.format_secondary_text(_("Do you want delete the bell?"))
302                response=dialog.run()
303                dialog.destroy()
304               
305                if response==Gtk.ResponseType.YES:
306                        bell_to_remove=hbox.get_children()[0].get_children()[0].id
307                        self.core.mainWindow.bells_info.pop(bell_to_remove)
308                        #self.core.bellmanager.write_conf(self.core.mainWindow.bells_info)
309                        result=self.core.bellmanager.save_conf(self.core.mainWindow.bells_info,bell_to_remove,"remove")
310                        if result['status']:
311                                self.bell_list_box.remove(hbox)
312                                self.core.mainWindow.manage_message(False,14)
313                        else:
314                                self.core.mainWindow.manage_message(True,result['code'])
315
316        #def delete_bell_clicked               
317                       
318               
319        def edit_bell_clicked(self,button,hbox):
320
321                bell_to_edit=hbox               
322                bell_to_edit=bell_to_edit.get_children()[0].get_children()[0].id
323                self.core.editBox.init_form()
324                self.core.editBox.render_form()
325                self.core.editBox.load_values(bell_to_edit)
326                self.core.mainWindow.manage_menubar(False)
327                self.core.mainWindow.manage_down_buttons(True)
328                self.core.mainWindow.stack_opt.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
329                self.core.mainWindow.stack_opt.set_visible_child_name("editBox")               
330
331        #def edit_bell_clicked         
332
333        def on_switch_activaded (self,switch,gparam,hbox):
334
335                bell_to_edit=hbox               
336                bell_to_edit=bell_to_edit.get_children()[0].get_children()[0].id
337                turn_on=False
338
339                if switch.get_active():
340                        self.bells_list[bell_to_edit]["active"]=True
341                        turn_on=True
342                        #self.core.mainWindow.manage_message(False,16)
343                       
344                else:
345                        self.bells_list[bell_to_edit]["active"]=False
346                        #self.core.mainWindow.manage_message(False,17)
347
348                #self.core.bellmanager.write_conf(self.bells_list)     
349                result=self.core.bellmanager.save_conf(self.bells_list,bell_to_edit,"active")
350                if result['status']:
351                        if turn_on:
352                                self.core.mainWindow.manage_message(False,16)
353                        else:
354                                self.core.mainWindow.manage_message(False,17)
355                else:
356                        self.core.mainWindow.manage_message(True,result['code'])                       
357
358        #def on_switch_activaded       
359
360                       
361
362#class BellBox
363
364from . import Core
Note: See TracBrowser for help on using the repository browser.