Merge lp:~jbicha/testdrive/port-to-gtk3 into lp:testdrive

Proposed by Jeremy Bicha
Status: Needs review
Proposed branch: lp:~jbicha/testdrive/port-to-gtk3
Merge into: lp:testdrive
Diff against target: 3097 lines (+718/-969)
16 files modified
bin/testdrive-gtk (+136/-116)
data/ui/AboutTestdrivegtkDialog.ui (+0/-56)
data/ui/AddOtherTestdrivegtkDialog.ui (+48/-18)
data/ui/PreferencesTestdrivegtkDialog.ui (+260/-304)
data/ui/TestdrivegtkWindow.ui (+6/-4)
data/ui/about_testdrivegtk_dialog.xml (+0/-9)
debian/compat (+1/-1)
debian/control (+17/-15)
po/testdrive.pot (+163/-337)
testdrive/testdrive.py (+1/-1)
testdrive/virt/kvm.py (+3/-3)
testdrive/virt/virtualbox.py (+4/-4)
testdrivegtk/AboutTestdrivegtkDialog.py (+10/-29)
testdrivegtk/AddOtherTestdrivegtkDialog.py (+23/-22)
testdrivegtk/PreferencesTestdrivegtkDialog.py (+43/-47)
testdrivegtk/helpers.py (+3/-3)
To merge this branch: bzr merge lp:~jbicha/testdrive/port-to-gtk3
Reviewer Review Type Date Requested Status
Andres Rodriguez Needs Fixing
Review via email: mp+72369@code.launchpad.net

Description of the change

I've not really tested the Indicator/AppIndicator part so that needs to be reviewed.

I commented out line 211 of AddOtherTestdrivegtkDialog.py because it didn't work.

To post a comment you must log in.
lp:~jbicha/testdrive/port-to-gtk3 updated
364. By Jeremy Bicha on 2011-08-23

Fix memory and disk entry fields and restrict input to numbers
A couple other bugfixes

Revision history for this message
Jeremy Bicha (jbicha) wrote :

Hi, I expect everyone's busy with Life or getting Ubuntu 11.10 ready but I'd appreciate it if someone could take some time to review this merge proposal. In addition to porting to GTK3, this adds some basic input validation for the virtual machine options, fixes the Other: memory/harddrive option not working, and fixes bug 816266.

Revision history for this message
Jeremy Bicha (jbicha) wrote :

Now that the Precise cycle has begun, it would be really nice if this could get looked at and merged in. Thanks!

Revision history for this message
Andres Rodriguez (andreserl) wrote :

Hi Jeremy,

Sorry for the delay but just had the chance to review this change.

