122 lines
3.8 KiB
Python
122 lines
3.8 KiB
Python
#
|
|
# BitBake Graphical GTK User Interface
|
|
#
|
|
# Copyright (C) 2008 Intel Corporation
|
|
#
|
|
# Authored by Rob Bradford <rob@linux.intel.com>
|
|
#
|
|
# 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.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
import gobject
|
|
import gtk
|
|
import xmlrpclib
|
|
from bb.ui.crumbs.runningbuild import RunningBuildTreeView, RunningBuild
|
|
from bb.ui.crumbs.progress import ProgressBar
|
|
|
|
import Queue
|
|
|
|
|
|
def event_handle_idle_func (eventHandler, build, pbar):
|
|
|
|
# Consume as many messages as we can in the time available to us
|
|
event = eventHandler.getEvent()
|
|
while event:
|
|
build.handle_event (event, pbar)
|
|
event = eventHandler.getEvent()
|
|
|
|
return True
|
|
|
|
def scroll_tv_cb (model, path, iter, view):
|
|
view.scroll_to_cell (path)
|
|
|
|
|
|
# @todo hook these into the GUI so the user has feedback...
|
|
def running_build_failed_cb (running_build):
|
|
pass
|
|
|
|
|
|
def running_build_succeeded_cb (running_build):
|
|
pass
|
|
|
|
|
|
class MainWindow (gtk.Window):
|
|
def __init__ (self):
|
|
gtk.Window.__init__ (self, gtk.WINDOW_TOPLEVEL)
|
|
|
|
# Setup tree view and the scrolled window
|
|
scrolled_window = gtk.ScrolledWindow ()
|
|
self.add (scrolled_window)
|
|
self.cur_build_tv = RunningBuildTreeView()
|
|
self.connect("delete-event", gtk.main_quit)
|
|
self.set_default_size(640, 480)
|
|
scrolled_window.add (self.cur_build_tv)
|
|
|
|
|
|
def main (server, eventHandler, params):
|
|
gobject.threads_init()
|
|
gtk.gdk.threads_init()
|
|
|
|
window = MainWindow ()
|
|
window.show_all ()
|
|
pbar = ProgressBar(window)
|
|
pbar.connect("delete-event", gtk.main_quit)
|
|
|
|
# Create the object for the current build
|
|
running_build = RunningBuild ()
|
|
window.cur_build_tv.set_model (running_build.model)
|
|
running_build.model.connect("row-inserted", scroll_tv_cb, window.cur_build_tv)
|
|
running_build.connect ("build-succeeded", running_build_succeeded_cb)
|
|
running_build.connect ("build-failed", running_build_failed_cb)
|
|
|
|
try:
|
|
params.updateFromServer(server)
|
|
cmdline = params.parseActions()
|
|
if not cmdline:
|
|
print("Nothing to do. Use 'bitbake world' to build everything, or run 'bitbake --help' for usage information.")
|
|
return 1
|
|
if 'msg' in cmdline and cmdline['msg']:
|
|
logger.error(cmdline['msg'])
|
|
return 1
|
|
cmdline = cmdline['action']
|
|
ret, error = server.runCommand(cmdline)
|
|
if error:
|
|
print("Error running command '%s': %s" % (cmdline, error))
|
|
return 1
|
|
elif ret != True:
|
|
print("Error running command '%s': returned %s" % (cmdline, ret))
|
|
return 1
|
|
except xmlrpclib.Fault as x:
|
|
print("XMLRPC Fault getting commandline:\n %s" % x)
|
|
return 1
|
|
|
|
# Use a timeout function for probing the event queue to find out if we
|
|
# have a message waiting for us.
|
|
gobject.timeout_add (100,
|
|
event_handle_idle_func,
|
|
eventHandler,
|
|
running_build,
|
|
pbar)
|
|
|
|
try:
|
|
gtk.main()
|
|
except EnvironmentError as ioerror:
|
|
# ignore interrupted io
|
|
if ioerror.args[0] == 4:
|
|
pass
|
|
except KeyboardInterrupt:
|
|
pass
|
|
finally:
|
|
server.runCommand(["stateForceShutdown"])
|
|
|