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
