Beispiel #1
0
    def handleMouseEvent(self, event):
        if event.isPopupTrigger():
            loadMenu = JMenuItem("Load .proto")
            loadMenu.addActionListener(self.tab.listener)

            popup = JPopupMenu()
            popup.add(loadMenu)

            if self.tab.descriptors:

                deserializeAsMenu = JMenu("Deserialize As...")

                popup.addSeparator()
                popup.add(deserializeAsMenu)

                for pb2, descriptors in self.tab.descriptors.iteritems():
                    subMenu = JMenu(pb2)
                    deserializeAsMenu.add(subMenu)

                    for name, descriptor in descriptors.iteritems():
                        protoMenu = JMenuItem(name)
                        protoMenu.addActionListener(
                            DeserializeProtoActionListener(self.tab, descriptor))

                        subMenu.add(protoMenu)

            popup.show(event.getComponent(), event.getX(), event.getY())

        return
Beispiel #2
0
class OptionsCallbackPopupMenu:
    # options should be a list of (name, function, [arg1, [arg2]]) tuples
    def __init__(self, parent, x, y, options, extraOptions=None):
        self.popupMenu = JPopupMenu()
        self.options = options
        self.addToMenuForOptions(options)
        if extraOptions:
           self.addToMenuForOptions(extraOptions)
        self.popupMenu.show(parent, x, y) 
            
    def addToMenuForOptions(self, options, menu=None):
        if not menu:
            menu = self.popupMenu
        for option in options:
            if not option or not option[0]:
                menu.addSeparator()
            else:
                if type(option[1]) in [tuple, list]:
                    # nested menu
                    submenu = JMenu(option[0])
                    self.addToMenuForOptions(option[1], submenu)
                    menu.add(submenu)
                else:
                    menuItem = JMenuItem(option[0], actionPerformed=lambda event, option=option: self.OnChoice(option))
                    menu.add(menuItem)
                    
    def OnChoice(self, option):
        if len(option) == 2:
            option[1]()
        elif len(option) == 3:
            option[1](option[2])
        elif len(option) == 4:
            option[1](option[2], option[3])
 def show(self, component, onChange):
     self.__onChange = onChange
     menu = JPopupMenu()
     jcalendar = JCalendar()
     jcalendar.addDateListener(self)
     menu.add(jcalendar)
     menu.show(component, 0,
               component.getY() + int(component.getSize().getHeight()))
	def actionPerformed(self, event):
		messages = self.browser.getSelectedMessages()
		numMessages = messages.size()

		if numMessages == 0:
			self.browser.showInformationDialog("No messages selected")
			return

		if numMessages > 1:
			self.browser.showInformationDialog("%d messages selected, choose one" % numMessages)
			return

		message = messages.get(0)
		replyToId = message.getJMSMessageID()
		replyToQueue0 = message.getJMSReplyTo()
		if replyToQueue0 != None:
			replyToQueue0 = replyToQueue0.getQueueName()
			p = Pattern.compile("[^\\s:/]+://[^\\s:/]*/([^\\s:/?]+)\\??.*")
			m = p.matcher(replyToQueue0)
			if m.matches():
				replyToQueue0 = m.group(1)
			else:
				replyToQueue0 = None

		dNode = self.browser.getBrowserTree().getFirstSelectedDestinationNode()
		hNode = self.browser.getBrowserTree().getSelectedHermesNode()
		if dNode == None or hNode == None:
			self.browser.showInformationDialog("Unknown destination, select destination queue")
			return

		hermes = hNode.getHermes()
		replyToQueue1 = dNode.getDestinationName()
		replyToDomain = dNode.getDomain()

		if replyToQueue0 == None and replyToQueue1 == None:
			self.browser.showInformationDialog("Unknown destination, select destination queue")
			return

		# show menu
		if replyToQueue0 != None and replyToQueue1 != None and replyToQueue0 != replyToQueue1:
			menu = JPopupMenu()
			q0item = JMenuItem(replyToQueue0)
			q0item.addActionListener(MenuItemHandler(self, hermes, replyToId, replyToQueue0, replyToDomain))
			menu.add(q0item)
			q1item = JMenuItem(replyToQueue1)
			q1item.addActionListener(MenuItemHandler(self, hermes, replyToId, replyToQueue1, replyToDomain))
			menu.add(q1item)
			menu.show(self.button, 0, self.button.getHeight())
			return

		# show new message dialog
		else:
			if replyToQueue0 != None:
				replyToQueue = replyToQueue0
			else:
				replyToQueue = replyToQueue1
			self.replyTo(hermes, replyToId, replyToQueue, replyToDomain)
