source: lliurex-remote-installer/trunk/fuentes/lliurex-remote-installer-gui.install/usr/share/lliurex-remote-installer/LliurexRemoteInstaller.py @ 3861

Last change on this file since 3861 was 3861, checked in by daduve, 3 years ago

Enter dialog in exit

File size: 8.3 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3from gi.repository import Gtk, Pango, GdkPixbuf, Gdk, Gio, GObject,GLib
4
5
6import gettext
7import signal
8
9import Core
10import Dialog
11import sys
12
13signal.signal(signal.SIGINT, signal.SIG_DFL)
14_=gettext.gettext
15
16
17RSRC="./"
18
19
20
21class LliurexRemoteInstaller:
22       
23       
24        #VALORES DE LOS DICCIONARIOS
25        DEB='deb'
26        APT='apt'
27        SH='sh'
28        LIST='lista'
29        URL='url'
30       
31        def __init__(self):
32               
33                self.core=Core.Core.get_core()
34               
35        #def init
36       
37        def load_gui(self):
38               
39                builder=Gtk.Builder()
40                ui_path=RSRC + "lliurex-remote-installer.ui"
41                builder.add_from_file(ui_path)
42               
43                self.main_window=builder.get_object("main_window")
44                self.main_box=builder.get_object("main_box")
45                self.apt_button=builder.get_object("apt_button")
46                self.debs_button=builder.get_object("debs_button")
47                self.exes_button=builder.get_object("exes_button")
48               
49                self.stack=Gtk.Stack()
50                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_DOWN)
51                self.stack.set_transition_duration(500)
52                self.main_box.pack_start(self.stack,True,True,5)
53               
54               
55                # Add components
56               
57                self.apt_box=self.core.apt_box
58                self.stack.add_titled(self.apt_box,"apt","Apt")
59                self.deb_box=self.core.deb_box
60                self.stack.add_titled(self.deb_box,"debs","Debs")
61                self.exec_box=self.core.exec_box
62                self.stack.add_titled(self.exec_box,"exes","Executables")
63               
64               
65
66                self.set_css_info()
67                self.connect_signals()
68                self.load_values()
69               
70                self.main_window.show_all()
71               
72        #def load_gui
73       
74        def load_values(self):
75               
76               
77               
78                self.core.n4d.test_var()
79                var_init=self.core.n4d.get_variable()
80                if var_init[0]:
81                        variable=var_init[1]
82                else:
83                        pass
84                        # #### LA VARIABLE NO EXISTE DEBEMOS DE INCIALIZARLA INICIALMENTE PARA QUE NO DE ERROR, AUNQUE CREO QUE ESO YA LO HACE LA API.
85               
86                var={}
87                var=variable
88               
89                self.apt_box.set_info(var)
90                self.deb_box.set_info(var)
91                self.exec_box.set_info(var)
92               
93               
94        #def load_values
95       
96        def set_css_info(self):
97               
98                self.style_provider=Gtk.CssProvider()
99                f=Gio.File.new_for_path("lliurex-remote-installer.css")
100                self.style_provider.load_from_file(f)
101                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
102                self.main_window.set_name("WINDOW")
103               
104                self.apt_button.set_name("SELECTED_OPTION_BUTTON")
105                self.debs_button.set_name("OPTION_BUTTON")
106                self.exes_button.set_name("OPTION_BUTTON")
107                       
108        #def set-css_info
109       
110        def connect_signals(self):
111               
112                self.main_window.connect("destroy",Gtk.main_quit)
113                self.apt_button.connect("clicked",self.apt_button_clicked)
114                self.debs_button.connect("clicked",self.debs_button_clicked)
115                self.exes_button.connect("clicked",self.exes_button_clicked)
116                self.main_window.connect("delete_event",self.check_changes)
117               
118        #def connect_signals
119       
120        def check_changes(self,widget,event):
121               
122                if self.core.current_var!=None and self.core.current_var != self.core.var:
123                        if not self.changes_detected_dialog():
124                                return True
125                #Listamos lo que se ha publicado:
126                COMMENT=[]
127               
128                apt_list=False
129                list_apt_pub=[]
130                for id in self.core.var['apt']:
131                        if self.core.var['apt'][id]['packages'] not in [None,"",[]]:
132                                apt_list=True
133                                list_apt_pub.append(self.core.var['apt'][id]['packages'])
134                print COMMENT
135                if apt_list:
136                        COMMENT.append("APT:")
137                        COMMENT=COMMENT+list_apt_pub
138               
139                if self.core.var['deb']['packages'] not in [None,"",[]]:
140                        COMMENT.append("DEB:")
141                        COMMENT=COMMENT+self.core.var['deb']['packages']
142               
143                if self.core.var['sh']['packages'] not in [None,"",[]]:
144                        COMMENT.append("EXECUTABLES:")
145                        COMMENT=COMMENT+self.core.var['sh']['packages']
146                       
147                if COMMENT not in [None,"",[]]:
148                        COMMENT='\n'.join(COMMENT)
149                        dialog=Dialog.InfoDialog(self.main_window,"LliureX Remote Installer Resume","You are published this list to install:\n%s"%(COMMENT))
150                        response=dialog.run()
151                        dialog.destroy()
152               
153               
154                sys.exit(0)
155               
156        #def check_changes
157       
158       
159        def changes_detected_dialog(self):
160               
161               
162                dialog=Dialog.QuestionDialog(self.main_window,"Changes detected","There are unsaved changes. Do you want to discard them?")
163                response=dialog.run()
164                dialog.destroy()
165               
166                if response== Gtk.ResponseType.OK:
167                        return True
168               
169                return False
170               
171        #def changes_detected_dialog
172               
173       
174       
175        def start_gui(self):
176               
177                GObject.threads_init()
178                Gtk.main()
179               
180        #def start_gui
181       
182        def apt_button_clicked(self,widget):
183               
184                change_child=True
185                if self.stack.get_visible_child_name()=="debs":
186                        selected="deb"
187                if self.stack.get_visible_child_name()=="exes":
188                        selected="sh"
189                       
190                       
191                if self.stack.get_visible_child_name()=="debs":
192                        if self.deb_box.check_changes():
193                                change_child=self.deb_box.changes_detected_dialog()
194                                if change_child:
195                                        self.deb_box.set_info(self.core.var)
196                                       
197                                        for c in self.deb_box.package_list_box.get_children():
198                                                self.deb_box.package_list_box.remove(c)
199                       
200                                        for x in self.core.var[selected]["packages"]:
201                                                self.deb_box.new_package_button("%s"%x)
202                                               
203                if self.stack.get_visible_child_name()=="exes":
204                        if self.exec_box.check_changes():
205                                change_child=self.exec_box.changes_detected_dialog()
206                                if change_child:
207                                        self.exec_box.set_info(self.core.var)
208                                       
209                                        for c in self.exec_box.package_list_box.get_children():
210                                                self.exec_box.package_list_box.remove(c)
211                       
212                                        for x in self.core.var[selected]["packages"]:
213                                                self.exec_box.new_package_button("%s"%x)
214                                       
215                                       
216                                        #self.apt_box.stack.set_visible_child_name("empty
217                if change_child:
218                        self.apt_box.set_info(self.core.var)
219                        self.stack.set_visible_child_name("apt")
220                        self.apt_button.set_name("SELECTED_OPTION_BUTTON")
221                        self.debs_button.set_name("OPTION_BUTTON")
222                        self.exes_button.set_name("OPTION_BUTTON")
223               
224        #def apt_button_clicked
225       
226        def debs_button_clicked(self,widget):
227               
228                change_child=True
229               
230                if self.stack.get_visible_child_name()=="apt":
231                        if self.apt_box.check_changes():
232                                change_child=self.apt_box.changes_detected_dialog()
233                                if change_child:
234                                        self.apt_box.set_info(self.core.var)
235                                        apt_id=self.apt_box.current_id
236                                        self.apt_box.url_entry.set_text(self.core.var["apt"][apt_id]["url"])
237                                       
238                                        for x in self.apt_box.package_list_box.get_children():
239                                                self.apt_box.package_list_box.remove(x)
240                       
241                                        for x in self.core.var["apt"][apt_id]["packages"]:
242                                                self.apt_box.new_package_button("%s"%x)
243                                               
244                if self.stack.get_visible_child_name()=="exes":
245                        if self.exec_box.check_changes():
246                                change_child=self.exec_box.changes_detected_dialog()
247                                if change_child:
248                                        self.exec_box.set_info(self.core.var)
249                                       
250                                        for c in self.exec_box.package_list_box.get_children():
251                                                self.exec_box.package_list_box.remove(c)
252                       
253                                        for x in self.core.var["sh"]["packages"]:
254                                                self.exec_box.new_package_button("%s"%x)
255                       
256                                       
257                                       
258                                        #self.apt_box.stack.set_visible_child_name("empty")
259                       
260                       
261               
262                if change_child:
263                        self.deb_box.set_info(self.core.var)
264                        self.stack.set_visible_child_name("debs")
265                        self.apt_button.set_name("OPTION_BUTTON")
266                        self.debs_button.set_name("SELECTED_OPTION_BUTTON")
267                        self.exes_button.set_name("OPTION_BUTTON")
268               
269        #def debs_button_clicked
270       
271        def exes_button_clicked(self,widget):
272               
273                change_child=True
274               
275                if self.stack.get_visible_child_name()=="apt":
276                        if self.apt_box.check_changes():
277                                change_child=self.apt_box.changes_detected_dialog()
278                                if change_child:
279                                        self.apt_box.set_info(self.core.var)
280                                        apt_id=self.apt_box.current_id
281                                        self.apt_box.url_entry.set_text(self.core.var["apt"][apt_id]["url"])
282                                       
283                                        for x in self.apt_box.package_list_box.get_children():
284                                                self.apt_box.package_list_box.remove(x)
285                       
286                                        for x in self.core.var["apt"][apt_id]["packages"]:
287                                                self.apt_box.new_package_button("%s"%x)
288                                               
289                if self.stack.get_visible_child_name()=="debs":
290                        if self.deb_box.check_changes():
291                                change_child=self.deb_box.changes_detected_dialog()
292                                if change_child:
293                                        self.deb_box.set_info(self.core.var)
294                                       
295                                        for c in self.deb_box.package_list_box.get_children():
296                                                self.deb_box.package_list_box.remove(c)
297                       
298                                        for x in self.core.var["deb"]["packages"]:
299                                                self.deb_box.new_package_button("%s"%x)
300                       
301                                       
302                                       
303                                        #self.apt_box.stack.set_visible_child_name("empty")
304                       
305                       
306               
307                if change_child:
308               
309                        self.stack.set_visible_child_name("exes")
310                        self.apt_button.set_name("OPTION_BUTTON")
311                        self.debs_button.set_name("OPTION_BUTTON")
312                        self.exes_button.set_name("SELECTED_OPTION_BUTTON")
313               
314        #def exes_button_clicked
315       
316#class LliurexRemoteInstaller
317
318
319if __name__=="__main__":
320       
321        lri=LliurexRemoteInstaller()
322        lri.start_gui()
323       
Note: See TracBrowser for help on using the repository browser.