def setcurfile(self,appname): """Set the current application or script. appname is either an application module name or a script file. """ is_app = not utils.is_script(appname) if is_app: # application label = 'App:' name = appname import apps app = apps.load(appname) if app is None: self.canPlay = False try: self.canEdit = os.path.exists(apps.findAppSource(appname)) except: self.canEdit = False else: self.canPlay = hasattr(app,'run') self.canEdit = os.path.exists(apps.findAppSource(app)) else: # script file label = 'Script:' name = os.path.basename(appname) self.canPlay = self.canEdit = utils.is_pyFormex(appname) or appname.endswith('.pye') pf.prefcfg['curfile'] = appname #self.curfile.label.setText(label) self.curfile.setText(label,0) self.curfile.setText(name,1) self.enableButtons(self.actions,['Play','Info'],self.canPlay) self.enableButtons(self.actions,['Edit'],self.canEdit) self.enableButtons(self.actions,['ReRun'],is_app and(self.canEdit or self.canPlay)) self.enableButtons(self.actions,['Step','Continue'],False) icon = 'ok' if self.canPlay else 'notok' self.curfile.setIcon(QtGui.QIcon(QtGui.QPixmap(os.path.join(pf.cfg['icondir'],icon)+pf.cfg['gui/icontype'])),1)
def add(self, name, icon=None, text=None): """Add a new name to the actions list and create a matching DAction. If the actions list has an associated menu or toolbar, a matching button will be inserted in each of these. If an icon is specified, it will be used on the menu and toolbar. The icon is either a filename or a QIcon object. If text is specified, it is displayed instead of the action's name. """ if type(icon) == str: if os.path.exists(icon): icon = QtGui.QIcon(QtGui.QPixmap(icon)) else: raise RuntimeError, 'Icons not installed properly' if text is None: text = name a = DAction(text, icon, name) if self.function: a.signal.connect(self.function) self.actions.append([name, a]) if self.menu: self.menu.addAction(a) if self.toolbar: self.toolbar.addAction(a)
def insertItems(self, items, before=None, debug=False): """Insert a list of items in the menu. Parameters: - `items`: a list of menuitem tuples. Each item is a tuple of two or three elements: (text, action, options): - `text`: the text that will be displayed in the menu item. It is stored in a normalized way: all lower case and with '&' removed. - `action`: can be any of the following: - a Python function or instance method : it will be called when the item is selected, - a string with the name of a function/method, - a list of Menu Items: a popup Menu will be created that will appear when the item is selected, - an existing Menu, - None : this will create a separator item with no action. - `options`: optional dictionary with following honoured fields: - `icon`: the name of an icon to be displayed with the item text. This name should be that of one of the icons in the pyFormex icondir. - `shortcut`: is an optional key combination to select the item. - `tooltip`: a text that is displayed as popup help. - `before`: if specified, should be the text *or* the action of one of the items in the Menu (not the items list!): the new list of items will be inserted before the specified item. """ if debug: print("Inserting %s items in menu %s" % (len(items), self.title())) before = self.action(before) for item in items: txt, val = item[:2] if debug: print("INSERTING %s: %s" % (txt, val)) if len(item) > 2: options = item[2] else: options = {} if val is None: a = self.insert_sep(before) self.separators[txt] = a elif isinstance(val, list): a = Menu(txt, parent=self, before=before) a.insertItems(val) elif isinstance(val, BaseMenu): #print("INSERTING MENU %s"%txt) self.insert_menu(val, before=before) else: if type(val) == str: val = eval(val) if 'data' in options: # DActions should be saved to keep them alive !!! if debug: print("INSERTING DAction %s" % txt) a = DAction(txt, data=options['data']) a.signal.connect(val) self.insert_action(a, before) # We need to store the DActions, or else they are # destroyed. QActions are stroed by Qt self._actions_.append(a) else: if debug: print("INSERTING QAction %s" % txt) if before is not None: raise RuntimeError, "I can not insert a QAction menu item before an existing one." a = self.create_insert_action(txt, val, before) for k, v in options.items(): if k == 'icon': a.setIcon(QtGui.QIcon(QtGui.QPixmap( utils.findIcon(v)))) elif k == 'shortcut': a.setShortcut(v) elif k == 'tooltip': a.setToolTip(v) elif k == 'checkable': a.setCheckable(v) elif k == 'checked': a.setCheckable(True) a.setChecked(v) elif k == 'disabled': a.setDisabled(True)