aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Gallo <tonicucoz@gmail.com>2011-04-14 00:33:49 +0000
committerAntonio Gallo <tonicucoz@gmail.com>2011-04-14 00:33:49 +0000
commit0e2f0ad8b748e10ba19315cfeeae6ac6654ffb75 (patch)
tree0001c492fe49044595963d6586a6129fec70893f
parenta22dc9e110c57b8335412f29dbdd8f1a7770dd4e (diff)
h-client:implemented a feature to help the user to select the distro
-rw-r--r--h-client/hclient.py162
-rw-r--r--h-client/hlibrary.py43
2 files changed, 146 insertions, 59 deletions
diff --git a/h-client/hclient.py b/h-client/hclient.py
index 9a22bb2..1dc6135 100644
--- a/h-client/hclient.py
+++ b/h-client/hclient.py
@@ -214,6 +214,7 @@ class hclient:
self.client.setNode(self.serverEntry.get_text())
self.updateStatus()
self.synchronize(None)
+ self.prefWindow.destroy()
#close the preferences window
def closePref(self,widget):
@@ -269,10 +270,7 @@ class hclient:
def closeLicenseNoticeWindow(self,widget):
self.licenseNoticeWindow.destroy()
- #close the info window
- def closeInfoWindowWindow(self,widget):
- self.infoWindow.destroy()
-
+ #open the dialog with the software info
def openInfoWindow(self,widget):
about = gtk.AboutDialog()
about.set_program_name("h-node client")
@@ -284,57 +282,132 @@ class hclient:
about.run()
about.destroy()
- #start the window containing the license notice
- def openLicenseNoticeWindow(self,widget):
- #window for preferences
- self.licenseNoticeWindow = gtk.Window(gtk.WINDOW_TOPLEVEL)
- self.licenseNoticeWindow.set_title("license notice")
- self.licenseNoticeWindow.set_position(gtk.WIN_POS_CENTER)
- self.licenseNoticeWindow.set_icon_from_file("img/icon.png")
- self.licenseNoticeWindow.set_size_request(300, -1)
+ #close the window containing the list of allowed distribusions
+ def closeDistroHelperWindow(self,widget):
+ self.distroHelperWindow.destroy()
- vbox = gtk.VBox(False, 0)
- vbox.set_border_width(10)
- self.licenseNoticeWindow.add(vbox)
-
- result = self.client.getLicenseNotice();
- #print result
- ##if result
+ #update the distribution entry
+ def setDistributions(self,widget):
+ self.currentDevice.setDistributions(self._tempDistributions)
+ self.distributionEntry.set_text(self.currentDevice.createDistroEntry())
+ self.distroHelperWindow.destroy()
- #description input
- sw = gtk.ScrolledWindow()
- #sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
- sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
+ #add a distrocode to the self._tempDistributions property
+ def addTempDistribution(self,widget,data):
+ if widget.get_active():
+ self._tempDistributions.append(data)
+ else:
+ try:
+ del self._tempDistributions[self._tempDistributions.index(data)]
+ except:
+ pass
+
+ #print self._tempDistributions
- noticeText = gtk.TextView()
- #noticeText.set_decorated(False)
- noticeText.set_editable(False)
- #noticeText.modify_base(gtk.STATE_NORMAL, gtk.gdk.Color(50,100,150) )
- noticeText.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse("#a3a3a3") )
- noticeText.set_wrap_mode(gtk.WRAP_CHAR)
+ #window containing the list of allowed distribusions
+ def openDistroHelperWindow(self,widget,data,a = None,b = None):
+
+ #used to temporarily save the list of distributions from the distribution entry or from the distribution checkButtons
+ self._tempDistributions = []
+
+ self.distroHelperWindow = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ self.distroHelperWindow.set_title("choose the distribution")
+ self.distroHelperWindow.set_position(gtk.WIN_POS_CENTER)
+ self.distroHelperWindow.set_icon_from_file("img/icon.png")
+ self.distroHelperWindow.set_size_request(300, -1)
+ self.distroHelperWindow.set_transient_for(self.window)
+ self.distroHelperWindow.set_modal(True)
- textbuffer = gtk.TextBuffer(table=None)
- textbuffer.set_text(result)
- noticeText.set_buffer(textbuffer)
+ self.vboxCh = gtk.VBox(False, 0)
+ self.vboxCh.set_border_width(10)
+ self.distroHelperWindow.add(self.vboxCh)
- sw.add(noticeText)
- #sw.show()
- #sw.show_all()
+ #fill the self._tempDistributions list with the distros already contained inside the distribution entry
+ checkedDistros = self.distributionEntry.get_text().split(',')
+
+ for distro in checkedDistros:
+ if distro != '' and self.client.distroIsAllowed(distro.lstrip().rstrip()):
+ self._tempDistributions.append(distro.lstrip().rstrip())
- vbox.pack_start(sw, False, True, 5)
+ #create and pack the checkButtons
+ for distroCode,distroLabel in self.client.allowedDistros.iteritems():
+ chbutton = gtk.CheckButton(distroLabel)
+ if distroCode in self._tempDistributions:
+ chbutton.set_active(True)
+ chbutton.connect("clicked", self.addTempDistribution,distroCode)
+ self.vboxCh.pack_start(chbutton, True, True, 2)
hbox = gtk.HBox(False, 0)
hbox.set_border_width(10)
applyButton = gtk.Button(stock=gtk.STOCK_APPLY)
closeButton = gtk.Button(stock=gtk.STOCK_CANCEL)
- applyButton.connect("clicked", self.submit)
- closeButton.connect("clicked", self.closeLicenseNoticeWindow)
+ applyButton.connect("clicked", self.setDistributions)
+ closeButton.connect("clicked", self.closeDistroHelperWindow)
hbox.pack_end(applyButton, False, True, 0)
hbox.pack_end(closeButton, False, True, 3)
- vbox.pack_start(hbox, False, True, 0)
+ self.vboxCh.pack_start(hbox, False, True, 0)
+
+ self.distroHelperWindow.show_all()
- self.licenseNoticeWindow.show_all()
+ #start the window containing the license notice
+ def openLicenseNoticeWindow(self,widget):
+ result = self.client.getLicenseNotice();
+
+ if result:
+ #window for preferences
+ self.licenseNoticeWindow = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ self.licenseNoticeWindow.set_title("license notice")
+ self.licenseNoticeWindow.set_position(gtk.WIN_POS_CENTER)
+ self.licenseNoticeWindow.set_icon_from_file("img/icon.png")
+ self.licenseNoticeWindow.set_size_request(300, -1)
+ self.licenseNoticeWindow.set_transient_for(self.window)
+ self.licenseNoticeWindow.set_modal(True)
+
+ vbox = gtk.VBox(False, 0)
+ vbox.set_border_width(10)
+ self.licenseNoticeWindow.add(vbox)
+
+
+ #print result
+ ##if result
+
+ #description input
+ sw = gtk.ScrolledWindow()
+ #sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+ sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
+
+ noticeText = gtk.TextView()
+ #noticeText.set_decorated(False)
+ noticeText.set_editable(False)
+ #noticeText.modify_base(gtk.STATE_NORMAL, gtk.gdk.Color(50,100,150) )
+ noticeText.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse("#a3a3a3") )
+
+ noticeText.set_wrap_mode(gtk.WRAP_CHAR)
+
+ textbuffer = gtk.TextBuffer(table=None)
+ textbuffer.set_text(result)
+ noticeText.set_buffer(textbuffer)
+
+ sw.add(noticeText)
+ #sw.show()
+ #sw.show_all()
+
+ vbox.pack_start(sw, False, True, 5)
+
+ hbox = gtk.HBox(False, 0)
+ hbox.set_border_width(10)
+ applyButton = gtk.Button(stock=gtk.STOCK_APPLY)
+ closeButton = gtk.Button(stock=gtk.STOCK_CANCEL)
+ applyButton.connect("clicked", self.submit)
+ closeButton.connect("clicked", self.closeLicenseNoticeWindow)
+ hbox.pack_end(applyButton, False, True, 0)
+ hbox.pack_end(closeButton, False, True, 3)
+ vbox.pack_start(hbox, False, True, 0)
+
+ self.licenseNoticeWindow.show_all()
+ else:
+ self.printErrors()
#start the login window
@@ -346,6 +419,8 @@ class hclient:
self.loginWindow.set_position(gtk.WIN_POS_CENTER)
self.loginWindow.set_icon_from_file("img/icon.png")
self.loginWindow.set_size_request(300, -1)
+ self.loginWindow.set_transient_for(self.window)
+ self.loginWindow.set_modal(True)
self.window.connect("delete_event", self.delete_event_login)
@@ -408,6 +483,8 @@ class hclient:
self.prefWindow.set_position(gtk.WIN_POS_CENTER)
self.prefWindow.set_icon_from_file("img/icon.png")
self.prefWindow.set_size_request(300, -1)
+ self.prefWindow.set_transient_for(self.window)
+ self.prefWindow.set_modal(True)
vbox = gtk.VBox(False, 0)
@@ -723,13 +800,16 @@ class hclient:
### distribution
#distribution label
- self.distributionLabel = gtk.Label("Distribution:")
+ self.distributionLabel = gtk.Label("Distribution used: ")
self.distributionLabel.set_alignment(0.95,0.5)
#add the label
self.rightTable.attach(self.distributionLabel, 0, 1, 4, 5)
#distribution input
self.distributionEntry = gtk.Entry()
+ self.distributionEntry.connect("button-press-event", self.openDistroHelperWindow)
+
+
#add the input
self.rightTable.attach(self.distributionEntry, 1, 2, 4, 5)
diff --git a/h-client/hlibrary.py b/h-client/hlibrary.py
index c86c66c..c55fb4a 100644
--- a/h-client/hlibrary.py
+++ b/h-client/hlibrary.py
@@ -41,24 +41,6 @@ class Device(object):
#list of options for the howItWorks entry
_howItWorksOptions = ['yes','no']
- #_allowedDistros = {
- #'blag_90001' : 'BLAG 90001',
- #'blag_120000' : 'BLAG 120000',
- #'dragora_1_1' : 'Dragora 1.1',
- #'dragora_2_0' : 'Dragora 2.0 Ardi',
- #'dynebolic_2_5_2' : 'Dynebolic 2.5.2 DHORUBA',
- #'gnewsense_2_3' : 'gNewSense 2.3 Deltah',
- #'gnewsense_3_0' : 'gNewSense 3.0 Metad',
- #'musix_2_0' : 'Musix GNU+Linux 2.0 R0',
- #'trisquel_3_5' : 'Trisquel 3.5 Awen',
- #'trisquel_4_0' : 'Trisquel 4.0 Taranis',
- #'trisquel_4_5' : 'Trisquel 4.5 Slaine',
- #'ututo_xs_2009' : 'UTUTO XS 2009',
- #'ututo_xs_2010' : 'UTUTO XS 2010',
- #'venenux_0_8' : 'VENENUX 0.8',
- #'venenux_0_8_2' : 'VENENUX-EC 0.8.2'
- #}
-
#allowed years of commercialization
_years = [
'not-specified',
@@ -361,6 +343,24 @@ class Mycurl:
class Client:
+ allowedDistros = {
+ 'blag_90001' : 'BLAG 90001',
+ 'blag_120000' : 'BLAG 120000',
+ 'dragora_1_1' : 'Dragora 1.1',
+ 'dragora_2_0' : 'Dragora 2.0 Ardi',
+ 'dynebolic_2_5_2' : 'Dynebolic 2.5.2 DHORUBA',
+ 'gnewsense_2_3' : 'gNewSense 2.3 Deltah',
+ 'gnewsense_3_0' : 'gNewSense 3.0 Metad',
+ 'musix_2_0' : 'Musix GNU+Linux 2.0 R0',
+ 'trisquel_3_5' : 'Trisquel 3.5 Awen',
+ 'trisquel_4_0' : 'Trisquel 4.0 Taranis',
+ 'trisquel_4_5' : 'Trisquel 4.5 Slaine',
+ 'ututo_xs_2009' : 'UTUTO XS 2009',
+ 'ututo_xs_2010' : 'UTUTO XS 2010',
+ 'venenux_0_8' : 'VENENUX 0.8',
+ 'venenux_0_8_2' : 'VENENUX-EC 0.8.2'
+ }
+
devices = {}
_status = True
@@ -384,6 +384,13 @@ class Client:
def __init__(self,url = ''):
self.request = Mycurl(url)
+ #check if a distro code is allowed or not
+ def distroIsAllowed(self,distroCode):
+ allowedDistroCodes = self.allowedDistros.keys()
+ if distroCode in allowedDistroCodes:
+ return True
+ return False
+
def getNode(self):
return self.request.getDomain()