source: lliurex-gdrive/trunk/fuentes/lliurex-gdrive-gui.install/usr/share/lliurex-gdrive/ProfileBox.py @ 3812

Last change on this file since 3812 was 3812, checked in by jrpelegrina, 3 years ago

WIP in gui. Improve create, edit, delete profiles functions

File size: 8.6 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3from gi.repository import Gtk, Pango, GdkPixbuf, Gdk, Gio, GObject,GLib
4
5import copy
6import gettext
7import Core
8
9import Dialog
10import time
11import threading
12import sys
13import os
14
15_=gettext.gettext
16
17
18RSRC="./"
19PROFILE_IMAGE=RSRC+"rsrc/profile.svg"
20FOLDER_IMAGE=RSRC+"rsrc/folder.svg"
21MOUNT_ON_IMAGE=RSRC+"rsrc/mount_on.svg"
22MOUNT_OFF_IMAGE=RSRC+"rsrc/mount_off.svg"
23EDIT_IMAGE=RSRC+"rsrc/edit.svg"
24DELETE_IMAGE=RSRC+"rsrc/trash.svg"
25
26class ProfileBox(Gtk.VBox):
27       
28        def __init__(self):
29               
30                Gtk.VBox.__init__(self)
31               
32                self.core=Core.Core.get_core()
33               
34                builder=Gtk.Builder()
35                ui_path=RSRC + "/rsrc/lliurex-gdrive.ui"
36                builder.add_from_file(ui_path)
37
38                self.main_box=builder.get_object("profile_data_box")
39                self.profiles_list_label=builder.get_object("profiles_list_label")
40                self.profile_list_box=builder.get_object("profile_list_box")
41                self.profile_list_vp=builder.get_object("profile_list_viewport")
42                self.add_new_profile_button=builder.get_object("add_new_profile_button")
43                self.new_profile_window=builder.get_object("new_profile_window")
44                self.profile_label=builder.get_object("profile_label")
45                self.profile_entry=builder.get_object("profile_entry")
46                self.email_label=builder.get_object("email_label")
47                self.email_entry=builder.get_object("email_entry")
48                self.mountpoint_label=builder.get_object("mountpoint_label")
49                self.mountpoint_entry=builder.get_object("mountpoint_entry")
50                self.automount_label=builder.get_object("automount_label")
51                self.automount_entry=builder.get_object("automount_entry")
52                self.accept_add_profile_button=builder.get_object("accept_add_profile_button")
53                self.cancel_add_profile_button=builder.get_object("cancel_add_profile_button")
54               
55               
56               
57                self.pack_start(self.main_box,True,True,0)
58                self.connect_signals()
59                self.set_css_info()
60       
61                self.edition=False
62                #self.current_var=None
63                #self.current_id=None
64               
65                #self.thread=threading.Thread()
66                #self.thread_ret=None
67               
68        #def __init__
69       
70       
71        def set_css_info(self):
72               
73                self.style_provider=Gtk.CssProvider()
74
75                f=Gio.File.new_for_path("lliurex-gdrive.css")
76                self.style_provider.load_from_file(f)
77
78                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
79                self.profiles_list_label.set_name("OPTION_LABEL")
80                self.profile_label.set_name("OPTION_LABEL")
81                self.email_label.set_name("OPTION_LABEL")
82                self.mountpoint_label.set_name("OPTION_LABEL")
83                self.automount_label.set_name("OPTION_LABEL")
84               
85               
86               
87                       
88        #def set-css_info
89       
90               
91        def connect_signals(self):
92
93                self.add_new_profile_button.connect("clicked",self.add_new_profile_button_clicked)
94                self.accept_add_profile_button.connect("clicked",self.accept_add_profile_clicked)
95                self.cancel_add_profile_button.connect("clicked",self.cancel_add_profile_clicked)
96                self.new_profile_window.connect("delete_event",self.hide_window)
97
98
99        #def connect_signals
100       
101        def load_info(self,info):
102               
103                self.profiles_info=info
104
105                for item in self.profiles_info:
106                        profile=item
107                        email=self.profiles_info[item]["email"]
108                        mountpoint=self.profiles_info[item]["mountpoint"]
109                        self.new_profile_button(profile,email,mountpoint)
110                        print self.profiles_info[item]["automount"]
111
112        #def load_info()               
113
114        def hide_window(self,widget,event):
115               
116                widget.hide()
117                return True
118
119        #def hide_window       
120
121        def add_new_profile_button_clicked(self,widget):
122
123                self.profile_entry.set_text("")
124                self.profile_entry.set_editable(True)
125                self.email_entry.set_text("")
126                self.email_entry.set_editable(True)
127                self.mountpoint_entry.set_filename(os.environ["HOME"])
128                self.automount_entry.set_state(False)
129                self.edition=False
130               
131                self.new_profile_window.show()
132
133        #def add_new_profile_button_clicked     
134
135        def delete_profile_clicked(self,button,hbox):
136
137                profile=hbox.get_children()[1].get_text().split("\n")[0]
138                self.profiles_info.pop(profile)
139
140                self.core.LliurexGoogleDriveManager.delete_profile(self.profiles_info,profile)
141                self.profile_list_box.remove(hbox)
142                self.profiles_info=self.core.LliurexGoogleDriveManager.profiles_config.copy()
143
144
145        # def delete_profile_clicked
146               
147
148        def sync_profile_clicked(self,button,hbox):
149
150                profile=hbox.get_children()[1].get_text().split("\n")[0]
151                mountpoint=hbox.get_children()[3].get_text()
152
153                status=self.core.LliurexGoogleDriveManager.sync_profile(profile,mountpoint)
154
155                if status:
156                        mount_image=Gtk.Image.new_from_file(MOUNT_ON_IMAGE)
157                else:
158                        mount_image=Gtk.Image.new_from_file(MOUNT_OFF_IMAGE)
159       
160                hbox.get_children()[4].set_image(mount_image)
161
162        #def mount_profile_clicked
163
164        def edit_profile_clicked(self,button,hbox):
165
166                self.profile_to_edit=hbox               
167                profile=self.profile_to_edit.get_children()[1].get_text().split("\n")[0]
168                self.profile_entry.set_text(profile)
169                self.profile_entry.set_editable(False)
170                email=self.profile_to_edit.get_children()[1].get_text().split("\n")[1]
171                self.email_entry.set_text(email)
172                self.email_entry.set_editable(False)
173                mountpoint=self.profile_to_edit.get_children()[3].get_text()
174                self.mountpoint_entry.set_filename(mountpoint)
175                automount=self.profiles_info[profile]["automount"]
176                self.automount_entry.set_state(automount)
177                self.edition=True
178
179                self.new_profile_window.show() 
180
181        #def edit_profile_clicked
182
183
184        def new_profile_button(self,profile_name,email,mountpoint):
185               
186                hbox=Gtk.HBox()
187                profile_image=Gtk.Image.new_from_file(PROFILE_IMAGE)
188                profile_image.set_margin_left(10)
189                profile_image.set_halign(Gtk.Align.CENTER)
190                profile_image.set_valign(Gtk.Align.CENTER)
191                profile_info="<span font='Roboto'><b>"+profile_name+"</b></span>\n"+"<span font='Roboto'>"+email+"</span>"
192                profile=Gtk.Label()
193                profile.set_markup(profile_info)
194                profile.set_margin_left(10)
195                profile.set_margin_right(20)
196                profile.set_margin_top(21)
197                profile.set_margin_bottom(21)
198                folder_image=Gtk.Image.new_from_file(FOLDER_IMAGE)
199                folder_image.set_margin_left(20)
200                folder_image.set_halign(Gtk.Align.CENTER)
201                folder_image.set_valign(Gtk.Align.CENTER)
202                folder=Gtk.Label()
203                folder.set_text(mountpoint)
204                folder.set_margin_left(10)
205                delete=Gtk.Button()
206                delete_image=Gtk.Image.new_from_file(DELETE_IMAGE)
207                delete.add(delete_image)
208                delete.set_halign(Gtk.Align.CENTER)
209                delete.set_valign(Gtk.Align.CENTER)
210                delete.set_name("DELETE_ITEM_BUTTON")
211                delete.connect("clicked",self.delete_profile_clicked,hbox)
212                delete.set_tooltip_text(_("Delete profile"))
213                edit=Gtk.Button()
214                edit_image=Gtk.Image.new_from_file(EDIT_IMAGE)
215                edit.add(edit_image)
216                edit.set_halign(Gtk.Align.CENTER)
217                edit.set_valign(Gtk.Align.CENTER)
218                edit.set_name("EDIT_ITEM_BUTTON")
219                edit.connect("clicked",self.edit_profile_clicked,hbox)
220                edit.set_tooltip_text(_("Edit profile"))
221                mount=Gtk.Button()
222               
223                status=self.core.LliurexGoogleDriveManager.check_mountpoint_status(mountpoint)
224                if status["status"]:
225                        mount_image=Gtk.Image.new_from_file(MOUNT_ON_IMAGE)
226                else:
227                        mount_image=Gtk.Image.new_from_file(MOUNT_OFF_IMAGE)
228       
229                mount.add(mount_image)
230                mount.set_halign(Gtk.Align.CENTER)
231                mount.set_valign(Gtk.Align.CENTER)
232                mount.set_name("MOUNT_ITEM_BUTTON")
233                mount.connect("clicked",self.sync_profile_clicked,hbox)
234                mount.set_tooltip_text(_("Mount profile"))
235                hbox.pack_start(profile_image,False,False,0)
236                hbox.pack_start(profile,False,False,0)
237                hbox.pack_start(folder_image,False,False,0)
238                hbox.pack_start(folder,False,False,0)
239                hbox.pack_end(delete,False,False,10)
240                hbox.pack_end(edit,False,False,10)
241                hbox.pack_end(mount,False,False,10)
242                hbox.show_all()
243                hbox.set_name("PROFILE_BOX")
244                self.profile_list_box.pack_start(hbox,False,False,5)
245                self.profile_list_box.queue_draw()
246                hbox.queue_draw()
247               
248        #def new_profile_button
249
250        def accept_add_profile_clicked(self,widget):
251               
252                profile=self.profile_entry.get_text()
253                profile=profile.strip(" ")
254                email=self.email_entry.get_text()
255                email=email.strip(" ")
256                mountpoint=self.mountpoint_entry.get_filename()
257                automount=self.automount_entry.get_state()
258
259                self.profiles_info[profile]={}
260                self.profiles_info[profile]["email"]=email
261                self.profiles_info[profile]["mountpoint"]=mountpoint
262                self.profiles_info[profile]["automount"]=automount
263
264
265                if not self.edition:
266                        result=self.core.LliurexGoogleDriveManager.create_profile(self.profiles_info,profile)
267                       
268                        if result:
269                                self.new_profile_button(profile,email,mountpoint)
270                                self.profiles_info=self.core.LliurexGoogleDriveManager.profiles_config.copy()
271               
272                else:
273                        result=self.core.LliurexGoogleDriveManager.edit_profile(self.profiles_info,profile)
274                       
275                        if result:
276                                self.profile_to_edit.get_children()[3].set_text(mountpoint)
277                                self.profiles_info=self.core.LliurexGoogleDriveManager.profiles_config.copy()
278
279               
280               
281                self.new_profile_window.hide()
282
283        #def accept_add_profile_clickedef       
284
285        def cancel_add_profile_clicked(self,widget):
286               
287                self.new_profile_window.hide()
288
289       
290        #def cancel_add_profile_clicked
291               
292#class profilebox
Note: See TracBrowser for help on using the repository browser.