diff options
author | James Meyer <james.meyer@operamail.com> | 2010-12-02 22:37:23 (GMT) |
---|---|---|
committer | James Meyer <james.meyer@operamail.com> | 2010-12-02 22:37:34 (GMT) |
commit | 8b94d7f39c71234712bead363526a0283efeb9fa (patch) | |
tree | 23f1dbd6458dc39a2c1b08bcdd4cbf768a60d84d /build_tools/larch8/larch0/gui/front/mainwindow.py | |
parent | 338af567e74d08cbd357079941208e494463d61e (diff) | |
download | linhes_dev-8b94d7f39c71234712bead363526a0283efeb9fa.zip |
larch8: first checkin, still needs some work
Diffstat (limited to 'build_tools/larch8/larch0/gui/front/mainwindow.py')
-rw-r--r-- | build_tools/larch8/larch0/gui/front/mainwindow.py | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/build_tools/larch8/larch0/gui/front/mainwindow.py b/build_tools/larch8/larch0/gui/front/mainwindow.py new file mode 100644 index 0000000..8bf2a57 --- /dev/null +++ b/build_tools/larch8/larch0/gui/front/mainwindow.py @@ -0,0 +1,205 @@ +#!/usr/bin/env python2 +# +# (c) Copyright 2010 Michael Towers (larch42 at googlemail dot com) +# +# This file is part of the larch project. +# +# larch is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# larch 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 larch; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +#---------------------------------------------------------------------------- +#2010.10.12 + +import __builtin__ +from liblarch.suim import Suim, debug +__builtin__.debug = debug + + + +def larchcall(script, *args): + if script[0] != '*': + progress.start() # initialize progress widget + ui.setcb(None) + else: + # This script won't switch to the progress widget, but accepts + # a callback to handle the resulting output + script = script[1:] + ui.setcb(args[0]) + args = args[1:] + fss('larchscript', script, *args) + +__builtin__.larchcall = larchcall + + + +class Ui(Suim): + def __init__(self): + self.setcb(None) + Suim.__init__(self, 'larch', busywidgets=[':larch']) + + self.connect('$$$uiclose$$$', self.quit) + self.connect('$$$uiquit$$$', self.quit) + self.connect('$$$cancel$$$', self.interrupt) + self.progressing = False # used for managing progress display + + + def sigin(self, signal, *args): + self.idle_add(getattr(self, 'sig_' + signal), *args) + + + def setcb(self, cb): + """Set a callback to run when a 'larchscript' sends an output line, + or completes. + """ + self._read_cb = cb + + + def isbusy(self): + return self._read_cb != None + + + def runningtab(self, i=None): + if (i == None): + i = 1 if progress.active else 0 + if (i == 0) and hasattr(stage, 'reenter'): + stage.reenter() + self.command(':tabs.set', i) + + def fileDialog(self, message, startdir=None, create=False, + dirsonly=False, file=None, filter=None): +# Actually this should access the file-system via 'fss' ... +# (that would require a new, custom widget) + if dirsonly: + return self.command('fileDialog_getdir', message, not create, startdir) + if file and startdir: + startdir = startdir + '/' + file + if create: + return self.command('fileDialog_save', message, startdir, filter) + return self.command('fileDialog_open', message, startdir, filter) + + def enable_installation_page(self, on): + self.command(':notebook.enableTab', 1, on) + + def interrupt(self): + fss('larchscript', 'interrupt') + + def quit(self): + """Do any tidying up which may be necessary. + """ + fss('larchscript', 'close') + Suim.quit(self) + + def data(self, key): + return self.command('main_page_data.get', key) + + + def sig_get_password(self, message): + """This is a callback, triggered by signal 'get_password' + to ask the user to input the password. + """ + fss('larchscript', 'sendpassword', *ui.command('textLineDialog', + message, "larch: pw", "", True)) + + + def sig_line_cb(self, message): + """A line has been received from the 'larchscript' (this is a callback, + in the main thread). + The input lines are filtered for pacman, mksquashfs and mkisofs + progress output so that appropriate progress reports can be given. + """ + if message.startswith('>-'): + if message.startswith('>-_$$_'): + # Informing us of the pid + fss('larchscript', 'pid', int(message.rsplit('_', 1)[1])) + else: + # It is a progress report + progress.set(message[2:]) + self.progressing = True + return + + else: + if self.progressing: + progress.set() + self.progressing = False + + progress.addLine(message) + if message.startswith('?>'): + # a query (yes/no): pop up the query + fss('larchscript', 'reply', '??YES' if ui.command( + 'confirmDialog', message[2:]) else '??NO') + elif self._read_cb: + self._read_cb(message) + + + def sig_end_cb(self, ok): + """A callback for the end of a 'larchscript'. + The completion code, ok, is ignored. + """ + if self._read_cb: + self._read_cb(None) + self._read_cb = None + self.busy(False) + else: + progress.end() + + + def sig_log(self, line): + logger.addLine(line) + + + + +def tab_changed(index): + __builtin__.stage = pages[index] + stage.enter() + +from page_project import ProjectSettings +from page_installation import Installation +from page_larchify import Larchify +from page_medium import Medium + +from docviewer import DocViewer +from editor import Editor +from logview import Logger, Progress + + +def run_error(message, title=None): + ui.command('warningDialog', message, title) +__builtin__.run_error = run_error + + +pages = [] # Must be initialized before init() because of calls to tab_changed + +def init(): + pages.append(ProjectSettings()) + pages.append(Installation()) + pages.append(Larchify()) + pages.append(Medium()) + + __builtin__.docviewer = DocViewer() + __builtin__.edit = Editor().edit + + __builtin__.progress = Progress() + __builtin__.logger = Logger() + + MainWindow = fss('fetch_layout', 'page_main.uim') + ui.widgetlist(MainWindow) + + ui.connect(':notebook*changed', tab_changed) + + ui.command(':larch.pack') + # Set up the first gui page (project settings) + pages[0].setup() + ui.command(':larch.show') + |