Beispiel #5
0
class DataPanel(JPanel,MouseListener):
    def __init__(self,view):
        JPanel.__init__(self)
        self.view=view
        self.background=Color.white
        self.layout=BorderLayout()

        self.popup=JPopupMenu()
        self.popup_items={}

        self.add(self.make_controls(),BorderLayout.SOUTH)

        data,title=self.extract_data()
        self.table=JTable(DefaultTableModel(data,title))

        scroll=JScrollPane(self.table)
        self.add(scroll)

        scroll.addMouseListener(self)
        self.table.tableHeader.addMouseListener(self)
        self.table.addMouseListener(self)

        self.fileChooser=JFileChooser()
        self.fileChooser.setFileFilter(CSVFilter())
        self.fileChooser.setSelectedFile(File('%s.csv'%self.view.network.name))



    def make_controls(self):
        from timeview.components.timecontrol import Icon, ShadedIcon
        panel=JPanel(background=self.background)
        panel.add(JButton(Icon.refresh,actionPerformed=self.refresh,rolloverIcon=ShadedIcon.refresh,toolTipText='refresh',borderPainted=False,focusPainted=False,contentAreaFilled=False))

        filter=JPanel(layout=BorderLayout(),opaque=False)
        self.filter = JSpinner(SpinnerNumberModel(self.view.tau_filter,0,0.5,0.01),stateChanged=self.refresh)
        filter.add(self.filter)
        filter.add(JLabel('filter'),BorderLayout.NORTH)
        filter.maximumSize=filter.preferredSize
        panel.add(filter)

        decimals=JPanel(layout=BorderLayout(),opaque=False)
        self.decimals = JSpinner(SpinnerNumberModel(3,0,10,1),stateChanged=self.refresh)
        decimals.add(self.decimals)
        decimals.add(JLabel('decimal places'),BorderLayout.NORTH)
        decimals.maximumSize=decimals.preferredSize
        panel.add(decimals)

        panel.add(JButton(Icon.save,actionPerformed=self.save,rolloverIcon=ShadedIcon.save,toolTipText='save',borderPainted=False,focusPainted=False,contentAreaFilled=False))

        return panel

    def extract_data(self):
        pause_state=self.view.paused
        self.view.paused=True

        while self.view.simulating:
            java.lang.Thread.sleep(10)

        tau=float(self.filter.value)
        dt=self.view.dt
        if tau<dt: dt_tau=None
        else: dt_tau=dt/tau

        decimals=int(self.decimals.value)
        format='%%1.%df'%decimals

        start_index=max(0,self.view.timelog.tick_count-self.view.timelog.tick_limit+1)
        count=min(self.view.timelog.tick_limit,self.view.timelog.tick_count)
        start_time=start_index*self.view.dt

        data=None
        title=['t']
        keys = self.view.watcher.active.keys()
        keys.sort()
        for key in keys:
            watch = self.view.watcher.active[key]
            name,func,args=key

            code='%s.%s%s'%(name,func.__name__,args)
            if code not in self.popup_items:
                state=True
                if 'spike' in func.__name__: state=False
                if 'voltage' in func.__name__: state=False
                self.popup_items[code]=JCheckBoxMenuItem(code,state,stateChanged=self.refresh)
                self.popup.add(self.popup_items[code])

            if self.popup_items[code].state is False: continue

            d=watch.get(dt_tau=dt_tau,start=start_index,count=count)
            n=len(watch.get_first())
            if data is None:
                data=[]
                while len(data)<len(d):
                    data.append(['%0.4f'%(start_time+(len(data)+0)*self.view.dt)])


            for i in range(n):
                title.append('%s[%d]'%(code,i))
                for j in range(len(data)):
                    dd=d[j]
                    if dd is None: data[j].append('')
                    else: data[j].append(format%dd[i])

        self.view.paused=pause_state
        return data,title


    def save(self,event=None):
        if self.fileChooser.showSaveDialog(self)==JFileChooser.APPROVE_OPTION:
            f=self.fileChooser.getSelectedFile()
            writer=BufferedWriter(FileWriter(f))

            data,title=self.extract_data()
            title=[t.replace(',',' ') for t in title]
            writer.write(','.join(title)+'\n')
            for row in data:
                writer.write(','.join(row)+'\n')
            writer.close()

    def refresh(self,event=None):
        data,title=self.extract_data()
        self.table.model.setDataVector(data,title)

        
    def mouseClicked(self, event):     
        if event.button==MouseEvent.BUTTON3 or (event.button==MouseEvent.BUTTON1 and event.isControlDown()):
            if self.popup is not None:
                self.popup.show(event.source,event.x-5,event.y-5)
            
    def mouseEntered(self, event):
        pass
    def mouseExited(self, event):        
        pass
    def mousePressed(self, event):
        pass
    def mouseReleased(self, event):        
        pass
