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

Last change on this file since 3853 was 3853, checked in by daduve, 2 years ago

Exit aplly changes, new current.core.var

File size: 7.4 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               
126                sys.exit(0)
127               
128        #def check_changes
129       
130       
131        def changes_detected_dialog(self):
132               
133               
134                dialog=Dialog.QuestionDialog(self.main_window,"Changes detected","There are unsaved changes. Do you want to discard them?")
135                response=dialog.run()
136                dialog.destroy()
137               
138                if response== Gtk.ResponseType.OK:
139                        return True
140               
141                return False
142               
143        #def changes_detected_dialog
144               
145       
146       
147        def start_gui(self):
148               
149                GObject.threads_init()
150                Gtk.main()
151               
152        #def start_gui
153       
154        def apt_button_clicked(self,widget):
155               
156                change_child=True
157                if self.stack.get_visible_child_name()=="debs":
158                        selected="deb"
159                if self.stack.get_visible_child_name()=="exes":
160                        selected="sh"
161                       
162                       
163                if self.stack.get_visible_child_name()=="debs":
164                        if self.deb_box.check_changes():
165                                change_child=self.deb_box.changes_detected_dialog()
166                                if change_child:
167                                        self.deb_box.set_info(self.core.var)
168                                       
169                                        for c in self.deb_box.package_list_box.get_children():
170                                                self.deb_box.package_list_box.remove(c)
171                       
172                                        for x in self.core.var[selected]["packages"]:
173                                                self.deb_box.new_package_button("%s"%x)
174                                               
175                if self.stack.get_visible_child_name()=="exes":
176                        if self.exec_box.check_changes():
177                                change_child=self.exec_box.changes_detected_dialog()
178                                if change_child:
179                                        self.exec_box.set_info(self.core.var)
180                                       
181                                        for c in self.exec_box.package_list_box.get_children():
182                                                self.exec_box.package_list_box.remove(c)
183                       
184                                        for x in self.core.var[selected]["packages"]:
185                                                self.exec_box.new_package_button("%s"%x)
186                                       
187                                       
188                                        #self.apt_box.stack.set_visible_child_name("empty
189                if change_child:
190                        self.apt_box.set_info(self.core.var)
191                        self.stack.set_visible_child_name("apt")
192                        self.apt_button.set_name("SELECTED_OPTION_BUTTON")
193                        self.debs_button.set_name("OPTION_BUTTON")
194                        self.exes_button.set_name("OPTION_BUTTON")
195               
196        #def apt_button_clicked
197       
198        def debs_button_clicked(self,widget):
199               
200                change_child=True
201               
202                if self.stack.get_visible_child_name()=="apt":
203                        if self.apt_box.check_changes():
204                                change_child=self.apt_box.changes_detected_dialog()
205                                if change_child:
206                                        self.apt_box.set_info(self.core.var)
207                                        apt_id=self.apt_box.current_id
208                                        self.apt_box.url_entry.set_text(self.core.var["apt"][apt_id]["url"])
209                                       
210                                        for x in self.apt_box.package_list_box.get_children():
211                                                self.apt_box.package_list_box.remove(x)
212                       
213                                        for x in self.core.var["apt"][apt_id]["packages"]:
214                                                self.apt_box.new_package_button("%s"%x)
215                                               
216                if self.stack.get_visible_child_name()=="exes":
217                        if self.exec_box.check_changes():
218                                change_child=self.exec_box.changes_detected_dialog()
219                                if change_child:
220                                        self.exec_box.set_info(self.core.var)
221                                       
222                                        for c in self.exec_box.package_list_box.get_children():
223                                                self.exec_box.package_list_box.remove(c)
224                       
225                                        for x in self.core.var["sh"]["packages"]:
226                                                self.exec_box.new_package_button("%s"%x)
227                       
228                                       
229                                       
230                                        #self.apt_box.stack.set_visible_child_name("empty")
231                       
232                       
233               
234                if change_child:
235                        self.deb_box.set_info(self.core.var)
236                        self.stack.set_visible_child_name("debs")
237                        self.apt_button.set_name("OPTION_BUTTON")
238                        self.debs_button.set_name("SELECTED_OPTION_BUTTON")
239                        self.exes_button.set_name("OPTION_BUTTON")
240               
241        #def debs_button_clicked
242       
243        def exes_button_clicked(self,widget):
244               
245                change_child=True
246               
247                if self.stack.get_visible_child_name()=="apt":
248                        if self.apt_box.check_changes():
249                                change_child=self.apt_box.changes_detected_dialog()
250                                if change_child:
251                                        self.apt_box.set_info(self.core.var)
252                                        apt_id=self.apt_box.current_id
253                                        self.apt_box.url_entry.set_text(self.core.var["apt"][apt_id]["url"])
254                                       
255                                        for x in self.apt_box.package_list_box.get_children():
256                                                self.apt_box.package_list_box.remove(x)
257                       
258                                        for x in self.core.var["apt"][apt_id]["packages"]:
259                                                self.apt_box.new_package_button("%s"%x)
260                                               
261                if self.stack.get_visible_child_name()=="debs":
262                        if self.deb_box.check_changes():
263                                change_child=self.deb_box.changes_detected_dialog()
264                                if change_child:
265                                        self.deb_box.set_info(self.core.var)
266                                       
267                                        for c in self.deb_box.package_list_box.get_children():
268                                                self.deb_box.package_list_box.remove(c)
269                       
270                                        for x in self.core.var["deb"]["packages"]:
271                                                self.deb_box.new_package_button("%s"%x)
272                       
273                                       
274                                       
275                                        #self.apt_box.stack.set_visible_child_name("empty")
276                       
277                       
278               
279                if change_child:
280               
281                        self.stack.set_visible_child_name("exes")
282                        self.apt_button.set_name("OPTION_BUTTON")
283                        self.debs_button.set_name("OPTION_BUTTON")
284                        self.exes_button.set_name("SELECTED_OPTION_BUTTON")
285               
286        #def exes_button_clicked
287       
288#class LliurexRemoteInstaller
289
290
291if __name__=="__main__":
292       
293        lri=LliurexRemoteInstaller()
294        lri.start_gui()
295       
Note: See TracBrowser for help on using the repository browser.