123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #!/usr/bin/env python3
- # Copyright (c) 2012 Wind River Systems, Inc.
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License version 2 as
- # published by the Free Software Foundation.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- # See the GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- import os
- import sys
- sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname( \
- os.path.abspath(__file__))), 'lib'))
- try:
- import bb
- except RuntimeError as exc:
- sys.exit(str(exc))
- from gi import pygtkcompat
- pygtkcompat.enable()
- pygtkcompat.enable_gtk(version='3.0')
- import gtk
- import optparse
- from bb.ui.crumbs.hobwidget import HobAltButton, HobButton
- from bb.ui.crumbs.hig.crumbsmessagedialog import CrumbsMessageDialog
- from bb.ui.crumbs.hig.deployimagedialog import DeployImageDialog
- from bb.ui.crumbs.hig.imageselectiondialog import ImageSelectionDialog
- # I put all the fs bitbake supported here. Need more test.
- DEPLOYABLE_IMAGE_TYPES = ["jffs2", "cramfs", "ext2", "ext3", "ext4", "btrfs", "squashfs", "ubi", "vmdk"]
- Title = "USB Image Writer"
- class DeployWindow(gtk.Window):
- def __init__(self, image_path=''):
- super(DeployWindow, self).__init__()
- if len(image_path) > 0:
- valid = True
- if not os.path.exists(image_path):
- valid = False
- lbl = "<b>Invalid image file path: %s.</b>\nPress <b>Select Image</b> to select an image." % image_path
- else:
- image_path = os.path.abspath(image_path)
- extend_name = os.path.splitext(image_path)[1][1:]
- if extend_name not in DEPLOYABLE_IMAGE_TYPES:
- valid = False
- lbl = "<b>Undeployable imge type: %s</b>\nPress <b>Select Image</b> to select an image." % extend_name
- if not valid:
- image_path = ''
- crumbs_dialog = CrumbsMessageDialog(self, lbl, gtk.STOCK_DIALOG_INFO)
- button = crumbs_dialog.add_button("Close", gtk.RESPONSE_OK)
- HobButton.style_button(button)
- crumbs_dialog.run()
- crumbs_dialog.destroy()
- self.deploy_dialog = DeployImageDialog(Title, image_path, self,
- gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT
- | gtk.DIALOG_NO_SEPARATOR, None, standalone=True)
- close_button = self.deploy_dialog.add_button("Close", gtk.RESPONSE_NO)
- HobAltButton.style_button(close_button)
- close_button.connect('clicked', gtk.main_quit)
- write_button = self.deploy_dialog.add_button("Write USB image", gtk.RESPONSE_YES)
- HobAltButton.style_button(write_button)
- self.deploy_dialog.connect('select_image_clicked', self.select_image_clicked_cb)
- self.deploy_dialog.connect('destroy', gtk.main_quit)
- response = self.deploy_dialog.show()
- def select_image_clicked_cb(self, dialog):
- cwd = os.getcwd()
- dialog = ImageSelectionDialog(cwd, DEPLOYABLE_IMAGE_TYPES, Title, self, gtk.FILE_CHOOSER_ACTION_SAVE )
- button = dialog.add_button("Cancel", gtk.RESPONSE_NO)
- HobAltButton.style_button(button)
- button = dialog.add_button("Open", gtk.RESPONSE_YES)
- HobAltButton.style_button(button)
- response = dialog.run()
- if response == gtk.RESPONSE_YES:
- if not dialog.image_names:
- lbl = "<b>No selections made</b>\nClicked the radio button to select a image."
- crumbs_dialog = CrumbsMessageDialog(self, lbl, gtk.STOCK_DIALOG_INFO)
- button = crumbs_dialog.add_button("Close", gtk.RESPONSE_OK)
- HobButton.style_button(button)
- crumbs_dialog.run()
- crumbs_dialog.destroy()
- dialog.destroy()
- return
- # get the full path of image
- image_path = os.path.join(dialog.image_folder, dialog.image_names[0])
- self.deploy_dialog.set_image_text_buffer(image_path)
- self.deploy_dialog.set_image_path(image_path)
- dialog.destroy()
- def main():
- parser = optparse.OptionParser(
- usage = """%prog [-h] [image_file]
- %prog writes bootable images to USB devices. You can
- provide the image file on the command line or select it using the GUI.""")
- options, args = parser.parse_args(sys.argv)
- image_file = args[1] if len(args) > 1 else ''
- dw = DeployWindow(image_file)
- if __name__ == '__main__':
- try:
- main()
- gtk.main()
- except Exception:
- import traceback
- traceback.print_exc()
|