コード例 #1
0
def _start_table_inspector ():
  _dprint(2,'adding a table inspector');
  # Create a 'data item', which represents our box in the grid.
  # The first argument is a UDI, we only need to ensure it is unique
  # so that it doesn't get confused with other data items in the system
  item = Grid.DataItem('/TableInspector',                    # UDI
                        name='Table Inspector',         # name
                        caption='<b>Table Inspector</b>',       # caption for GUI -- note use of Rich Text markup
                        desc='Table inspector plug-in',
                        data=None,refresh=None,             # no data and no refresh function
                        viewer=TableInspector);           # viewer class
  # this registers us with the grid and creates a viewer
  Grid.addDataItem(item);
コード例 #2
0
ファイル: meqgui.py プロジェクト: gijzelaerr/meqtrees-timba
def makeDataItem(udi, data=None, viewer=None, publish=False, viewopts={}):
    """Creates a data item given a UDI"""
    # parse udi
    (cat, name, trailer) = meqds.parse_udi(udi)
    if cat == 'node':
        if not name:
            raise ValueError, "invalid UDI: " + udi
        # check name or node index
        nn = name.split('#', 1)
        if not nn[0]:
            name = int(nn[1])
            # use node index if no name given
        node = meqds.nodelist[name]
        # enable publishing but do not ask for a state update -- this will
        # be done by the item later
        if publish:
            meqds.enable_node_publish(node, True, get_state=False)
        if not trailer:
            return makeNodeDataItem(node, viewer, viewopts)
        else:
            (name, caption) = meqds.make_udi_node_caption(node, trailer)
            desc = "node %s#%d, state field %s" % (node.name, node.nodeindex,
                                                   trailer)
            return Grid.DataItem(udi,
                                 name=name,
                                 caption=caption,
                                 desc=desc,
                                 data=data,
                                 refresh=curry(meqds.request_node_state,
                                               node.nodeindex),
                                 viewer=viewer,
                                 viewopts=viewopts)
    elif cat == 'forest':
        if not trailer:
            return makeForestDataItem(data, viewer, viewopts)
        else:
            (name,
             caption) = meqds.make_parsed_udi_caption(cat, name, trailer)
            return Grid.DataItem(udi,
                                 name=name,
                                 caption=caption,
                                 desc="Forest state field " + trailer,
                                 data=data,
                                 refresh=meqds.request_forest_state,
                                 viewer=viewer,
                                 viewopts=viewopts)
    else:
        raise ValueError, "can't display " + udi
コード例 #3
0
 def make_data_item(self, viewer=None, viewopts={}):
     make_data = getattr(self, '_make_data', None)
     if callable(make_data):
         return make_data(viewer=None, viewopts={})
     # return item only if viewable, has udi and contents
     if self._content is not None and self._udi and self._viewable:
         vo = getattr(self, '_viewopts', {})
         vo.update(viewopts)
         name = self._name
         desc = self._desc
         if not (name or desc):
             desc = self._udi
         # a refresh function may be defined in the list view
         refresh = getattr(self.treeWidget(), '_refresh_func', None)
         # make item and return
         if not self._name and not self._caption:
             (name, caption) = meqds.make_udi_caption(self._udi)
         else:
             (name, caption) = (self._name
                                or self._caption, self._caption
                                or self._name)
         return Grid.DataItem(self._udi,
                              name=name,
                              caption=caption,
                              data=self._content,
                              viewer=viewer,
                              viewopts=vo,
                              refresh=refresh)
     return None
コード例 #4
0
def _start_table_inspector():
    _dprint(2, 'adding a table inspector')
    # Create a 'data item', which represents our box in the grid.
    # The first argument is a UDI, we only need to ensure it is unique
    # so that it doesn't get confused with other data items in the system
    item = Grid.DataItem(
        '/TableInspector',  # UDI
        name='Table Inspector',  # name
        caption=
        '<b>Table Inspector</b>',  # caption for GUI -- note use of Rich Text markup
        desc='Table inspector plug-in',
        data=None,
        refresh=None,  # no data and no refresh function
        viewer=TableInspector)
    # viewer class
    # this registers us with the grid and creates a viewer
    Grid.addDataItem(item)
