# -*- coding: utf-8 -*- # h-client, a python library to manage the database of an h-source node # Copyright (C) 2011 Antonio Gallo # # # h-client is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # h-client is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with h-client. If not, see . import pygtk pygtk.require('2.0') import gtk from hlibrary import * class hclient: _years = [ 'not-specified', '2011', '2010', '2009', '2008', '2007', '2006', '2005', '2004', '2003', '2002', '2001', '2000', '1999', '1998', '1997', '1996', '1995', '1994', '1993', '1992' ] #the device that has to be displaced in the right window currentDevice = '' #set the device that has to be displaced in the right window def setCurrentDevice(self, selection): model, path = selection.get_selected() if path: #get the code: code = model.get_value(path, 1) #set the current device self.currentDevice = code #get the device if code in self.client.devices: device = self.client.devices[code][0] #set the model entry self.setModelEntry(device) #set the vendorid:productid entry self.setVendorIdProductIDCode(device) #set the commercialization year self.setCommYearEntry(device) #set the interface self.setInterfaceEntry(device) #set the model name entry #device: a device object (a subclass of Device - see hlibrary.py) def setModelEntry(self,device): self.modelNameEntry.set_text(device.getModel()) #set the vendorid:productid entry #device: a device object (a subclass of Device - see hlibrary.py) def setVendorIdProductIDCode(self,device): self.vendorIdProductIdEntry.set_text(device.getVendorId() + ':' + device.getProductId()) #set the year of commercialization #device: a device object (a subclass of Device - see hlibrary.py) def setCommYearEntry(self,device): if device.getYear() in self._years: index = self._years.index(device.getYear()) else: index = 0 self.commYearCombo.set_active(index) #set the interface #device: a device object (a subclass of Device - see hlibrary.py) def setInterfaceEntry(self,device): self.interfaceCombo.get_model().clear() for interface in device.getInterfaces(): self.interfaceCombo.append_text(interface) if device.getInterface() in device.getInterfaces(): index = device.getInterfaces().index(device.getInterface()) else: index = 0 self.interfaceCombo.set_active(index) # another callback def delete_event(self, widget, event, data=None): gtk.main_quit() return False def __init__(self): #start the client object self.client = Client('h-source') self.client.createDevices() # Create a new window self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) # This is a new call, which just sets the title of our # new window to "Hello Buttons!" self.window.set_title("h-client") self.window.set_icon_from_file("img/icon.png") #self.window.set_size_request(200, 100) # Here we just set a handler for delete_event that immediately # exits GTK. self.window.connect("delete_event", self.delete_event) # Sets the border width of the window. self.window.set_border_width(3) self.centerWindow = gtk.HBox(False, 0) #add the bottom box self.window.add(self.centerWindow) ## build the left window ## #start the left vertical box self.leftWindow = gtk.VBox(False, 0) self.leftWindow.set_border_width(5) #self.lframe = gtk.Frame("Your devices") self.centerWindow.pack_start(self.leftWindow, True, True, 0) #self.centerWindow.pack_start(self.rframe, True, True, 5) #self.leftWindow.pack_start(gtk.Label("Your hardware:"), False, True, 5) self.tree = gtk.TreeView() languages = gtk.TreeViewColumn() languages.set_title("Your PCI and USB devices") cell = gtk.CellRendererText() languages.pack_start(cell, True) languages.add_attribute(cell, "text", 0) self.treestore = gtk.TreeStore(str,str) it = self.treestore.append(None, ["PCI Devices",""]) for key,dev in self.client.devices.iteritems(): if key[0] == 'p': self.treestore.append(it, [dev[0].getType(),key]) selection = self.tree.get_selection() selection.connect('changed', self.setCurrentDevice) self.tree.append_column(languages) self.tree.set_model(self.treestore) self.leftWindow.pack_start(self.tree, False, True, 5) self.leftWindow.show_all() #self.lframe.add(self.leftWindow) self.rightTable = gtk.Table(8, 2, True) #create the entries ### model #model name label self.modelNameLabel = gtk.Label("Model name:") #add the label self.rightTable.attach(self.modelNameLabel, 0, 1, 0, 1) #model name input self.modelNameEntry = gtk.Entry() #add the input to the table self.rightTable.attach(self.modelNameEntry, 1, 2, 0, 1) ### vendorid:productid #vendorid:productid label self.vendorIdProductIdLabel = gtk.Label("VendorID:productID code:") #add the label self.rightTable.attach(self.vendorIdProductIdLabel, 0, 1, 1, 2) #vendorid:productid input self.vendorIdProductIdEntry = gtk.Entry() #set as not editable self.vendorIdProductIdEntry.set_editable(False) #add the input to the table self.rightTable.attach(self.vendorIdProductIdEntry, 1, 2, 1, 2) ###year of commercialization #year of commercialization label self.commYearLabel = gtk.Label("Year of commercialization:") #add the label self.rightTable.attach(self.commYearLabel, 0, 1, 2, 3) self.commYearCombo = gtk.combo_box_new_text() for item in self._years: self.commYearCombo.append_text(item) self.commYearCombo.set_active(0) #add the combo to the table self.rightTable.attach(self.commYearCombo, 1, 2, 2, 3) ###interface #interface label self.interfaceLabel = gtk.Label("Interface:") #add the label self.rightTable.attach(self.interfaceLabel, 0, 1, 3, 4) self.interfaceCombo = gtk.combo_box_new_text() self.interfaceCombo.append_text('not-specified') self.interfaceCombo.set_active(0) #add the combo to the table self.rightTable.attach(self.interfaceCombo, 1, 2, 3, 4) ### distribution #distribution label self.distributionLabel = gtk.Label("Distribution:") #add the label self.rightTable.attach(self.distributionLabel, 0, 1, 4, 5) #distribution input self.distributionEntry = gtk.Entry() #add the input self.rightTable.attach(self.distributionEntry, 1, 2, 4, 5) ### kernel #kernel label self.kernelLabel = gtk.Label("Kernel libre version:") #add the label self.rightTable.attach(self.kernelLabel, 0, 1, 5, 6) #kernel input self.kernelEntry = gtk.Entry() #add the input self.rightTable.attach(self.kernelEntry, 1, 2, 5, 6) ###how it works #how it works label self.howItWorksLabel = gtk.Label("How does it work?") #add the label self.rightTable.attach(self.howItWorksLabel, 0, 1, 6, 7) self.howItWorksLabelCombo = gtk.combo_box_new_text() #add the combo to the table self.rightTable.attach(self.howItWorksLabelCombo, 1, 2, 6, 7) ### driver #driver label self.driverLabel = gtk.Label("Free driver used:") #add the label self.rightTable.attach(self.driverLabel, 0, 1, 7, 8) #driver input self.driverEntry = gtk.Entry() #add the input self.rightTable.attach(self.driverEntry, 1, 2, 7, 8) ### description #description label self.descriptionLabel = gtk.Label("Description:") #description input sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.descriptionText = textview = gtk.TextView() self.descriptionText.set_wrap_mode(gtk.WRAP_CHAR) sw.add(self.descriptionText) sw.show() sw.show_all() ##add the input #self.rightTable.attach(sw, 1, 2, 7, 8) self.rightTable.show_all() #start the left vertical box self.rightWindow = gtk.VBox(False, 0) self.rightWindow.pack_start(self.rightTable, False, True, 10) self.rightWindow.pack_start(self.descriptionLabel, False, True, 3) self.rightWindow.pack_start(sw, False, True, 0) self.rightWindow.show() self.rightWindow.show_all() self.centerWindow.pack_start(self.rightWindow, True, True, 5) #self.rframe.add(self.rightWindow) #self.rframe.set_border_width(30) self.centerWindow.show() #self.lframe.show() #self.rframe.show() self.rightTable.show() self.leftWindow.show() self.window.show() def main(): gtk.main() if __name__ == "__main__": Client = hclient() main()