Now, overall everything looks good. I have fixed the bug on which the "Add ISO" option was disabled, now it should work. Fix is in trunk. This leads me to line 211 of AddOtherTestdrivegtkDialog.py. The only problem I see is that it's not actually displaying the ISO's that are added into the list store which leads me to believe that such line served for that purpose (haven't touch GTK since I initially wrote this part :)). If you find a solution would be great.

The Notification does not seem to be working but I was planning to disable momentarily.

Cheers.

review: Needs Fixing
Revision history for this message
Andres Rodriguez (andreserl) wrote :

Also, would it be possible for you to produce a separate branch for the fix for bug #816266

Unmerged revisions

364. By Jeremy Bicha on 2011-08-23

Fix memory and disk entry fields and restrict input to numbers
A couple other bugfixes

363. By Jeremy Bicha on 2011-08-22

Update dependencies
Bump debhelper compatibility to 8 and Standards-Version to 3.9.2

362. By Jeremy Bicha on 2011-08-22

Port to GTK3
Removed redundant AboutDialog UI files
Fixes LP: #816266

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/testdrive-gtk'
--- bin/testdrive-gtk 2011-08-13 22:06:27 +0000
+++ bin/testdrive-gtk 2011-08-23 08:30:25 +0000
@@ -19,10 +19,18 @@
19# with this program. If not, see <http://www.gnu.org/licenses/>.19# with this program. If not, see <http://www.gnu.org/licenses/>.
20### END LICENSE20### END LICENSE
2121
22import os
23import random
24import re
22import sys25import sys
23import os
24import gtk
25import time26import time
27import threading, subprocess, commands
28
29# Require minimum GTK 3.0
30import gi
31gi.require_version("Gtk", "3.0")
32
33from gi.repository import Gtk, Gdk
2634
27import gettext35import gettext
28from gettext import gettext as _36from gettext import gettext as _
@@ -30,11 +38,8 @@
3038
31from testdrive import testdrive39from testdrive import testdrive
32from testdrive.virt import kvm, parallels, virtualbox40from testdrive.virt import kvm, parallels, virtualbox
33import threading, subprocess, commands
34import random
35import re
3641
37gtk.gdk.threads_init()42Gdk.threads_init()
3843
39TAB_LABEL = []44TAB_LABEL = []
40TAB_LABEL.append({"dist":"ubuntu", "label":"Ubuntu"})45TAB_LABEL.append({"dist":"ubuntu", "label":"Ubuntu"})
@@ -54,7 +59,7 @@
54# optional Launchpad integration59# optional Launchpad integration
55# this shouldn't crash if not found as it is simply used for bug reporting60# this shouldn't crash if not found as it is simply used for bug reporting
56try:61try:
57 import LaunchpadIntegration62 from gi.repository import LaunchpadIntegration
58 launchpad_available = True63 launchpad_available = True
59except:64except:
60 launchpad_available = False65 launchpad_available = False
@@ -69,8 +74,8 @@
69 os.putenv('PYTHONPATH', PROJECT_ROOT_DIRECTORY) # for subprocesses74 os.putenv('PYTHONPATH', PROJECT_ROOT_DIRECTORY) # for subprocesses
7075
71try:76try:
72 import pynotify77 from gi.repository import Notify
73 pynotify.init('testdrive-gtk')78 Notify.init('testdrive-gtk')
74 imageURI = 'file://' + PROJECT_ROOT_DIRECTORY + '/data/media/testdrive.png'79 imageURI = 'file://' + PROJECT_ROOT_DIRECTORY + '/data/media/testdrive.png'
75 notifications_available = True80 notifications_available = True
76except:81except:
@@ -81,8 +86,8 @@
81from testdrivegtk.helpers import get_builder86from testdrivegtk.helpers import get_builder
8287
83try:88try:
84 import indicate89 from gi.repository import Indicate
85 import gobject90 from gi.repository import GObject
86 import webbrowser91 import webbrowser
87 #message_indicator = True92 #message_indicator = True
88 message_indicator = False93 message_indicator = False
@@ -90,14 +95,14 @@
90 message_indicator = False95 message_indicator = False
9196
92try:97try:
93 import appindicator98 from gi.repository import AppIndicator3 as AppIndicator
94 imageURI = 'file://' + PROJECT_ROOT_DIRECTORY + '/data/media/testdrive.png'99 imageURI = 'file://' + PROJECT_ROOT_DIRECTORY + '/data/media/testdrive.png'
95 application_indicator = True100 application_indicator = True
96except:101except:
97 application_indicator = False102 application_indicator = False
98103
99104
100class TestdrivegtkWindow(gtk.Window):105class TestdrivegtkWindow(Gtk.Window):
101 __gtype_name__ = "TestdrivegtkWindow"106 __gtype_name__ = "TestdrivegtkWindow"
102107
103 # To construct a new instance of this method, the following notable 108 # To construct a new instance of this method, the following notable
@@ -133,6 +138,7 @@
133 # Get a reference to the builder and set up the signals.138 # Get a reference to the builder and set up the signals.
134 self.builder = builder139 self.builder = builder
135 self.builder.connect_signals(self)140 self.builder.connect_signals(self)
141 self.window = self.builder.get_object("testdrivegtk_window")
136 #self.td = td142 #self.td = td
137 self.virt = None143 self.virt = None
138 self.sync_threads = []144 self.sync_threads = []
@@ -145,7 +151,7 @@
145 # about LaunchpadIntegration151 # about LaunchpadIntegration
146 helpmenu = self.builder.get_object('helpMenu')152 helpmenu = self.builder.get_object('helpMenu')
147 if helpmenu:153 if helpmenu:
148 LaunchpadIntegration.set_sourcepackagename('testdrive')154 LaunchpadIntegration.set_sourcepackagename('testdrive-gtk')
149 LaunchpadIntegration.add_items(helpmenu, 0, False, True)155 LaunchpadIntegration.add_items(helpmenu, 0, False, True)
150 else:156 else:
151 launchpad_available = False157 launchpad_available = False
@@ -184,22 +190,22 @@
184 self.application_indicator_menu()190 self.application_indicator_menu()
185191
186 def application_indicator_menu(self):192 def application_indicator_menu(self):
187 self.appindicator = appindicator.Indicator ("testdrive", "indicator-messages", appindicator.CATEGORY_APPLICATION_STATUS)193 self.appindicator = AppIndicator.Indicator.new("testdrive", "indicator-messages", AppIndicator.IndicatorCategory.APPLICATION_STATUS)
188 self.appindicator.set_status (appindicator.STATUS_PASSIVE)194 self.appindicator.set_status (AppIndicator.IndicatorStatus.PASSIVE)
189 #self.appindicator.set_icon("testdrive-indicator")195 #self.appindicator.set_icon("testdrive-indicator")
190 self.appindicator.set_icon("testdrive-attention")196 self.appindicator.set_icon("testdrive-attention")
191 #self.appindicator.set_attention_icon("distributor-logo")197 #self.appindicator.set_attention_icon("distributor-logo")
192198
193 # create a menu199 # create a menu
194 self.app_indicator_menu = gtk.Menu()200 self.app_indicator_menu = Gtk.Menu()
195201
196 # create items for the menu - labels, checkboxes, radio buttons and images are supported:202 # create items for the menu - labels, checkboxes, radio buttons and images are supported:
197 item = gtk.MenuItem("Pre-release available for testing!")203 item = Gtk.MenuItem.new_with_label("Pre-release available for testing!")
198 item.connect("activate", self.on_indicator_message_clicked, item)204 item.connect("activate", self.on_indicator_message_clicked, item)
199 item.show()205 item.show()
200 self.app_indicator_menu.append(item)206 self.app_indicator_menu.append(item)
201207
202 image = gtk.ImageMenuItem(gtk.STOCK_QUIT)208 image = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_QUIT, None)
203 image.connect("activate", self.quit)209 image.connect("activate", self.quit)
204 image.show()210 image.show()
205211
@@ -207,21 +213,21 @@
207 self.app_indicator_menu.show()213 self.app_indicator_menu.show()
208 self.appindicator.set_menu(self.app_indicator_menu)214 self.appindicator.set_menu(self.app_indicator_menu)
209215
210 gobject.timeout_add_seconds(self.timea, self.on_check_qa_releases_available, self.timea)216 GObject.timeout_add_seconds(self.timea, self.on_check_qa_releases_available, self.timea)
211 gobject.timeout_add_seconds(self.timeb, self.on_check_qa_releases_available, self.timeb)217 GObject.timeout_add_seconds(self.timeb, self.on_check_qa_releases_available, self.timeb)
212218
213 # Initializes the indicator219 # Initializes the indicator
214 def messaging_indicator_menu(self):220 def messaging_indicator_menu(self):
215 DESKTOP_FILE = "/usr/share/applications/testdrive-gtk.desktop"221 DESKTOP_FILE = "/usr/share/applications/testdrive-gtk.desktop"
216 # Initializes the Server222 # Initializes the Server
217 server = indicate.indicate_server_ref_default()223 server = Indicate.IndicateServer_ref_default()
218 server.set_type("message.testdrive")224 server.set_type("message.testdrive")
219 server.set_desktop_file(DESKTOP_FILE)225 server.set_desktop_file(DESKTOP_FILE)
220 server.connect("server-display", self.on_indicator_server_activate)226 server.connect("server-display", self.on_indicator_server_activate)
221 server.show()227 server.show()
222228
223 # Initializes the Indicator229 # Initializes the Indicator
224 self.indicator = indicate.Indicator()230 self.indicator = Indicate.Indicator()
225 self.indicator.set_property("name", "Pre-release available for testing!")231 self.indicator.set_property("name", "Pre-release available for testing!")
226 self.indicator.set_property_time("time", time.time())232 self.indicator.set_property_time("time", time.time())
227 #indicator.show()233 #indicator.show()
@@ -229,8 +235,8 @@
229 self.indicator.connect("user-display", self.on_indicator_message_clicked)235 self.indicator.connect("user-display", self.on_indicator_message_clicked)
230236
231 # Checks every 3600 seconds - hour - (If TestDrive is open that long)237 # Checks every 3600 seconds - hour - (If TestDrive is open that long)
232 gobject.timeout_add_seconds(self.timea, self.on_check_qa_releases_available, self.timea)238 GObject.timeout_add_seconds(self.timea, self.on_check_qa_releases_available, self.timea)
233 gobject.timeout_add_seconds(self.timeb, self.on_check_qa_releases_available, self.timeb)239 GObject.timeout_add_seconds(self.timeb, self.on_check_qa_releases_available, self.timeb)
234240
235 # Checks for the availability of ISOs at iso.qa.ubuntu.com and displays notification if so.241 # Checks for the availability of ISOs at iso.qa.ubuntu.com and displays notification if so.
236 def on_check_qa_releases_available(self, time):242 def on_check_qa_releases_available(self, time):
@@ -249,7 +255,7 @@
249 global notifications_available255 global notifications_available
250 if notifications_available:256 if notifications_available:
251 # Notification257 # Notification
252 self.notification = pynotify.Notification("TestDrive an Ubuntu ISO!", "Pre-release available for testing!", imageURI)258 self.notification = Notify.Notification("TestDrive an Ubuntu ISO!", "Pre-release available for testing!", imageURI)
253 self.notification.show()259 self.notification.show()
254 global message_indicator260 global message_indicator
255 if message_indicator:261 if message_indicator:
@@ -257,7 +263,7 @@
257 self.indicator.set_property_bool("draw-attention", True)263 self.indicator.set_property_bool("draw-attention", True)
258 global application_indicator264 global application_indicator
259 if application_indicator:265 if application_indicator:
260 self.appindicator.set_status(appindicator.STATUS_ACTIVE)266 self.appindicator.set_status(AppIndicator.IndicatorStatus.ACTIVE)
261 self.notified = True267 self.notified = True
262 return False268 return False
263269
@@ -272,12 +278,12 @@
272 if message_indicator:278 if message_indicator:
273 self.indicator.hide()279 self.indicator.hide()
274 if application_indicator:280 if application_indicator:
275 self.appindicator.set_status(appindicator.STATUS_PASSIVE)281 self.appindicator.set_status(AppIndicator.IndicatorStatus.PASSIVE)
276282
277 # Click event for Indicator Server.283 # Click event for Indicator Server.
278 def on_indicator_server_activate(self, server, timestamp):284 def on_indicator_server_activate(self, server, timestamp):
279 # TODO: Should show TestDrive if it has been minimized285 # TODO: Should show TestDrive if it has been minimized
280 print "Server has been clicked"286 print("Server has been clicked")
281287
282 def update_status_bar(self):288 def update_status_bar(self):
283 data1 = _("<b>Release:</b> %s") % self.td.r289 data1 = _("<b>Release:</b> %s") % self.td.r
@@ -296,7 +302,7 @@
296 prefs = PreferencesTestdrivegtkDialog.PreferencesTestdrivegtkDialog()302 prefs = PreferencesTestdrivegtkDialog.PreferencesTestdrivegtkDialog()
297 response = prefs.run()303 response = prefs.run()
298 ui_recreate = False304 ui_recreate = False
299 if response == gtk.RESPONSE_OK:305 if response == Gtk.ResponseType.OK:
300 # Make any updates based on changed preferences here.306 # Make any updates based on changed preferences here.
301 #self.td = prefs.get_preferences()307 #self.td = prefs.get_preferences()
302 #self.notebook.destroy()308 #self.notebook.destroy()
@@ -323,7 +329,7 @@
323 other = AddOtherTestdrivegtkDialog.AddOtherTestdrivegtkDialog(self.td.CACHE)329 other = AddOtherTestdrivegtkDialog.AddOtherTestdrivegtkDialog(self.td.CACHE)
324 other.set_title(_("Add an ISO to TestDrive"))330 other.set_title(_("Add an ISO to TestDrive"))
325 response = other.run()331 response = other.run()
326 if response == gtk.RESPONSE_OK:332 if response == Gtk.ResponseType.OK:
327 # Recreate the UI for Other ISOs if saved has been clicked333 # Recreate the UI for Other ISOs if saved has been clicked
328 self.notebook.destroy()334 self.notebook.destroy()
329 self.create_isos_interface()335 self.create_isos_interface()
@@ -343,17 +349,18 @@
343 return349 return
344 title = _("TestDrive an ISO or Disk Image")350 title = _("TestDrive an ISO or Disk Image")
345 filename = None351 filename = None
346 testdrives = gtk.FileFilter()352 testdrives = Gtk.FileFilter()
353 testdrives.set_name(_("ISOs & Disk Images"))
347 testdrives.add_pattern("*.iso")354 testdrives.add_pattern("*.iso")
348 testdrives.add_pattern("*.img")355 testdrives.add_pattern("*.img")
349356
350 chooser = gtk.FileChooserDialog(title,action=gtk.FILE_CHOOSER_ACTION_SAVE,357 chooser = Gtk.FileChooserDialog(title,action=Gtk.FileChooserAction.SAVE,
351 buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))358 buttons=(Gtk.STOCK_CANCEL,Gtk.ResponseType.CANCEL,Gtk.STOCK_OPEN,Gtk.ResponseType.OK))
352 chooser.add_filter(testdrives)359 chooser.add_filter(testdrives)
353 # Run Chooser Dialog360 # Run Chooser Dialog
354 response = chooser.run()361 response = chooser.run()
355362
356 if response == gtk.RESPONSE_OK:363 if response == Gtk.ResponseType.OK:
357 filename = chooser.get_filename()364 filename = chooser.get_filename()
358 subprocess.Popen(['testdrive', '-u', filename], stdout=subprocess.PIPE)365 subprocess.Popen(['testdrive', '-u', filename], stdout=subprocess.PIPE)
359 pass366 pass
@@ -374,26 +381,26 @@
374 t[1].stop()381 t[1].stop()
375 # Class function to cleanup the IMG Cache382 # Class function to cleanup the IMG Cache
376 self.cleanup_img_cache()383 self.cleanup_img_cache()
377 gtk.main_quit()384 Gtk.main_quit()
378385
379 def on_warn_dialog(self, data=None):386 def on_warn_dialog(self, data=None):
380 warnbox = gtk.MessageDialog(self, 387 warnbox = Gtk.MessageDialog(self,
381 gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, 388 Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.WARNING,
382 gtk.BUTTONS_CLOSE, data)389 Gtk.ButtonsType.CLOSE, data)
383 warnbox.run()390 warnbox.run()
384 warnbox.destroy()391 warnbox.destroy()
385392
386 def on_error_dialog(self, data=None):393 def on_error_dialog(self, data=None):
387 errorbox = gtk.MessageDialog(self, 394 errorbox = Gtk.MessageDialog(self,
388 gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, 395 Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.ERROR,
389 gtk.BUTTONS_CLOSE, data)396 Gtk.ButtonsType.CLOSE, data)
390 errorbox.run()397 errorbox.run()
391 errorbox.destroy()398 errorbox.destroy()
392399
393 def on_info_dialog(self, data=None):400 def on_info_dialog(self, data=None):
394 infobox = gtk.MessageDialog(self, 401 infobox = Gtk.MessageDialog(self,
395 gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, 402 Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.INFO,
396 gtk.BUTTONS_CLOSE, data)403 Gtk.ButtonsType.CLOSE, data)
397 infobox.run()404 infobox.run()
398 infobox.destroy()405 infobox.destroy()
399406
@@ -519,13 +526,13 @@
519 vm_id = 0526 vm_id = 0
520 ISO = iso_list527 ISO = iso_list
521 # Create TABS528 # Create TABS
522 vbox_tabs = self.builder.get_object("flavor-tabs")529 box_tabs = self.builder.get_object("flavor-tabs")
523 self.notebook = gtk.Notebook()530 self.notebook = Gtk.Notebook()
524 self.notebook.set_scrollable(True)531 self.notebook.set_scrollable(True)
525 self.notebook.set_tab_pos(gtk.POS_TOP)532 self.notebook.set_tab_pos(Gtk.PositionType.TOP)
526 self.notebook.set_border_width(10)533 self.notebook.set_border_width(10)
527 self.notebook.connect("switch-page", self.on_distro_tab_change)534 self.notebook.connect("switch-page", self.on_distro_tab_change)
528 vbox_tabs.add(self.notebook)535 box_tabs.add(self.notebook)
529 self.show_tabs = True536 self.show_tabs = True
530 self.show_border = True537 self.show_border = True
531538
@@ -546,126 +553,131 @@
546 ######## Layout of the UI Creation ##########553 ######## Layout of the UI Creation ##########
547 #############################################554 #############################################
548 # Scroll555 # Scroll
549 # vbox556 # box
550 # frame-i386557 # frame-i386
551 # vbox2558 # box2
552 # table per ISO (with labels, checkbox)559 # table per ISO (with labels, checkbox)
553 # frame-amd64560 # frame-amd64
554 # vbox2561 # box2
555 # table per ISO (with labels, checkbox)562 # table per ISO (with labels, checkbox)
556 for dist in distros:563 for dist in distros:
557 scroll = gtk.ScrolledWindow(None)564 scroll = Gtk.ScrolledWindow(None)
558 scroll.set_shadow_type(gtk.SHADOW_NONE)565 scroll.set_shadow_type(Gtk.ShadowType.NONE)
559 scroll.set_name(dist)566 scroll.set_name(dist)
560 vbox = gtk.VBox()567 box = Gtk.Box()
561 scroll.add_with_viewport(vbox)568 box.set_orientation(Gtk.Orientation.VERTICAL)
562 scroll.get_children()[0].set_shadow_type(gtk.SHADOW_NONE)569 scroll.add_with_viewport(box)
563 scroll.set_policy(gtk.POLICY_NEVER,gtk.POLICY_AUTOMATIC)570 scroll.get_children()[0].set_shadow_type(Gtk.ShadowType.NONE)
571 scroll.set_policy(Gtk.PolicyType.NEVER,Gtk.PolicyType.AUTOMATIC)
564 scroll.show()572 scroll.show()
565 for arch in self.td.m:573 for arch in self.td.m:
566 c = 0574 c = 0
567 fr_arch = gtk.Frame(arch)575 fr_arch_label = Gtk.Label()
568 fr_arch.set_shadow_type(gtk.SHADOW_NONE)576 fr_arch_label.set_visible(True)
577 fr_arch_label.set_markup("<span weight=\"bold\">" + arch + "</span>")
578 fr_arch = Gtk.Frame(label_widget=fr_arch_label)
579 fr_arch.set_shadow_type(Gtk.ShadowType.NONE)
569 fr_arch.set_border_width(10)580 fr_arch.set_border_width(10)
570 vbox2 = gtk.VBox()581 box2 = Gtk.Box()
571 vbox2.set_border_width(10)582 box2.set_orientation(Gtk.Orientation.VERTICAL)
583 box2.set_border_width(10)
572 for iso in ISO:584 for iso in ISO:
573 if iso['category'] == dist and iso['arch'] == arch:585 if iso['category'] == dist and iso['arch'] == arch:
574 c = c + 1586 c = c + 1
575 table = gtk.Table(2, 3, False)587 table = Gtk.Table(2, 3, False)
576 lb_iso_name = gtk.CheckButton("%s - (%s)" % (iso["name"], self.td.r))588 lb_iso_name = Gtk.CheckButton("%s - (%s)" % (iso["name"], self.td.r))
577 lb_iso_name.show()589 lb_iso_name.show()
578 filename = os.path.basename(iso["url"])590 filename = os.path.basename(iso["url"])
579 path = "%s/%s_%s" % (self.td.CACHE_ISO, iso["category"], filename)591 path = "%s/%s_%s" % (self.td.CACHE_ISO, iso["category"], filename)
580 if os.path.exists(path):592 if os.path.exists(path):
581 lb_cache = gtk.Label(_("<i> CACHE: [%s]</i>") % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getmtime(path)))))593 lb_cache = Gtk.Label(label=_("<i> CACHE: [%s]</i>") % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getmtime(path)))))
582 else:594 else:
583 lb_cache = gtk.Label(_("<i> CACHE: [empty]</i>"))595 lb_cache = Gtk.Label(label=_("<i> CACHE: [empty]</i>"))
584 lb_cache.set_use_markup(True)596 lb_cache.set_use_markup(True)
585 # To align to righ otherwise it is centered597 # To align to right otherwise it is centered
586 lb_cache.set_alignment(0,0)598 lb_cache.set_alignment(0,0)
587 lb_cache.show()599 lb_cache.show()
588 # Adding the Spiiner600 # Adding the Spinner
589 spin = gtk.Spinner()601 spin = Gtk.Spinner()
590 spin.set_size_request(18, -1);602 spin.set_size_request(18, -1);
591 spin.hide()603 spin.hide()
592 #lb_iso_name.connect("clicked", self.on_select_iso_clicked, spin, lb_cache, iso["url"], iso["category"], vm_id)604 #lb_iso_name.connect("clicked", self.on_select_iso_clicked, spin, lb_cache, iso["url"], iso["category"], vm_id)
593 lb_iso_name.connect("clicked", self.on_select_iso_clicked, vm_id)605 lb_iso_name.connect("clicked", self.on_select_iso_clicked, vm_id)
594 ISOLIST.append({"vm_id":vm_id, "url":iso["url"], "prefix":iso["category"], "spinner":spin, "lb_status":lb_cache})606 ISOLIST.append({"vm_id":vm_id, "url":iso["url"], "prefix":iso["category"], "spinner":spin, "lb_status":lb_cache})
595 vm_id += 1607 vm_id += 1
596 table.attach(lb_iso_name, 0, 3, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND)608 table.attach(lb_iso_name, 0, 3, 0, 1, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND)
597 table.attach(spin, 0, 1, 1, 2, gtk.FILL, gtk.FILL | gtk.EXPAND)609 table.attach(spin, 0, 1, 1, 2, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND)
598 table.attach(lb_cache, 1, 2, 1, 2, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 0, 5)610 table.attach(lb_cache, 1, 2, 1, 2, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, 0, 5)
599 #table.attach(lb_progress, 2, 3, 1, 2, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND)611 #table.attach(lb_progress, 2, 3, 1, 2, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND)
600 table.show()612 table.show()
601 viewport = gtk.Viewport()613 viewport = Gtk.Viewport()
602 viewport.add(table)614 viewport.add(table)
603 viewport.set_border_width(2)615 viewport.set_border_width(2)
604 viewport.set_shadow_type(gtk.SHADOW_ETCHED_IN)616 viewport.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
605 viewport.show()617 viewport.show()
606 vbox2.add(viewport)618 box2.add(viewport)
607619
608 if iso['category'] == dist and iso['category'] == 'other':620 if iso['category'] == dist and iso['category'] == 'other':
609 c = c + 1621 c = c + 1
610 table = gtk.Table(2, 3, False)622 table = Gtk.Table(2, 3, False)
611 lb_iso_name = gtk.CheckButton("%s" % iso["name"])623 lb_iso_name = Gtk.CheckButton("%s" % iso["name"])
612 lb_iso_name.show()624 lb_iso_name.show()
613 filename = os.path.basename(iso["url"])625 filename = os.path.basename(iso["url"])
614 path = "%s/%s_%s" % (self.td.CACHE_ISO, iso["category"], filename)626 path = "%s/%s_%s" % (self.td.CACHE_ISO, iso["category"], filename)
615 if os.path.exists(path):627 if os.path.exists(path):
616 lb_cache = gtk.Label(_("<i> CACHE: [%s]</i>") % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getmtime(path)))))628 lb_cache = Gtk.Label(label=_("<i> CACHE: [%s]</i>") % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getmtime(path)))))
617 else:629 else:
618 lb_cache = gtk.Label(_("<i> CACHE: [empty]</i>"))630 lb_cache = Gtk.Label(label=_("<i> CACHE: [empty]</i>"))
619 lb_cache.set_use_markup(True)631 lb_cache.set_use_markup(True)
620 # To align to righ otherwise it is centered632 # To align to right otherwise it is centered
621 lb_cache.set_alignment(0,0)633 lb_cache.set_alignment(0,0)
622 lb_cache.show()634 lb_cache.show()
623 # Adding the Spiiner635 # Adding the Spinner
624 spin = gtk.Spinner()636 spin = Gtk.Spinner()
625 spin.set_size_request(18, -1);637 spin.set_size_request(18, -1);
626 spin.hide()638 spin.hide()
627 #lb_iso_name.connect("clicked", self.on_select_iso_clicked, spin, lb_cache, iso["url"], iso["category"], vm_id)639 #lb_iso_name.connect("clicked", self.on_select_iso_clicked, spin, lb_cache, iso["url"], iso["category"], vm_id)
628 lb_iso_name.connect("clicked", self.on_select_iso_clicked, vm_id)640 lb_iso_name.connect("clicked", self.on_select_iso_clicked, vm_id)
629 ISOLIST.append({"vm_id":vm_id, "url":iso["url"], "prefix":iso["category"], "spinner":spin, "lb_status":lb_cache})641 ISOLIST.append({"vm_id":vm_id, "url":iso["url"], "prefix":iso["category"], "spinner":spin, "lb_status":lb_cache})
630 vm_id += 1642 vm_id += 1
631 table.attach(lb_iso_name, 0, 3, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND)643 table.attach(lb_iso_name, 0, 3, 0, 1, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND)
632 table.attach(spin, 0, 1, 1, 2, gtk.FILL, gtk.FILL | gtk.EXPAND)644 table.attach(spin, 0, 1, 1, 2, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND)
633 table.attach(lb_cache, 1, 2, 1, 2, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 0, 5)645 table.attach(lb_cache, 1, 2, 1, 2, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, 0, 5)
634 #table.attach(lb_progress, 2, 3, 1, 2, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND)646 #table.attach(lb_progress, 2, 3, 1, 2, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND)
635 table.show()647 table.show()
636 viewport = gtk.Viewport()648 viewport = Gtk.Viewport()
637 viewport.add(table)649 viewport.add(table)
638 viewport.set_border_width(2)650 viewport.set_border_width(2)
639 viewport.set_shadow_type(gtk.SHADOW_ETCHED_IN)651 viewport.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
640 viewport.show()652 viewport.show()
641 vbox2.add(viewport)653 box2.add(viewport)
642654
643 if c == 0:655 if c == 0:
644 if dist == 'other':656 if dist == 'other':
645 no_isos_label = gtk.Label()657 no_isos_label = Gtk.Label()
646 no_isos_label.set_markup(_("<b><i>There are no Other ISOs yet...</i></b>"))658 no_isos_label.set_markup(_("<b><i>There are no Other ISOs yet...</i></b>"))
647 else:659 else:
648 no_isos_label = gtk.Label()660 no_isos_label = Gtk.Label()
649 no_isos_label.set_markup(_("<b><i>There are no ISOs for this architecture yet...</i></b>"))661 no_isos_label.set_markup(_("<b><i>There are no ISOs for this architecture yet...</i></b>"))
650 no_isos_label.show()662 no_isos_label.show()
651 vbox2.add(no_isos_label)663 box2.add(no_isos_label)
652664
653 vbox2.show()665 box2.show()
654666
655 if dist != 'other':667 if dist != 'other':
656 fr_arch.add(vbox2)668 fr_arch.add(box2)
657 fr_arch.show()669 fr_arch.show()
658 vbox.pack_start(fr_arch, expand=False, fill=False, padding=0)670 box.pack_start(fr_arch, False, False, 0)
659 vbox.show()671 box.show()
660 else:672 else:
661 vbox.pack_start(vbox2, expand=False, fill=False, padding=0)673 box.pack_start(box2, False, False, 0)
662 vbox.show()674 box.show()
663 break675 break
664676
665 # Create Tabs677 # Create Tabs
666 for lb_iso_name in TAB_LABEL:678 for lb_iso_name in TAB_LABEL:
667 if dist == lb_iso_name["dist"]:679 if dist == lb_iso_name["dist"]:
668 self.notebook.append_page(scroll, gtk.Label(lb_iso_name["label"]))680 self.notebook.append_page(scroll, Gtk.Label(label=lb_iso_name["label"]))
669 break681 break
670 self.notebook.show()682 self.notebook.show()
671683
@@ -673,37 +685,37 @@
673 ###########################################################685 ###########################################################
674 ########## Create CD and Launch Buttons Handling ##########686 ########## Create CD and Launch Buttons Handling ##########
675 ###########################################################687 ###########################################################
676 # obtain vbox from glade688 # obtain box from glade
677 vbox = self.builder.get_object("vbox2")689 box = self.builder.get_object("box2")
678 # Create and setup buttonbox690 # Create and setup buttonbox
679 bbox = gtk.HButtonBox()691 bbox = Gtk.ButtonBox()
680 bbox.set_spacing(5)692 bbox.set_spacing(5)
681 bbox.set_layout(gtk.BUTTONBOX_END)693 bbox.set_layout(Gtk.ButtonBoxStyle.END)
682 # Add Button694 # Add Button
683 self.btn_add_iso = gtk.Button(_("Add ISO"))695 self.btn_add_iso = Gtk.Button(_("Add ISO"))
684 self.btn_add_iso.connect("clicked", self.new_other_iso)696 self.btn_add_iso.connect("clicked", self.new_other_iso)
685 self.btn_add_iso.set_sensitive(False)697 self.btn_add_iso.set_sensitive(False)
686 self.btn_add_iso.show()698 self.btn_add_iso.show()
687 bbox.pack_start(self.btn_add_iso)699 bbox.pack_start(self.btn_add_iso, True, True, 0)
688700
689 # Create Buttons701 # Create Buttons
690 button = gtk.Button(_("Create USB Disk"))702 button = Gtk.Button(_("Create USB Disk"))
691 button.connect("clicked", self.on_create_iso_disk_clicked, 'Create Disk')703 button.connect("clicked", self.on_create_iso_disk_clicked, 'Create Disk')
692 button.show()704 button.show()
693 bbox.pack_start(button)705 bbox.pack_start(button, True, True, 0)
694706
695 button = gtk.Button(_("Sync"))707 button = Gtk.Button(_("Sync"))
696 button.connect("clicked", self.on_sync_iso_clicked, 'Sync')708 button.connect("clicked", self.on_sync_iso_clicked, 'Sync')
697 button.show()709 button.show()
698 bbox.pack_start(button)710 bbox.pack_start(button, True, True, 0)
699711
700 button = gtk.Button(_("Launch"))712 button = Gtk.Button(_("Launch"))
701 button.connect("clicked", self.on_launch_button_clicked, 'Launch')713 button.connect("clicked", self.on_launch_button_clicked, 'Launch')
702 button.show()714 button.show()
703 bbox.pack_start(button)715 bbox.pack_start(button, True, True, 0)
704 bbox.show()716 bbox.show()
705717
706 vbox.pack_start(bbox, True, True)718 box.pack_start(bbox, True, True, 0)
707719
708 #def on_select_iso_clicked(self, widget, spin, status_label, url=None, iso_path_header=None, vm_id=None):720 #def on_select_iso_clicked(self, widget, spin, status_label, url=None, iso_path_header=None, vm_id=None):
709 #ISOLIST.append({"vm_id":vm_id, "url":iso["url"], "prefix":iso["category"], "spin":spin, "lb_status":lb_cache})721 #ISOLIST.append({"vm_id":vm_id, "url":iso["url"], "prefix":iso["category"], "spin":spin, "lb_status":lb_cache})
@@ -893,9 +905,9 @@
893 self.spin.hide()905 self.spin.hide()
894 break906 break
895907
896 #gtk.gdk.threads_enter()908 #Gdk.threads_enter()
897 #self.status_label.set_markup("<b><i>%s</i></b>" % text)909 #self.status_label.set_markup("<b><i>%s</i></b>" % text)
898 #gtk.gdk.threads_leave()910 #Gdk.threads_leave()
899 line = self.p.stdout.readline(1024).strip()911 line = self.p.stdout.readline(1024).strip()
900 match = percent.search(line)912 match = percent.search(line)
901 if match != None:913 if match != None:
@@ -1017,5 +1029,13 @@
10171029
1018 # Run the application.1030 # Run the application.
1019 window = TestdrivegtkWindow()1031 window = TestdrivegtkWindow()
1032 # Default icon is useful because dialogs will pick it up automatically
1033 # This needs to account for the different places this app can be run from
1034 if os.path.isfile("data/media/icon.png"):
1035 window.set_default_icon_from_file("data/media/icon.png")
1036 elif os.path.isfile("../data/media/icon.png"):
1037 window.set_default_icon_from_file("../data/media/icon.png")
1038 elif os.path.isfile("/usr/share/testdrivegtk/media/icon.png"):
1039 window.set_default_icon_from_file("/usr/share/testdrivegtk/media/icon.png")
1020 window.show()1040 window.show()
1021 gtk.main()1041 Gtk.main()
10221042
=== removed file 'data/ui/AboutTestdrivegtkDialog.ui'
--- data/ui/AboutTestdrivegtkDialog.ui 2010-07-30 18:48:31 +0000
+++ data/ui/AboutTestdrivegtkDialog.ui 1970-01-01 00:00:00 +0000
@@ -1,56 +0,0 @@
1<?xml version="1.0"?>
2<interface>
3 <requires lib="gtk+" version="2.16"/>
4 <!-- interface-requires about_testdrivegtk_dialog 1.0 -->
5 <!-- interface-naming-policy toplevel-contextual -->
6 <object class="AboutTestdrivegtkDialog" id="about_testdrivegtk_dialog">
7 <property name="border_width">5</property>
8 <property name="window_position">center</property>
9 <property name="icon">../media/icon.png</property>
10 <property name="type_hint">normal</property>
11 <property name="has_separator">False</property>
12 <property name="program_name">TestDrive PyGTK</property>
13 <property name="copyright">Copyright (C) 2010 Canonical Ltd.</property>
14 <property name="license"># Copyright (C) 2010 Canonical Ltd.
15#
16# Authors:
17# Andres Rodriguez &lt;andreserl@ubuntu.com&gt;
18# This program is free software: you can redistribute it and/or modify it
19# under the terms of the GNU General Public License version 3, as published
20# by the Free Software Foundation.
21#
22# This program is distributed in the hope that it will be useful, but
23# WITHOUT ANY WARRANTY; without even the implied warranties of
24# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
25# PURPOSE. See the GNU General Public License for more details.
26#
27# You should have received a copy of the GNU General Public License along
28# with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.
29</property>
30 <property name="authors">Copyright (C) 2010 Canonical Ltd.
31
32Authors:
33 Andres Rodriguez &lt;andreserl@ubuntu.com&gt;</property>
34 <property name="logo">../media/logo.png</property>
35 <child internal-child="vbox">
36 <object class="GtkVBox" id="dialog-vbox1">
37 <property name="visible">True</property>
38 <property name="spacing">2</property>
39 <child>
40 <placeholder/>
41 </child>
42 <child internal-child="action_area">
43 <object class="GtkHButtonBox" id="dialog-action_area1">
44 <property name="visible">True</property>
45 <property name="layout_style">end</property>
46 </object>
47 <packing>
48 <property name="expand">False</property>
49 <property name="pack_type">end</property>
50 <property name="position">0</property>
51 </packing>
52 </child>
53 </object>
54 </child>
55 </object>
56</interface>
570
=== modified file 'data/ui/AddOtherTestdrivegtkDialog.ui'
--- data/ui/AddOtherTestdrivegtkDialog.ui 2010-07-30 18:48:31 +0000
+++ data/ui/AddOtherTestdrivegtkDialog.ui 2011-08-23 08:30:25 +0000
@@ -1,27 +1,31 @@
1<?xml version="1.0"?>1<?xml version="1.0" encoding="UTF-8"?>
2<interface>2<interface>
3 <requires lib="gtk+" version="2.16"/>
4 <!-- interface-requires addothertestdrivegtk_dialog 1.0 -->3 <!-- interface-requires addothertestdrivegtk_dialog 1.0 -->
5 <!-- interface-naming-policy project-wide -->4 <!-- interface-naming-policy project-wide -->
5 <requires lib="gtk+" version="2.16"/>
6 <object class="GtkAction" id="action1"/>
6 <object class="AddothertestdrivegtkDialog" id="addothertestdrivegtk_dialog">7 <object class="AddothertestdrivegtkDialog" id="addothertestdrivegtk_dialog">
7 <property name="width_request">550</property>8 <property name="width_request">550</property>
9 <property name="can_focus">False</property>
8 <property name="border_width">5</property>10 <property name="border_width">5</property>
9 <property name="window_position">center-always</property>11 <property name="window_position">center-always</property>
10 <property name="icon">../media/icon.png</property>
11 <property name="type_hint">normal</property>12 <property name="type_hint">normal</property>
12 <property name="has_separator">False</property>
13 <child internal-child="vbox">13 <child internal-child="vbox">
14 <object class="GtkVBox" id="dialog-vbox1">14 <object class="GtkBox" id="dialog-vbox1">
15 <property name="visible">True</property>15 <property name="visible">True</property>
16 <property name="can_focus">False</property>
17 <property name="orientation">vertical</property>
16 <property name="spacing">2</property>18 <property name="spacing">2</property>
17 <child>19 <child>
18 <object class="GtkTable" id="tb_other_iso">20 <object class="GtkTable" id="tb_other_iso">
19 <property name="visible">True</property>21 <property name="visible">True</property>
22 <property name="can_focus">False</property>
20 <property name="n_rows">3</property>23 <property name="n_rows">3</property>
21 <property name="n_columns">4</property>24 <property name="n_columns">4</property>
22 <child>25 <child>
23 <object class="GtkLabel" id="label1">26 <object class="GtkLabel" id="label1">
24 <property name="visible">True</property>27 <property name="visible">True</property>
28 <property name="can_focus">False</property>
25 <property name="xalign">0</property>29 <property name="xalign">0</property>
26 <property name="label" translatable="yes">&lt;b&gt;Description:&lt;/b&gt;</property>30 <property name="label" translatable="yes">&lt;b&gt;Description:&lt;/b&gt;</property>
27 <property name="use_markup">True</property>31 <property name="use_markup">True</property>
@@ -34,6 +38,7 @@
34 <child>38 <child>
35 <object class="GtkLabel" id="label3">39 <object class="GtkLabel" id="label3">
36 <property name="visible">True</property>40 <property name="visible">True</property>
41 <property name="can_focus">False</property>
37 <property name="xalign">0</property>42 <property name="xalign">0</property>
38 <property name="label" translatable="yes">&lt;b&gt;Sync Protocol:&lt;/b&gt;</property>43 <property name="label" translatable="yes">&lt;b&gt;Sync Protocol:&lt;/b&gt;</property>
39 <property name="use_markup">True</property>44 <property name="use_markup">True</property>
@@ -48,6 +53,7 @@
48 <child>53 <child>
49 <object class="GtkLabel" id="label2">54 <object class="GtkLabel" id="label2">
50 <property name="visible">True</property>55 <property name="visible">True</property>
56 <property name="can_focus">False</property>
51 <property name="xalign">0</property>57 <property name="xalign">0</property>
52 <property name="label" translatable="yes">&lt;b&gt;URL:&lt;/b&gt;</property>58 <property name="label" translatable="yes">&lt;b&gt;URL:&lt;/b&gt;</property>
53 <property name="use_markup">True</property>59 <property name="use_markup">True</property>
@@ -63,7 +69,7 @@
63 <object class="GtkEntry" id="txt_other_url">69 <object class="GtkEntry" id="txt_other_url">
64 <property name="visible">True</property>70 <property name="visible">True</property>
65 <property name="can_focus">True</property>71 <property name="can_focus">True</property>
66 <property name="invisible_char">&#x25CF;</property>72 <property name="invisible_char">●</property>
67 </object>73 </object>
68 <packing>74 <packing>
69 <property name="left_attach">1</property>75 <property name="left_attach">1</property>
@@ -77,7 +83,7 @@
77 <object class="GtkEntry" id="txt_other_desc">83 <object class="GtkEntry" id="txt_other_desc">
78 <property name="visible">True</property>84 <property name="visible">True</property>
79 <property name="can_focus">True</property>85 <property name="can_focus">True</property>
80 <property name="invisible_char">&#x25CF;</property>86 <property name="invisible_char">●</property>
81 </object>87 </object>
82 <packing>88 <packing>
83 <property name="left_attach">1</property>89 <property name="left_attach">1</property>
@@ -86,38 +92,52 @@
86 </packing>92 </packing>
87 </child>93 </child>
88 <child>94 <child>
89 <object class="GtkVBox" id="vbox2">95 <object class="GtkBox" id="box2">
90 <property name="visible">True</property>96 <property name="visible">True</property>
97 <property name="can_focus">False</property>
91 <property name="border_width">5</property>98 <property name="border_width">5</property>
99 <property name="orientation">vertical</property>
92 <child>100 <child>
93 <object class="GtkButton" id="btn_add_iso">101 <object class="GtkButton" id="btn_add_iso">
94 <property name="label" translatable="yes">Add</property>102 <property name="label">gtk-add</property>
95 <property name="visible">True</property>103 <property name="visible">True</property>
96 <property name="can_focus">True</property>104 <property name="can_focus">True</property>
97 <property name="receives_default">True</property>105 <property name="receives_default">True</property>
106 <property name="use_action_appearance">False</property>
107 <property name="use_stock">True</property>
98 </object>108 </object>
99 <packing>109 <packing>
110 <property name="expand">True</property>
111 <property name="fill">True</property>
100 <property name="position">0</property>112 <property name="position">0</property>
101 </packing>113 </packing>
102 </child>114 </child>
103 <child>115 <child>
104 <object class="GtkButton" id="btn_edit_iso">116 <object class="GtkButton" id="btn_edit_iso">
105 <property name="label" translatable="yes">Edit</property>117 <property name="label">gtk-edit</property>
106 <property name="can_focus">True</property>118 <property name="can_focus">True</property>
107 <property name="receives_default">True</property>119 <property name="receives_default">True</property>
120 <property name="use_action_appearance">False</property>
121 <property name="use_stock">True</property>
108 </object>122 </object>
109 <packing>123 <packing>
124 <property name="expand">True</property>
125 <property name="fill">True</property>
110 <property name="position">1</property>126 <property name="position">1</property>
111 </packing>127 </packing>
112 </child>128 </child>
113 <child>129 <child>
114 <object class="GtkButton" id="btn_del_iso">130 <object class="GtkButton" id="btn_del_iso">
115 <property name="label" translatable="yes">Delete</property>131 <property name="label">gtk-delete</property>
116 <property name="visible">True</property>132 <property name="visible">True</property>
117 <property name="can_focus">True</property>133 <property name="can_focus">True</property>
118 <property name="receives_default">True</property>134 <property name="receives_default">True</property>
135 <property name="use_action_appearance">False</property>
136 <property name="use_stock">True</property>
119 </object>137 </object>
120 <packing>138 <packing>
139 <property name="expand">True</property>
140 <property name="fill">True</property>
121 <property name="position">2</property>141 <property name="position">2</property>
122 </packing>142 </packing>
123 </child>143 </child>
@@ -139,6 +159,7 @@
139 </object>159 </object>
140 <packing>160 <packing>
141 <property name="expand">False</property>161 <property name="expand">False</property>
162 <property name="fill">True</property>
142 <property name="position">0</property>163 <property name="position">0</property>
143 </packing>164 </packing>
144 </child>165 </child>
@@ -152,12 +173,13 @@
152 <property name="visible">True</property>173 <property name="visible">True</property>
153 <property name="can_focus">True</property>174 <property name="can_focus">True</property>
154 <property name="border_width">5</property>175 <property name="border_width">5</property>
155 <property name="hscrollbar_policy">automatic</property>
156 <property name="vscrollbar_policy">automatic</property>
157 <child>176 <child>
158 <object class="GtkTreeView" id="tv_other_isos_list">177 <object class="GtkTreeView" id="tv_other_isos_list">
159 <property name="visible">True</property>178 <property name="visible">True</property>
160 <property name="can_focus">True</property>179 <property name="can_focus">True</property>
180 <child internal-child="selection">
181 <object class="GtkTreeSelection" id="treeview-selection1"/>
182 </child>
161 </object>183 </object>
162 </child>184 </child>
163 </object>185 </object>
@@ -165,24 +187,30 @@
165 <child type="label">187 <child type="label">
166 <object class="GtkLabel" id="lb_expander">188 <object class="GtkLabel" id="lb_expander">
167 <property name="visible">True</property>189 <property name="visible">True</property>
190 <property name="can_focus">False</property>
168 <property name="label" translatable="yes">Other ISO List:</property>191 <property name="label" translatable="yes">Other ISO List:</property>
169 </object>192 </object>
170 </child>193 </child>
171 </object>194 </object>
172 <packing>195 <packing>
196 <property name="expand">False</property>
197 <property name="fill">True</property>
173 <property name="position">1</property>198 <property name="position">1</property>
174 </packing>199 </packing>
175 </child>200 </child>
176 <child internal-child="action_area">201 <child internal-child="action_area">
177 <object class="GtkHButtonBox" id="dialog-action_area1">202 <object class="GtkButtonBox" id="dialog-action_area1">
178 <property name="visible">True</property>203 <property name="visible">True</property>
204 <property name="can_focus">False</property>
179 <property name="layout_style">end</property>205 <property name="layout_style">end</property>
180 <child>206 <child>
181 <object class="GtkButton" id="button2">207 <object class="GtkButton" id="button2">
182 <property name="label" translatable="yes">Cancel</property>208 <property name="label">gtk-cancel</property>
183 <property name="visible">True</property>209 <property name="visible">True</property>
184 <property name="can_focus">True</property>210 <property name="can_focus">True</property>
185 <property name="receives_default">True</property>211 <property name="receives_default">True</property>
212 <property name="use_action_appearance">False</property>
213 <property name="use_stock">True</property>
186 </object>214 </object>
187 <packing>215 <packing>
188 <property name="expand">False</property>216 <property name="expand">False</property>
@@ -192,11 +220,13 @@
192 </child>220 </child>
193 <child>221 <child>
194 <object class="GtkButton" id="button1">222 <object class="GtkButton" id="button1">
195 <property name="label">Save</property>223 <property name="label">gtk-save</property>
196 <property name="visible">True</property>224 <property name="visible">True</property>
197 <property name="can_focus">True</property>225 <property name="can_focus">True</property>
198 <property name="receives_default">True</property>226 <property name="receives_default">True</property>
199 <signal name="clicked" handler="ok"/>227 <property name="use_action_appearance">False</property>
228 <property name="use_stock">True</property>
229 <signal name="clicked" handler="ok" swapped="no"/>
200 </object>230 </object>
201 <packing>231 <packing>
202 <property name="expand">False</property>232 <property name="expand">False</property>
@@ -207,6 +237,7 @@
207 </object>237 </object>
208 <packing>238 <packing>
209 <property name="expand">False</property>239 <property name="expand">False</property>
240 <property name="fill">True</property>
210 <property name="pack_type">end</property>241 <property name="pack_type">end</property>
211 <property name="position">2</property>242 <property name="position">2</property>
212 </packing>243 </packing>
@@ -218,5 +249,4 @@
218 <action-widget response="-5">button1</action-widget>249 <action-widget response="-5">button1</action-widget>
219 </action-widgets>250 </action-widgets>
220 </object>251 </object>
221 <object class="GtkAction" id="action1"/>
222</interface>252</interface>
223253
=== modified file 'data/ui/PreferencesTestdrivegtkDialog.ui'
--- data/ui/PreferencesTestdrivegtkDialog.ui 2011-08-17 21:05:48 +0000
+++ data/ui/PreferencesTestdrivegtkDialog.ui 2011-08-23 08:30:25 +0000
@@ -1,43 +1,26 @@
1<?xml version="1.0" encoding="UTF-8"?>1<?xml version="1.0" encoding="UTF-8"?>
2<interface>2<interface>
3 <requires lib="gtk+" version="2.16"/>
4 <!-- interface-requires preferences_testdrivegtk_dialog 1.0 -->3 <!-- interface-requires preferences_testdrivegtk_dialog 1.0 -->
5 <!-- interface-naming-policy project-wide -->4 <!-- interface-naming-policy project-wide -->
6 <object class="GtkListStore" id="liststore1">5 <!-- interface-requires gtk+ 3.0 -->
7 <columns>6 <object class="GtkAdjustment" id="adj_smp">
8 <!-- column-name mem -->7 <property name="step_increment">1</property>
9 <column type="gchararray"/>8 <property name="page_increment">10</property>
10 </columns>9 <property name="lower">1</property>
11 <data>
12 <row>
13 <col id="0" translatable="yes">Other...</col>
14 </row>
15 </data>
16 </object>
17 <object class="GtkListStore" id="liststore2">
18 <columns>
19 <!-- column-name disk_size -->
20 <column type="gchararray"/>
21 </columns>
22 <data>
23 <row>
24 <col id="0" translatable="yes">Other...</col>
25 </row>
26 </data>
27 </object>10 </object>
28 <object class="PreferencesTestdrivegtkDialog" id="preferences_testdrivegtk_dialog">11 <object class="PreferencesTestdrivegtkDialog" id="preferences_testdrivegtk_dialog">
29 <property name="can_focus">False</property>12 <property name="can_focus">False</property>
30 <property name="border_width">5</property>13 <property name="border_width">5</property>
31 <property name="window_position">center</property>14 <property name="window_position">center</property>
32 <property name="icon">../media/icon.png</property>
33 <property name="type_hint">normal</property>15 <property name="type_hint">normal</property>
34 <child internal-child="vbox">16 <child internal-child="vbox">
35 <object class="GtkVBox" id="dialog-vbox1">17 <object class="GtkBox" id="dialog-box1">
36 <property name="visible">True</property>18 <property name="visible">True</property>
37 <property name="can_focus">False</property>19 <property name="can_focus">False</property>
20 <property name="orientation">vertical</property>
38 <property name="spacing">2</property>21 <property name="spacing">2</property>
39 <child internal-child="action_area">22 <child internal-child="action_area">
40 <object class="GtkHButtonBox" id="dialog-action_area1">23 <object class="GtkButtonBox" id="dialog-action_area1">
41 <property name="visible">True</property>24 <property name="visible">True</property>
42 <property name="can_focus">False</property>25 <property name="can_focus">False</property>
43 <property name="layout_style">end</property>26 <property name="layout_style">end</property>
@@ -59,11 +42,12 @@
59 </child>42 </child>
60 <child>43 <child>
61 <object class="GtkButton" id="button1">44 <object class="GtkButton" id="button1">
62 <property name="label">Save</property>45 <property name="label">gtk-save</property>
63 <property name="visible">True</property>46 <property name="visible">True</property>
64 <property name="can_focus">True</property>47 <property name="can_focus">True</property>
65 <property name="receives_default">True</property>48 <property name="receives_default">True</property>
66 <property name="use_action_appearance">False</property>49 <property name="use_action_appearance">False</property>
50 <property name="use_stock">True</property>
67 <signal name="clicked" handler="ok" swapped="no"/>51 <signal name="clicked" handler="ok" swapped="no"/>
68 </object>52 </object>
69 <packing>53 <packing>
@@ -91,7 +75,7 @@
91 <property name="resize_mode">queue</property>75 <property name="resize_mode">queue</property>
92 <property name="shadow_type">none</property>76 <property name="shadow_type">none</property>
93 <child>77 <child>
94 <object class="GtkVBox" id="vbox1">78 <object class="GtkBox" id="box1">
95 <property name="visible">True</property>79 <property name="visible">True</property>
96 <property name="can_focus">False</property>80 <property name="can_focus">False</property>
97 <child>81 <child>
@@ -143,8 +127,6 @@
143 <property name="invisible_char">•</property>127 <property name="invisible_char">•</property>
144 <property name="primary_icon_activatable">False</property>128 <property name="primary_icon_activatable">False</property>
145 <property name="secondary_icon_activatable">False</property>129 <property name="secondary_icon_activatable">False</property>
146 <property name="primary_icon_sensitive">True</property>
147 <property name="secondary_icon_sensitive">True</property>
148 </object>130 </object>
149 <packing>131 <packing>
150 <property name="left_attach">1</property>132 <property name="left_attach">1</property>
@@ -176,8 +158,6 @@
176 <property name="invisible_char">•</property>158 <property name="invisible_char">•</property>
177 <property name="primary_icon_activatable">False</property>159 <property name="primary_icon_activatable">False</property>
178 <property name="secondary_icon_activatable">False</property>160 <property name="secondary_icon_activatable">False</property>
179 <property name="primary_icon_sensitive">True</property>
180 <property name="secondary_icon_sensitive">True</property>
181 </object>161 </object>
182 <packing>162 <packing>
183 <property name="left_attach">1</property>163 <property name="left_attach">1</property>
@@ -241,8 +221,6 @@
241 <property name="invisible_char">•</property>221 <property name="invisible_char">•</property>
242 <property name="primary_icon_activatable">False</property>222 <property name="primary_icon_activatable">False</property>
243 <property name="secondary_icon_activatable">False</property>223 <property name="secondary_icon_activatable">False</property>
244 <property name="primary_icon_sensitive">True</property>
245 <property name="secondary_icon_sensitive">True</property>
246 </object>224 </object>
247 <packing>225 <packing>
248 <property name="left_attach">1</property>226 <property name="left_attach">1</property>
@@ -259,8 +237,6 @@
259 <property name="invisible_char">•</property>237 <property name="invisible_char">•</property>
260 <property name="primary_icon_activatable">False</property>238 <property name="primary_icon_activatable">False</property>
261 <property name="secondary_icon_activatable">False</property>239 <property name="secondary_icon_activatable">False</property>
262 <property name="primary_icon_sensitive">True</property>
263 <property name="secondary_icon_sensitive">True</property>
264 </object>240 </object>
265 <packing>241 <packing>
266 <property name="left_attach">1</property>242 <property name="left_attach">1</property>
@@ -303,7 +279,7 @@
303 </packing>279 </packing>
304 </child>280 </child>
305 <child>281 <child>
306 <object class="GtkHBox" id="hbox1">282 <object class="GtkBox" id="box2">
307 <property name="visible">True</property>283 <property name="visible">True</property>
308 <property name="can_focus">False</property>284 <property name="can_focus">False</property>
309 <child>285 <child>
@@ -477,233 +453,236 @@
477 <property name="resize_mode">queue</property>453 <property name="resize_mode">queue</property>
478 <property name="shadow_type">none</property>454 <property name="shadow_type">none</property>
479 <child>455 <child>
480 <object class="GtkVBox" id="vbox2">456 <object class="GtkBox" id="box6">
481 <property name="visible">True</property>457 <property name="visible">True</property>
482 <property name="can_focus">False</property>458 <property name="can_focus">False</property>
459 <property name="orientation">vertical</property>
460 <property name="spacing">12</property>
483 <child>461 <child>
484 <object class="GtkAlignment" id="alignment2">462 <object class="GtkFrame" id="frame3">
485 <property name="visible">True</property>463 <property name="visible">True</property>
486 <property name="can_focus">False</property>464 <property name="can_focus">False</property>
487 <property name="top_padding">12</property>465 <property name="label_xalign">0</property>
488 <property name="bottom_padding">12</property>466 <property name="shadow_type">none</property>
489 <property name="left_padding">12</property>
490 <property name="right_padding">12</property>
491 <child>467 <child>
492 <object class="GtkVBox" id="vbox6">468 <object class="GtkAlignment" id="alignment3">
493 <property name="visible">True</property>469 <property name="visible">True</property>
494 <property name="can_focus">False</property>470 <property name="can_focus">False</property>
495 <property name="spacing">12</property>471 <property name="left_padding">12</property>
496 <child>472 <child>
497 <object class="GtkFrame" id="frame3">473 <object class="GtkBox" id="box5">
498 <property name="visible">True</property>474 <property name="visible">True</property>
499 <property name="can_focus">False</property>475 <property name="can_focus">False</property>
500 <property name="label_xalign">0</property>476 <property name="orientation">vertical</property>
501 <property name="shadow_type">none</property>477 <child>
502 <child>478 <object class="GtkRadioButton" id="opt_virt_kvm">
503 <object class="GtkAlignment" id="alignment3">479 <property name="label" translatable="yes">KVM</property>
504 <property name="visible">True</property>480 <property name="visible">True</property>
505 <property name="can_focus">False</property>481 <property name="can_focus">True</property>
506 <property name="left_padding">12</property>482 <property name="receives_default">False</property>
507 <child>483 <property name="use_action_appearance">False</property>
508 <object class="GtkVBox" id="vbox5">484 <property name="xalign">0</property>
509 <property name="visible">True</property>485 <property name="active">True</property>
510 <property name="can_focus">False</property>486 <property name="draw_indicator">True</property>
511 <child>487 </object>
512 <object class="GtkRadioButton" id="opt_virt_kvm">488 <packing>
513 <property name="label" translatable="yes">KVM</property>489 <property name="expand">True</property>
514 <property name="visible">True</property>490 <property name="fill">True</property>
515 <property name="can_focus">True</property>491 <property name="position">0</property>
516 <property name="receives_default">False</property>492 </packing>
517 <property name="use_action_appearance">False</property>493 </child>
518 <property name="active">True</property>494 <child>
519 <property name="draw_indicator">True</property>495 <object class="GtkRadioButton" id="opt_virt_vbox">
520 </object>496 <property name="label" translatable="yes">VirtualBox</property>
521 <packing>497 <property name="visible">True</property>
522 <property name="expand">True</property>498 <property name="can_focus">True</property>
523 <property name="fill">True</property>499 <property name="receives_default">False</property>
524 <property name="position">0</property>500 <property name="use_action_appearance">False</property>
525 </packing>501 <property name="xalign">0</property>
526 </child>502 <property name="draw_indicator">True</property>
527 <child>503 <property name="group">opt_virt_kvm</property>
528 <object class="GtkRadioButton" id="opt_virt_vbox">504 </object>
529 <property name="label" translatable="yes">VirtualBox</property>505 <packing>
530 <property name="visible">True</property>506 <property name="expand">True</property>
531 <property name="can_focus">True</property>507 <property name="fill">True</property>
532 <property name="receives_default">False</property>508 <property name="position">1</property>
533 <property name="use_action_appearance">False</property>509 </packing>
534 <property name="draw_indicator">True</property>510 </child>
535 <property name="group">opt_virt_kvm</property>511 <child>
536 </object>512 <object class="GtkRadioButton" id="opt_virt_parallels">
537 <packing>513 <property name="label" translatable="yes">Parallels</property>
538 <property name="expand">True</property>514 <property name="visible">True</property>
539 <property name="fill">True</property>515 <property name="can_focus">True</property>
540 <property name="position">1</property>516 <property name="receives_default">False</property>
541 </packing>517 <property name="use_action_appearance">False</property>
542 </child>518 <property name="xalign">0</property>
543 <child>519 <property name="draw_indicator">True</property>
544 <object class="GtkRadioButton" id="opt_virt_parallels">520 <property name="group">opt_virt_kvm</property>
545 <property name="label" translatable="yes">Parallels</property>521 </object>
546 <property name="visible">True</property>522 <packing>
547 <property name="can_focus">True</property>523 <property name="expand">True</property>
548 <property name="receives_default">False</property>524 <property name="fill">True</property>
549 <property name="use_action_appearance">False</property>525 <property name="position">2</property>
550 <property name="draw_indicator">True</property>526 </packing>
551 <property name="group">opt_virt_kvm</property>
552 </object>
553 <packing>
554 <property name="expand">True</property>
555 <property name="fill">True</property>
556 <property name="position">2</property>
557 </packing>
558 </child>
559 </object>
560 </child>
561 </object>
562 </child>
563 <child type="label">
564 <object class="GtkLabel" id="label12">
565 <property name="visible">True</property>
566 <property name="can_focus">False</property>
567 <property name="ypad">3</property>
568 <property name="label" translatable="yes">&lt;b&gt;Hypervisor&lt;/b&gt;</property>
569 <property name="use_markup">True</property>
570 </object>
571 </child>527 </child>
572 </object>528 </object>
573 <packing>
574 <property name="expand">False</property>
575 <property name="fill">True</property>
576 <property name="position">0</property>
577 </packing>
578 </child>529 </child>
530 </object>
531 </child>
532 <child type="label">
533 <object class="GtkLabel" id="label12">
534 <property name="visible">True</property>
535 <property name="can_focus">False</property>
536 <property name="ypad">3</property>
537 <property name="label" translatable="yes">&lt;b&gt;Hypervisor&lt;/b&gt;</property>
538 <property name="use_markup">True</property>
539 </object>
540 </child>
541 </object>
542 <packing>
543 <property name="expand">False</property>
544 <property name="fill">True</property>
545 <property name="position">0</property>
546 </packing>
547 </child>
548 <child>
549 <object class="GtkFrame" id="frame1">
550 <property name="visible">True</property>
551 <property name="can_focus">False</property>
552 <property name="label_xalign">0</property>
553 <property name="shadow_type">none</property>
554 <child>
555 <object class="GtkAlignment" id="alignment6">
556 <property name="visible">True</property>
557 <property name="can_focus">False</property>
558 <property name="left_padding">12</property>
579 <child>559 <child>
580 <object class="GtkTable" id="tb_virtualization_prefs">560 <object class="GtkGrid" id="grid1">
581 <property name="visible">True</property>561 <property name="visible">True</property>
582 <property name="can_focus">False</property>562 <property name="can_focus">False</property>
583 <property name="n_rows">5</property>563 <property name="margin_top">6</property>
584 <property name="n_columns">3</property>564 <property name="row_spacing">6</property>
585 <property name="column_spacing">6</property>565 <property name="column_spacing">6</property>
586 <child>566 <child>
587 <object class="GtkLabel" id="label3">567 <object class="GtkLabel" id="lbl_mem_size">
588 <property name="visible">True</property>568 <property name="visible">True</property>
589 <property name="can_focus">False</property>569 <property name="can_focus">False</property>
590 <property name="xalign">0</property>570 <property name="xalign">0</property>
591 <property name="ypad">3</property>
592 <property name="label" translatable="yes">&lt;b&gt;Virtual Machine Options&lt;/b&gt;</property>
593 <property name="use_markup">True</property>
594 </object>
595 <packing>
596 <property name="right_attach">3</property>
597 </packing>
598 </child>
599 <child>
600 <object class="GtkLabel" id="label10">
601 <property name="visible">True</property>
602 <property name="can_focus">False</property>
603 <property name="xalign">1</property>
604 <property name="label" translatable="yes">Memory:</property>571 <property name="label" translatable="yes">Memory:</property>
605 <property name="use_markup">True</property>572 <property name="use_markup">True</property>
606 </object>573 </object>
607 <packing>574 <packing>
608 <property name="top_attach">1</property>575 <property name="left_attach">0</property>
609 <property name="bottom_attach">2</property>576 <property name="top_attach">0</property>
610 <property name="x_options">GTK_FILL</property>577 <property name="width">1</property>
611 <property name="y_options">GTK_FILL</property>578 <property name="height">1</property>
612 </packing>579 </packing>
613 </child>580 </child>
614 <child>581 <child>
615 <object class="GtkLabel" id="label13">582 <object class="GtkLabel" id="lbl_mb">
616 <property name="visible">True</property>583 <property name="visible">True</property>
617 <property name="can_focus">False</property>584 <property name="can_focus">False</property>
618 <property name="xalign">1</property>585 <property name="xalign">0</property>
586 <property name="xpad">3</property>
587 <property name="label" translatable="yes">MB</property>
588 <property name="use_markup">True</property>
589 </object>
590 <packing>
591 <property name="left_attach">2</property>
592 <property name="top_attach">0</property>
593 <property name="width">1</property>
594 <property name="height">1</property>
595 </packing>
596 </child>
597 <child>
598 <object class="GtkLabel" id="lbl_disk_size">
599 <property name="visible">True</property>
600 <property name="can_focus">False</property>
601 <property name="xalign">0</property>
619 <property name="label" translatable="yes">Disk Size:</property>602 <property name="label" translatable="yes">Disk Size:</property>
620 <property name="use_markup">True</property>603 <property name="use_markup">True</property>
621 </object>604 </object>
622 <packing>605 <packing>
623 <property name="top_attach">2</property>606 <property name="left_attach">0</property>
624 <property name="bottom_attach">3</property>607 <property name="top_attach">1</property>
625 <property name="x_options">GTK_FILL</property>608 <property name="width">1</property>
626 <property name="y_options">GTK_FILL</property>609 <property name="height">1</property>
610 </packing>
611 </child>
612 <child>
613 <object class="GtkLabel" id="lbl_gb">
614 <property name="visible">True</property>
615 <property name="can_focus">False</property>
616 <property name="xalign">0</property>
617 <property name="xpad">3</property>
618 <property name="label" translatable="yes">GB</property>
619 <property name="use_markup">True</property>
620 </object>
621 <packing>
622 <property name="left_attach">2</property>
623 <property name="top_attach">1</property>
624 <property name="width">1</property>
625 <property name="height">1</property>
626 </packing>
627 </child>
628 <child>
629 <object class="GtkLabel" id="label_spacer2">
630 <property name="visible">True</property>
631 <property name="can_focus">False</property>
632 <property name="width_chars">10</property>
633 </object>
634 <packing>
635 <property name="left_attach">3</property>
636 <property name="top_attach">0</property>
637 <property name="width">1</property>
638 <property name="height">1</property>
639 </packing>
640 </child>
641 <child>
642 <object class="GtkLabel" id="lb_smp_nbr">
643 <property name="visible">True</property>
644 <property name="can_focus">False</property>
645 <property name="xalign">0</property>
646 <property name="label" translatable="yes">Processors:</property>
647 <property name="use_markup">True</property>
648 </object>
649 <packing>
650 <property name="left_attach">0</property>
651 <property name="top_attach">2</property>
652 <property name="width">1</property>
653 <property name="height">1</property>
654 </packing>
655 </child>
656 <child>
657 <object class="GtkSpinButton" id="spin_smp_nbr">
658 <property name="visible">True</property>
659 <property name="can_focus">True</property>
660 <property name="has_frame">False</property>
661 <property name="invisible_char">•</property>
662 <property name="invisible_char_set">True</property>
663 <property name="adjustment">adj_smp</property>
664 <property name="numeric">True</property>
665 </object>
666 <packing>
667 <property name="left_attach">1</property>
668 <property name="top_attach">2</property>
669 <property name="width">1</property>
670 <property name="height">1</property>
627 </packing>671 </packing>
628 </child>672 </child>
629 <child>673 <child>
630 <object class="GtkLabel" id="lb_kvm_args">674 <object class="GtkLabel" id="lb_kvm_args">
631 <property name="visible">True</property>675 <property name="visible">True</property>
632 <property name="can_focus">False</property>676 <property name="can_focus">False</property>
633 <property name="xalign">1</property>677 <property name="xalign">0</property>
634 <property name="label" translatable="yes">KVM Args:</property>678 <property name="label" translatable="yes">KVM Args:</property>
635 <property name="use_markup">True</property>679 <property name="use_markup">True</property>
636 </object>680 </object>
637 <packing>681 <packing>
682 <property name="left_attach">0</property>
638 <property name="top_attach">3</property>683 <property name="top_attach">3</property>
639 <property name="bottom_attach">4</property>684 <property name="width">1</property>
640 <property name="x_options">GTK_FILL</property>685 <property name="height">1</property>
641 <property name="y_options">GTK_FILL</property>
642 </packing>
643 </child>
644 <child>
645 <object class="GtkLabel" id="lb_smp_nbr">
646 <property name="visible">True</property>
647 <property name="can_focus">False</property>
648 <property name="xalign">1</property>
649 <property name="label" translatable="yes">Processors:</property>
650 <property name="use_markup">True</property>
651 </object>
652 <packing>
653 <property name="top_attach">4</property>
654 <property name="bottom_attach">5</property>
655 <property name="x_options">GTK_FILL</property>
656 <property name="y_options">GTK_FILL</property>
657 </packing>
658 </child>
659 <child>
660 <object class="GtkComboBoxEntry" id="cbe_mem_size">
661 <property name="width_request">100</property>
662 <property name="visible">True</property>
663 <property name="can_focus">False</property>
664 <property name="model">liststore1</property>
665 <property name="text_column">0</property>
666 <child internal-child="entry">
667 <object class="GtkEntry" id="comboboxentry-entry2">
668 <property name="can_focus">False</property>
669 <property name="primary_icon_activatable">False</property>
670 <property name="secondary_icon_activatable">False</property>
671 <property name="primary_icon_sensitive">True</property>
672 <property name="secondary_icon_sensitive">True</property>
673 </object>
674 </child>
675 </object>
676 <packing>
677 <property name="left_attach">1</property>
678 <property name="right_attach">2</property>
679 <property name="top_attach">1</property>
680 <property name="bottom_attach">2</property>
681 <property name="y_options"></property>
682 </packing>
683 </child>
684 <child>
685 <object class="GtkComboBoxEntry" id="cbe_disk_size">
686 <property name="width_request">100</property>
687 <property name="visible">True</property>
688 <property name="can_focus">False</property>
689 <property name="model">liststore2</property>
690 <property name="text_column">0</property>
691 <child internal-child="entry">
692 <object class="GtkEntry" id="comboboxentry-entry4">
693 <property name="can_focus">False</property>
694 <property name="primary_icon_activatable">False</property>
695 <property name="secondary_icon_activatable">False</property>
696 <property name="primary_icon_sensitive">True</property>
697 <property name="secondary_icon_sensitive">True</property>
698 </object>
699 </child>
700 </object>
701 <packing>
702 <property name="left_attach">1</property>
703 <property name="right_attach">2</property>
704 <property name="top_attach">2</property>
705 <property name="bottom_attach">3</property>
706 <property name="y_options"></property>
707 </packing>686 </packing>
708 </child>687 </child>
709 <child>688 <child>
@@ -711,73 +690,15 @@
711 <property name="visible">True</property>690 <property name="visible">True</property>
712 <property name="can_focus">True</property>691 <property name="can_focus">True</property>
713 <property name="invisible_char">•</property>692 <property name="invisible_char">•</property>
693 <property name="invisible_char_set">True</property>
714 <property name="primary_icon_activatable">False</property>694 <property name="primary_icon_activatable">False</property>
715 <property name="secondary_icon_activatable">False</property>695 <property name="secondary_icon_activatable">False</property>
716 <property name="primary_icon_sensitive">True</property>
717 <property name="secondary_icon_sensitive">True</property>
718 </object>696 </object>
719 <packing>697 <packing>
720 <property name="left_attach">1</property>698 <property name="left_attach">1</property>
721 <property name="right_attach">2</property>
722 <property name="top_attach">3</property>699 <property name="top_attach">3</property>
723 <property name="bottom_attach">4</property>700 <property name="width">3</property>
724 <property name="y_options"></property>701 <property name="height">1</property>
725 </packing>
726 </child>
727 <child>
728 <object class="GtkEntry" id="txt_smp_nbr">
729 <property name="width_request">50</property>
730 <property name="visible">True</property>
731 <property name="can_focus">True</property>
732 <property name="invisible_char">•</property>
733 <property name="xalign">0.5</property>
734 <property name="primary_icon_activatable">False</property>
735 <property name="secondary_icon_activatable">False</property>
736 <property name="primary_icon_sensitive">True</property>
737 <property name="secondary_icon_sensitive">True</property>
738 </object>
739 <packing>
740 <property name="left_attach">1</property>
741 <property name="right_attach">2</property>
742 <property name="top_attach">4</property>
743 <property name="bottom_attach">5</property>
744 <property name="y_options"></property>
745 </packing>
746 </child>
747 <child>
748 <object class="GtkLabel" id="label16">
749 <property name="visible">True</property>
750 <property name="can_focus">False</property>
751 <property name="xalign">0</property>
752 <property name="xpad">3</property>
753 <property name="label" translatable="yes">MB</property>
754 <property name="use_markup">True</property>
755 </object>
756 <packing>
757 <property name="left_attach">2</property>
758 <property name="right_attach">3</property>
759 <property name="top_attach">1</property>
760 <property name="bottom_attach">2</property>
761 <property name="x_options">GTK_FILL</property>
762 <property name="y_options">GTK_FILL</property>
763 </packing>
764 </child>
765 <child>
766 <object class="GtkLabel" id="label17">
767 <property name="visible">True</property>
768 <property name="can_focus">False</property>
769 <property name="xalign">0</property>
770 <property name="xpad">3</property>
771 <property name="label" translatable="yes">GB</property>
772 <property name="use_markup">True</property>
773 </object>
774 <packing>
775 <property name="left_attach">2</property>
776 <property name="right_attach">3</property>
777 <property name="top_attach">2</property>
778 <property name="bottom_attach">3</property>
779 <property name="x_options">GTK_FILL</property>
780 <property name="y_options">GTK_FILL</property>
781 </packing>702 </packing>
782 </child>703 </child>
783 <child>704 <child>
@@ -788,35 +709,68 @@
788 </object>709 </object>
789 <packing>710 <packing>
790 <property name="left_attach">2</property>711 <property name="left_attach">2</property>
791 <property name="right_attach">3</property>712 <property name="top_attach">2</property>
792 <property name="top_attach">4</property>713 <property name="width">1</property>
793 <property name="bottom_attach">5</property>714 <property name="height">1</property>
794 <property name="x_options">GTK_FILL</property>715 </packing>
795 <property name="y_options">GTK_FILL</property>716 </child>
796 </packing>717 <child>
797 </child>718 <object class="GtkComboBoxText" id="cbe_mem_size">
798 <child>719 <property name="visible">True</property>
799 <placeholder/>720 <property name="can_focus">False</property>
721 <property name="has_entry">True</property>
722 <property name="entry_text_column">0</property>
723 <child internal-child="entry">
724 <object class="GtkEntry" id="cbe_mem_size_entry">
725 <property name="can_focus">True</property>
726 </object>
727 </child>
728 </object>
729 <packing>
730 <property name="left_attach">1</property>
731 <property name="top_attach">0</property>
732 <property name="width">1</property>
733 <property name="height">1</property>
734 </packing>
735 </child>
736 <child>
737 <object class="GtkComboBoxText" id="cbe_disk_size">
738 <property name="visible">True</property>
739 <property name="can_focus">False</property>
740 <property name="has_entry">True</property>
741 <property name="entry_text_column">0</property>
742 <child internal-child="entry">
743 <object class="GtkEntry" id="cbe_disk_size_entry">
744 <property name="can_focus">True</property>
745 </object>
746 </child>
747 </object>
748 <packing>
749 <property name="left_attach">1</property>
750 <property name="top_attach">1</property>
751 <property name="width">1</property>
752 <property name="height">1</property>
753 </packing>
800 </child>754 </child>
801 </object>755 </object>
802 <packing>
803 <property name="expand">True</property>
804 <property name="fill">True</property>
805 <property name="position">1</property>
806 </packing>
807 </child>756 </child>
808 </object>757 </object>
809 </child>758 </child>
759 <child type="label">
760 <object class="GtkLabel" id="label2">
761 <property name="visible">True</property>
762 <property name="can_focus">False</property>
763 <property name="label" translatable="yes">&lt;b&gt;Virtual Machine Options&lt;/b&gt;</property>
764 <property name="use_markup">True</property>
765 </object>
766 </child>
810 </object>767 </object>
811 <packing>768 <packing>
812 <property name="expand">False</property>769 <property name="expand">True</property>
813 <property name="fill">True</property>770 <property name="fill">True</property>
814 <property name="position">0</property>771 <property name="position">1</property>
815 </packing>772 </packing>
816 </child>773 </child>
817 <child>
818 <placeholder/>
819 </child>
820 </object>774 </object>
821 </child>775 </child>
822 </object>776 </object>
@@ -842,9 +796,10 @@
842 <property name="resize_mode">queue</property>796 <property name="resize_mode">queue</property>
843 <property name="shadow_type">none</property>797 <property name="shadow_type">none</property>
844 <child>798 <child>
845 <object class="GtkVBox" id="vbox3">799 <object class="GtkBox" id="box3">
846 <property name="visible">True</property>800 <property name="visible">True</property>
847 <property name="can_focus">False</property>801 <property name="can_focus">False</property>
802 <property name="orientation">vertical</property>
848 <child>803 <child>
849 <object class="GtkAlignment" id="alignment4">804 <object class="GtkAlignment" id="alignment4">
850 <property name="visible">True</property>805 <property name="visible">True</property>
@@ -865,9 +820,10 @@
865 <property name="can_focus">False</property>820 <property name="can_focus">False</property>
866 <property name="left_padding">12</property>821 <property name="left_padding">12</property>
867 <child>822 <child>
868 <object class="GtkVBox" id="vbox4">823 <object class="GtkBox" id="box4">
869 <property name="visible">True</property>824 <property name="visible">True</property>
870 <property name="can_focus">False</property>825 <property name="can_focus">False</property>
826 <property name="orientation">vertical</property>
871 <child>827 <child>
872 <object class="GtkCheckButton" id="chk_flavor_ubuntu">828 <object class="GtkCheckButton" id="chk_flavor_ubuntu">
873 <property name="label" translatable="yes">Ubuntu</property>829 <property name="label" translatable="yes">Ubuntu</property>
874830
=== modified file 'data/ui/TestdrivegtkWindow.ui'
--- data/ui/TestdrivegtkWindow.ui 2010-08-21 08:11:40 +0000
+++ data/ui/TestdrivegtkWindow.ui 2011-08-23 08:30:25 +0000
@@ -1,6 +1,6 @@
1<?xml version="1.0"?>1<?xml version="1.0"?>
2<interface>2<interface>
3 <requires lib="gtk+" version="2.16"/>3 <!-- interface-requires gtk+ 3.0 -->
4 <!-- interface-requires testdrivegtk_window 1.0 -->4 <!-- interface-requires testdrivegtk_window 1.0 -->
5 <!-- interface-naming-policy project-wide -->5 <!-- interface-naming-policy project-wide -->
6 <!-- interface-local-resource-path ../media -->6 <!-- interface-local-resource-path ../media -->
@@ -8,11 +8,11 @@
8 <property name="title" translatable="yes">TestDrive</property>8 <property name="title" translatable="yes">TestDrive</property>
9 <property name="window_position">center</property>9 <property name="window_position">center</property>
10 <property name="default_height">500</property>10 <property name="default_height">500</property>
11 <property name="icon">../media/icon.png</property>
12 <signal name="destroy" handler="on_destroy"/>11 <signal name="destroy" handler="on_destroy"/>
13 <child>12 <child>
14 <object class="GtkVBox" id="vbox1">13 <object class="GtkVBox" id="box1">
15 <property name="visible">True</property>14 <property name="visible">True</property>
15 <property name="orientation">vertical</property>
16 <child>16 <child>
17 <object class="GtkMenuBar" id="menubar1">17 <object class="GtkMenuBar" id="menubar1">
18 <property name="visible">True</property>18 <property name="visible">True</property>
@@ -137,6 +137,7 @@
137 <child>137 <child>
138 <object class="GtkVBox" id="flavor-tabs">138 <object class="GtkVBox" id="flavor-tabs">
139 <property name="visible">True</property>139 <property name="visible">True</property>
140 <property name="orientation">vertical</property>
140 <child>141 <child>
141 <placeholder/>142 <placeholder/>
142 </child>143 </child>
@@ -146,9 +147,10 @@
146 </packing>147 </packing>
147 </child>148 </child>
148 <child>149 <child>
149 <object class="GtkVBox" id="vbox2">150 <object class="GtkBox" id="box2">
150 <property name="visible">True</property>151 <property name="visible">True</property>
151 <property name="border_width">12</property>152 <property name="border_width">12</property>
153 <property name="orientation">vertical</property>
152 <child>154 <child>
153 <placeholder/>155 <placeholder/>
154 </child>156 </child>
155157
=== removed file 'data/ui/about_testdrivegtk_dialog.xml'
--- data/ui/about_testdrivegtk_dialog.xml 2010-07-30 18:48:31 +0000
+++ data/ui/about_testdrivegtk_dialog.xml 1970-01-01 00:00:00 +0000
@@ -1,9 +0,0 @@
1<glade-catalog name="about_testdrivegtk_dialog" domain="glade-3"
2 depends="gtk+" version="1.0">
3 <glade-widget-classes>
4 <glade-widget-class title="About Testdrivegtk Dialog" name="AboutTestdrivegtkDialog"
5 generic-name="AboutTestdrivegtkDialog" parent="GtkAboutDialog"
6 icon-name="widget-gtk-about-dialog"/>
7 </glade-widget-classes>
8
9</glade-catalog>
100
=== modified file 'debian/compat'
--- debian/compat 2009-11-05 21:41:30 +0000
+++ debian/compat 2011-08-23 08:30:25 +0000
@@ -1,1 +1,1 @@
1618
22
=== modified file 'debian/control'
--- debian/control 2011-02-16 00:14:05 +0000
+++ debian/control 2011-08-23 08:30:25 +0000
@@ -2,9 +2,11 @@
2Section: python2Section: python
3Priority: extra3Priority: extra
4Maintainer: Dustin Kirkland <kirkland@ubuntu.com>4Maintainer: Dustin Kirkland <kirkland@ubuntu.com>
5Standards-Version: 3.8.35Standards-Version: 3.9.2
6Build-Depends: debhelper (>= 7), gettext-base, python, python-support (>= 0.6.4), python-distutils-extra (>= 2.10)6Build-Depends: debhelper (>= 8),
7XS-Python-Version: current7 gettext-base,
8 python (>= 2.6.6-3~),
9 python-distutils-extra (>= 2.10)
8Homepage: http://launchpad.net/testdrive10Homepage: http://launchpad.net/testdrive
9Vcs-Bzr: http://bazaar.launchpad.net/~kirkland/testdrive/trunk11Vcs-Bzr: http://bazaar.launchpad.net/~kirkland/testdrive/trunk
1012
@@ -22,7 +24,6 @@
2224
23Package: testdrive-common25Package: testdrive-common
24Architecture: all26Architecture: all
25XB-Python-Version: ${python:Versions}
26Depends: ${python:Depends}, ${misc:Depends},27Depends: ${python:Depends}, ${misc:Depends},
27 qemu-kvm | kvm ( >= 1:84+dfsg-0ubuntu12.4 ) | virtualbox-ose ( >= 3.1.6) | virtualbox-3.1 | virtualbox-3.2 | virtualbox-4.0,28 qemu-kvm | kvm ( >= 1:84+dfsg-0ubuntu12.4 ) | virtualbox-ose ( >= 3.1.6) | virtualbox-3.1 | virtualbox-3.2 | virtualbox-4.0,
28 rsync,29 rsync,
@@ -43,10 +44,9 @@
4344
44Package: testdrive-cli45Package: testdrive-cli
45Architecture: all46Architecture: all
46XB-Python-Version: ${python:Versions}
47Depends: ${misc:Depends},47Depends: ${misc:Depends},
48 ${python:Depends},48 ${python:Depends},
49 testdrive-common (= ${source:Version})49 testdrive-common (= ${source:Version})
50Description: run the daily Ubuntu ISO in a virtual machine (command line)50Description: run the daily Ubuntu ISO in a virtual machine (command line)
51 Testdrive helps you download and run the daily Ubuntu development ISO51 Testdrive helps you download and run the daily Ubuntu development ISO
52 in a virtual machine on your local hardware.52 in a virtual machine on your local hardware.
@@ -63,13 +63,15 @@
63Architecture: all63Architecture: all
64XB-Python-Version: ${python:Versions}64XB-Python-Version: ${python:Versions}
65Depends: ${misc:Depends},65Depends: ${misc:Depends},
66 ${python:Depends},66 ${python:Depends},
67 testdrive-common (= ${source:Version}),67 testdrive-common (= ${source:Version}),
68 python-gtk2,68 python-xdg,
69 python-notify,69 python-gobject,
70 python-xdg,70 gir1.2-appindicator3-0.1,
71 python-indicate,71 gir1.2-gtk-3.0,
72 python-launchpad-integration72 gir1.2-launchpad-integration-3.0,
73 gir1.2-indicate-0.6,
74 gir1.2-notify-0.7
73Description: run the daily Ubuntu ISO in a virtual machine (GTK Front-end)75Description: run the daily Ubuntu ISO in a virtual machine (GTK Front-end)
74 Testdrive helps you download and run the daily Ubuntu development ISO76 Testdrive helps you download and run the daily Ubuntu development ISO
75 in a virtual machine on your local hardware.77 in a virtual machine on your local hardware.
@@ -80,4 +82,4 @@
80 .82 .
81 Alternatively, you can use VirtualBox.83 Alternatively, you can use VirtualBox.
82 .84 .
83 This package contains the PyGTK Front-end for TestDrive.85 This package contains the GTK Front-end for TestDrive.
8486
=== modified file 'po/testdrive.pot'
--- po/testdrive.pot 2010-08-06 22:13:57 +0000
+++ po/testdrive.pot 2011-08-23 08:30:25 +0000
@@ -8,10 +8,11 @@
8msgstr ""8msgstr ""
9"Project-Id-Version: PACKAGE VERSION\n"9"Project-Id-Version: PACKAGE VERSION\n"
10"Report-Msgid-Bugs-To: \n"10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2010-08-06 18:04-0400\n"11"POT-Creation-Date: 2011-08-19 02:37-0400\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"14"Language-Team: LANGUAGE <LL@li.org>\n"
15"Language: \n"
15"MIME-Version: 1.0\n"16"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=CHARSET\n"17"Content-Type: text/plain; charset=CHARSET\n"
17"Content-Transfer-Encoding: 8bit\n"18"Content-Transfer-Encoding: 8bit\n"
@@ -24,174 +25,43 @@
24msgid "Test Drive an Ubuntu ISO"25msgid "Test Drive an Ubuntu ISO"
25msgstr ""26msgstr ""
2627
27#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:128#: ../bin/testdrive-gtk.py:48
28msgid "<b>Architectures:</b>"
29msgstr ""
30
31#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:2
32msgid "<b>Cache:</b>"
33msgstr ""
34
35#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:3
36msgid "<b>Data Paths</b>"
37msgstr ""
38
39#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:4
40msgid "<b>Disk Size:</b>"
41msgstr ""
42
43#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:5
44msgid "<b>GB</b>"
45msgstr ""
46
47#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:6
48msgid "<b>Hypervisor</b>"
49msgstr ""
50
51#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:7
52msgid "<b>ISO Cache:</b>"
53msgstr ""
54
55#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:8
56msgid "<b>ISO List Cache:</b>"
57msgstr ""
58
59#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:9
60msgid "<b>Image Cache:</b>"
61msgstr ""
62
63#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:10
64msgid "<b>KVM Args:</b>"
65msgstr ""
66
67#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:11
68msgid "<b>MB</b>"
69msgstr ""
70
71#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:12
72msgid "<b>Memory:</b>"
73msgstr ""
74
75#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:13
76msgid "<b>Processors:</b>"
77msgstr ""
78
79#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:14
80msgid "<b>Release:</b>"
81msgstr ""
82
83#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:15
84msgid "<b>Repository:</b>"
85msgstr ""
86
87#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:16
88msgid "<b>Ubuntu Flavors</b>"
89msgstr ""
90
91#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:17
92msgid "<b>Ubuntu Releases</b>"
93msgstr ""
94
95#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:18
96msgid "<b>Virtual Machine Options</b>"
97msgstr ""
98
99#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:19
100msgid "Clean"
101msgstr ""
102
103#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:20
104msgid "Distributions"
105msgstr ""
106
107#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:21
108msgid "Edubuntu"
109msgstr ""
110
111#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:22
112msgid "General"
113msgstr ""
114
115#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:23
116msgid "KVM"
117msgstr ""
118
119#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:24
120msgid "Kubuntu"
121msgstr ""
122
123#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:25
124msgid "Mythbuntu"
125msgstr ""
126
127#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:26 ../bin/testdrive-gtk.py:47
128msgid "Other"29msgid "Other"
129msgstr ""30msgstr ""
13031
131#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:27
132#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:36
133#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:37
134msgid "Other..."
135msgstr ""
136
137#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:28
138msgid "Parallels"
139msgstr ""
140
141#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:29
142msgid "Ubuntu"
143msgstr ""
144
145#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:30
146msgid "Ubuntu Studio"
147msgstr ""
148
149#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:31
150msgid "Update"
151msgstr ""
152
153#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:32
154msgid "VirtualBox"
155msgstr ""
156
157#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:33
158msgid "Virtualization"
159msgstr ""
160
161#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:34
162msgid "Xubuntu"
163msgstr ""
164
165#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:35
166msgid "amd64"
167msgstr ""
168
169#: ../data/ui/PreferencesTestdrivegtkDialog.ui.h:36
170msgid "i386"
171msgstr ""
172
173#. ##################################################################32#. ##################################################################
174#. ####### Obtaining the settings from the Preferences Class ########33#. ####### Obtaining the settings from the Preferences Class ########
175#. ##################################################################34#. ##################################################################
176#: ../bin/testdrive-gtk.py:13635#: ../bin/testdrive-gtk.py:157
177msgid "Instancing Preferences..."36msgid "Instancing Preferences..."
178msgstr ""37msgstr ""
17938
180#: ../bin/testdrive-gtk.py:15039#: ../bin/testdrive-gtk.py:240
40#, python-format
41msgid ""
42"Checking available ISOs at the ISO tracker [http://iso.qa.ubuntu.com] every "
43"%s seconds"
44msgstr ""
45
46#: ../bin/testdrive-gtk.py:245
47msgid "Unable to check the ISO tracker"
48msgstr ""
49
50#: ../bin/testdrive-gtk.py:283
181#, python-format51#, python-format
182msgid "<b>Release:</b> %s"52msgid "<b>Release:</b> %s"
183msgstr ""53msgstr ""
18454
185#: ../bin/testdrive-gtk.py:15155#: ../bin/testdrive-gtk.py:284
186#, python-format56#, python-format
187msgid "<b>ISO Repository:</b> http://%s.ubuntu.com/"57msgid "<b>ISO Repository:</b> http://%s.ubuntu.com/"
188msgstr ""58msgstr ""
18959
190#: ../bin/testdrive-gtk.py:17760#: ../bin/testdrive-gtk.py:324
191msgid "Add an ISO to TestDrive"61msgid "Add an ISO to TestDrive"
192msgstr ""62msgstr ""
19363
194#: ../bin/testdrive-gtk.py:19364#: ../bin/testdrive-gtk.py:340
195msgid ""65msgid ""
196"Unable to open because 'testdrive' is not installed.\n"66"Unable to open because 'testdrive' is not installed.\n"
197"Please install testdrive: \n"67"Please install testdrive: \n"
@@ -199,18 +69,18 @@
199"sudo apt-get install testdrive-cli"69"sudo apt-get install testdrive-cli"
200msgstr ""70msgstr ""
20171
202#: ../bin/testdrive-gtk.py:19772#: ../bin/testdrive-gtk.py:344
203msgid "TestDrive an ISO or Disk Image"73msgid "TestDrive an ISO or Disk Image"
204msgstr ""74msgstr ""
20575
206#. ##################################################################76#. ##################################################################
207#. ## Obtains the command for the Sync process based on Protocol ####77#. ## Obtains the command for the Sync process based on Protocol ####
208#. ##################################################################78#. ##################################################################
209#: ../bin/testdrive-gtk.py:27279#: ../bin/testdrive-gtk.py:419
210msgid "Obtaining the sync protocol for the specified ISO..."80msgid "Obtaining the sync protocol for the specified ISO..."
211msgstr ""81msgstr ""
21282
213#: ../bin/testdrive-gtk.py:275 ../bin/testdrive.py:32583#: ../bin/testdrive-gtk.py:422 ../bin/testdrive.py:375
214#, python-format84#, python-format
215msgid "Unsupported protocol [%s]"85msgid "Unsupported protocol [%s]"
216msgstr ""86msgstr ""
@@ -219,28 +89,28 @@
219#. #### Obtains the Virtualization Method, if not shows warnings ####89#. #### Obtains the Virtualization Method, if not shows warnings ####
220#. ##################################################################90#. ##################################################################
221#. Choose the virtualization engine91#. Choose the virtualization engine
222#: ../bin/testdrive-gtk.py:28692#: ../bin/testdrive-gtk.py:433
223msgid "Obtaining the virtualization method..."93msgid "Obtaining the virtualization method..."
224msgstr ""94msgstr ""
22595
226#: ../bin/testdrive-gtk.py:29096#: ../bin/testdrive-gtk.py:437
227msgid "Your CPU supports KVM acceleration; please install KVM"97msgid "Your CPU supports KVM acceleration; please install KVM"
228msgstr ""98msgstr ""
22999
230#: ../bin/testdrive-gtk.py:291100#: ../bin/testdrive-gtk.py:438
231msgid ""101msgid ""
232"Your CPU supports KVM acceleration; please install KVM:\n"102"Your CPU supports KVM acceleration; please install KVM:\n"
233"\n"103"\n"
234"sudo apt-get install qemu-kvm"104"sudo apt-get install qemu-kvm"
235msgstr ""105msgstr ""
236106
237#: ../bin/testdrive-gtk.py:295107#: ../bin/testdrive-gtk.py:442
238msgid ""108msgid ""
239"Your CPU does not support acceleration; run kvm-ok for more information; "109"Your CPU does not support acceleration; run kvm-ok for more information; "
240"then install VBox"110"then install VBox"
241msgstr ""111msgstr ""
242112
243#: ../bin/testdrive-gtk.py:296113#: ../bin/testdrive-gtk.py:443
244msgid ""114msgid ""
245"Your CPU does not support acceleration; run kvm-ok for more information;\n"115"Your CPU does not support acceleration; run kvm-ok for more information;\n"
246"then please install VirtualBox\n"116"then please install VirtualBox\n"
@@ -249,142 +119,120 @@
249"sudo apt-get install virtualbox-ose"119"sudo apt-get install virtualbox-ose"
250msgstr ""120msgstr ""
251121
252#: ../bin/testdrive-gtk.py:303 ../bin/testdrive.py:257
253msgid "Using KVM for virtual machine hosting..."
254msgstr ""
255
256#: ../bin/testdrive-gtk.py:306 ../bin/testdrive.py:260
257msgid "Using VirtualBox for virtual machine hosting..."
258msgstr ""
259
260#: ../bin/testdrive-gtk.py:309 ../bin/testdrive.py:263
261msgid "Using Parallels Desktop for virtual machine hosting..."
262msgstr ""
263
264#. ##################################################################122#. ##################################################################
265#. ### Obtains the list of ISO available from the iso list cache ####123#. ### Obtains the list of ISO available from the iso list cache ####
266#. ##################################################################124#. ##################################################################
267#. Try to retrieve the ISO list from the cache125#. Try to retrieve the ISO list from the cache
268#: ../bin/testdrive-gtk.py:318 ../bin/testdrive.py:298126#: ../bin/testdrive-gtk.py:456 ../bin/testdrive.py:348
269msgid "Retrieving the Ubuntu ISO list from cache..."127msgid "Retrieving the Ubuntu ISO list from cache..."
270msgstr ""128msgstr ""
271129
272#: ../bin/testdrive-gtk.py:322 ../bin/testdrive-gtk.py:323130#: ../bin/testdrive-gtk.py:460 ../bin/testdrive-gtk.py:461
273#: ../bin/testdrive.py:302131#: ../bin/testdrive.py:352
274msgid "Unable to retrieve the Ubuntu ISO list from cache..."132msgid "Unable to retrieve the Ubuntu ISO list from cache..."
275msgstr ""133msgstr ""
276134
277#. lb_cache = gtk.Label("CACHE: [%s] %s" % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getmtime(path))), filename))135#: ../bin/testdrive-gtk.py:581 ../bin/testdrive-gtk.py:616
278#: ../bin/testdrive-gtk.py:441 ../bin/testdrive-gtk.py:476136#: ../bin/testdrive-gtk.py:923
279#: ../bin/testdrive-gtk.py:774
280#, python-format137#, python-format
281msgid "<i> CACHE: [%s]</i>"138msgid "<i> CACHE: [%s]</i>"
282msgstr ""139msgstr ""
283140
284#: ../bin/testdrive-gtk.py:443 ../bin/testdrive-gtk.py:478141#: ../bin/testdrive-gtk.py:583 ../bin/testdrive-gtk.py:618
285#: ../bin/testdrive-gtk.py:776142#: ../bin/testdrive-gtk.py:925
286msgid "<i> CACHE: [empty]</i>"143msgid "<i> CACHE: [empty]</i>"
287msgstr ""144msgstr ""
288145
289#: ../bin/testdrive-gtk.py:506146#: ../bin/testdrive-gtk.py:646
290msgid "<b><i>There are no Other ISOs yet...</i></b>"147msgid "<b><i>There are no Other ISOs yet...</i></b>"
291msgstr ""148msgstr ""
292149
293#: ../bin/testdrive-gtk.py:509150#: ../bin/testdrive-gtk.py:649
294msgid "<b><i>There are no ISOs for this architecture yet...</i></b>"151msgid "<b><i>There are no ISOs for this architecture yet...</i></b>"
295msgstr ""152msgstr ""
296153
297#. Add Button154#. Add Button
298#: ../bin/testdrive-gtk.py:546155#: ../bin/testdrive-gtk.py:683
299msgid "Add ISO"156msgid "Add ISO"
300msgstr ""157msgstr ""
301158
302#. Create Buttons159#. Create Buttons
303#: ../bin/testdrive-gtk.py:554160#: ../bin/testdrive-gtk.py:690
304msgid "Create USB Disk"161msgid "Create USB Disk"
305msgstr ""162msgstr ""
306163
307#. bbox.add(button)164#: ../bin/testdrive-gtk.py:695
308#: ../bin/testdrive-gtk.py:561
309msgid "Sync"165msgid "Sync"
310msgstr ""166msgstr ""
311167
312#. bbox.add(button)168#: ../bin/testdrive-gtk.py:700
313#: ../bin/testdrive-gtk.py:568
314msgid "Launch"169msgid "Launch"
315msgstr ""170msgstr ""
316171
317#: ../bin/testdrive-gtk.py:639172#: ../bin/testdrive-gtk.py:754 ../bin/testdrive.py:254
173msgid "Using KVM for virtual machine hosting..."
174msgstr ""
175
176#: ../bin/testdrive-gtk.py:757 ../bin/testdrive.py:256
177msgid "Using VirtualBox for virtual machine hosting..."
178msgstr ""
179
180#: ../bin/testdrive-gtk.py:760 ../bin/testdrive.py:258
181msgid "Using Parallels Desktop for virtual machine hosting..."
182msgstr ""
183
184#: ../bin/testdrive-gtk.py:814
318msgid "sync_iso: Thread is executing..."185msgid "sync_iso: Thread is executing..."
319msgstr ""186msgstr ""
320187
321#: ../bin/testdrive-gtk.py:661188#: ../bin/testdrive-gtk.py:835
322msgid "launch_iso: Thread is executing or syncing..."189msgid "launch_iso: Thread is executing or syncing..."
323msgstr ""190msgstr ""
324191
325#: ../bin/testdrive-gtk.py:668192#: ../bin/testdrive-gtk.py:842
326msgid ""193msgid ""
327"No ISO has been selected.\n"194"No ISO has been selected.\n"
328"\n"195"\n"
329"Please select an ISO to create an USB Startup Disk."196"Please select an ISO to create an USB Startup Disk."
330msgstr ""197msgstr ""
331198
332#: ../bin/testdrive-gtk.py:673199#: ../bin/testdrive-gtk.py:847
333msgid ""200msgid ""
334"More than 1 ISO has been selected.\n"201"More than 1 ISO has been selected.\n"
335"\n"202"\n"
336"Please select only 1 ISO to continue!"203"Please select only 1 ISO to continue!"
337msgstr ""204msgstr ""
338205
339#: ../bin/testdrive-gtk.py:678206#: ../bin/testdrive-gtk.py:852
340msgid ""207msgid ""
341"The specified ISO does not exist!\n"208"The specified ISO does not exist!\n"
342"\n"209"\n"
343"Please, synchronize the ISO to continue."210"Please, synchronize the ISO to continue."
344msgstr ""211msgstr ""
345212
346#: ../bin/testdrive-gtk.py:685213#: ../bin/testdrive-gtk.py:859
347msgid "Unable to launch USB Creator!"214msgid "Unable to launch USB Creator!"
348msgstr ""215msgstr ""
349216
350#. ##################################################################217#: ../bin/testdrive-gtk.py:885
351#. ####### Prepare the VM to launch and return launch command #######218#, python-format
352#. ##################################################################219msgid " Downloading %s (0%%)"
353#: ../bin/testdrive-gtk.py:692220msgstr ""
354msgid "Validating Virtualization Method..."221
355msgstr ""222#: ../bin/testdrive-gtk.py:905
356223#, python-format
357#: ../bin/testdrive-gtk.py:696 ../bin/testdrive-gtk.py:697224msgid " Downloading %s (%s%%)"
358#: ../bin/testdrive.py:339225msgstr ""
359#, python-format226
360msgid "Unable to validate Virtualization Method [%s]"227#: ../bin/testdrive-gtk.py:954
361msgstr ""228msgid " Configuring Virtual Machine..."
362229msgstr ""
363#. self.on_info_dialog("Setting up Virtual Machine...")230
364#: ../bin/testdrive-gtk.py:700 ../bin/testdrive.py:341231#: ../bin/testdrive-gtk.py:960
365msgid "Setting up Virtual Machine..."232msgid " Running Virtual Machine..."
366msgstr ""233msgstr ""
367234
368#: ../bin/testdrive-gtk.py:704 ../bin/testdrive-gtk.py:705235#: ../bin/testdrive-gtk.py:1009
369#: ../bin/testdrive.py:348
370msgid "Unable to setup Virtual Machine"
371msgstr ""
372
373#. self.on_info_dialog("Launching Virtual Machine...")
374#: ../bin/testdrive-gtk.py:708
375msgid "Obtaining Virtual Machine launch command..."
376msgstr ""
377
378#: ../bin/testdrive-gtk.py:735
379#, python-format
380msgid "Downloading %s..."
381msgstr ""
382
383#: ../bin/testdrive-gtk.py:797
384msgid " Running VM..."
385msgstr ""
386
387#: ../bin/testdrive-gtk.py:853
388msgid "Show debug messages"236msgid "Show debug messages"
389msgstr ""237msgstr ""
390238
@@ -445,111 +293,131 @@
445msgid "WARNING: %s"293msgid "WARNING: %s"
446msgstr ""294msgstr ""
447295
448#: ../bin/testdrive.py:90 ../testdrivegtk/AddOtherTestdrivegtkDialog.py:155296#: ../bin/testdrive.py:92 ../testdrivegtk/AddOtherTestdrivegtkDialog.py:155
449#, python-format297#, python-format
450msgid "Invalid ISO URL [%s]"298msgid "Invalid ISO URL [%s]"
451msgstr ""299msgstr ""
452300
453#: ../bin/testdrive.py:108301#: ../bin/testdrive.py:134
454#, python-format302#, python-format
455msgid ""303msgid ""
456"Command failed\n"304"Command failed\n"
457" `%s`"305" `%s`"
458msgstr ""306msgstr ""
459307
460#: ../bin/testdrive.py:163308#: ../bin/testdrive.py:141
309msgid "Launching Virtual Machine using CURSES as screen mode"
310msgstr ""
311
312#: ../bin/testdrive.py:186
461msgid "user configuration file (overriding default values"313msgid "user configuration file (overriding default values"
462msgstr ""314msgstr ""
463315
464#: ../bin/testdrive.py:165316#: ../bin/testdrive.py:188
465msgid "print version and system data, and exit"317msgid "print version and system data, and exit"
466msgstr ""318msgstr ""
467319
468#: ../bin/testdrive.py:167320#: ../bin/testdrive.py:190
469msgid "get ISO image from this URL location"321msgid "get ISO image from this URL location"
470msgstr ""322msgstr ""
471323
472#: ../bin/testdrive.py:169324#: ../bin/testdrive.py:192
473msgid "try to launch usb-creator for further testing"325msgid "try to launch usb-creator for further testing"
474msgstr ""326msgstr ""
475327
476#: ../bin/testdrive.py:171328#: ../bin/testdrive.py:194
477msgid "hardcode Ubuntu RELEASE codename"329msgid "hardcode Ubuntu RELEASE codename"
478msgstr ""330msgstr ""
479331
480#: ../bin/testdrive.py:173332#: ../bin/testdrive.py:196
481msgid ""333msgid ""
482"hardcode Ubuntu flavor. Available Flavors:\n"334"hardcode Ubuntu flavor. Available Flavors:\n"
483"\t\t ubuntu/kubuntu/xubuntu/edubuntu/mythbuntu/ubuntustudio"335"\t\t ubuntu/kubuntu/xubuntu/edubuntu/mythbuntu/ubuntustudio/lubuntu"
484msgstr ""336msgstr ""
485337
486#: ../bin/testdrive.py:177338#: ../bin/testdrive.py:199
339msgid ""
340"hardcode Ubuntu repository from where to obtain ISOs:\n"
341"\t\t releases/cdimage/uec-daily/uec-releases"
342msgstr ""
343
344#: ../bin/testdrive.py:202
345msgid "displays the Virtual Machine in the shell. Only valid for UEC images."
346msgstr ""
347
348#: ../bin/testdrive.py:207
487#, python-format349#, python-format
488msgid "version passed: %s"350msgid "version passed: %s"
489msgstr ""351msgstr ""
490352
491#: ../bin/testdrive.py:181353#: ../bin/testdrive.py:211
492#, python-format354#, python-format
493msgid "testdrive %s"355msgid "testdrive %s"
494msgstr ""356msgstr ""
495357
496#: ../bin/testdrive.py:204358#: ../bin/testdrive.py:223
497#, python-format359#, python-format
498msgid "config passed: %s"360msgid "config passed: %s"
499msgstr ""361msgstr ""
500362
501#: ../bin/testdrive.py:214363#: ../bin/testdrive.py:233
502#, python-format364#, python-format
503msgid "Trying config in %s"365msgid "Trying config in %s"
504msgstr ""366msgstr ""
505367
506#: ../bin/testdrive.py:218368#: ../bin/testdrive.py:237
507#, python-format369#, python-format
508msgid "Using configuration in %s"370msgid "Using configuration in %s"
509msgstr ""371msgstr ""
510372
511#: ../bin/testdrive.py:220373#: ../bin/testdrive.py:239
512#, python-format374#, python-format
513msgid "Invalid configuration [%s]"375msgid "Invalid configuration [%s]"
514msgstr ""376msgstr ""
515377
378#: ../bin/testdrive.py:247
379msgid ""
380"Your CPU supports KVM acceleration; please install KVM:\n"
381"\t\t\tsudo apt-get install qemu-kvm"
382msgstr ""
383
516#: ../bin/testdrive.py:250384#: ../bin/testdrive.py:250
517msgid ""385msgid ""
518"Your CPU supports KVM acceleration; please install KVM:\n"
519"\t\t\tsudo apt-get install qemu-kvm"
520msgstr ""
521
522#: ../bin/testdrive.py:253
523msgid ""
524"Your CPU does not support acceleration; run kvm-ok for more information; "386"Your CPU does not support acceleration; run kvm-ok for more information; "
525"then please install VirtualBox:\n"387"then please install VirtualBox:\n"
526"\t\t\tkvm-ok\n"388"\t\t\tkvm-ok\n"
527"\t\t\tsudo apt-get install virtualbox-ose"389"\t\t\tsudo apt-get install virtualbox-ose"
528msgstr ""390msgstr ""
529391
530#: ../bin/testdrive.py:285392#: ../bin/testdrive.py:274
531#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:321393msgid ""
394"Launching UEC images only works with KVM. Please switch your virtualization "
395"method..."
396msgstr ""
397
398#: ../bin/testdrive.py:335
399#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:329
532#, python-format400#, python-format
533msgid "Obtaining Ubuntu ISO list from %s..."401msgid "Obtaining Ubuntu ISO list from %s..."
534msgstr ""402msgstr ""
535403
536#: ../bin/testdrive.py:289404#: ../bin/testdrive.py:339
537#, python-format405#, python-format
538msgid "ERROR: Could not obtain the Ubuntu ISO list from %s..."406msgid "ERROR: Could not obtain the Ubuntu ISO list from %s..."
539msgstr ""407msgstr ""
540408
541#: ../bin/testdrive.py:295409#: ../bin/testdrive.py:345
542#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:333410#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:341
543msgid "Unable to update the Ubuntu ISO list cache..."411msgid "Unable to update the Ubuntu ISO list cache..."
544msgstr ""412msgstr ""
545413
546#. BUG: should check disk space availability in CACHE dir414#. BUG: should check disk space availability in CACHE dir
547#. Update the cache415#. Update the cache
548#: ../bin/testdrive.py:321416#: ../bin/testdrive.py:371
549msgid "Syncing the specified ISO..."417msgid "Syncing the specified ISO..."
550msgstr ""418msgstr ""
551419
552#: ../bin/testdrive.py:328 ../testdrivegtk/AddOtherTestdrivegtkDialog.py:167420#: ../bin/testdrive.py:378 ../testdrivegtk/AddOtherTestdrivegtkDialog.py:167
553#, python-format421#, python-format
554msgid "ISO not found at [%s]"422msgid "ISO not found at [%s]"
555msgstr ""423msgstr ""
@@ -557,105 +425,58 @@
557#. ##################425#. ##################
558#. # Launch the VM ##426#. # Launch the VM ##
559#. ##################427#. ##################
560#: ../bin/testdrive.py:335428#: ../bin/testdrive.py:401
561msgid "Validating Virtualization Method...."429msgid "Validating Virtualization Method...."
562msgstr ""430msgstr ""
563431
564#: ../bin/testdrive.py:350432#: ../bin/testdrive.py:405
433#, python-format
434msgid "Unable to validate Virtualization Method [%s]"
435msgstr ""
436
437#: ../bin/testdrive.py:407
438msgid "Setting up Virtual Machine..."
439msgstr ""
440
441#: ../bin/testdrive.py:411
442msgid "Unable to setup Virtual Machine"
443msgstr ""
444
445#: ../bin/testdrive.py:413
565msgid "Launching Virtual Machine..."446msgid "Launching Virtual Machine..."
566msgstr ""447msgstr ""
567448
568#: ../bin/testdrive.py:355449#: ../bin/testdrive.py:421
569msgid "Unable to launch Virtual Machine"450msgid "Unable to launch Virtual Machine"
570msgstr ""451msgstr ""
571452
572#: ../bin/testdrive.py:359453#: ../bin/testdrive.py:425
573#, python-format454#, python-format
574msgid "Cleaning up disk image [%s]..."455msgid "Cleaning up disk image [%s]..."
575msgstr ""456msgstr ""
576457
577#. Remind about cache cleanup458#. Remind about cache cleanup
578#: ../bin/testdrive.py:362459#: ../bin/testdrive.py:428
579msgid "You may wish to clean up the cache directory..."460msgid "You may wish to clean up the cache directory..."
580msgstr ""461msgstr ""
581462
582#: ../bin/testdrive.py:363463#: ../bin/testdrive.py:429
583#, python-format464#, python-format
584msgid " %s and %s"465msgid " %s and %s"
585msgstr ""466msgstr ""
586467
587#: ../bin/testdrive.py:370468#: ../bin/testdrive.py:436
588msgid ""469msgid ""
589"\n"470"\n"
590"Launch USB Startup Disk Creator for further testing of this ISO? [y/N] "471"Launch USB Startup Disk Creator for further testing of this ISO? [y/N] "
591msgstr ""472msgstr ""
592473
593#: ../bin/testdrive.py:374474#: ../bin/testdrive.py:440
594msgid ""475msgid ""
595"\n"476"\n"
596"Press <enter> to exit..."477"Press <enter> to exit..."
597msgstr ""478msgstr ""
598479
599#: ../data/ui/TestdrivegtkWindow.ui.h:1
600msgid "ISO Repository"
601msgstr ""
602
603#: ../data/ui/TestdrivegtkWindow.ui.h:2
604msgid "TestDrive Front-end"
605msgstr ""
606
607#: ../data/ui/TestdrivegtkWindow.ui.h:3
608msgid "Ubuntu Release"
609msgstr ""
610
611#: ../data/ui/TestdrivegtkWindow.ui.h:4
612msgid "_Edit"
613msgstr ""
614
615#: ../data/ui/TestdrivegtkWindow.ui.h:5
616msgid "_File"
617msgstr ""
618
619#: ../data/ui/TestdrivegtkWindow.ui.h:6
620msgid "_Help"
621msgstr ""
622
623#: ../data/ui/TestdrivegtkWindow.ui.h:7
624msgid "_View"
625msgstr ""
626
627#: ../data/ui/AddOtherTestdrivegtkDialog.ui.h:1
628msgid "<b>Description:</b>"
629msgstr ""
630
631#: ../data/ui/AddOtherTestdrivegtkDialog.ui.h:2
632msgid "<b>Sync Protocol:</b>"
633msgstr ""
634
635#: ../data/ui/AddOtherTestdrivegtkDialog.ui.h:3
636msgid "<b>URL:</b>"
637msgstr ""
638
639#: ../data/ui/AddOtherTestdrivegtkDialog.ui.h:4
640msgid "Add"
641msgstr ""
642
643#: ../data/ui/AddOtherTestdrivegtkDialog.ui.h:5
644msgid "Cancel"
645msgstr ""
646
647#: ../data/ui/AddOtherTestdrivegtkDialog.ui.h:6
648msgid "Delete"
649msgstr ""
650
651#: ../data/ui/AddOtherTestdrivegtkDialog.ui.h:7
652msgid "Edit"
653msgstr ""
654
655#: ../data/ui/AddOtherTestdrivegtkDialog.ui.h:8
656msgid "Other ISO List:"
657msgstr ""
658
659#: ../testdrivegtk/AddOtherTestdrivegtkDialog.py:135480#: ../testdrivegtk/AddOtherTestdrivegtkDialog.py:135
660msgid "Please insert a Description"481msgid "Please insert a Description"
661msgstr ""482msgstr ""
@@ -676,6 +497,11 @@
676msgid "Select Protocol:"497msgid "Select Protocol:"
677msgstr ""498msgstr ""
678499
500#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:36
501#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:37
502msgid "Other..."
503msgstr ""
504
679#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:72505#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:72
680msgid "TestDrive Preferences"506msgid "TestDrive Preferences"
681msgstr ""507msgstr ""
@@ -684,46 +510,46 @@
684msgid "finish_initialization()"510msgid "finish_initialization()"
685msgstr ""511msgstr ""
686512
687#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:136513#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:138
688msgid "Select Repository:"514msgid "Select Repository:"
689msgstr ""515msgstr ""
690516
691#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:147517#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:149
692#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:474518#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:484
693msgid "Select Release:"519msgid "Select Release:"
694msgstr ""520msgstr ""
695521
696#. Load config files for local variables522#. Load config files for local variables
697#. self.load_config_files(file)523#. self.load_config_files(file)
698#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:211524#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:215
699#, python-format525#, python-format
700msgid "Reading config file: [%s]"526msgid "Reading config file: [%s]"
701msgstr ""527msgstr ""
702528
703#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:213529#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:217
704#, python-format530#, python-format
705msgid "Unable to load config file [%s]"531msgid "Unable to load config file [%s]"
706msgstr ""532msgstr ""
707533
708#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:268534#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:274
709#, python-format535#, python-format
710msgid " of %s available."536msgid " of %s available."
711msgstr ""537msgstr ""
712538
713#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:325539#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:333
714#, python-format540#, python-format
715msgid "Could not obtain the Ubuntu ISO list from %s..."541msgid "Could not obtain the Ubuntu ISO list from %s..."
716msgstr ""542msgstr ""
717543
718#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:329544#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:337
719msgid "Updating the Ubuntu ISO list cache..."545msgid "Updating the Ubuntu ISO list cache..."
720msgstr ""546msgstr ""
721547
722#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:337548#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:345
723msgid "get_preferences()"549msgid "get_preferences()"
724msgstr ""550msgstr ""
725551
726#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:456552#: ../testdrivegtk/PreferencesTestdrivegtkDialog.py:466
727#, python-format553#, python-format
728msgid "Unable to clean up files from [%s]"554msgid "Unable to clean up files from [%s]"
729msgstr ""555msgstr ""
730556
=== modified file 'setup.py' (properties changed: -x to +x)
=== modified file 'testdrive/testdrive.py'
--- testdrive/testdrive.py 2011-01-11 16:42:41 +0000
+++ testdrive/testdrive.py 2011-08-23 08:30:25 +0000
@@ -95,7 +95,7 @@
95 except:95 except:
96 pass96 pass
9797
98 ## TODO: This possible needs to go outside the class due to in PyGTK front end we might need the list of ISO's before even instancing an object98 ## TODO: This possibly needs to go outside the class because in the GTK front end we might need the list of ISO's before even instancing an object
99 def list_isos(self, ISOS):99 def list_isos(self, ISOS):
100 ISO = []100 ISO = []
101 for iso in ISOS:101 for iso in ISOS:
102102
=== modified file 'testdrive/virt/kvm.py'
--- testdrive/virt/kvm.py 2011-03-09 15:12:39 +0000
+++ testdrive/virt/kvm.py 2011-08-23 08:30:25 +0000
@@ -54,12 +54,12 @@
54 self.FLOPPY_FILE = "%s-floppy" % path54 self.FLOPPY_FILE = "%s-floppy" % path
55 self.run_or_die("kvm-img create -f qcow2 -b %s %s" % (self.ORIG_DISK, self.DISK_FILE))55 self.run_or_die("kvm-img create -f qcow2 -b %s %s" % (self.ORIG_DISK, self.DISK_FILE))
56 elif not os.path.exists(self.DISK_FILE) or self.is_disk_empty():56 elif not os.path.exists(self.DISK_FILE) or self.is_disk_empty():
57 print "Creating disk image [%s]..." % self.DISK_FILE57 print("Creating disk image [%s]..." % self.DISK_FILE)
58 self.run_or_die("kvm-img create -f qcow2 %s %s" % (self.DISK_FILE, self.DISK_SIZE))58 self.run_or_die("kvm-img create -f qcow2 %s %s" % (self.DISK_FILE, self.DISK_SIZE))
5959
60 # Code launch virtual machine60 # Code launch virtual machine
61 def launch_virt(self):61 def launch_virt(self):
62 print "Running the Virtual Machine..."62 print("Running the Virtual Machine...")
63 #os.system("kvm -m %s -smp %s -cdrom %s -drive file=%s,if=virtio,cache=writeback,index=0,boot=on %s" % (self.td.MEM, self.td.SMP, self.td.PATH_TO_ISO, self.td.DISK_FILE, self.td.KVM_ARGS))63 #os.system("kvm -m %s -smp %s -cdrom %s -drive file=%s,if=virtio,cache=writeback,index=0,boot=on %s" % (self.td.MEM, self.td.SMP, self.td.PATH_TO_ISO, self.td.DISK_FILE, self.td.KVM_ARGS))
64 if self.p == 'uec-daily' or self.p == 'uec-releases':64 if self.p == 'uec-daily' or self.p == 'uec-releases':
65 cmd = "kvm -boot a -fda %s -drive file=%s,if=virtio %s" % (self.FLOPPY_FILE, self.DISK_FILE, self.KVM_ARGS)65 cmd = "kvm -boot a -fda %s -drive file=%s,if=virtio %s" % (self.FLOPPY_FILE, self.DISK_FILE, self.KVM_ARGS)
@@ -72,4 +72,4 @@
7272
73 def run_or_die(self, cmd):73 def run_or_die(self, cmd):
74 if self.run(cmd) != 0:74 if self.run(cmd) != 0:
75 print "Command failed\n `%s`" % cmd75 print("Command failed\n `%s`" % cmd)
7676
=== modified file 'testdrive/virt/virtualbox.py'
--- testdrive/virt/virtualbox.py 2011-08-13 20:05:10 +0000
+++ testdrive/virt/virtualbox.py 2011-08-23 08:30:25 +0000
@@ -50,7 +50,7 @@
50 self.vboxversion = ( int(self.vboxversion.split(".")[0]), int(self.vboxversion.split(".")[1]) )50 self.vboxversion = ( int(self.vboxversion.split(".")[0]), int(self.vboxversion.split(".")[1]) )
51 if self.vboxversion == (3,1) or self.vboxversion == (3,2) or self.vboxversion == (4,0) or self.vboxversion == (4,1):51 if self.vboxversion == (3,1) or self.vboxversion == (3,2) or self.vboxversion == (4,0) or self.vboxversion == (4,1):
52 #info("VirtualBox %s detected." % self.vboxversion)52 #info("VirtualBox %s detected." % self.vboxversion)
53 print "INFO: VirtualBox %s.%s detected." % self.vboxversion53 print("INFO: VirtualBox %s.%s detected." % self.vboxversion)
54 else:54 else:
55 #error("Unsupported version (%s) of VirtualBox; please install v3.0 or v3.1." % self.vboxversion)55 #error("Unsupported version (%s) of VirtualBox; please install v3.0 or v3.1." % self.vboxversion)
56 print "ERROR: Unsupported version (%s.%s) of VirtualBox; please install v3.1, v3.2, v4.0 or v4.1." % self.vboxversion56 print "ERROR: Unsupported version (%s.%s) of VirtualBox; please install v3.1, v3.2, v4.0 or v4.1." % self.vboxversion
@@ -64,7 +64,7 @@
64 if not os.path.exists(self.DISK_FILE):64 if not os.path.exists(self.DISK_FILE):
65 self.DISK_SIZE = self.DISK_SIZE.replace("G", "000")65 self.DISK_SIZE = self.DISK_SIZE.replace("G", "000")
66 #info("Creating disk image...")66 #info("Creating disk image...")
67 print "INFO: Creating disk image..."67 print("INFO: Creating disk image...")
68 self.run_or_die("VBoxManage createhd --filename %s --size %s" % (self.DISK_FILE, self.DISK_SIZE))68 self.run_or_die("VBoxManage createhd --filename %s --size %s" % (self.DISK_FILE, self.DISK_SIZE))
69 if self.vboxversion == (3,1) or self.vboxversion == (3,2) or self.vboxversion == (4,0) or self.vboxversion == (4,1):69 if self.vboxversion == (3,1) or self.vboxversion == (3,2) or self.vboxversion == (4,0) or self.vboxversion == (4,1):
70 self.run("VBoxManage storageattach %s --storagectl \"IDE Controller\" --port 0 --device 0 --type hdd --medium none" % self.VBOX_NAME)70 self.run("VBoxManage storageattach %s --storagectl \"IDE Controller\" --port 0 --device 0 --type hdd --medium none" % self.VBOX_NAME)
@@ -91,7 +91,7 @@
91 # Code launch virtual machine91 # Code launch virtual machine
92 def launch_virt(self):92 def launch_virt(self):
93 #info("Running the Virtual Machine...")93 #info("Running the Virtual Machine...")
94 print "Running the Virtual Machine..."94 print("Running the Virtual Machine...")
95 if self.vboxversion == (3,1) or self.vboxversion == (3,2) or self.vboxversion == (4,0) or self.vboxversion == (4,1):95 if self.vboxversion == (3,1) or self.vboxversion == (3,2) or self.vboxversion == (4,0) or self.vboxversion == (4,1):
96 self.run_or_die("VBoxManage storagectl %s --name \"IDE Controller\" --add ide" % self.VBOX_NAME)96 self.run_or_die("VBoxManage storagectl %s --name \"IDE Controller\" --add ide" % self.VBOX_NAME)
97 self.run_or_die("VBoxManage storageattach %s --storagectl \"IDE Controller\" --port 0 --device 0 --type hdd --medium %s" % (self.VBOX_NAME, self.DISK_FILE))97 self.run_or_die("VBoxManage storageattach %s --storagectl \"IDE Controller\" --port 0 --device 0 --type hdd --medium %s" % (self.VBOX_NAME, self.DISK_FILE))
@@ -112,4 +112,4 @@
112 def run_or_die(self, cmd):112 def run_or_die(self, cmd):
113 if self.run(cmd) != 0:113 if self.run(cmd) != 0:
114 #error("Command failed\n `%s`" % cmd)114 #error("Command failed\n `%s`" % cmd)
115 print "Command failed\n `%s`" % cmd115 print("Command failed\n `%s`" % cmd)
116116
=== modified file 'testdrivegtk/AboutTestdrivegtkDialog.py'
--- testdrivegtk/AboutTestdrivegtkDialog.py 2011-02-25 21:15:08 +0000
+++ testdrivegtk/AboutTestdrivegtkDialog.py 2011-08-23 08:30:25 +0000
@@ -18,9 +18,7 @@
18# with this program. If not, see <http://www.gnu.org/licenses/>.18# with this program. If not, see <http://www.gnu.org/licenses/>.
19### END LICENSE19### END LICENSE
2020
21import gtk21from gi.repository import Gtk
22
23from testdrivegtk.helpers import get_builder
2422
25import gettext23import gettext
26from gettext import gettext as _24from gettext import gettext as _
@@ -29,7 +27,7 @@
29import commands27import commands
30version = commands.getstatusoutput("dpkg -l testdrive | tail -n1 | awk '{print $3}'")28version = commands.getstatusoutput("dpkg -l testdrive | tail -n1 | awk '{print $3}'")
3129
32__version__ = version[1].split("-0")[0]30__version__ = (version[1].split("-0")[0])
33__licensenotice__ = 'This program is free software: you can redistribute it and/or modify\n\31__licensenotice__ = 'This program is free software: you can redistribute it and/or modify\n\
34it under the terms of the GNU General Public License as published by\n\32it under the terms of the GNU General Public License as published by\n\
35the Free Software Foundation, either version 3 of the License, or\n\33the Free Software Foundation, either version 3 of the License, or\n\
@@ -43,11 +41,12 @@
43You should have received a copy of the GNU General Public License\n\41You should have received a copy of the GNU General Public License\n\
44along with this program. If not, see <http://www.gnu.org/licenses/>.'42along with this program. If not, see <http://www.gnu.org/licenses/>.'
45__authors__ = ['Andres Rodriguez <andreserl@ubuntu.com>']43__authors__ = ['Andres Rodriguez <andreserl@ubuntu.com>']
46__description__ = 'PyGTK Front-end for TestDrive'44__name__ = "TestDrive"
45__description__ = 'GTK Front-end for TestDrive'
47__website__ = "https://launchpad.net/testdrive"46__website__ = "https://launchpad.net/testdrive"
48__copyright__ = "Copyright © 2010, 2011 Canonical Ltd."47__copyright__ = "Copyright © 2010, 2011 Canonical Ltd."
4948
50class AboutTestdrivegtkDialog(gtk.AboutDialog):49class AboutTestdrivegtkDialog(Gtk.AboutDialog):
51 __gtype_name__ = "AboutTestdrivegtkDialog"50 __gtype_name__ = "AboutTestdrivegtkDialog"
5251
53 def __new__(cls):52 def __new__(cls):
@@ -56,36 +55,18 @@
5655
57 Returns a fully instantiated AboutTestdrivegtkDialog object.56 Returns a fully instantiated AboutTestdrivegtkDialog object.
58 """57 """
59 builder = get_builder('AboutTestdrivegtkDialog')58 dialog = Gtk.AboutDialog()
60 new_object = builder.get_object("about_testdrivegtk_dialog")59
61 new_object.finish_initializing(builder)60 dialog.set_program_name(__name__)
62 return new_object
63
64 def finish_initializing(self, builder):
65 """Called while initializing this instance in __new__
66
67 finish_initalizing should be called after parsing the ui definition
68 and creating a AboutTestdrivegtkDialog object with it in order to
69 finish initializing the start of the new AboutTestdrivegtkDialog
70 instance.
71
72 Put your initialization code in here and leave __init__ undefined.
73 """
74 # Get a reference to the builder and set up the signals.
75 self.builder = builder
76 self.builder.connect_signals(self)
77
78 # Code for other initialization actions should be added here.
79 dialog = builder.get_object("about_testdrivegtk_dialog")
80
81 dialog.set_version(__version__)61 dialog.set_version(__version__)
82 dialog.set_authors(__authors__)62 dialog.set_authors(__authors__)
83 dialog.set_comments(__description__)63 dialog.set_comments(__description__)
84 dialog.set_license(__licensenotice__)64 dialog.set_license(__licensenotice__)
85 dialog.set_website(__website__)65 dialog.set_website(__website__)
86 dialog.set_copyright(__copyright__)66 dialog.set_copyright(__copyright__)
67 return dialog
8768
88if __name__ == "__main__":69if __name__ == "__main__":
89 dialog = AboutTestdrivegtkDialog()70 dialog = AboutTestdrivegtkDialog()
90 dialog.show()71 dialog.show()
91 gtk.main()72 Gtk.main()
9273
=== modified file 'testdrivegtk/AddOtherTestdrivegtkDialog.py'
--- testdrivegtk/AddOtherTestdrivegtkDialog.py 2011-03-02 01:20:58 +0000
+++ testdrivegtk/AddOtherTestdrivegtkDialog.py 2011-08-23 08:30:25 +0000
@@ -3,7 +3,7 @@
3# This file is in the public domain3# This file is in the public domain
4### END LICENSE4### END LICENSE
55
6import gtk6from gi.repository import Gtk
77
8from testdrivegtk.helpers import get_builder8from testdrivegtk.helpers import get_builder
9import os, string, commands9import os, string, commands
@@ -12,7 +12,7 @@
12from gettext import gettext as _12from gettext import gettext as _
13gettext.textdomain('testdrive')13gettext.textdomain('testdrive')
1414
15class AddOtherTestdrivegtkDialog(gtk.Dialog):15class AddOtherTestdrivegtkDialog(Gtk.Dialog):
16 __gtype_name__ = "AddothertestdrivegtkDialog"16 __gtype_name__ = "AddothertestdrivegtkDialog"
1717
18 def __new__(cls, cache):18 def __new__(cls, cache):
@@ -52,7 +52,7 @@
52 def ok(self, widget, data=None):52 def ok(self, widget, data=None):
53 """The user has elected to save the changes.53 """The user has elected to save the changes.
5454
55 Called before the dialog returns gtk.RESONSE_OK from run().55 Called before the dialog returns Gtk.RESONSE_OK from run().
56 """56 """
57 # Saving changes in the isos file57 # Saving changes in the isos file
58 path = "%s/other.isos" % self.CACHE58 path = "%s/other.isos" % self.CACHE
@@ -70,7 +70,7 @@
70 def cancel(self, widget, data=None):70 def cancel(self, widget, data=None):
71 """The user has elected cancel changes.71 """The user has elected cancel changes.
7272
73 Called before the dialog returns gtk.RESPONSE_CANCEL for run()73 Called before the dialog returns Gtk.ResponseType.CANCEL for run()
74 """74 """
75 pass75 pass
7676
@@ -83,16 +83,16 @@
83 self.PROTO = None83 self.PROTO = None
8484
85 def on_error_dlg(self, data=None):85 def on_error_dlg(self, data=None):
86 errorbox = gtk.MessageDialog(self, 86 errorbox = Gtk.MessageDialog(self,
87 gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, 87 Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.ERROR,
88 gtk.BUTTONS_CLOSE, data)88 Gtk.ButtonsType.CLOSE, data)
89 response = errorbox.run()89 response = errorbox.run()
90 errorbox.destroy()90 errorbox.destroy()
9191
92 def on_info_dlg(self, data=None):92 def on_info_dlg(self, data=None):
93 errorbox = gtk.MessageDialog(self, 93 errorbox = Gtk.MessageDialog(self,
94 gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, 94 Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.INFO,
95 gtk.BUTTONS_CLOSE, data)95 Gtk.ButtonsType.CLOSE, data)
96 errorbox.run()96 errorbox.run()
97 errorbox.destroy()97 errorbox.destroy()
9898
@@ -158,7 +158,7 @@
158 # Validate if url exists158 # Validate if url exists
159 proto = self.url.partition(":")[0]159 proto = self.url.partition(":")[0]
160 url = self.url160 url = self.url
161 print proto161 print(proto)
162 if proto == 'rsync' or proto == 'zsync':162 if proto == 'rsync' or proto == 'zsync':
163 url = url.replace(proto, 'http')163 url = url.replace(proto, 'http')
164 if proto == 'file':164 if proto == 'file':
@@ -178,7 +178,7 @@
178 if expander.get_expanded():178 if expander.get_expanded():
179 expander.add(self.scroll_iso_list)179 expander.add(self.scroll_iso_list)
180 else:180 else:
181 expander.remove(expander.child)181 expander.remove(expander.get_child())
182 self.resize(1, 1)182 self.resize(1, 1)
183183
184 def initialize_widgets(self):184 def initialize_widgets(self):
@@ -189,25 +189,26 @@
189 self.txt_other_url = self.builder.get_object("txt_other_url")189 self.txt_other_url = self.builder.get_object("txt_other_url")
190190
191 # Initializing TreeView that will list the other ISO's191 # Initializing TreeView that will list the other ISO's
192 self.liststore = gtk.ListStore(int, str, str)192 self.liststore = Gtk.ListStore(int, str, str)
193 self.treeview = self.builder.get_object("tv_other_isos_list")193 self.treeview = self.builder.get_object("tv_other_isos_list")
194 self.treeview.columns = [None]*3194 self.treeview.columns = [None]*3
195 self.treeview.columns[0] = gtk.TreeViewColumn('No.')195 self.treeview.columns[0] = Gtk.TreeViewColumn('No.')
196 self.treeview.columns[1] = gtk.TreeViewColumn(_('Description'))196 self.treeview.columns[1] = Gtk.TreeViewColumn(_('Description'))
197 self.treeview.columns[2] = gtk.TreeViewColumn('URL')197 self.treeview.columns[2] = Gtk.TreeViewColumn('URL')
198198
199 self.treeview.set_model(self.liststore)199 self.treeview.set_model(self.liststore)
200 for n in range(3):200 for n in range(3):
201 # add columns to treeview201 # add columns to treeview
202 self.treeview.append_column(self.treeview.columns[n])202 self.treeview.append_column(self.treeview.columns[n])
203 # create a CellRenderers to render the data203 # create a CellRenderers to render the data
204 self.treeview.columns[n].cell = gtk.CellRendererText()204 self.treeview.columns[n].cell = Gtk.CellRendererText()
205 if n >= 1:205 if n >= 1:
206 self.treeview.columns[n].cell.set_property('editable', True)206 self.treeview.columns[n].cell.set_property('editable', True)
207 # add the cells to the columns207 # add the cells to the columns
208 self.treeview.columns[n].pack_start(self.treeview.columns[n].cell, True)208 self.treeview.columns[n].pack_start(self.treeview.columns[n].cell, True)
209 # set the cell attributes to the appropriate liststore column209 # set the cell attributes to the appropriate liststore column
210 self.treeview.columns[n].set_attributes(self.treeview.columns[n].cell, text=n)210 #FIXME This doesn't work; is it important?
211 #self.treeview.columns[n].set_attributes(self.treeview.columns[n].cell, text=n)
211212
212 self.btn_add_other = self.builder.get_object("btn_add_iso")213 self.btn_add_other = self.builder.get_object("btn_add_iso")
213 self.btn_add_other.connect("clicked", self.on_btn_add_iso_clicked)214 self.btn_add_other.connect("clicked", self.on_btn_add_iso_clicked)
@@ -219,11 +220,11 @@
219 self.ex_other_iso_list = self.builder.get_object("ex_other_iso_list")220 self.ex_other_iso_list = self.builder.get_object("ex_other_iso_list")
220 self.ex_other_iso_list.connect('notify::expanded', self.on_iso_list_expanded)221 self.ex_other_iso_list.connect('notify::expanded', self.on_iso_list_expanded)
221 self.scroll_iso_list = self.builder.get_object("scrolledwindow1")222 self.scroll_iso_list = self.builder.get_object("scrolledwindow1")
222 self.ex_other_iso_list.remove(self.ex_other_iso_list.child)223 self.ex_other_iso_list.remove(self.ex_other_iso_list.get_child())
223224
224 self.layout_table = self.builder.get_object("tb_other_iso")225 self.layout_table = self.builder.get_object("tb_other_iso")
225 #Sync Protocol Combo Box226 #Sync Protocol Combo Box
226 self.cb_sync_proto = gtk.combo_box_new_text()227 self.cb_sync_proto = Gtk.ComboBoxText()
227 self.cb_sync_proto.append_text(_("Select Protocol:"))228 self.cb_sync_proto.append_text(_("Select Protocol:"))
228 self.cb_sync_proto.append_text("rsync")229 self.cb_sync_proto.append_text("rsync")
229 self.cb_sync_proto.append_text("zsync")230 self.cb_sync_proto.append_text("zsync")
@@ -232,7 +233,7 @@
232 self.cb_sync_proto.connect('changed', self.on_select_sync_proto)233 self.cb_sync_proto.connect('changed', self.on_select_sync_proto)
233 self.cb_sync_proto.set_active(0)234 self.cb_sync_proto.set_active(0)
234 self.cb_sync_proto.show()235 self.cb_sync_proto.show()
235 self.layout_table.attach(self.cb_sync_proto, 1,3,2,3, gtk.FILL | gtk.EXPAND, gtk.SHRINK)236 self.layout_table.attach(self.cb_sync_proto, 1,3,2,3, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND, Gtk.AttachOptions.SHRINK)
236237
237 def get_other_isos_list_from_cache(self):238 def get_other_isos_list_from_cache(self):
238 ##################################################################239 ##################################################################
@@ -260,4 +261,4 @@
260if __name__ == "__main__":261if __name__ == "__main__":
261 dialog = AddOtherTestdrivegtkDialog()262 dialog = AddOtherTestdrivegtkDialog()
262 dialog.show()263 dialog.show()
263 gtk.main()264 Gtk.main()
264265
=== modified file 'testdrivegtk/PreferencesTestdrivegtkDialog.py'
--- testdrivegtk/PreferencesTestdrivegtkDialog.py 2011-08-13 22:06:27 +0000
+++ testdrivegtk/PreferencesTestdrivegtkDialog.py 2011-08-23 08:30:25 +0000
@@ -20,7 +20,7 @@
2020
21#from desktopcouch.records.server import CouchDatabase21#from desktopcouch.records.server import CouchDatabase
22#from desktopcouch.records.record import Record22#from desktopcouch.records.record import Record
23import gtk23from gi.repository import Gtk
24import ConfigParser24import ConfigParser
25import os25import os
26import commands26import commands
@@ -33,10 +33,10 @@
33gettext.textdomain('testdrive')33gettext.textdomain('testdrive')
3434
35ISO_REPOSITORY = ['cdimage', 'releases']35ISO_REPOSITORY = ['cdimage', 'releases']
36MEM_SIZE_TAB = ['256', '384', '512', '1024', _('Other...')]36MEM_SIZE_TAB = ['256', '384', '512', '1024']
37DISK_SIZE_TAB = ['4', '6', '8', _('Other...')]37DISK_SIZE_TAB = ['4', '6', '8']
3838
39class PreferencesTestdrivegtkDialog(gtk.Dialog):39class PreferencesTestdrivegtkDialog(Gtk.Dialog):
40 __gtype_name__ = "PreferencesTestdrivegtkDialog"40 __gtype_name__ = "PreferencesTestdrivegtkDialog"
41 preferences = {}41 preferences = {}
4242
@@ -133,7 +133,7 @@
133133
134 # Ubuntu Repositories Combo Box134 # Ubuntu Repositories Combo Box
135 self.tb_general_prefs = self.builder.get_object("tb_general_prefs")135 self.tb_general_prefs = self.builder.get_object("tb_general_prefs")
136 self.cb_ubuntu_repo = gtk.combo_box_new_text()136 self.cb_ubuntu_repo = Gtk.ComboBoxText()
137 self.cb_ubuntu_repo.set_size_request(260, -1)137 self.cb_ubuntu_repo.set_size_request(260, -1)
138 self.cb_ubuntu_repo.append_text(_('Select Repository:'))138 self.cb_ubuntu_repo.append_text(_('Select Repository:'))
139 for repo in ISO_REPOSITORY: 139 for repo in ISO_REPOSITORY:
@@ -141,15 +141,15 @@
141 self.cb_ubuntu_repo.connect('changed', self.on_select_iso_image_repo)141 self.cb_ubuntu_repo.connect('changed', self.on_select_iso_image_repo)
142 self.cb_ubuntu_repo.set_active(0)142 self.cb_ubuntu_repo.set_active(0)
143 self.cb_ubuntu_repo.show()143 self.cb_ubuntu_repo.show()
144 self.tb_general_prefs.attach(self.cb_ubuntu_repo, 1,2,7,8)144 self.tb_general_prefs.attach(self.cb_ubuntu_repo, 1, 2, 7, 8)
145 # Ubuntu Releases Combo Box145 # Ubuntu Releases Combo Box
146 self.cb_ubuntu_release = gtk.combo_box_new_text()146 self.cb_ubuntu_release = Gtk.ComboBoxText()
147 self.cb_ubuntu_release.set_size_request(260, -1)147 self.cb_ubuntu_release.set_size_request(260, -1)
148 self.cb_ubuntu_release.connect('changed', self.on_select_ubuntu_release)148 self.cb_ubuntu_release.connect('changed', self.on_select_ubuntu_release)
149 self.cb_ubuntu_release.append_text(_('Select Release:'))149 self.cb_ubuntu_release.append_text(_('Select Release:'))
150 self.cb_ubuntu_release.set_active(0)150 self.cb_ubuntu_release.set_active(0)
151 self.cb_ubuntu_release.show()151 self.cb_ubuntu_release.show()
152 self.tb_general_prefs.attach(self.cb_ubuntu_release, 1,2,8,9)152 self.tb_general_prefs.attach(self.cb_ubuntu_release, 1, 2, 8, 9)
153 153
154 # Initialize Virtualization Method Options154 # Initialize Virtualization Method Options
155 self.opt_virt_kvm = self.builder.get_object("opt_virt_kvm")155 self.opt_virt_kvm = self.builder.get_object("opt_virt_kvm")
@@ -159,16 +159,16 @@
159 self.opt_virt_parallels = self.builder.get_object("opt_virt_parallels")159 self.opt_virt_parallels = self.builder.get_object("opt_virt_parallels")
160 self.opt_virt_parallels.connect("toggled", self.on_select_virt_method, "parallels")160 self.opt_virt_parallels.connect("toggled", self.on_select_virt_method, "parallels")
161161
162
163
162 # Initialize Memory Options164 # Initialize Memory Options
163 self.cbe_mem_size = self.builder.get_object("cbe_mem_size")165 self.cbe_mem_size = self.builder.get_object("cbe_mem_size")
164 self.cbe_mem_size.remove_text(0)166 for mem in MEM_SIZE_TAB:
165 for mem in MEM_SIZE_TAB:
166 self.cbe_mem_size.append_text(mem)167 self.cbe_mem_size.append_text(mem)
167 self.cbe_mem_size.connect('changed', self.on_select_mem)168 self.cbe_mem_size.connect('changed', self.on_select_mem)
168169
169 # Initialize Disk Size Options170 # Initialize Disk Size Options
170 self.cbe_disk_size = self.builder.get_object("cbe_disk_size")171 self.cbe_disk_size = self.builder.get_object("cbe_disk_size")
171 self.cbe_disk_size.remove_text(0)
172 for disk in DISK_SIZE_TAB:172 for disk in DISK_SIZE_TAB:
173 self.cbe_disk_size.append_text(disk)173 self.cbe_disk_size.append_text(disk)
174 self.cbe_disk_size.connect('changed', self.on_select_disk_size)174 self.cbe_disk_size.connect('changed', self.on_select_disk_size)
@@ -179,8 +179,9 @@
179179
180 # SMP180 # SMP
181 self.lb_smp_nbr = self.builder.get_object("lb_smp_nbr")181 self.lb_smp_nbr = self.builder.get_object("lb_smp_nbr")
182 self.txt_smp_nbr = self.builder.get_object("txt_smp_nbr")182 self.spin_smp_nbr = self.builder.get_object("spin_smp_nbr")
183 self.lb_smp_available = self.builder.get_object("lb_smp_available")183 self.lb_smp_available = self.builder.get_object("lb_smp_available")
184 self.adj_smp = self.builder.get_object("adj_smp")
184185
185 # Flavors186 # Flavors
186 self.chk_flavor_ubuntu = self.builder.get_object("chk_flavor_ubuntu")187 self.chk_flavor_ubuntu = self.builder.get_object("chk_flavor_ubuntu")
@@ -252,7 +253,7 @@
252 self.cbe_mem_size.set_active(3)253 self.cbe_mem_size.set_active(3)
253 else:254 else:
254 self.cbe_mem_size.append_text(self.td.MEM)255 self.cbe_mem_size.append_text(self.td.MEM)
255 self.cbe_mem_size.set_active(5)256 self.cbe_mem_size.set_active(4)
256257
257 # Disk Size258 # Disk Size
258 if self.td.DISK_SIZE == '4G':259 if self.td.DISK_SIZE == '4G':
@@ -263,15 +264,17 @@
263 self.cbe_disk_size.set_active(2)264 self.cbe_disk_size.set_active(2)
264 else:265 else:
265 self.cbe_disk_size.append_text(self.td.DISK_SIZE.replace("G", ""))266 self.cbe_disk_size.append_text(self.td.DISK_SIZE.replace("G", ""))
266 self.cbe_disk_size.set_active(4)267 self.cbe_disk_size.set_active(3)
267268
268 # KVM Args269 # KVM Args
269 self.txt_kvm_args.set_text(self.td.KVM_ARGS)270 self.txt_kvm_args.set_text(self.td.KVM_ARGS)
270 271
271 # SMP272 # SMP
272 if self.td.SMP:273 if self.td.SMP:
273 self.txt_smp_nbr.set_text(self.td.SMP)274 max_cpus = commands.getoutput("grep -c ^processor /proc/cpuinfo")
274 self.lb_smp_available.set_text(_(" of %s available.") % commands.getoutput("grep -c ^processor /proc/cpuinfo"))275 self.adj_smp.set_upper(int(max_cpus))
276 self.spin_smp_nbr.set_value(int(self.td.SMP))
277 self.lb_smp_available.set_text(_(" of %s available") % max_cpus)
275278
276 # Flavors279 # Flavors
277 i = 0280 i = 0
@@ -367,7 +370,7 @@
367 def ok(self, widget, data=None):370 def ok(self, widget, data=None):
368 """The user has elected to save the changes.371 """The user has elected to save the changes.
369372
370 Called before the dialog returns gtk.RESONSE_OK from run().373 Called before the dialog returns Gtk.RESONSE_OK from run().
371 """374 """
372375
373 # Make any updates to self._preferences here. e.g.376 # Make any updates to self._preferences here. e.g.
@@ -377,15 +380,15 @@
377 def cancel(self, widget, data=None):380 def cancel(self, widget, data=None):
378 """The user has elected cancel changes.381 """The user has elected cancel changes.
379382
380 Called before the dialog returns gtk.RESPONSE_CANCEL for run()383 Called before the dialog returns Gtk.ResponseType.CANCEL for run()
381 """384 """
382 # Restore any changes to self._preferences here.385 # Restore any changes to self._preferences here.
383 pass386 pass
384387
385 def on_error_dlg(self, data=None):388 def on_error_dlg(self, data=None):
386 errorbox = gtk.MessageDialog(self, 389 errorbox = Gtk.MessageDialog(self,
387 gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, 390 Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.ERROR,
388 gtk.BUTTONS_CLOSE, data)391 Gtk.ButtonsType.CLOSE, data)
389 response = errorbox.run()392 response = errorbox.run()
390 errorbox.destroy()393 errorbox.destroy()
391394
@@ -395,28 +398,26 @@
395 # If Virtualization method is KVM, display related options.398 # If Virtualization method is KVM, display related options.
396 if virt == 'kvm':399 if virt == 'kvm':
397 self.txt_kvm_args.set_sensitive(True)400 self.txt_kvm_args.set_sensitive(True)
398 self.txt_smp_nbr.set_sensitive(True)401 self.spin_smp_nbr.set_sensitive(True)
399 else:402 else:
400 self.txt_kvm_args.set_sensitive(False)403 self.txt_kvm_args.set_sensitive(False)
401 self.txt_smp_nbr.set_sensitive(False)404 self.spin_smp_nbr.set_sensitive(False)
402405
403 def on_select_mem(self, entry):406 def on_select_mem(self, entry):
404 # On selecting RAM memory.407 # On selecting RAM memory.
405 if entry.child.get_text() == MEM_SIZE_TAB[3]:408 # TODO: user shouldn't be able to enter more RAM than he has installed
406 entry.child.set_editable(True)409 entry.get_child().set_max_length(5)
407 self.mem = 'other'410 # Limits input to integers
408 elif entry.get_active() >= 0:411 text = entry.get_child().get_text().strip()
409 entry.child.set_editable(False)412 entry.get_child().set_text(''.join([i for i in text if i in '0123456789']))
410 self.mem = entry.child.get_text()413 self.mem = entry.get_active_text()
411414
412 def on_select_disk_size(self, entry):415 def on_select_disk_size(self, entry):
413 # On selecting disk size416 # On selecting disk size
414 if entry.child.get_text() == DISK_SIZE_TAB[3]:417 # TODO: Needs to prevent entering more than one decimal point
415 entry.child.set_editable(True)418 text = entry.get_child().get_text().strip()
416 self.disk_size = 'other'419 entry.get_child().set_text(''.join([i for i in text if i in '0123456789.']))
417 elif entry.get_active() >= 0:420 self.disk_size = entry.get_active_text()
418 entry.child.set_editable(False)
419 self.disk_size = entry.child.get_text()
420421
421 def on_select_flavors(self, widget):422 def on_select_flavors(self, widget):
422 # On selecting Ubuntu Flavors423 # On selecting Ubuntu Flavors
@@ -487,8 +488,7 @@
487 codenames = []488 codenames = []
488 for iso in isos:489 for iso in isos:
489 codenames.append(iso.split()[1])490 codenames.append(iso.split()[1])
490 codenames = list(set(codenames))491 codenames = sorted(set(codenames))
491 codenames.sort()
492 codenames.reverse()492 codenames.reverse()
493 c = i = 0493 c = i = 0
494 for release in codenames:494 for release in codenames:
@@ -520,7 +520,7 @@
520520
521 def update_preferences(self):521 def update_preferences(self):
522 ##################################################################522 ##################################################################
523 ###### Prepare the preferences to be saved in the config fiel ####523 ##### Prepare the preferences to be saved in the config field ####
524 ##################################################################524 ##################################################################
525 self.preferences = []525 self.preferences = []
526 # CACHE Variables526 # CACHE Variables
@@ -547,8 +547,8 @@
547 self.td.KVM_ARGS = self.txt_kvm_args.get_text()547 self.td.KVM_ARGS = self.txt_kvm_args.get_text()
548 self.preferences.append(['kvm_args', self.td.KVM_ARGS])548 self.preferences.append(['kvm_args', self.td.KVM_ARGS])
549549
550 if self.txt_smp_nbr.get_text() != None:550 if self.spin_smp_nbr.get_value() != None:
551 self.td.SMP = self.txt_smp_nbr.get_text()551 self.td.SMP = str(int(self.spin_smp_nbr.get_value()))
552 self.preferences.append(['smp', self.td.SMP])552 self.preferences.append(['smp', self.td.SMP])
553553
554 #ARCHs554 #ARCHs
@@ -563,16 +563,12 @@
563 self.td.VIRT = self.virt_method563 self.td.VIRT = self.virt_method
564 self.preferences.append(['virt', self.td.VIRT])564 self.preferences.append(['virt', self.td.VIRT])
565565
566 # Memory - TODO: Add validation of text566 # Memory
567 if self.mem == 'other':
568 self.mem = self.cbe_mem_size.child.get_text()
569 if self.mem != None or self.mem not in MEM_SIZE_TAB:567 if self.mem != None or self.mem not in MEM_SIZE_TAB:
570 self.td.MEM = self.mem568 self.td.MEM = self.mem
571 self.preferences.append(['mem', self.td.MEM])569 self.preferences.append(['mem', self.td.MEM])
572570
573 # Disk Size - TODO: Add validation of text571 # Disk Size
574 if self.disk_size == 'other':
575 self.disk_size = self.cbe_disk_size.child.get_text()
576 if self.disk_size != None or self.disk_size not in DISK_SIZE_TAB:572 if self.disk_size != None or self.disk_size not in DISK_SIZE_TAB:
577 self.td.DISK_SIZE = "%sG" % self.disk_size573 self.td.DISK_SIZE = "%sG" % self.disk_size
578 self.preferences.append(['disk_size', self.td.DISK_SIZE])574 self.preferences.append(['disk_size', self.td.DISK_SIZE])
@@ -584,4 +580,4 @@
584if __name__ == "__main__":580if __name__ == "__main__":
585 dialog = PreferencesTestdrivegtkDialog()581 dialog = PreferencesTestdrivegtkDialog()
586 dialog.show()582 dialog.show()
587 gtk.main()583 Gtk.main()
588584
=== modified file 'testdrivegtk/helpers.py'
--- testdrivegtk/helpers.py 2010-10-01 19:53:36 +0000
+++ testdrivegtk/helpers.py 2011-08-23 08:30:25 +0000
@@ -25,7 +25,7 @@
25 ]25 ]
2626
27import os27import os
28import gtk28from gi.repository import Gtk
2929
30from testdrivegtk.testdrivegtkconfig import get_data_file30from testdrivegtk.testdrivegtkconfig import get_data_file
3131
@@ -34,7 +34,7 @@
34gettext.textdomain('testdrive')34gettext.textdomain('testdrive')
3535
36def get_builder(builder_file_name):36def get_builder(builder_file_name):
37 """Return a fully-instantiated gtk.Builder instance from specified ui 37 """Return a fully-instantiated Gtk.Builder instance from specified ui
38 file38 file
3939
40 :param builder_file_name: The name of the builder file, without extension.40 :param builder_file_name: The name of the builder file, without extension.
@@ -45,7 +45,7 @@
45 if not os.path.exists(ui_filename):45 if not os.path.exists(ui_filename):
46 ui_filename = None46 ui_filename = None
4747
48 builder = gtk.Builder()48 builder = Gtk.Builder()
49 builder.set_translation_domain('testdrivegtk')49 builder.set_translation_domain('testdrivegtk')
50 builder.add_from_file(ui_filename)50 builder.add_from_file(ui_filename)
51 return builder51 return builder

Subscribers

People subscribed via source and target branches