Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Jun 2007 20:59:42 GMT
From:      Ivan Voras <ivoras@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 121173 for review
Message-ID:  <200706072059.l57KxgsE001862@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=121173

Change 121173 by ivoras@ivoras_finstall on 2007/06/07 20:59:21

	Start working on interface to the SysToolD server. Currently it's
	used succesfully to display a list of drives to the user.

Affected files ...

.. //depot/projects/soc2007/ivoras_finstall/installer/basewin.py#3 edit
.. //depot/projects/soc2007/ivoras_finstall/installer/finstall.py#8 edit
.. //depot/projects/soc2007/ivoras_finstall/installer/glade/mainwin.glade#8 edit
.. //depot/projects/soc2007/ivoras_finstall/installer/glade/ndisks.glade#3 edit
.. //depot/projects/soc2007/ivoras_finstall/installer/helpdialog.py#2 edit

Differences ...

==== //depot/projects/soc2007/ivoras_finstall/installer/basewin.py#3 (text+ko) ====

@@ -51,5 +51,22 @@
 			cont.remove(child)
 
 
+	def _show_message(self, text, title, p_buttons=gtk.BUTTONS_OK, p_type=gtk.MESSAGE_INFO):
+		"""Displays a message box"""
+		dlg = gtk.MessageDialog(self.window, flags=gtk.DIALOG_MODAL, type=p_type, buttons=p_buttons, message_format=text)
+		dlg.set_title(title)
+		dlg.run()
+		dlg.destroy()
+
 
+	def _make_column(self, name, listid, sort=False):
+		"""Creates a TreeViewColumn named "name" which is connected to "listid" column
+		of the rows added as a model"""
+		col = gtk.TreeViewColumn(name)
+		cell = gtk.CellRendererText()
+		col.pack_start(cell, True)
+		col.add_attribute(cell, "text", listid)
+		if sort:
+			col.set_sort_column_id(listid)
+		return col
 

==== //depot/projects/soc2007/ivoras_finstall/installer/finstall.py#8 (text+ko) ====

@@ -1,5 +1,8 @@
+import sys
+import time
 import logging
 from types import MethodType
+from xmlrpclib import ServerProxy
 import gtk, gtk.gdk, gtk.glade
 
 from basewin import BaseWin
@@ -17,6 +20,7 @@
 	def __init__(self):
 		BaseWin.__init__(self, "mainwin")
 		self.tile_xml = None	# will be used for tiles
+		self.first_focus = True
 		self["img_logo"].set_from_file("img/logo.jpg")
 		# img_logo stretches the window vertically, so calling window.set_position() has no affect
 		self._center_window(self.window)
@@ -65,6 +69,37 @@
 	# buttons, etc.
 	def on_mainwin_delete_event(self, obj, data):
 		gtk.main_quit()
+		return False
+
+
+	def on_mainwin_activate_focus(self, obj, data):
+		print "activate_focus"
+
+
+	def on_mainwin_set_focus(self, obj, data):
+		"""A kludge - hook an event to fire after the GUI is running"""
+		if self.first_focus:
+			self.first_focus = False
+			self.initial_tasks()
+
+
+	def initial_tasks(self):
+		"""Perform initial tasks after the GUI is running. For now,
+		set up connection to the SysToolD server"""
+		self.server = ServerProxy("http://localhost:1025")
+		try:
+			caps = self.server.GetCaps()
+		except:
+			time.sleep(5) # retry
+			try :
+				caps = self.server.GetCaps()
+			except:
+				self._show_message("Cannot contact local SysToolD server.\nShutting down.", "Error", p_type=gtk.MESSAGE_ERROR)
+				logging.exception("Cannot contact local SysToolD server")
+				sys.exit(1)
+		if not "systoold" in caps:
+			self._show_message("The SysToolD server is bogus.\nShutting down.", "Error", p_type=gtk.MESSAGE_ERROR)
+			sys.exit(1)
 
 
 	def on_button_next_clicked(self, obj):
@@ -125,6 +160,21 @@
 	# Handlers for "ndisks"
 	def ndisks_on_load(self):
 		self._load_label(self["label2"], "ndisks.txt")
+		drives = self.server.GetDrives()
+		if len(drives) < 0:
+			self._show_message("No usable drives detected.\nThis is a fatal error and the Installer cannot continue.", "Error", p_type=gtk.MESSAGE_ERROR)
+			return
+
+		list = gtk.ListStore(str, str, str)
+		drive_list = drives.keys()
+		drive_list.sort()
+		for dev in drive_list:
+			list.append([dev, drives[dev]["name"], "%d MB" % drives[dev]["mediasize"]])
+		self["disktree"].set_model(list)
+		self["disktree"].append_column(self._make_column("Device", 0, True))
+		self["disktree"].append_column(self._make_column("Description", 1))
+		self["disktree"].append_column(self._make_column("Size", 2))
+		self["disktree"].set_cursor(0)
 		return True
 
 

==== //depot/projects/soc2007/ivoras_finstall/installer/glade/mainwin.glade#8 (text+ko) ====

@@ -13,9 +13,12 @@
     <property name="default_height">450</property>
     <property name="icon">logo.png</property>
     <signal name="delete_event" handler="on_mainwin_delete_event"/>
+    <signal name="show" handler="on_mainwin_show"/>
+    <signal name="set_focus" handler="on_mainwin_set_focus"/>
     <child>
       <widget class="GtkHBox" id="hbox1">
         <property name="visible">True</property>
+        <signal name="show" handler="on_hbox1_show"/>
         <child>
           <widget class="GtkImage" id="img_logo">
             <property name="width_request">160</property>

==== //depot/projects/soc2007/ivoras_finstall/installer/glade/ndisks.glade#3 (text+ko) ====

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.2.0 on Sat May 19 12:02:23 2007 by ivoras@beastie.home.net-->
+<!--Generated with glade3 3.2.0 on Thu Jun  7 20:57:58 2007 by ivoras@finstall.cosmos-->
 <glade-interface>
   <widget class="GtkWindow" id="window1">
     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@@ -43,7 +43,7 @@
               </packing>
             </child>
             <child>
-              <widget class="GtkTreeView" id="treeview1">
+              <widget class="GtkTreeView" id="disktree">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>

==== //depot/projects/soc2007/ivoras_finstall/installer/helpdialog.py#2 (text+ko) ====




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200706072059.l57KxgsE001862>