source: panel-design-manager/trunk/fuentes/panel-design-manager.install/usr/share/panel-design-manager/PanelDesignWindow.py @ 8195

Last change on this file since 8195 was 8195, checked in by hectorgh, 17 months ago

adding postinst files

  • Property svn:executable set to *
File size: 9.5 KB
Line 
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*
3
4import gi
5gi.require_version('Gtk', '3.0')
6from gi.repository import Gtk,GObject, GLib,Gio,Gdk
7
8import threading
9import copy
10import time
11import sys
12
13import signal
14signal.signal(signal.SIGINT, signal.SIG_DFL)
15import N4dManager
16import PanelDesignManager
17
18import gettext
19gettext.textdomain('panel-design-manager')
20_ = gettext.gettext
21
22
23class PanelDesignWindow:
24       
25        DEBUG=True
26       
27        def __init__(self):
28               
29                self.n4dman=N4dManager.N4dManager("server")
30                self.pdm=PanelDesignManager.PanelDesignManager()
31                self.new_dconf=None
32                self.new_conf={}
33                self.new_conf["dconf"]=None
34                self.new_conf["date"]=None
35               
36                self.current_conf={}
37                self.current_conf["dconf"]=None
38                self.current_conf["date"]=None
39                self.current_conf["replicate"]=True
40                self.current_conf["plank"]=True
41                               
42                self.start_gui()
43               
44        #def init
45
46       
47        def dprint(self,data):
48               
49                if PanelManagerWindow.DEBUG:
50                        print("[panel-design-manager] %s"%str(data))
51               
52        #def dprint
53       
54       
55        def start_gui(self):
56               
57                builder=Gtk.Builder()
58                builder.set_translation_domain('panel-design-manager')
59                builder.add_from_file("/usr/share/panel-design-manager/rsrc/panel_manager.ui")
60               
61                self.main_window=builder.get_object("window")
62                self.window_vbox=builder.get_object("window_vbox")
63                self.main_box=builder.get_object("main_box")
64
65                self.enable_design_label=builder.get_object("enable_design_label")
66                self.panel_design_label=builder.get_object("panel_design_label")
67                self.panel_info_label=builder.get_object("panel_info_label")
68                self.show_plank_label=builder.get_object("show_plank_label")
69                self.plank_info_label=builder.get_object("plank_info_label")
70                self.configuration_label=builder.get_object("configuration_label")
71                self.replication_label=builder.get_object("replication_label")
72               
73                self.configuration_image=builder.get_object("configuration_image")
74               
75                self.copy_button=builder.get_object("copy_button")
76                self.options_toolbutton=builder.get_object("options_toolbutton")
77                self.apply_button=builder.get_object("apply_button")
78               
79                self.main_frame=builder.get_object("main_frame")
80               
81                self.enable_design_switch=builder.get_object("enable_design_switch")
82                self.show_plank_switch=builder.get_object("show_plank_switch")
83                self.replication_switch=builder.get_object("replicate_switch")
84               
85                self.login_box=builder.get_object("login_box")
86                self.user_entry=builder.get_object("user_entry")
87                self.password_entry=builder.get_object("password_entry")
88                self.server_ip_entry=builder.get_object("server_ip_entry")
89                self.login_button=builder.get_object("login_button")
90                self.login_msg_label=builder.get_object("login_msg_label")
91               
92                self.changes_dialog=builder.get_object("changes_dialog")
93                self.exit_button=builder.get_object("exit_button")
94                self.cancel_button=builder.get_object("cancel_button")
95                self.changes_label=builder.get_object("changes_label")
96               
97                self.stack=Gtk.Stack()
98                self.stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
99                self.stack.set_transition_duration(200)
100                self.stack.add_titled(self.login_box,"login","Login")
101                self.stack.add_titled(self.main_box,"main","Main Box")
102                self.stack.show_all()
103               
104                self.options_popover=Gtk.Popover()
105                self.options_popover.set_relative_to(self.options_toolbutton)
106               
107               
108                v=Gtk.VBox()
109                self.import_button=Gtk.Button("Import")
110                v.pack_start(self.import_button,True,True,5)
111                self.export_button=Gtk.Button("Export")
112                v.pack_start(self.export_button,True,True,5)
113                               
114                self.options_popover.add(v)
115               
116               
117                self.window_vbox.pack_start(self.stack,True,True,0)
118               
119                self.set_css_info()
120                self.connect_signals()
121               
122                self.login_button.grab_focus()
123                self.apply_button.hide()
124                self.main_window.show()
125                GObject.threads_init()
126                Gtk.main()
127               
128        #def start_gui
129
130
131        def set_css_info(self):
132               
133                self.style_provider=Gtk.CssProvider()
134                f=Gio.File.new_for_path("/usr/share/panel-design-manager/rsrc/style.css")
135                self.style_provider.load_from_file(f)
136                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
137               
138                self.main_window.set_name("WHITE-BACKGROUND")
139                self.enable_design_label.set_name("HEADER-LABEL")
140                self.panel_design_label.set_name("DEFAULT-LABEL")
141                self.show_plank_label.set_name("DEFAULT-LABEL")
142                self.replication_label.set_name("DEFAULT-LABEL")
143               
144                self.changes_label.set_name("DEFAULT-LABEL")
145               
146                self.panel_info_label.set_name("INFO-LABEL")
147                self.plank_info_label.set_name("INFO-LABEL")
148                self.configuration_label.set_name("INFO-LABEL")
149               
150                self.import_button.set_name("BORDERLESS-BUTTON")
151                self.export_button.set_name("BORDERLESS-BUTTON")
152               
153        #def set-css_info       
154
155
156        def connect_signals(self):
157               
158                self.main_window.connect("destroy",Gtk.main_quit)
159                self.main_window.connect("delete_event",self.check_changes)
160                self.enable_design_switch.connect("notify::active",self.enable_design_switch_changed)
161               
162                self.options_toolbutton.connect("clicked",self.options_clicked)
163                self.copy_button.connect("clicked",self.copy_clicked)
164                self.apply_button.connect("clicked",self.apply_clicked)
165               
166                self.import_button.connect("clicked",self.import_clicked)
167                self.export_button.connect("clicked",self.export_clicked)
168               
169               
170                self.login_button.connect("clicked",self.login_clicked)
171                self.user_entry.connect("activate",self.entries_press_event)
172                self.password_entry.connect("activate",self.entries_press_event)
173                self.server_ip_entry.connect("activate",self.entries_press_event)
174               
175                self.changes_dialog.connect("delete_event",self.dialog_closed)
176                self.exit_button.connect("clicked",Gtk.main_quit)
177                self.cancel_button.connect("clicked",self.dialog_closed,None)
178               
179        #def connect_signals
180
181
182        def load_current_configuration(self):
183               
184                self.current_conf=self.n4dman.get_configuration()
185                if self.current_conf!=None:
186                        self.main_frame.set_sensitive(self.current_conf["status"])
187                        self.enable_design_switch.set_active(self.current_conf["status"])
188                        self.show_plank_switch.set_active(self.current_conf["plank"])
189                        self.replication_switch.set_active(self.current_conf["replicate"])
190                        if self.current_conf["date"]!=None:
191                                self.configuration_label.set_text("Last configured on" +":\n"+self.current_conf["date"])
192                                self.configuration_image.set_from_stock(Gtk.STOCK_YES,Gtk.IconSize.BUTTON)
193                       
194               
195        #def load_current_configuration
196       
197        def check_changes(self,widget,event):
198               
199                self.gather_values()
200               
201                if self.new_conf!=self.current_conf:
202                        self.changes_dialog.show()
203                        return True
204               
205                Gtk.main_quit()
206               
207        #def check_changes
208
209
210        def gather_values(self):
211       
212                self.new_conf["status"]=self.enable_design_switch.get_active()
213                self.new_conf["plank"]=self.show_plank_switch.get_active()
214                self.new_conf["replicate"]=self.replication_switch.get_active()
215                if self.new_conf["dconf"]==None:
216                        self.new_conf["dconf"]=self.current_conf["dconf"]
217                if self.new_conf["date"]==None:
218                        self.new_conf["date"]=self.current_conf["date"]
219               
220        #def gather_values
221       
222       
223        def enable_design_switch_changed(self,switch,data):
224               
225                self.main_frame.set_sensitive(switch.get_active())
226               
227        #def enable_design_switch_changed
228       
229
230        def dialog_closed(self,widget,event):
231               
232                self.changes_dialog.hide()
233                return True
234               
235        #def dialog_closed
236
237       
238        def entries_press_event(self,widget):
239               
240                self.login_clicked(None)
241               
242        #def entries_press_event
243       
244       
245        def copy_clicked(self,button):
246               
247                self.dprint("COPY")
248               
249                self.new_conf["dconf"]=self.pdm.get_dconf()
250                self.new_conf["date"]=time.strftime("%d/%m/%Y")
251               
252                self.configuration_label.set_text("Last configured on" +":\n"+self.new_conf["date"])
253                self.configuration_image.set_from_stock(Gtk.STOCK_YES,Gtk.IconSize.BUTTON)
254               
255        #def copy_clicked
256       
257       
258        def apply_clicked(self,button):
259               
260                self.dprint("APPLY")
261                self.gather_values()
262               
263                if self.new_conf["dconf"]!=None:
264                        self.dprint("SAVING...")
265                        ret=self.n4dman.save_configuration(self.new_conf)
266                        self.dprint(ret)
267                        self.current_conf=copy.deepcopy(self.new_conf)
268               
269        #def apply_clicked
270       
271       
272        def login_clicked(self,widget):
273               
274                user=self.user_entry.get_text()
275                password=self.password_entry.get_text()
276                server=self.server_ip_entry.get_text()
277
278                if server!="":
279                        self.n4d_man.set_server(server)
280               
281                self.login_msg_label.set_text(_("Validating user..."))
282               
283                self.login_button.set_sensitive(False)
284                self.validate_user(user,password)
285               
286        #def login_clicked
287       
288       
289        def validate_user(self,user,password):
290               
291                t=threading.Thread(target=self.n4dman.validate_user,args=(user,password,))
292                t.daemon=True
293                t.start()
294                GLib.timeout_add(500,self.validate_user_listener,t)
295               
296        #def validate_user
297       
298       
299        def validate_user_listener(self,thread):
300                       
301                if thread.is_alive():
302                        return True
303                               
304                self.login_button.set_sensitive(True)
305                if not self.n4dman.user_validated:
306                        self.login_msg_label.set_markup("<span foreground='red'>"+_("Invalid user")+"</span>")
307                else:
308                        group_found=False
309                        for g in ["adm","admins"]:
310                                if g in self.n4dman.user_groups:
311                                        group_found=True
312                                        break
313                                       
314                        if group_found:
315                                self.login_msg_label.set_text("")
316                                self.load_current_configuration()
317                                self.stack.set_visible_child_name("main")
318                                self.apply_button.show()
319                               
320                        else:
321                                self.login_msg_label.set_markup("<span foreground='red'>"+_("User must be in 'adm' or 'admins' group")+"</span>")
322                               
323                return False
324                       
325        #def validate_user_listener
326       
327       
328        # ## POPOVER FUNCTIONS ## ########################
329       
330        def options_clicked(self,button):
331               
332                self.options_popover.show_all()
333               
334        #def options_clicked
335       
336       
337        def import_clicked(self,button):
338               
339                print("IMPORT")
340                self.options_popover.hide()
341               
342        #def import_clicked
343       
344       
345        def export_clicked(self,button):
346               
347                print("EXPORT")
348                self.options_popover.hide()
349               
350        #def import_clicked
351       
352        # ############################################
353       
354       
355if __name__=="__main__":
356       
357        pmw=PanelDesignWindow()
358       
Note: See TracBrowser for help on using the repository browser.