diff options
Diffstat (limited to 'Mac/scripts/MkDistr_ui.py')
-rw-r--r-- | Mac/scripts/MkDistr_ui.py | 356 |
1 files changed, 0 insertions, 356 deletions
diff --git a/Mac/scripts/MkDistr_ui.py b/Mac/scripts/MkDistr_ui.py deleted file mode 100644 index ee7ace0..0000000 --- a/Mac/scripts/MkDistr_ui.py +++ /dev/null @@ -1,356 +0,0 @@ -# -# MkDistr - User Interface. -# -# Jack Jansen, CWI, August 1995 -# -# XXXX To be done (requires mods of FrameWork and toolbox interfaces too): -# - Give dialogs titles (need dlg->win conversion) -# - Place dialogs better (???) -# - <return> as <ok> -# - big box around ok button -# - window-close crashes on reopen (why?) -# - Box around lists (???) -# - Change cursor while busy (need cursor support in Qd) -# -from Carbon import Res -from Carbon import Dlg -from Carbon import Ctl -from Carbon import List -from Carbon import Win -from Carbon import Qd -from FrameWork import * -import EasyDialogs -import os -import sys -import macresource - -# Resource IDs -ID_MAIN = 514 -MAIN_LIST=1 -MAIN_MKDISTR=2 -MAIN_CHECK=3 -MAIN_INCLUDE=4 -MAIN_EXCLUDE=5 - -ID_INCWINDOW=515 -ID_EXCWINDOW=517 -INCEXC_DELETE=2 -INCEXC_CHANGE=3 -INCEXC_ADD=4 - -ID_INCLUDE=512 -ID_EXCLUDE=513 -DLG_OK=1 # Include for include, exclude for exclude -DLG_CANCEL=2 -DLG_SRCPATH=3 -DLG_DSTPATH=4 # include dialog only -DLG_EXCLUDE=5 # Exclude, include dialog only - -ID_DTYPE=516 -DTYPE_EXIST=1 -DTYPE_NEW=2 -DTYPE_CANCEL=3 - -class EditDialogWindow(DialogWindow): - """Include/exclude editor (modeless dialog window)""" - - def open(self, id, (src, dst), callback, cancelrv): - self.id = id - self.callback = callback - self.cancelrv = cancelrv - DialogWindow.open(self, id) - tp, h, rect = self.dlg.GetDialogItem(DLG_SRCPATH) - Dlg.SetDialogItemText(h, src) - self.dlg.SetDialogDefaultItem(DLG_OK) - self.dlg.SetDialogCancelItem(DLG_CANCEL) - if id == ID_INCLUDE: - tp, h, rect = self.dlg.GetDialogItem(DLG_DSTPATH) - if dst == None: - dst = '' - Dlg.SetDialogItemText(h, dst) - self.dlg.DrawDialog() - - def do_itemhit(self, item, event): - if item in (DLG_OK, DLG_CANCEL, DLG_EXCLUDE): - self.done(item) - # else it is not interesting - - def done(self, item): - tp, h, rect = self.dlg.GetDialogItem(DLG_SRCPATH) - src = Dlg.GetDialogItemText(h) - if item == DLG_OK: - if self.id == ID_INCLUDE: - tp, h, rect = self.dlg.GetDialogItem(DLG_DSTPATH) - dst = Dlg.GetDialogItemText(h) - rv = (src, dst) - else: - rv = (src, None) - elif item == DLG_EXCLUDE: - rv = (src, None) - else: - rv = self.cancelrv - self.close() - self.callback((item in (DLG_OK, DLG_EXCLUDE)), rv) - -class ListWindow(DialogWindow): - """A dialog window containing a list as its main item""" - - def open(self, id, contents): - self.id = id - DialogWindow.open(self, id) - Qd.SetPort(self.wid) - tp, h, rect = self.dlg.GetDialogItem(MAIN_LIST) - self.listrect = rect - rect2 = rect[0]+1, rect[1]+1, rect[2]-16, rect[3]-16 # Scroll bar space - self.list = List.LNew(rect2, (0, 0, 1, len(contents)), (0,0), 0, self.wid, - 0, 1, 1, 1) - self.setlist(contents) - - def setlist(self, contents): - self.list.LDelRow(0, 0) - self.list.LSetDrawingMode(0) - if contents: - self.list.LAddRow(len(contents), 0) - for i in range(len(contents)): - self.list.LSetCell(contents[i], (0, i)) - self.list.LSetDrawingMode(1) - ##self.list.LUpdate(self.wid.GetWindowPort().visRgn) - self.wid.InvalWindowRect(self.listrect) - - def additem(self, item): - where = self.list.LAddRow(1, 0) - self.list.LSetCell(item, (0, where)) - - def delgetitem(self, item): - data = self.list.LGetCell(1000, (0, item)) - self.list.LDelRow(1, item) - return data - - def do_listhit(self, event): - (what, message, when, where, modifiers) = event - Qd.SetPort(self.wid) - where = Qd.GlobalToLocal(where) - if self.list.LClick(where, modifiers): - self.do_dclick(self.delgetselection()) - - def delgetselection(self): - items = [] - point = (0,0) - while 1: - ok, point = self.list.LGetSelect(1, point) - if not ok: - break - items.append(point[1]) - point = point[0], point[1]+1 - values = [] - items.reverse() - for i in items: - values.append(self.delgetitem(i)) - return values - - def do_rawupdate(self, window, event): - Qd.SetPort(window) - Qd.FrameRect(self.listrect) - self.list.LUpdate(self.wid.GetWindowPort().visRgn) - - def do_close(self): - self.close() - - def close(self): - del self.list - DialogWindow.close(self) - - def mycb_add(self, ok, item): - if item: - self.additem(item[0]) - self.cb_add(item) - -class MainListWindow(ListWindow): - """The main window""" - - def open(self, id, cb_check, cb_run, cb_add): - ListWindow.open(self, id, []) - self.dlg.SetDialogDefaultItem(MAIN_INCLUDE) - self.cb_run = cb_run - self.cb_check = cb_check - self.cb_add = cb_add - setwatchcursor() - list = self.cb_check() - self.setlist(list) - setarrowcursor() - - def do_itemhit(self, item, event): - if item == MAIN_LIST: - self.do_listhit(event) - if item == MAIN_MKDISTR: - setwatchcursor() - self.cb_run() - setarrowcursor() - if item == MAIN_CHECK: - setwatchcursor() - list = self.cb_check() - self.setlist(list) - setarrowcursor() - if item == MAIN_INCLUDE: - self.do_dclick(self.delgetselection()) - if item == MAIN_EXCLUDE: - for i in self.delgetselection(): - self.cb_add((i, None)) - - def do_dclick(self, list): - if not list: - list = [''] - for l in list: - w = EditDialogWindow(self.parent) - w.open(ID_INCLUDE, (l, None), self.mycb_add, None) - - def mycb_add(self, ok, item): - if item: - self.cb_add(item) - -class IncListWindow(ListWindow): - """An include/exclude window""" - def open(self, id, editid, contents, cb_add, cb_del, cb_get): - ListWindow.open(self, id, contents) - self.dlg.SetDialogDefaultItem(INCEXC_CHANGE) - self.editid = editid - self.cb_add = cb_add - self.cb_del = cb_del - self.cb_get = cb_get - - def do_itemhit(self, item, event): - if item == MAIN_LIST: - self.do_listhit(event) - if item == INCEXC_DELETE: - old = self.delgetselection() - for i in old: - self.cb_del(i) - if item == INCEXC_CHANGE: - self.do_dclick(self.delgetselection()) - if item == INCEXC_ADD: - w = EditDialogWindow(self.parent) - w.open(self.editid, ('', None), self.mycb_add, None) - - def do_dclick(self, list): - if not list: - list = [''] - for l in list: - old = self.cb_get(l) - self.cb_del(l) - w = EditDialogWindow(self.parent) - w.open(self.editid, old, self.mycb_add, old) - -class MkDistrUI(Application): - def __init__(self, main): - self.main = main - Application.__init__(self) - self.mwin = MainListWindow(self) - self.mwin.open(ID_MAIN, self.main.check, self.main.run, self.main.inc.add) - self.iwin = None - self.ewin = None - - def makeusermenus(self): - self.filemenu = m = Menu(self.menubar, "File") - self.includeitem = MenuItem(m, "Show Include window", "", self.showinc) - self.excludeitem = MenuItem(m, "Show Exclude window", "", self.showexc) - self.saveitem = MenuItem(m, "Save databases", "S", self.save) - self.quititem = MenuItem(m, "Quit", "Q", self.quit) - - def quit(self, *args): - if self.main.is_modified(): - rv = EasyDialogs.AskYesNoCancel('Database modified. Save?', -1) - if rv == -1: - return - if rv == 1: - self.main.save() - self._quit() - - def save(self, *args): - self.main.save() - - def showinc(self, *args): - if self.iwin: - if self._windows.has_key(self.iwin): - self.iwin.close() - del self.iwin - self.iwin = IncListWindow(self) - self.iwin.open(ID_INCWINDOW, ID_INCLUDE, self.main.inc.getall(), self.main.inc.add, - self.main.inc.delete, self.main.inc.get) - - def showexc(self, *args): - if self.ewin: - if self._windows.has_key(self.ewin): - self.ewin.close() - del self.ewin - self.ewin = IncListWindow(self) - self.ewin.open(ID_EXCWINDOW, ID_EXCLUDE, self.main.exc.getall(), self.main.exc.add, - self.main.exc.delete, self.main.exc.get) - - def do_about(self, id, item, window, event): - EasyDialogs.Message("Test the MkDistr user interface.") - -def GetType(): - """Ask user for distribution type""" - while 1: - d = Dlg.GetNewDialog(ID_DTYPE, -1) - d.SetDialogDefaultItem(DTYPE_EXIST) - d.SetDialogCancelItem(DTYPE_CANCEL) - while 1: - rv = ModalDialog(None) - if rv in (DTYPE_EXIST, DTYPE_NEW, DTYPE_CANCEL): - break - del d - if rv == DTYPE_CANCEL: - sys.exit(0) - if rv == DTYPE_EXIST: - path = EasyDialogs.AskFileForOpen() - if not path: - sys.exit(0) - basename = os.path.split(path)[-1] - if basename[-8:] <> '.include': - EasyDialogs.Message('That is not a distribution include file') - else: - return basename[:-8] - else: - name = EasyDialogs.AskString('Distribution name:') - if name: - return name - sys.exit(0) - -def InitUI(): - """Initialize stuff needed by UI (a resource file)""" - macresource.need('DLOG', ID_MAIN, 'MkDistr.rsrc', modname=__name__) - -class _testerhelp: - def __init__(self, which): - self.which = which - - def get(self): - return [self.which+'-one', self.which+'-two'] - - def add(self, value): - if value: - print 'ADD', self.which, value - - def delete(self, value): - print 'DEL', self.which, value - -class _test: - def __init__(self): - import sys - InitUI() - self.inc = _testerhelp('include') - self.exc = _testerhelp('exclude') - self.ui = MkDistrUI(self) - self.ui.mainloop() - sys.exit(1) - - def check(self): - print 'CHECK' - return ['rv1', 'rv2'] - - def run(self): - print 'RUN' - -if __name__ == '__main__': - _test() |