class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.setupGUI() def setupGUI(self): layout = QGridLayout() self.widget = QWidget() self.widget.setLayout(layout) self.setCentralWidget(self.widget) self.setWindowTitle("Zargan Network Analyzer") data = "%s/data/filtered.txt" % os.path.abspath(os.path.curdir) self.input_file_label = QLabel("Input File") self.input_file_edit = QLineEdit(data) self.browse_button = QPushButton("Browse") self.line_count_label = QLabel("First N lines") self.line_count_edit = QLineEdit() self.line_count_edit.setText("500000") self.window_size_label = QLabel("Window Size (seconds)") self.window_size_spin = QSpinBox() self.window_size_spin.setRange(1, 999999) self.window_size_spin.setMaximum(999999) self.window_size_spin.setValue(300) self.window_size_spin.setSingleStep(1) self.threshold_label = QLabel("Edge Threshold") self.threshold_spin = QSpinBox() self.threshold_spin.setValue(20) self.threshold_spin.setRange(0, 1000) self.threshold_spin.setSingleStep(1) self.per_ip_label = QLabel("Maximum Search per IP") self.per_ip_spin = QSpinBox() self.per_ip_spin.setMaximum(999999) self.per_ip_spin.setValue(1000) self.per_ip_spin.setRange(0, 100000) self.per_ip_spin.setSingleStep(100) self.per_session_label = QLabel("Maximum Search per Session") self.per_session_spin = QSpinBox() self.per_session_spin.setMaximum(999999) self.per_session_spin.setValue(100) self.per_session_spin.setRange(0, 1000) self.per_session_spin.setSingleStep(1) self.generate_graph_check = QCheckBox("Generate Graph") self.complete_chain_check = QCheckBox("Complete Chain") self.start_button = QPushButton("Start") self.stop_button = QPushButton("Stop") #self.output_button = QPushButton("Display Output") layout.addWidget(self.input_file_label, 0, 0) layout.addWidget(self.input_file_edit, 0, 1) layout.addWidget(self.browse_button, 0, 2) layout.addWidget(self.line_count_label, 1, 0) layout.addWidget(self.line_count_edit, 1, 1) layout.addWidget(self.window_size_label, 2, 0) layout.addWidget(self.window_size_spin, 2, 1) layout.addWidget(self.threshold_label, 3, 0) layout.addWidget(self.threshold_spin, 3, 1) layout.addWidget(self.per_ip_label, 4, 0) layout.addWidget(self.per_ip_spin, 4, 1) layout.addWidget(self.per_session_label, 5, 0) layout.addWidget(self.per_session_spin, 5, 1) layout.addWidget(self.generate_graph_check, 6, 0) layout.addWidget(self.complete_chain_check, 7, 0) layout.addWidget(self.start_button, 8, 0) layout.addWidget(self.stop_button, 8, 1) #layout.addWidget(self.output_button, 7, 0) self.connectSlots() def connectSlots(self): """ Connects signals to slots. """ self.connect(self.browse_button, SIGNAL('clicked()'), self.browseFile) self.connect(self.stop_button, SIGNAL('clicked()'), self.stop) self.connect(self.start_button, SIGNAL('clicked()'), self.start) def browseFile(self): self.input_file_edit.setText(QFileDialog.getOpenFileName()) def start(self): filename = str(self.input_file_edit.text()) item_count = int(self.line_count_edit.text()) window_size = int(self.window_size_spin.text()) prune_threshold = int(self.threshold_spin.text()) per_ip = int(self.per_ip_spin.text()) per_session = int(self.per_session_spin.text()) generate_graph = self.generate_graph_check.isChecked() complete_chain = self.complete_chain_check.isChecked() #params = (filename, item_count, window_size, prune_threshold, per_ip, per_session, generate_graph, complete_chain) #self.app = ZarganApp(*params) self.app = ZarganApp(filename=filename, item_count=item_count, window_size=window_size, prune_threshold=prune_threshold, per_ip=per_ip, per_session=per_session, generate_graph=generate_graph, complete_chain=complete_chain) self.computation = Process(target=self.app.run, args=()) self.computation.start() def stop(self): logger.info("Terminating the computation...") self.computation.terminate() def generate_graph(self): self.app.generate_graph() self.app.write_graph() def showStatusMessage(self, message): self.statusBar().showMessage(message)
class CreerSuite(MyMiniFrame): def __init__(self, parent): MyMiniFrame.__init__(self, parent, u"Représenter une suite") ##self.SetExtraStyle(wx.WS_EX_BLOCK_EVENTS ) self.parent = parent self._param_ = self.parent._param_ ##p = self.panel = QWidget(self) self.sizer = sizer = QVBoxLayout() sizer.addWidget(QLabel(u"Choisissez le mode de génération de la suite :")) self.mode = QComboBox() self.mode.addItems([u"u(n+1)=f(u(n))", u"u(n)=f(n)"]) self.mode.setCurrentIndex(0) self.mode.currentIndexChanged.connect(self.EvtChoixMode) sizer.addWidget(self.mode) f = QHBoxLayout() f.addWidget(QLabel(u"Choisissez la fonction f :")) self.fonction = QComboBox() self.fonction.addItems(["Y" + str(i+1) for i in xrange(self.parent.nombre_courbes)]) self.fonction.setCurrentIndex(0) self.fonction.currentIndexChanged.connect(self.EvtChoixFonction) f.addWidget(self.fonction) sizer.addLayout(f) start = QHBoxLayout() start.addWidget(QLabel(u"Commencer pour n =")) self.n0 = QSpinBox() self.n0.setRange(0, 1000000) self.n0.setValue(0) start.addWidget(self.n0) sizer.addLayout(start) terme = QHBoxLayout() self.label_init = QLabel(u"Terme initial :") terme.addWidget(self.label_init) self.un0 = QLineEdit("1") self.un0.setMinimumWidth(100) terme.addWidget(self.un0) sizer.addLayout(terme) ligne = QFrame() ligne.setFrameStyle(QFrame.HLine|QFrame.Raised) ##sizer.addWidget(wx.StaticLine(p, -1, style=wx.LI_HORIZONTAL), 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) nbr = QHBoxLayout() nbr.addWidget(QLabel(u"Construire les")) self.termes = QSpinBox() self.termes.setRange(0, 100) self.termes.setValue(5) nbr.addWidget(self.termes) nbr.addWidget(QLabel(u"premiers termes.")) sizer.addLayout(nbr) ligne = QFrame() ligne.setFrameStyle(QFrame.HLine|QFrame.Raised) sizer.addWidget(ligne) #p.SetSizer(sizer) boutons = QHBoxLayout() fermer = QPushButton(u"Fermer") boutons.addWidget(fermer) lancer = QPushButton(u"Créer") boutons.addWidget(lancer) fermer.clicked.connect(self.close) lancer.clicked.connect(self.Creer) sizer.addLayout(boutons) self.setLayout(sizer) ##self.SetClientSize(p.GetSize()) def Creer(self): ## self.parent.creer_feuille() # nouvelle feuille de travail # style des lignes : style, epaisseur = self._param_.style_suites_recurrentes kw_lignes = {"style": style, "epaisseur": epaisseur} # Les suites s'enregistrent auprès du module traceur # if not hasattr(self.parent, "suites"): # self.parent.suites = {} objets = self.parent.feuille_actuelle.objets i = self.fonction.currentIndex() nom_courbe = 'Cf' + str(i + 1) if objets.has_key(nom_courbe): courbe = objets[nom_courbe] fonction = courbe.fonction elif self.parent.boites[i].text(): self.parent.valider(i=i) courbe = objets[nom_courbe] fonction = courbe.fonction else: # TODO: afficher un vrai message d'erreur raise KeyError, "courbe inexistante : %s" %nom_courbe if self.mode.currentIndex() == 0: # cas des suites définies par récurrence u0 = eval_safe(self.un0.text()) n0 = self.n0.value() d = objets.suiteDroited = Droite(Point(0, 0), Point(1, 1)) d.label("$y\ =\ x$") M = objets.suitePointM0 = Point(u0, 0) M.label("$u_%s$" %(n0)) # self.parent.suites["u"] = [d, M] for i in xrange(self.termes.value() - 1): # (Attention, ça ne va pas marcher pour les fonctions définies par morceau) u1 = fonction(u0) N = Point(u0, u1, visible=self._param_.afficher_points_de_construction) N.etiquette.visible = False s = Segment(M, N, **kw_lignes) P = Point(0, u1) P.label("$u_%s$" %(i + n0 + 1)) t = Segment(N, P, **kw_lignes) Q = Point(u1, u1, visible = self._param_.afficher_points_de_construction) Q.etiquette.visible = False r = Segment(P, Q, **kw_lignes) M = Point(u1, 0) M.label("$u_%s$" %(i + n0 + 1)) #self.parent.suites[u"u"].append([M, N, P, s, t]) setattr(objets, "SuitePointN" + str(i), N) setattr(objets, "suitePointP" + str(i), P) setattr(objets, "suitePointQ" + str(i), Q) setattr(objets, "suiteSegments" + str(i), s) setattr(objets, "suiteSegmentt" + str(i), t) setattr(objets, "suiteSegmentr" + str(i), r) setattr(objets, "suitePointM" + str(i + 1), M) a = Segment(Q, M, **kw_lignes) setattr(objets, "suiteSegmenta" + str(i), a) u0 = u1 self.parent.canvas.zoom_auto() else: # suites définies explicitement n0 = self.n0.text() # self.parent.suites[u"u"] = [] for i in xrange(n0, n0 + self.termes.text()): yi = fonction(i) M = Point(i, 0) M.label(str(i)) N = Point(i, yi) N.etiquette.visible = False P = Point(0, yi) P.label("$u_%s$" %i) s = Segment(M, N, **kw_lignes) t = Segment(N, P, **kw_lignes) setattr(objets, "suitePointM" + str(i), M) setattr(objets, "suitePointN" + str(i), N) setattr(objets, "suitePointP" + str(i), P) setattr(objets, "suiteSegments" + str(i), s) setattr(objets, "suiteSegmentt" + str(i), t) self.parent.canvas.zoom_auto() def EvtChoixMode(self, index): if index == 1: self.label_init.hide() self.un0.hide() else: self.un0.show() self.label_init.show() def EvtChoixFonction(self, index): for i in xrange(self.parent.nombre_courbes): self.parent.boites[i].setChecked(i==index)
class NumberBoxPanel(QWidget): def __init__(self, parent, resoution = "0.0000"): QWidget.__init__(self, parent) while not isinstance(parent, QDialog): parent = parent.parent() self.setObjectName("NumberBoxPanel" + str(len(parent.findChildren(NumberBoxPanel)))) self.hLayoutBoxPanel = QHBoxLayout(self) self.hLayoutBoxPanel.setSpacing(0) self.hLayoutBoxPanel.setContentsMargins(0,0,0,0) self.hLayoutBoxPanel.setObjectName(("hLayoutBoxPanel")) self.frameBoxPanel = QFrame(self) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.frameBoxPanel.sizePolicy().hasHeightForWidth()) self.frameBoxPanel.setSizePolicy(sizePolicy) self.frameBoxPanel.setFrameShape(QFrame.NoFrame) self.frameBoxPanel.setFrameShadow(QFrame.Raised) self.frameBoxPanel.setObjectName(("frameBoxPanel")) self.hLayoutframeBoxPanel = QHBoxLayout(self.frameBoxPanel) self.hLayoutframeBoxPanel.setSpacing(0) self.hLayoutframeBoxPanel.setMargin(0) self.hLayoutframeBoxPanel.setObjectName(("hLayoutframeBoxPanel")) self.captionLabel = QLabel(self.frameBoxPanel) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.captionLabel.sizePolicy().hasHeightForWidth()) self.captionLabel.setSizePolicy(sizePolicy) self.captionLabel.setMinimumSize(QSize(200, 0)) self.captionLabel.setMaximumSize(QSize(200, 16777215)) font = QFont() font.setBold(False) font.setWeight(50) self.captionLabel.setFont(font) self.captionLabel.setObjectName(("captionLabel")) self.hLayoutframeBoxPanel.addWidget(self.captionLabel) if resoution != None: self.numberBox = QLineEdit(self.frameBoxPanel) self.numberBox.setEnabled(True) font = QFont() font.setBold(False) font.setWeight(50) self.numberBox.setFont(font) self.numberBox.setObjectName(self.objectName() + "_numberBox") self.numberBox.setText("0.0") self.numberBox.setMinimumWidth(70) self.numberBox.setMaximumWidth(70) self.hLayoutframeBoxPanel.addWidget(self.numberBox) self.numberBox.textChanged.connect(self.numberBoxChanged) self.numberBox.editingFinished.connect(self.numberBoxEditingFinished) else: self.numberBox = QSpinBox(self.frameBoxPanel) self.numberBox.setObjectName(self.objectName() + "_numberBox") self.numberBox.setMinimumWidth(70) self.numberBox.setMaximumWidth(70) self.numberBox.setMinimum(-100000000) self.numberBox.setMaximum(100000000) self.numberBox.setValue(1) self.hLayoutframeBoxPanel.addWidget(self.numberBox) self.imageButton = QPushButton(self.frameBoxPanel) self.imageButton.setText(("")) icon = QIcon() icon.addPixmap(QPixmap(("Resource/convex_hull.png")), QIcon.Normal, QIcon.Off) self.imageButton.setIcon(icon) self.imageButton.setObjectName(("imageButton")) self.imageButton.setVisible(False) self.hLayoutframeBoxPanel.addWidget(self.imageButton) self.hLayoutBoxPanel.addWidget(self.frameBoxPanel) spacerItem = QSpacerItem(10,10,QSizePolicy.Expanding, QSizePolicy.Minimum) self.hLayoutBoxPanel.addItem(spacerItem) self.imageButton.clicked.connect(self.imageButtonClicked) self.numberResolution = resoution str0 = String.Number2String(6.6788, "0.0000") self.Value = 0 self.captionUnits = "" def imageButtonClicked(self): self.emit(SIGNAL("Event_1"), self) def method_6(self, string_0): return "%s%s\t%f %s"%(string_0, self.Caption, self.Value, self.CaptionUnits); def numberBoxEditingFinished(self): self.emit(SIGNAL("editingFinished"), self) def numberBoxChanged(self): try: test = float(self.numberBox.text()) self.emit(SIGNAL("Event_0"), self) except: if self.numberBox.text() == "" or self.numberBox.text() == "-" or self.numberBox.text() == "+": return str0 = "You must input the float type in \"%s\"."%(self.Caption) QMessageBox.warning(self, "Warning" , str0) self.numberBox.setText("0.0") def get_CaptionUnits(self): return self.captionUnits def set_CaptionUnits(self, captionUnits): self.captionUnits = captionUnits CaptionUnits = property(get_CaptionUnits, set_CaptionUnits, None, None) def get_Caption(self): caption = self.captionLabel.text() findIndex = caption.indexOf("(") if findIndex > 0: val = caption.left(findIndex) return val return caption def set_Caption(self, captionStr): if self.CaptionUnits != "" and self.CaptionUnits != None: self.captionLabel.setText(QString(captionStr + "(") + self.CaptionUnits + QString("):")) else: self.captionLabel.setText(captionStr + ":") Caption = property(get_Caption, set_Caption, None, None) def get_Visible(self): return self.isVisible() def set_Visible(self, bool): self.setVisible(bool) Visible = property(get_Visible, set_Visible, None, None) def get_Value(self): try: if self.numberResolution != None: return float(self.numberBox.text()) else: return self.numberBox.value() except: return 0.0 def set_Value(self, valueFloat): if self.numberResolution != None: if valueFloat == None or valueFloat == "": rStr = String.Number2String(0, self.numberResolution) self.numberBox.setText(rStr) return try: test = float(valueFloat) rStr = String.Number2String(test, self.numberResolution) self.numberBox.setText(rStr) except: str0 = "You must put the float type in \"%s\"."%(self.Caption) QMessageBox.warning(self, "Warning" , str0) rStr = String.Number2String(0, self.numberResolution) self.numberBox.setText(rStr) else: try: test = int(valueFloat) self.numberBox.setValue(test) except: str0 = "You must put the float type in \"%s\"."%(self.Caption) QMessageBox.warning(self, "Warning" , str0) self.numberBox.setValue(0) Value = property(get_Value, set_Value, None, None) # def get_IsEmpty(self): # return self.numberBox.text() == "" or self.numberBox.text() == None # IsEmpty = property(get_IsEmpty, None, None, None) def get_ReadOnly(self): return self.numberBox.isReadOnly() def set_ReadOnly(self, bool): self.numberBox.setReadOnly(bool) ReadOnly = property(get_ReadOnly, set_ReadOnly, None, None) def set_LabelWidth(self, width): self.captionLabel.setMinimumSize(QSize(width, 0)) self.captionLabel.setMaximumSize(QSize(width, 16777215)) LabelWidth = property(None, set_LabelWidth, None, None) def set_Width(self, width): self.numberBox.setMinimumSize(QSize(width, 0)) self.numberBox.setMaximumSize(QSize(width, 16777215)) Width = property(None, set_Width, None, None) def get_Enabled(self): return self.isEnabled() def set_Enabled(self, bool): self.setEnabled(bool) Enabled = property(get_Enabled, set_Enabled, None, None) def set_Button(self, imageName): if imageName == None or imageName == "": self.imageButton.setVisible(False) return icon = QIcon() icon.addPixmap(QPixmap(("Resource/" + imageName)), QIcon.Normal, QIcon.Off) self.imageButton.setIcon(icon) self.imageButton.setVisible(True) Button = property(None, set_Button, None, None)