This email list is read-only.  Emails sent to this list will be discarded
----------------------------------
 src/kvm-launcher       |   81 ++++++++++++++++++++++++++++++++++-------------
 src/kvm-launcher.glade |   32 ++++++++++--------
 2 files changed, 76 insertions(+), 37 deletions(-)

New commits:
commit 058bc9a06d407a56e623f2594379be9bbe505f05
Author: Bob Spencer <[email protected]>
Date:   Tue Jan 13 21:49:13 2009 -0700

    Made path entry contents default folder for browse dialog
    disabled action buttons if path entry doesn't specify a file
    placed launch code in separate fn.  (need to get error info)


Diff in this email is a maximum of 400 lines.
diff --git a/src/kvm-launcher b/src/kvm-launcher
index 089ae51..7dd5dab 100755
--- a/src/kvm-launcher
+++ b/src/kvm-launcher
@@ -17,19 +17,24 @@
 #    Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 import gettext
+import os
+import sys
 import gnome
-import gobject
 import gtk
 import gtk.glade
-import os
-import sys
-import pygtk
-import re
-import shutil
-import time
-import traceback
-import signal
+
+import popen2
+
+#import gobject
+#import pygtk
+#import re
+#import shutil
+#import time
+#import traceback
+#import signal
 import webbrowser
+import hint_window
+
 
 debug = False
 
@@ -58,6 +63,7 @@ class App(object):
                "on_main_key_press_event" : self.main_key_press_event,
                "on_cancel_clicked" : self.cancel_clicked,
                "on_link_clicked" : self.link_clicked,
+               "on_image_path_entry_changed" : self.path_changed,
                "on_browse_clicked" : self.browse_clicked,
                "on_launch_kvm_clicked" : self.launch_kvm_clicked,
                "on_launch_qemu_clicked" : self.launch_qemu_clicked
@@ -70,6 +76,8 @@ class App(object):
         main_window.show_all()
         self.image_path_entry = self.widgets.get_widget("image_path_entry")
 
+        self.image_path_entry.set_text("/tmp/nb_idf_live_rw.img")
+
     def get_file_in_path (self, file):
         '''get full path'''
         fullpath = None
@@ -98,7 +106,7 @@ class App(object):
             self.cancel_clicked(widget)
 
     def cancel_clicked(self, widget):
