From 1fb3dcb76e413e9a40383f38a0a4ac669d3ae721 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Thu, 14 Oct 2021 14:53:30 +1100 Subject: Removing h-client subdir. --- h-client/hclient.py | 1117 --------------------------------------------------- 1 file changed, 1117 deletions(-) delete mode 100644 h-client/hclient.py (limited to 'h-client/hclient.py') diff --git a/h-client/hclient.py b/h-client/hclient.py deleted file mode 100644 index cc4e150..0000000 --- a/h-client/hclient.py +++ /dev/null @@ -1,1117 +0,0 @@ -# -*- coding: utf-8 -*- -# h-client, a client for an h-source server (such as http://www.h-node.com) -# 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: - - #the device that has to be displaced in the right window - currentDevice = None - currentDeviceCode = None - - #get the active text from a combo - #combo: the gtk combo instance - #default: default value if the active index < 0 - def getActive(self, combo, default = 'not-specified'): - model = combo.get_model() - active = combo.get_active() - if active < 0: - return default - else: - return model[active][0] - - #update the current device object by taking the values from the entries - def applyChanges(self,widget): - self.currentDevice.setModel(self.modelNameEntry.get_text()) - - otherNamesBuffer = self.otherNamesText.get_buffer() - startiter, enditer = otherNamesBuffer.get_bounds() - self.currentDevice.setOtherNames(otherNamesBuffer.get_text(startiter, enditer)) - - self.currentDevice.setSubtype(self.getActive(self.subtypeCombo)) - - self.currentDevice.setYear(self.getActive(self.commYearCombo)) - - self.currentDevice.setInterface(self.getActive(self.interfaceCombo)) - - self.currentDevice.setDistributions([]) - self.currentDevice.addDistributions(self.distributionEntry.get_text()) - - self.currentDevice.setKernel(self.kernelEntry.get_text()) - - self.currentDevice.setHowItWorks(self.getActive(self.howItWorksCombo)) - - self.currentDevice.setDriver(self.driverEntry.get_text()) - - descriptionBuffer = self.descriptionText.get_buffer() - startiter, enditer = descriptionBuffer.get_bounds() - self.currentDevice.setDescription(descriptionBuffer.get_text(startiter, enditer)) - - - #reset the modifications - def resetChanges(self,widget): - self.setEntries() - - - #set the device that has to be displaced in the right window - #and fill the entries - def setCurrentDevice(self, selection): - model, path = selection.get_selected() - if path: - #get the code: - code = model.get_value(path, 1) - - if code in self.client.devices: - - #set the current device - self.currentDevice = self.client.devices[code][0] - self.currentDeviceCode = code - #get the device - - #device = self.client.devices[code][0] - - self.setEntries() - - #make sensitive the apply button - if self.currentDevice.getType() != 'unknown': - self.enableButtons() - else: - self.disableButtons() - - self.setDeviceInfoLabel() - - else: - #make non sensitive the apply button - self.disableButtons() - self.currentDevice = None - self.currentDeviceCode = None - - #self.updateStatus() - - #enable the bottom buttons - def enableButtons(self): - self.applyButton.set_sensitive(True) - self.resetButton.set_sensitive(True) - self.submitButton.set_sensitive(True) - - #disable the bottom buttons - def disableButtons(self): - self.applyButton.set_sensitive(False) - self.resetButton.set_sensitive(False) - self.submitButton.set_sensitive(False) - - #set the top label - def setDeviceInfoLabel(self): - if self.currentDeviceCode != None: - self.bigIcon.set_from_file("img/devices/big/"+self.currentDevice.getIcon()) - if self.client.devices[self.currentDeviceCode][2] == 'insert': - self.deviceInfoLabel.set_markup("this device is not present in the server database,\n would you like to insert it?") - else: - self.deviceInfoLabel.set_markup("this device is already present in the server database,\n would you like to update it?") - - #set the pyGTK device entries - def setEntries(self): - if self.currentDevice != None: - #set the type entry - self.setTypeEntry() - #set the model entry - self.setModelEntry() - #set the other names entry - self.setOtherNamesEntry() - #set the vendorid:productid entry - self.setVendorIdProductIDCode() - #set the subtype entry (in the case of printers) - self.setSubtypeEntry() - #set the commercialization year entry - self.setCommYearEntry() - #set the interface entry - self.setInterfaceEntry() - #set the distribution entry - self.setDistributionEntry() - #set the kernel entry - self.setKernelEntry() - #set the howItWorks entry - self.setHowItWorksEntry() - #set the driver entry - self.setDriverEntry() - #set the description entry - self.setDescriptionEntry() - - - #set the subtype entry (in the case pf printers) - def setTypeEntry(self): - if self.currentDevice.getType() in self.client.getTypes(): - index = self.client.getTypes().index(self.currentDevice.getType()) - else: - index = 0 - - self.typeCombo.set_active(index) - - #set the model name entry - def setModelEntry(self): - self.modelNameEntry.set_text(self.currentDevice.getModel()) - - #set the other names entry - def setOtherNamesEntry(self): - textbuffer = gtk.TextBuffer(table=None) - textbuffer.set_text(self.currentDevice.getOtherNames()) - self.otherNamesText.set_buffer(textbuffer) - - #set the vendorid:productid entry - def setVendorIdProductIDCode(self): - self.vendorIdProductIdEntry.set_text(self.currentDevice.getVendorId() + ':' + self.currentDevice.getProductId()) - - - #set the subtype entry (in the case pf printers) - def setSubtypeEntry(self): - self.subtypeCombo.get_model().clear() - for subtype in self.currentDevice.getSubtypes(): - self.subtypeCombo.append_text(subtype) - - if self.currentDevice.getSubtype() in self.currentDevice.getSubtypes(): - index = self.currentDevice.getSubtypes().index(self.currentDevice.getSubtype()) - else: - index = 0 - - self.subtypeCombo.set_active(index) - - - #set the year of commercialization - def setCommYearEntry(self): - self.commYearCombo.get_model().clear() - for year in self.currentDevice.getYears(): - self.commYearCombo.append_text(year) - - if self.currentDevice.getYear() in self.currentDevice.getYears(): - index = self.currentDevice.getYears().index(self.currentDevice.getYear()) - else: - index = 0 - - self.commYearCombo.set_active(index) - - - #set the interface - def setInterfaceEntry(self): - self.interfaceCombo.get_model().clear() - for interface in self.currentDevice.getInterfaces(): - self.interfaceCombo.append_text(interface) - - if self.currentDevice.getInterface() in self.currentDevice.getInterfaces(): - index = self.currentDevice.getInterfaces().index(self.currentDevice.getInterface()) - else: - index = 0 - - self.interfaceCombo.set_active(index) - - - #set the distribution entry - def setDistributionEntry(self): - self.distributionEntry.set_text(self.currentDevice.createDistroEntry()) - - - #set the kernel libre entry - def setKernelEntry(self): - self.kernelEntry.set_text(self.currentDevice.getKernel()) - - - #set the howItWorks entry - def setHowItWorksEntry(self): - self.howItWorksCombo.get_model().clear() - for option in self.currentDevice.getHowItWorksOptions(): - self.howItWorksCombo.append_text(option) - - if self.currentDevice.getHowItWorks() in self.currentDevice.getHowItWorksOptions(): - index = self.currentDevice.getHowItWorksOptions().index(self.currentDevice.getHowItWorks()) - else: - index = 0 - - self.howItWorksCombo.set_active(index) - - #set the driver entry - def setDriverEntry(self): - self.driverEntry.set_text(self.currentDevice.getDriver()) - - - #set the description entry - def setDescriptionEntry(self): - textbuffer = gtk.TextBuffer(table=None) - textbuffer.set_text(self.currentDevice.getDescription()) - self.descriptionText.set_buffer(textbuffer) - - - #set the node - def setNode(self,widget): - self.client.logout() - self.client.errors = [] - self.client.setNode(self.serverEntry.get_text()) - self.updateStatus() - self.synchronize(None) - self.prefWindow.destroy() - - #close the preferences window - def closePref(self,widget): - self.prefWindow.destroy() - - #login to the server - def login(self,widget): - self.client.login(self.usernameEntry.get_text(),self.passwordEntry.get_text()) - self.updateStatus() - - if self._submitFlag: - if self.client.isLogged(): - self.applyChanges(None) - if self.client.submit(self.currentDeviceCode): - self.synchronize(None) - else: - self.printErrors() - - self._submitFlag = False - - #self.printErrors() - self.loginWindow.destroy() - - #submit data to the server - def submit(self,widget): - self.applyChanges(None) - self.licenseNoticeWindow.destroy() - - if self.client.isLogged(): - if self.client.submit(self.currentDeviceCode): - self.synchronize(None) - else: - self.printErrors() - else: - self._submitFlag = True - self.openLoginWindow(None) - - - - #logout to the server - def logout(self,widget): - self.client.logout() - self.updateStatus() - #self.printErrors() - - #close the login window - def closeLoginWindow(self,widget): - self._submitFlag = False - self.updateStatus() - self.loginWindow.destroy() - - #close the license notice window - def closeLicenseNoticeWindow(self,widget): - self.licenseNoticeWindow.destroy() - - #open the dialog with the software info - def openInfoWindow(self,widget): - about = gtk.AboutDialog() - about.set_program_name("h-node client") - #about.set_version("") - about.set_copyright("(c) Antonio Gallo") - about.set_comments("simple client for h-node.com, licensed under the GPLv3") - about.set_website("http://www.h-node.com") - #about.set_logo(gtk.gdk.pixbuf_new_from_file("battery.png")) - about.run() - about.destroy() - - #close the window containing the list of allowed distribusions - def closeDistroHelperWindow(self,widget): - self.distroHelperWindow.destroy() - - #update the distribution entry - def setDistributions(self,widget): - self.currentDevice.setDistributions(self._tempDistributions) - self.distributionEntry.set_text(self.currentDevice.createDistroEntry()) - self.distroHelperWindow.destroy() - - #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 - - - #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) - - self.vboxCh = gtk.VBox(False, 0) - self.vboxCh.set_border_width(10) - self.distroHelperWindow.add(self.vboxCh) - - #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()) - - #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.setDistributions) - closeButton.connect("clicked", self.closeDistroHelperWindow) - hbox.pack_end(applyButton, False, True, 0) - hbox.pack_end(closeButton, False, True, 3) - self.vboxCh.pack_start(hbox, False, True, 0) - - self.distroHelperWindow.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 - def openLoginWindow(self,widget): - - #window for preferences - self.loginWindow = gtk.Window(gtk.WINDOW_TOPLEVEL) - self.loginWindow.set_title("login") - 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) - - #self.prefWindow.set_size_request(300, -1) - - vbox = gtk.VBox(False, 0) - - self.loginWindow.add(vbox) - - table = gtk.Table(4, 2, True) - table.set_border_width(10) - - label = gtk.Label("login to the server") - label.set_use_markup(True) - - vbox.pack_start(label, False, True, 0) - - vbox.pack_start(table, False, True, 0) - - ### username - usernameLabel = gtk.Label("username:") - usernameLabel.set_alignment(0.95,0.5) - #add the label - table.attach(usernameLabel, 0, 1, 0, 1) - - self.usernameEntry = gtk.Entry() - #add the input to the table - table.attach(self.usernameEntry, 1, 2, 0, 1) - - ### password - passwordLabel = gtk.Label("password:") - passwordLabel.set_alignment(0.95,0.5) - #add the label - table.attach(passwordLabel, 0, 1, 1, 2) - - self.passwordEntry = gtk.Entry() - self.passwordEntry.set_visibility(False) - - #add the input to the table - table.attach(self.passwordEntry, 1, 2, 1, 2) - - ### create new account - label = gtk.Label("Create new account") - label.set_use_markup(True) - label.set_alignment(0.98,0.5) - #add the label - table.attach(label, 0, 2, 2, 3) - - ### request new password - label = gtk.Label("Request new password") - label.set_use_markup(True) - label.set_alignment(0.98,0.5) - #add the label - table.attach(label, 0, 2, 3, 4) - - - 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.login) - closeButton.connect("clicked", self.closeLoginWindow) - hbox.pack_end(applyButton, False, True, 0) - hbox.pack_end(closeButton, False, True, 3) - vbox.pack_start(hbox, False, True, 0) - - self.loginWindow.show_all() - - - #start the preferences window - def openPrefWindow(self,widget): - #window for preferences - self.prefWindow = gtk.Window(gtk.WINDOW_TOPLEVEL) - self.prefWindow.set_title("preferences") - 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) - - self.prefWindow.add(vbox) - - table = gtk.Table(1, 2, True) - table.set_border_width(10) - - vbox.pack_start(table, False, True, 0) - - ### server - serverLabel = gtk.Label("Server URL:") - #add the label - table.attach(serverLabel, 0, 1, 0, 1) - - self.serverEntry = gtk.Entry() - self.serverEntry.set_text(self.client.getNode()) - #add the input to the table - table.attach(self.serverEntry, 1, 2, 0, 1) - - hbox = gtk.HBox(False, 0) - hbox.set_border_width(10) - applyButton = gtk.Button(stock=gtk.STOCK_APPLY) - closeButton = gtk.Button(stock=gtk.STOCK_CLOSE) - applyButton.connect("clicked", self.setNode) - closeButton.connect("clicked", self.closePref) - hbox.pack_end(applyButton, False, True, 0) - hbox.pack_end(closeButton, False, True, 3) - vbox.pack_start(hbox, False, True, 0) - #applyButton.connect("clicked", self.applyChanges) - - self.prefWindow.show_all() - - #synchronize with the server XML database - def synchronize(self,widget): - self.client.sync() - self.printErrors() - #print self.client.errors - self.setEntries() - self.setDeviceInfoLabel() - self.setDeviceTree() - - - def printErrors(self): - #destroy the error bar HBox - if hasattr(self, "errorBarHBox"): - self.errorBarHBox.destroy() - - if len(self.client.errors) > 0: - - self.client.errors = list(set(self.client.errors)) - #self.errorBar.set_shadow_type(gtk.SHADOW_ETCHED_IN) - - self.errorBarHBox = gtk.HBox(False, 0) - for error in self.client.errors: - label = gtk.Label(error) - self.errorBarHBox.pack_start(label, False, True, 10) - - self.errorBar.add_with_viewport(self.errorBarHBox) - - self.errorBar.show_all() - - self.client.errors = [] - - #check if the user is logged - #hide or show the login/logout buttons - def updateStatus(self): - if self.client.isLogged() == True: - self.loginButton.hide() - self.logoutButton.show() - info = self.client.getUserInfo() - if info != False: - self.statusLabel.set_markup("hello "+info['username']+", you are logged in") - - if self.currentDeviceCode != None: - self.submitButton.set_sensitive(True) - - else: - self.loginButton.show() - self.logoutButton.hide() - self.statusLabel.set_markup("you are not logged in") - - self.printErrors() - - #delete event of the login window - def delete_event_login(self, widget, event, data=None): - self._submitFlag = False - return False - - - #update the devices' tree - def setDeviceTree(self): - - #get the current selection - ts, itera = self.tree.get_selection().get_selected() - if itera: - path = ts.get_path(itera) - - self.treestore = gtk.TreeStore(str,str,int,gtk.gdk.Pixbuf,int) - - pci = self.treestore.append(None, ["Your PCI Devices","",800,gtk.gdk.pixbuf_new_from_file('img/title_png.png'),4]) - usb = self.treestore.append(None, ["Your USB Devices","",800,gtk.gdk.pixbuf_new_from_file('img/title_png.png'),4]) - for key,dev in self.client.devices.iteritems(): - - if key[0] == 'p': - self.treestore.append(pci, [dev[0].getType(),key,400,gtk.gdk.pixbuf_new_from_file('img/devices/small/'+dev[0].getIcon()),4]) - - if key[0] == 'u': - self.treestore.append(usb, [dev[0].getType(),key,400,gtk.gdk.pixbuf_new_from_file('img/devices/small/'+dev[0].getIcon()),4]) - - self.tree.set_model(self.treestore) - - selection = self.tree.get_selection() - selection.connect('changed', self.setCurrentDevice) - - self.tree.expand_all() - - #select the device on the tree - if itera: - self.tree.get_selection().select_path(path) - else: - #select the first device - self.tree.get_selection().select_path(0) - ts, itera = self.tree.get_selection().get_selected() - if itera: - next = ts.iter_nth_child(itera, 0) - path = ts.get_path(next) - self.tree.get_selection().select_path(path) - - - def delete_event(self, widget, event, data=None): - self.client.logout() - os.system('rm -f tmp/cookies.txt') - os.system('rm -f tmp/temp') - gtk.main_quit() - return False - - def __init__(self): - - #does it have to submit after the login? - self._submitFlag = False - - #start the client object - self.client = Client('www.sandbox.h-node.com') - self.client.createDevices() - - # Create the main window - self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) - - self.window.set_title("h-client") - - self.window.set_icon_from_file("img/icon.png") - self.window.set_size_request(700, -1) - self.window.set_position(gtk.WIN_POS_CENTER) - - self.window.connect("delete_event", self.delete_event) - - #self.window.set_border_width(0) - - vbox = gtk.VBox(False, 0) - - #add the bottom box - self.window.add(vbox) - - self.centerWindow = gtk.HBox(False, 0) - self.bottomWindow = gtk.HBox(False, 0) - - self.errorBar = gtk.ScrolledWindow() - self.errorBar.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) - self.errorBar.set_border_width(5) - self.errorBar.set_size_request(-1,50) - self.bottomWindow.add(self.errorBar) - self.errorBarHBox = gtk.HBox(False, 0) - self.errorBar.add_with_viewport(self.errorBarHBox) - self.errorBar.show_all() - - ## build the toolbar ## - toolbar = gtk.Toolbar() - toolbar.set_tooltips(True) - #toolbar.set_style(gtk.TOOLBAR_BOTH) - - pref = gtk.ToolButton(gtk.STOCK_PREFERENCES) - pref.set_tooltip_text('Preferences') - pref.connect("clicked", self.openPrefWindow) - sync = gtk.ToolButton(gtk.STOCK_REFRESH) - sync.set_tooltip_text('Synchronize with the server: this will override the entries of your devices') - sync.connect("clicked", self.synchronize) - info = gtk.ToolButton(gtk.STOCK_INFO) - info.set_tooltip_text('Information') - info.connect("clicked",self.openInfoWindow); - - toolbar.insert(sync, 0) - toolbar.insert(pref, 1) - toolbar.insert(info, 2) - toolbar.show_all() - - vbox.pack_start(toolbar, True, True, 0) - - - vbox.pack_start(self.centerWindow, True, True, 0) - vbox.pack_start(self.bottomWindow, True, True, 0) - vbox.show() - - - ## build the left window ## - - #start the left vertical box - self.leftWindow = gtk.VBox(False, 0) - #self.leftWindow.set_border_width(5) - - self.centerWindow.pack_start(self.leftWindow, True, True, 0) - - #treeFrame.add(self.leftWindow) - #self.centerWindow.pack_start(self.rframe, True, True, 5) - - #self.leftWindow.pack_start(gtk.Label("Your hardware:"), False, True, 5) - - self.tree = gtk.TreeView() - self.tree.set_headers_visible(False) - - self.devices = gtk.TreeViewColumn("Your PCI and USB devices") - - device_icon = gtk.CellRendererPixbuf() - self.devices.pack_start(device_icon, True) - self.devices.add_attribute(device_icon, 'pixbuf', 3) - #self.devices.set_cell_data_func(device_icon, self.setTreeViewCell) - - - device_name = gtk.CellRendererText() - self.devices.pack_start(device_name, True) - self.devices.add_attribute(device_name, "text", 0) - self.devices.add_attribute(device_name, "xpad", 4) - self.devices.add_attribute(device_name, "weight", 2) - - - self.tree.append_column(self.devices) - - - treesw = gtk.ScrolledWindow() - treesw.set_size_request(110,401) - treesw.set_shadow_type(gtk.SHADOW_ETCHED_IN) - treesw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - treesw.add(self.tree) - - self.leftWindow.set_border_width(5) - self.leftWindow.pack_start(treesw, False, True, 0) - - self.leftWindow.show_all() - - #treeFrame.add(self.leftWindow) - - ## build the right window ## - - #right top - rthbox = gtk.HBox(False, 0) - rthbox.set_border_width(5) - #login button - self.loginButton = gtk.Button("Login") - self.loginButton.set_sensitive(True) - self.loginButton.connect("clicked", self.openLoginWindow) - rthbox.pack_start(self.loginButton, False, True, 0) - - #login button - self.logoutButton = gtk.Button("Logout") - self.logoutButton.set_sensitive(True) - self.logoutButton.connect("clicked", self.logout) - rthbox.pack_start(self.logoutButton, False, True, 0) - - #status label - self.statusLabel = gtk.Label("") - self.statusLabel.set_use_markup(True) - rthbox.pack_end(self.statusLabel, False, True, 0) - - #top image - self.tihbox = gtk.HBox(False, 0) - self.bigIcon = gtk.Image() - self.bigIcon.set_from_file("img/devices/big/unknown.png") - self.tihbox.pack_end(self.bigIcon, False, True, 0) - - self.deviceInfoLabel = gtk.Label("") - self.deviceInfoLabel.set_use_markup(True) - self.tihbox.pack_start(self.deviceInfoLabel, False, True, 3) - - #create the entries - - notebook = gtk.Notebook() - notebook.set_tab_pos(gtk.POS_TOP) - notebook.show() - label_base = gtk.Label("Base") - label_adv = gtk.Label("Advanced") - - self.rightTable = gtk.Table(5, 2, False) - self.rightTableAdvances = gtk.Table(6, 2, False) - - self.rightTable.set_border_width(5) - self.rightTableAdvances.set_border_width(5) - - self.rightTable.set_row_spacings(3) - self.rightTableAdvances.set_row_spacings(3) - - notebook.append_page(self.rightTable, label_base) - notebook.append_page(self.rightTableAdvances, label_adv) - - ###type entry - #year of commercialization label - self.typeLabel = gtk.Label("Select the device category (if not correct):") - self.typeLabel.set_alignment(0.75,0.5) - #add the label - self.rightTable.attach(self.typeLabel, 0, 1, 0, 1) - - self.typeCombo = gtk.combo_box_new_text() - - for dtype in self.client.getTypes(): - self.typeCombo.append_text(dtype) - - #add the combo to the table - self.rightTable.attach(self.typeCombo, 1, 2, 0, 1) - - ### model - #model name label - self.modelNameLabel = gtk.Label("Model name:") - self.modelNameLabel.set_alignment(0.94,0.5) - #add the label - self.rightTable.attach(self.modelNameLabel, 0, 1, 1, 2) - - #model name input - self.modelNameEntry = gtk.Entry() - #add the input to the table - self.rightTable.attach(self.modelNameEntry, 1, 2, 1, 2) - - - ### other names - #other names label - self.otherNamesLabel = gtk.Label("Possible other names of the device:\n( write one name per row )") - self.otherNamesLabel.set_use_markup(True) - self.otherNamesLabel.set_alignment(0.83,0.5) - self.otherNamesLabel.set_justify(gtk.JUSTIFY_RIGHT) - self.rightTable.attach(self.otherNamesLabel, 0, 1, 2, 3) - - #other names text area - s = gtk.ScrolledWindow() - s.set_shadow_type(gtk.SHADOW_ETCHED_IN) - s.set_size_request(-1,50) - s.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - - self.otherNamesText = gtk.TextView() - #self.otherNamesText.set_size_request(-1,60) - self.otherNamesText.set_wrap_mode(gtk.WRAP_CHAR) - self.otherNamesText.set_left_margin(5) - self.otherNamesText.set_right_margin(5) - - s.add(self.otherNamesText) - s.show() - s.show_all() - self.rightTable.attach(s, 1, 2, 2, 3) - - - ### vendorid:productid - #vendorid:productid label - self.vendorIdProductIdLabel = gtk.Label("VendorID:productID code:") - self.vendorIdProductIdLabel.set_alignment(0.88,0.5) - #add the label - self.rightTableAdvances.attach(self.vendorIdProductIdLabel, 0, 1, 0, 1) - - #vendorid:productid input - self.vendorIdProductIdEntry = gtk.Entry() - #set as not editable - self.vendorIdProductIdEntry.set_editable(False) - #add the input to the table - self.rightTableAdvances.attach(self.vendorIdProductIdEntry, 1, 2, 0, 1) - - - ###subtype - #subtype label - self.subtypeLabel = gtk.Label("Subtype:") - self.subtypeLabel.set_alignment(0.94,0.5) - #add the label - self.rightTableAdvances.attach(self.subtypeLabel, 0, 1, 1, 2) - - #subtype input - self.subtypeCombo = gtk.combo_box_new_text() - #add the input to the table - self.rightTableAdvances.attach(self.subtypeCombo, 1, 2, 1, 2) - - - ###year of commercialization - #year of commercialization label - self.commYearLabel = gtk.Label("Year of commercialization:") - self.commYearLabel.set_alignment(0.87,0.5) - #add the label - self.rightTableAdvances.attach(self.commYearLabel, 0, 1, 2, 3) - - self.commYearCombo = gtk.combo_box_new_text() - - #add the combo to the table - self.rightTableAdvances.attach(self.commYearCombo, 1, 2, 2, 3) - - - ###interface - #interface label - self.interfaceLabel = gtk.Label("Interface:") - self.interfaceLabel.set_alignment(0.94,0.5) - #add the label - self.rightTableAdvances.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.rightTableAdvances.attach(self.interfaceCombo, 1, 2, 3, 4) - - - ### distribution - #distribution label - self.distributionLabel = gtk.Label("Distribution used: ") - self.distributionLabel.set_alignment(0.95,0.5) - #add the label - self.rightTable.attach(self.distributionLabel, 0, 1, 3, 4) - - #distribution input - self.distributionEntry = gtk.Entry() - self.distributionEntry.connect("button-press-event", self.openDistroHelperWindow) - - - #add the input - self.rightTable.attach(self.distributionEntry, 1, 2, 3, 4) - - - ### kernel - #kernel label - self.kernelLabel = gtk.Label("Kernel libre version:") - self.kernelLabel.set_alignment(0.92,0.5) - #add the label - self.rightTableAdvances.attach(self.kernelLabel, 0, 1, 4, 5) - - #kernel input - self.kernelEntry = gtk.Entry() - #add the input - self.rightTableAdvances.attach(self.kernelEntry, 1, 2, 4, 5) - - - ###how it works - #how it works label - self.howItWorksLabel = gtk.Label("Does it work?") - self.howItWorksLabel.set_alignment(0.95,0.5) - #add the label - self.rightTable.attach(self.howItWorksLabel, 0, 1, 4, 5) - - self.howItWorksCombo = gtk.combo_box_new_text() - - #add the combo to the table - self.rightTable.attach(self.howItWorksCombo, 1, 2, 4, 5) - - - ### driver - #driver label - self.driverLabel = gtk.Label("Free driver used:") - self.driverLabel.set_alignment(0.94,0.5) - #add the label - self.rightTableAdvances.attach(self.driverLabel, 0, 1, 5, 6) - - #driver input - self.driverEntry = gtk.Entry() - #add the input - self.rightTableAdvances.attach(self.driverEntry, 1, 2, 5, 6) - - - ### description - #description label - self.descriptionLabel = gtk.Label("Description:") - self.descriptionLabel.set_alignment(0,0.5) - - #description input - sw = gtk.ScrolledWindow() - sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) - sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - - self.descriptionText = gtk.TextView() - self.descriptionText.set_wrap_mode(gtk.WRAP_CHAR) - self.descriptionText.set_left_margin(5) - self.descriptionText.set_right_margin(5) - - sw.add(self.descriptionText) - sw.show() - sw.show_all() - - ##add the input - #self.rightTable.attach(sw, 1, 2, 7, 8) - - self.rightTable.show_all() - - #apply and submit buttons - hboxBelowEntries = gtk.HBox(False, 0) - #apply button - self.applyButton = gtk.Button(stock=gtk.STOCK_APPLY) - self.applyButton.set_sensitive(False) - self.applyButton.connect("clicked", self.applyChanges) - self.applyButton.set_tooltip_text('apply your local modifications: no change will be applied to the server') - #reset button - self.resetButton = gtk.Button(stock=gtk.STOCK_REVERT_TO_SAVED) - self.resetButton.set_sensitive(False) - self.resetButton.connect("clicked", self.resetChanges) - self.resetButton.set_tooltip_text('restore the entries') - #submit button - self.submitButton = gtk.Button("Submit") - self.submitButton.set_sensitive(False) - self.submitButton.connect("clicked", self.openLicenseNoticeWindow) - self.submitButton.set_tooltip_text('submit your modifications to the server') - - #create the device tree - self.setDeviceTree() - - hboxBelowEntries.pack_end(self.applyButton, False, True, 0) - hboxBelowEntries.pack_end(self.resetButton, False, True, 0) - hboxBelowEntries.pack_start(self.submitButton, False, True, 0) - hboxBelowEntries.show_all() - - #lFrame = gtk.Frame() - #lFrame.add(rhbox) - #lFrame.set_border_width(5) - - #start the left vertical box - self.rightWindow = gtk.VBox(False, 0) - - self.rightWindow.pack_start(self.tihbox, True, True, 3) - self.rightWindow.pack_start(notebook, False, True, 3) - self.rightWindow.pack_start(self.descriptionLabel, False, True, 3) - self.rightWindow.pack_start(sw, False, True, 0) - self.rightWindow.pack_start(hboxBelowEntries, False, True, 10) - #self.rightWindow.show_all() - - rhbox = gtk.HBox(False, 0) - rhbox.pack_start(self.rightWindow, True, True, 5) - - - rvbox = gtk.VBox(False, 0) - - rvbox.pack_start(rthbox, True, True, 0) - rvbox.pack_start(rhbox, True, True, 0) - - self.centerWindow.pack_start(rvbox, True, True, 0) - - #self.rframe.add(self.rightWindow) - #self.rframe.set_border_width(30) - - self.centerWindow.show_all() - self.bottomWindow.show_all() - self.leftWindow.show() - self.window.show() - - self.synchronize(None) - self.updateStatus() - - #self.logoutButton.hide() - -def main(): - gtk.main() - -if __name__ == "__main__": - Client = hclient() - main() \ No newline at end of file -- cgit v1.2.3