コード例 #5
0
def makeForestDataItem (data=None,viewer=None,viewopts={}):
  """creates a GridDataItem for forest state""";
  data = data or meqds.get_forest_state();
  udi = '/forest';
  (name,caption) = meqds.make_parsed_udi_caption('forest',None,None);
  return Grid.DataItem('/forest',
     name=name,caption=caption,desc='State of forest',
     data=meqds.get_forest_state(),
     refresh=meqds.request_forest_state,viewer=viewer,viewopts=viewopts);
コード例 #6
0
def makeNodeDataItem (node,viewer=None,viewopts={}):
  """creates a GridDataItem for a node""";
  udi = meqds.node_udi(node);
  nodeclass = meqds.NodeClass(node);
  vo = viewopts.copy();
  vo.update(defaultNodeViewopts);
  (name,caption) = meqds.make_udi_node_caption(node,None);
  # curry is used to create a call for refreshing its state
  return Grid.DataItem(udi,name=name,caption=caption,desc=name,
            datatype=nodeclass,
            refresh=curry(meqds.request_node_state,node.nodeindex),
            viewer=viewer,viewopts=vo);
コード例 #7
0
  def populate (self,main_parent=None,*args,**kwargs):
    #------ main window contains a splitter
    splitter = self.splitter = QSplitter(Qt.Horizontal,main_parent or self);
    # splitter.setFrameStyle(QFrame.Box+QFrame.Plain);
    splitter.setChildrenCollapsible(True);

    #------ create top-level tab bar
    self.maintab_panel = self.PanelizedWindow(splitter,"Tabbed Tools","Tabs",pixmaps.tabs.icon());
    self.maintab = maintab = QTabWidget(self.maintab_panel);
    self.maintab_panel.addWidget(maintab);
    self.connect(self.maintab,SIGNAL("currentChanged(int)"),self._change_current_page);
    maintab.setTabPosition(QTabWidget.North);
    splitter.setStretchFactor(splitter.indexOf(self.maintab_panel),0);
    _dprint(1,"parent is",self.maintab_panel.parent());

    #------ create a message log
    self.msglog = MessageLogger(self,"message log",enable=None,limit=1000,
          udi_root='message');
    self.msglog.add('start of log',category=Logger.Normal);
    QObject.connect(self.msglog.wtop(),PYSIGNAL("cleared()"),
                    self.curry(self._reset_maintab_label,self.msglog.wtop()));
    QObject.connect(self.msglog.wtop(),PYSIGNAL("hasErrors()"),self._indicate_msglog_errors);
    QObject.connect(self.msglog.treeWidget(),PYSIGNAL("displayDataItem()"),self.display_data_item);
    QObject.connect(self,PYSIGNAL("isConnected()"),self.msglog.connected);
    # set current page to message log
    self._current_page = self.msglog.wtop();
    self.add_tab(self.msglog.wtop(),"Messages");
    self.msglog.wtop()._error_label = "%d errors";
    self.msglog.wtop()._error_icon = pixmaps.exclaim.icon();
    self._last_log_message = time.clock();
    
    #------ create an event log
    self.eventlog = EventLogger(self,"event log",limit=1000,evmask="*",
          udi_root='event');
    QObject.connect(self.eventlog.treeWidget(),PYSIGNAL("displayDataItem()"),self.display_data_item);
    QObject.connect(self,PYSIGNAL("isConnected()"),self.eventlog.connected);

    self.eventtab = QTabWidget(self.maintab);
    self.eventtab.setTabPosition(QTabWidget.South);
    self.add_tab(self.eventtab,"Events");
    QObject.connect(self.eventtab._show_qaction,SIGNAL("toggled(bool)"),self.eventlog.enable);

    #------ event window tab bar
    self.eventtab.setTabShape(QTabWidget.Triangular);
    self.eventtab.addTab(self.eventlog.wtop(),"*");
    self.connect(self.eventlog.wtop(),PYSIGNAL("maskChanged()"),self._change_eventlog_mask);

    #------ status bar, pause button
    self.statusbar = self.statusBar();
    ## self.pause_button = QToolButton(self.statusbar);
    ## self.pause_button.setAutoRaise(True);
    statholder = QWidget(self.statusbar);
    statholder_lo = QHBoxLayout(statholder);
    statholder_lo.setMargin(2);
    self.status_icon  = QLabel(statholder);
    self.status_label = QLabel(statholder);
    statholder_lo.addWidget(self.status_icon);
    statholder_lo.addWidget(self.status_label);
    # self.status_icon.setFrameStyle(QFrame.NoFrame);
    self.status_icon.setMinimumWidth(20);
    self.status_icon.setMaximumWidth(20);
    self.status_icon.setAlignment(Qt.AlignCenter);


    ##    self.pause_button.setIconSet(pixmaps.pause_normal.icon());
    ##    self.pause_button.setToolTip("pause the application");
    ##    self.pause_button.setDisabled(True);
    ##    self.connect(self.pause_button,SIGNAL("clicked()"),self._press_pause);
    ##    self.pause_requested = None;

    #------ reload button
    if _reloading_enabled:
      reloadbtn = QToolButton(self.statusbar);
      reloadbtn.setIcon(pixmaps.reload_slick.icon());
      reloadbtn.setToolTip("reload Python modules");
      self.connect(reloadbtn,SIGNAL("clicked()"),reloadAllModules);

    # self.status_icon.setFrameStyle(QFrame.NoFrame);
    ## self.statusbar.addWidget(self.pause_button,0,True);
    if _reloading_enabled:
      self.statusbar.addWidget(reloadbtn,0,True);
    self.statusbar.addWidget(statholder);

    #------ gridded workspace
    self.gw_panel = self.PanelizedWindow(splitter,"Gridded Viewers","Grid",pixmaps.view_split.icon());
    self.gw = gw = Grid.Workspace(self.gw_panel,max_nx=4,max_ny=4);
    self.gw_panel.addWidget(self.gw.wtop());
    splitter.setStretchFactor(splitter.indexOf(self.gw_panel),1);
    self.gw_panel.hide();
    QObject.connect(self.gw.wtop(),PYSIGNAL("shown()"),self.gw_panel.setShown);
    QObject.connect(self.gw.wtop(),PYSIGNAL("showMessage"),self.log_message);

    self.gw_visible = {};
#    gw.add_tool_button(Qt.TopRight,pixmaps.remove.pm(),
#      tooltip="hide the value browser panel",click=self.hide_gridded_workspace);
    Grid.Services.setDefaultWorkspace(self.gw);
    # QObject.connect(self.gw.wtop(),PYSIGNAL("shown()"),self._gridded_workspace_shown);

#     self.show_workspace_button = DataDroppableWidget(QToolButton)(maintab);
#     self.show_workspace_button.setPixmap(pixmaps.view_split.pm());
#     self.show_workspace_button.setAutoRaise(True);
#     maintab.setCornerWidget(self.show_workspace_button,Qt.BottomRight);
#     QObject.connect(self.show_workspace_button,SIGNAL("clicked()"),self.gw.show);
#     QObject.connect(self.show_workspace_button,PYSIGNAL("itemDropped()"),
#                     self.xcurry(self.display_data_item,_argslice=slice(0,1)));
#     self.show_workspace_button.setToolTip("show the viewer panel. You can also drop data items here.");

    splitter.setSizes([200,600]);