-        dialog = gtk.MessageDialog(flags=gtk.MESSAGE_QUESTION, 
+        dialog = gtk.MessageDialog(type=gtk.MESSAGE_QUESTION, 
                                    buttons=gtk.BUTTONS_OK_CANCEL, 
                                    message_format="Do you want to exit?")
         if dialog.run() == gtk.RESPONSE_OK:
@@ -110,44 +118,71 @@ class App(object):
         print widget.get_uri()
         webbrowser.open(widget.get_uri());
 
+    def path_changed(self, widget):
+        '''Path changed'''
+        is_file = os.path.isfile(widget.get_text())
+        self.widgets.get_widget("launch_kvm").set_sensitive(is_file)
+        self.widgets.get_widget("launch_qemu").set_sensitive(is_file)
+
     def browse_clicked(self, widget):
-        dialog = gtk.FileChooserDialog(action=gtk.FILE_CHOOSER_ACTION_OPEN, 
title=_("Choose an image"))
-        dialog.set_current_folder("~/")
+        dialog = gtk.FileChooserDialog(title=_("Choose an image"),
+                                       action=gtk.FILE_CHOOSER_ACTION_OPEN)
         dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
         dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
+
+        #set default folder to value in path entry
+        img_file = self.image_path_entry.get_text()
+        dialog.set_current_folder(img_file)
+        
         filter_image = gtk.FileFilter()
         filter_image.set_name("Image files");
         filter_image.add_pattern("*.img");
         dialog.add_filter(filter_image);
         filter_any = gtk.FileFilter();
-        filter_any.set_name("Any files");
+        filter_any.set_name("All files");
         filter_any.add_pattern("*");
         dialog.add_filter(filter_any);
         if dialog.run() == gtk.RESPONSE_OK:
             live_img = dialog.get_filename()
             self.image_path_entry.set_text(live_img)
-            dialog.destroy()
-        else:
-            dialog.destroy()
-            return
+        dialog.destroy()
 
     def launch_kvm_clicked(self, widget):
-        # boot the live usb image in KVM in background
         image_path = self.image_path_entry.get_text()
         print "Launching KVM: %s" % image_path
-        os.popen("kvm -no-acpi -m 512 -hda " + image_path + \
-                 " -hdb /var/lib/moblin-image-creator/kvm/mic_vm_share.img 
-boot c &")
+        cmd = "kvm -no-acpi -m 512 -hda " + image_path + \
+              " -hdb /var/lib/moblin-image-creator/kvm/mic_vm_share.img " + \
+              "-boot c &" 
+        self.launch_app(cmd)
         
     def launch_qemu_clicked(self, widget):
         image_path = self.image_path_entry.get_text()
         print "Launching QEMU: %s" % image_path
-        os.popen("qemu-kvm -no-acpi -m 512 -hda " + image_path + \
-                 " -hdb /var/lib/moblin-image-creator/kvm/mic_vm_share.img 
-boot c &")
+        cmd = "qemu-kvm -no-acpi -m 512 -hda " + image_path + \
+              " -hdb /var/lib/moblin-image-creator/kvm/mic_vm_share.img " + \
+              "-boot c &"
+        self.launch_app(cmd)
+
+    def launch_app(self, cmd):
+        os.popen(cmd)
+
+        #TBD: capture error without blocking
+        # the following gets the error, but blocks if no error
+        #p = popen2.popen3(cmd)
+        #err = p[2].read() 
+        #if err:
+        #    self.show_message(gtk.MESSAGE_ERROR, err)
+                    
+    def show_message (self, msg_type, msg):
+        dialog = gtk.MessageDialog(type=msg_type, 
+                                   buttons=gtk.BUTTONS_OK, 
+                                   message_format=msg)
+        dialog.run()
+        dialog.destroy()
 
 def main():
     App().run()
 
-
 if __name__ == '__main__':
     if debug: sys.excepthook = print_exc_plus
     sys.exit(main())
diff --git a/src/kvm-launcher.glade b/src/kvm-launcher.glade
index 65be81f..dd96435 100755
--- a/src/kvm-launcher.glade
+++ b/src/kvm-launcher.glade
@@ -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.4.5 on Tue Jan 13 16:37:04 2009 -->
+<!--Generated with glade3 3.4.5 on Tue Jan 13 18:14:38 2009 -->
 <glade-interface>
   <widget class="GtkWindow" id="main">
     <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
@@ -76,7 +76,9 @@
                   <widget class="GtkEntry" id="image_path_entry">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
+                    <property name="has_focus">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+                    <signal name="changed" 
handler="on_image_path_entry_changed"/>
                   </widget>
                   <packing>
                     <property name="left_attach">1</property>
@@ -87,11 +89,11 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkLabel" id="pathLabel">
+                  <widget class="GtkLabel" id="path_label">
                     <property name="visible">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
                     <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Local 
_Path:</property>
+                    <property name="label" translatable="yes">Local 
_path:</property>
                     <property name="use_underline">True</property>
                     <property 
name="mnemonic_widget">image_path_entry</property>
                   </widget>
@@ -159,6 +161,7 @@
                   <widget class="GtkButton" id="launch_qemu">
                     <property name="width_request">120</property>
                     <property name="visible">True</property>
+                    <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
@@ -174,44 +177,45 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkButton" id="cancel">
+                  <widget class="GtkButton" id="launch_kvm">
                     <property name="width_request">120</property>
                     <property name="visible">True</property>
+                    <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
-                    <property name="label" 
translatable="yes">gtk-cancel</property>
-                    <property name="use_stock">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="label" translatable="yes">Launch 
_KVM</property>
+                    <property name="use_underline">True</property>
                     <property name="response_id">0</property>
-                    <signal name="clicked" handler="on_cancel_clicked"/>
+                    <signal name="clicked" handler="on_launch_kvm_clicked"/>
                   </widget>
                   <packing>
                     <property name="expand">False</property>
-                    <property name="fill">False</property>
                     <property name="pack_type">GTK_PACK_END</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkButton" id="launch_kvm">
+                  <widget class="GtkButton" id="cancel">
                     <property name="width_request">120</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="label" translatable="yes">Launch 
_KVM</property>
-                    <property name="use_underline">True</property>
+                    <property name="label" 
translatable="yes">gtk-cancel</property>
+                    <property name="use_stock">True</property>
                     <property name="response_id">0</property>
-                    <signal name="clicked" handler="on_launch_kvm_clicked"/>
+                    <signal name="clicked" handler="on_cancel_clicked"/>
                   </widget>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">False</property>
                     <property name="pack_type">GTK_PACK_END</property>
-                    <property name="position">1</property>
                   </packing>
                 </child>
               </widget>
               <packing>
                 <property name="expand">False</property>
+                <property name="pack_type">GTK_PACK_END</property>
                 <property name="position">3</property>
               </packing>
             </child>
_______________________________________________
Commits mailing list
[email protected]
https://lists.moblin.org/mailman/listinfo/commits

Reply via email to