Example #1
0
 def dropEvent(self, e):
     """Accept drop events."""
     model = QStandardItemModel()
     model.dropMimeData(
         e.mimeData(), Qt.CopyAction, 0, 0, QModelIndex())
     name = model.item(0).text()
     item = None
     if name in ['And', 'Or', 'Nand', 'Nor', 'Not', 'Xor', 'Xnor']:
         item = CircuitItem(
             getattr(engine.gates, name + 'Gate')(None, self.mainCircuit))
     elif name == 'RSFlipFlop':
         item = CircuitItem(RSFlipFlop(None, self.mainCircuit))
     elif name == 'JKFlipFlop':
         item = CircuitItem(JKFlipFlop(None, self.mainCircuit))
     elif name == self.str_I:
         item = PlugItem(Plug(True, None, self.mainCircuit))
     elif name == self.str_O:
         item = PlugItem(Plug(False, None, self.mainCircuit))
     elif name == self.str_Clock:
         if not self.clockPlug:
             self.clockPlug = Clock(self.mainCircuit)
             self.clockPlug.clkThread.set_extern(self.clockUpdate)
             item = PlugItem(self.clockPlug)
         else:
             self.write(self.str_onlyOneClock)
     elif model.item(0, 1).text() == 'user':
         c = Circuit(None, self.mainCircuit)
         f = open(filePath('user/') + name + '.crc', 'rb')
         children = pickle.load(f)
         f.close()
         for child in children:
             if isinstance(child[0], Plug):
                 child[0].owner = c
                 if child[0].isInput:
                     c.inputList.append(child[0])
                 else:
                     c.outputList.append(child[0])
             elif isinstance(child[0], Circuit):
                 child[0].owner = c
                 c.circuitList.append(child[0])
         c.category = name
         item = CircuitItem(c)
     if item:
         # Fixes the default behaviour of centering the first
         # item added to scene.
         if not len(self.scene().items()):
             self.scene().setSceneRect(0, 0, 1, 1)
         else:
             self.scene().setSceneRect(0, 0, 0, 0)
         self.scene().addItem(item)
         item.setupPaint()
         item.setPos(
             closestGridPoint(item.mapFromScene(self.mapToScene(e.pos()))))
         for i in self.scene().selectedItems():
             i.setSelected(False)
         item.setSelected(True)
         self.timer.start()