def __init__(self, bus, busaddr, name): """a builder""" QtWidgets.QFrame.__init__(self) self.bus = bus self.agents = [] self.about_window = None self.ui = Ui_Main() self.ui.setupUi(self) self.ui.busLabel.setText(busaddr) self.ui.nameLabel.setText(name) self.ui.removeButton.clicked.connect(self.unbind) self.ui.addButton.clicked.connect(self.bind) self.ui.newBinding.activated.connect(self.bind) self.ui.killButton.clicked.connect(self.kill) self.ui.inspectButton.clicked.connect(self.inspect) self.ui.sendButton.clicked.connect(self.send) self.ui.msg.activated.connect(self.send) self.new_message.connect(self.slot_message) self.ui.actionCredits.triggered.connect(self.about) self.ui.actionQuit.triggered.connect(self.bus.sigstop) self.ui.actionSending.toggled.connect(self.ui.idDock.setVisible) self.ui.actionBindings.toggled.connect(self.ui.bindDock.setVisible) self.ui.agentList.itemDoubleClicked.connect(self.inspect) self.show()
class IvyMonView(QtWidgets.QMainWindow): """ the graphical view of IvyMon it's based on ui_main.py generated by pyuic5 """ new_message = QtCore.pyqtSignal(int, str) def __init__(self, bus, busaddr, name): """a builder""" QtWidgets.QFrame.__init__(self) self.bus = bus self.agents = [] self.about_window = None self.ui = Ui_Main() self.ui.setupUi(self) self.ui.busLabel.setText(busaddr) self.ui.nameLabel.setText(name) self.ui.removeButton.clicked.connect(self.unbind) self.ui.addButton.clicked.connect(self.bind) self.ui.newBinding.activated.connect(self.bind) self.ui.killButton.clicked.connect(self.kill) self.ui.inspectButton.clicked.connect(self.inspect) self.ui.sendButton.clicked.connect(self.send) self.ui.msg.activated.connect(self.send) self.new_message.connect(self.slot_message) self.ui.actionCredits.triggered.connect(self.about) self.ui.actionQuit.triggered.connect(self.bus.sigstop) self.ui.actionSending.toggled.connect(self.ui.idDock.setVisible) self.ui.actionBindings.toggled.connect(self.ui.bindDock.setVisible) self.ui.agentList.itemDoubleClicked.connect(self.inspect) self.show() def about(self): if self.about_window is not None: self.about_window.show() return self.about_window = QtWidgets.QDialog() ui = Ui_About() ui.setupUi(self.about_window) self.about_window.show() def add_binding(self, regexp): self.ui.bindList.addItem(QtWidgets.QListWidgetItem(regexp)) def add_agent(self, agent): # adds an agent in the list by ivy agent a = Agent(agent) self.agents.append(a) self.ui.agentList.addItem(a.item) def remove_agent(self, agent): # removes an agent from the list by ivy agent for a in [x for x in self.agents if x.agent is agent]: self.ui.agentList.takeItem(self.ui.agentList.row(a.item)) self.add_message(1, [a.item.text() + " left"]) self.agents = [x for x in self.agents if x.agent is not agent] def inspect(self): for item in self.ui.agentList.selectedItems(): for a in [x for x in self.agents if x.item is item]: a.doshow() def kill(self): for item in self.ui.agentList.selectedItems(): self.add_message(1, ["killed " + item.text()]) self.ui.agentList.takeItem(self.ui.agentList.row(item)) for a in [x for x in self.agents if x.item is item]: a.agent.send_die_message() self.agents = [x for x in self.agents if x.item is not item] def unbind(self): for item in self.ui.bindList.selectedItems(): re = item.text() self.bus.unbind_msg(self.bus.bound[re]) self.ui.bindList.takeItem(self.ui.bindList.row(item)) self.add_message(1, ["unbound to " + re]) def bind(self): new = self.ui.newBinding.currentText() if len(new) is 0: return self.bus.add_binding(new) self.add_message(1, ["bound to " + new]) def add_message(self, i, args): self.new_message.emit(i ,datetime.now().strftime("%H:%M:%S") + ' - ' + ":".join(args)) def slot_message(self, i, msg): if i is 0: scroll = self.ui.messages.verticalScrollBar() pos = scroll.value() self.ui.messages.append(msg) if self.ui.autoScroll.isChecked(): scroll.setValue(scroll.maximum()) else: scroll.setValue(pos) elif i is 1: self.ui.events.append(msg) scroll = self.ui.events.verticalScrollBar() scroll.setValue(scroll.maximum()) def my_regexp_change(self, agent, event, num_id, regexp): self.add_message(1, ["regexp change ", agent.agent_name, str(event), str(num_id), regexp]) for a in [x for x in self.agents if x.agent is agent]: a.update_regex() def send(self): text = self.ui.msg.currentText() self.add_message(1, ["sending ", text]) self.bus.send_msg(text)