Beispiel #6
0
class DataViewComponent(JPanel, MouseListener, MouseWheelListener, MouseMotionListener, ActionListener):
    #hover_border=BorderFactory.createLineBorder(Color.black,2);
    #item_hover_border=BorderFactory.createLineBorder(Color(0.5,0.5,0.5),1);

    hover_border = RoundedBorder(Color.black, thickness=2)
    item_hover_border = RoundedBorder(Color(0.7, 0.7, 0.7))

    default_border = BorderFactory.createEmptyBorder()

    def __init__(self, label=None):
        JPanel.__init__(self)
        self.addMouseListener(self)
        self.addMouseWheelListener(self)
        self.addMouseMotionListener(self)
        self.hover = False
        self.min_width = 20
        self.min_height = 20
        self.resize_border = 20
        self.max_show_dim = 30        # The maximum number of display dimensions to show in the popup menu
        self.setSize(100, 50)
        self.border = self.default_border

        self.popup = JPopupMenu()
        self.popup.add(JMenuItem('hide', actionPerformed=self.hideme))

        self.show_label = False
        self.label = label
        self.label_offset = 0
        if self.label is not None:
            self.show_label = True
            self.popup.add(JPopupMenu.Separator())
            self.popup_label = JCheckBoxMenuItem('label', self.show_label, actionPerformed=self.toggle_label)
            self.popup.add(self.popup_label)
            self.label_height = 15
            self.update_label()
        else:
            self.label_height = 0

    def save(self):
        return dict(x=self.x, y=self.y, width=self.width, height=self.height, label=self.show_label)

    def restore(self, d):
        self.setLocation(d['x'], d['y'])
        self.setSize(d['width'], d['height'])
        self.show_label = d.get('label', False)
        if self.label is not None:
            self.popup_label.state = self.show_label
        self.label_offset = self.label_height * self.show_label

    def do_hide(self):
        parent = self.parent
        self.visible = False
        if self.parent is not None:
            self.parent.remove(self)
            parent.repaint()

    def hideme(self, event):
        if event.actionCommand == 'hide':
            self.do_hide()

    def toggle_label(self, event):
        self.show_label = event.source.state
        self.update_label()

    def update_label(self):
        if(self.show_label):
            self.setLocation(self.x, self.y - self.label_height)
            self.setSize(self.size.width, self.size.height + self.label_height)
            self.label_offset = self.label_height
        else:
            self.setLocation(self.x, self.y + self.label_height)
            self.setSize(self.size.width, self.size.height - self.label_height)
            self.label_offset = 0

        self.repaint()

    def mouseWheelMoved(self, event):
        delta = event.wheelRotation
        scale = 0.9
        if delta < 0:
            scale = 1.0 / scale
            delta = -delta
        w = self.size.width
        h = self.size.height
        for i in range(delta):
            w *= scale
            h *= scale
        if w < self.min_width:
            w = self.min_width
        if h < self.min_height:
            h = self.min_height
        w = int(w)
        h = int(h)
        self.setLocation(int(self.x - (w - self.size.width) / 2), int(self.y - (h - self.size.height) / 2))
        self.setSize(w, h)

    def mouseClicked(self, event):
        if event.button == MouseEvent.BUTTON3 or (event.button == MouseEvent.BUTTON1 and event.isControlDown()):
            self.parent.add(self.popup)
            self.popup.show(self, event.x - 5, event.y - 5)

    def mouseEntered(self, event):
        self.border = self.hover_border
        for n in self.view.area.components:
            if n is not self and hasattr(n, 'name') and n.name == self.name:
                n.border = n.item_hover_border
        self.repaint()

    def mouseExited(self, event):
        self.border = self.default_border
        for n in self.view.area.components:
            if n is not self and hasattr(n, 'name') and n.name == self.name:
                n.border = n.default_border
        self.repaint()

    def mousePressed(self, event):
        self.mouse_pressed_x = event.x
        self.mouse_pressed_y = event.y
        self.mouse_pressed_size = self.size

    def mouseReleased(self, event):
        pass

    def mouseDragged(self, event):
        if self.cursor.type == Cursor.HAND_CURSOR:
            self.setLocation(self.x + event.x - self.mouse_pressed_x, self.y + event.y - self.mouse_pressed_y)
        if self.cursor.type in [Cursor.W_RESIZE_CURSOR, Cursor.NW_RESIZE_CURSOR, Cursor.SW_RESIZE_CURSOR]:
            w = self.size.width - event.x + self.mouse_pressed_x
            if w < self.min_width:
                w = self.min_width
            self.setLocation(self.x - w + self.size.width, self.y)
            self.setSize(w, self.size.height)
        if self.cursor.type in [Cursor.E_RESIZE_CURSOR, Cursor.NE_RESIZE_CURSOR, Cursor.SE_RESIZE_CURSOR]:
            w = self.mouse_pressed_size.width + event.x - self.mouse_pressed_x
            if w < self.min_width:
                w = self.min_width
            self.setSize(w, self.size.height)
        if self.cursor.type in [Cursor.N_RESIZE_CURSOR, Cursor.NW_RESIZE_CURSOR, Cursor.NE_RESIZE_CURSOR]:
            h = self.size.height - event.y + self.mouse_pressed_y
            if h < self.min_height:
                h = self.min_height
            self.setLocation(self.x, self.y - h + self.size.height)
            self.setSize(self.size.width, h)
        if self.cursor.type in [Cursor.S_RESIZE_CURSOR, Cursor.SW_RESIZE_CURSOR, Cursor.SE_RESIZE_CURSOR]:
            h = self.mouse_pressed_size.height + event.y - self.mouse_pressed_y
            if h < self.min_height:
                h = self.min_height
            self.setSize(self.size.width, h)
        self.view.area.repaint()

    def mouseMoved(self, event):
        size = self.resize_border
        if event.x < size:
            if event.y < size:
                self.cursor = Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR)
            elif event.y >= self.size.height - size:
                self.cursor = Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR)
            else:
                self.cursor = Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR)
        elif event.x >= self.size.width - size:
            if event.y < size:
                self.cursor = Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR)
            elif event.y >= self.size.height - size:
                self.cursor = Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR)
            else:
                self.cursor = Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR)
        else:
            if event.y < size:
                self.cursor = Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR)
            elif event.y >= self.size.height - size:
                self.cursor = Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR)
            else:
                self.cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)

    def paintComponent(self, g):
        #if self.hover:
        #    g.color=Color(0.9,0.9,0.9)
        #    g.fillRect(0,0,self.size.width,self.size.height)
        #else:
        g.color = Color.white
        g.fillRect(0, 0, self.size.width, self.size.height)
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)

        if self.show_label:
            g.color = Color(0.3, 0.3, 0.3)
            bounds = g.font.getStringBounds(self.label, g.fontRenderContext)
            g.drawString(self.label, self.size.width / 2 - bounds.width / 2, bounds.height)

    def tick(self, t):
        """This method will be called in the simulation timescale (as opposed to the rendering
        timescale of paintComponent).  This is useful for updating the data that will
        be displayed by paintComponent, since the data changes at the simulation timescale.
        Note however that this method is not guaranteed to be called every
        simulation timestep; for example, if the simulation is running very quickly,
        it would not be desirable to be updating the data far more quickly than it can be
        displayed.

        :param float t: the current simulation time"""
        pass