class TabInformations(QWidget): statsReceived = pyqtSignal(object) versionReceived = pyqtSignal(object) def __init__(self, search, parent=None): QWidget.__init__(self, parent) # Load de l'UI PyQt4.uic.loadUi('ui/informations.ui', self) # Signaux self.statsReceived.connect(self.set_statistics) self.versionReceived.connect(self.set_version) def update_informations(self): self.stats_get = StatisticsGet(self.statsReceived.emit) self.stats_get.do_get() self.version_get = VersionGet() self.version_get.do_get(self.versionReceived.emit) def set_statistics(self, stats): txt = u"Utilisateurs connectés : %d\n" % stats.users txt += u"Taille de vos fichiers dans la base : %s\n" % stats.shares_size_mine_str txt += u"Taille des fichiers dans la base : %s" % stats.shares_size_total_str self.statistics_label.setText(txt) def set_version(self, version): txt = "%s version %d.%d.%d\n" % \ (version.name, version.major, version.minor, version.minor_minor) txt += "PyRex version 0.1" self.version_label.setText(txt)
class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) PyQt4.uic.loadUi('ui/pyrex.ui', self) self.adv_search = TabAdvSearch(self.tabs) self.peers = TabPeers(self.tabs) self.downloads = TabDownloads(self.tabs) self.options = TabOptions(self.tabs) self.shares = TabShares(self.tabs) self.tabs.insertTab(1, self.adv_search, u"Recherche avancée") self.tabs.insertTab(2, self.downloads, u"Téléchargements") self.tabs.insertTab(3, self.peers, u"Utilisateurs") self.tabs.insertTab(4, self.options, u'Options') self.tabs.insertTab(5, self.shares, u'Mes partages') self.tabs_results = TabsResults(self.widget_recherches) self.widget_recherches.layout().addWidget(self.tabs_results) def change_tab(self, tab): if tab == 3: self.peers.update_peers() if tab == 6: self.update_informations() def update_informations(self): self.stats_get = StatisticsGet() self.stats_get.do_get(self.set_statistics) self.version_get = VersionGet() self.version_get.do_get(self.set_version) def set_statistics(self, stats): txt = u"Utilisateurs connectés : %d\n" % stats.users txt += u"Taille de vos fichiers dans la base : %s\n" % stats.shares_size_mine_str txt += u"Taille des fichiers dans la base : %s" % stats.shares_size_total_str self.statistics_label.setText(txt) def set_version(self, version): txt = "%s version %d.%d.%d\n" % \ (version.name, version.major, version.minor, version.minor_minor) txt += "PyRex version 0.0.1" self.version_label.setText(txt) def search(self): query = str(self.search_edit1.text()) if len(query) > 1: search = Search(query) tab_result = TabResults(search, parent=self.tabs_results) self.tabs_results.addTab(tab_result, query) def adv_search(self): print "hello world"
class TabPeers(QWidget): peersReceived = pyqtSignal(list) statsReceived = pyqtSignal(object) def __init__(self, tab_search, tab_downloads, tabs): QWidget.__init__(self, tabs) self.tab_search = tab_search self.tab_downloads= tab_downloads self.tabs_results = self.tab_search.instance.tabs_results self.tabs = tabs # Load de l'UI PyQt4.uic.loadUi('ui/peers.ui', self) # Vars self.peers_get = None self.stats_get = None self.timer = None self.cache = {} # Config affichage self.table_peers.sortItems(0) self.button_SMB.hide() self.button_FTP.hide() #self.table_peers.setStyleSheet(\ # "QTableView::item{ \ # border-right-style:solid; \ # border-width:0.5; \ # border-color: #9B9B9B; \ # }") # On autorise la creation de menu contextuel self.setContextMenuPolicy(Qt.CustomContextMenu) # Signaux self.customContextMenuRequested.connect(self.contextMenu) self.peersReceived.connect(self.set_peers) self.statsReceived.connect(self.set_stats) def update_peers(self): if self.peers_get is None: self.peers_get = PeersGet() self.peers_get.do_get(self.peersReceived.emit) def add_peer(self, peer): rows = self.table_peers.rowCount() self.table_peers.insertRow(rows) item = QTableWidgetItem(peer.nickname) item.peer = peer self.table_peers.setItem(rows, 0, item) self.table_peers.setItem(rows, 1, QTableWidgetItem(peer.ip)) def set_peers(self, peers): while self.table_peers.rowCount(): self.table_peers.removeRow(0) self.table_peers.setSortingEnabled(False) for peer in peers: self.add_peer(peer) self.peers_get = None self.table_peers.setSortingEnabled(True) def set_stats(self, stats): if stats: self.cache[stats.ip] = stats row = self.table_peers.currentRow() if row >= 0 and self.table_peers.item(row, 0).peer.ip == stats.ip: self.label_size_shares.setText(stats.shares_size_mine_str) self.label_size_total_shares.setText(stats.shares_size_total_str) self.label_peers.setText(str(stats.users)) self.button_FTP.show() else: if self.timer: self.timer.stop() self.timer = QTimer() self.timer.setSingleShot(True) self.timer.start(1000) self.timer.timeout.connect(self.stats_get.do_get) def cell_selected(self, row, col, prev_row, prev_col): if row >= 0: item = self.table_peers.item(row, 0) self.label_nickname.setText(item.peer.nickname) self.label_ip.setText(item.peer.ip) self.label_version.setText("%s %s" % (item.peer.name, item.peer.version)) if item.peer.ip in self.cache: self.set_stats(self.cache[item.peer.ip]) else: self.label_size_shares.setText('-') self.label_size_total_shares.setText('-') self.label_peers.setText('-') self.stats_get = StatisticsGet(self.statsReceived.emit, item.peer.ip) self.stats_get.do_get() def contextMenu(self, pos): menu = QMenu() # Actions showAction = menu.addAction("Afficher ses partages") copyAction = menu.addAction("Copier l'IP") # Signaux self.connect(showAction, SIGNAL('triggered()'), self.show_Action) self.connect(copyAction, SIGNAL('triggered()'), self.copy_Action) # On affiche le menu menu.exec_(self.mapToGlobal(pos)) def getPeer(self): row = self.table_peers.currentRow() return self.table_peers.item(row, 0).peer def show_Action(self): peer = self.getPeer() #TODO: ajouter le SMB quand ça existera :p browser = BrowserFtp("ftp://"+str(peer.ip)+":2221", self.tabs, self.tabs_results, self.tab_downloads, self.tabs_results) self.tabs_results.addTab(browser, peer.nickname) self.tabs_results.setCurrentWidget(browser) self.tabs.setCurrentIndex(0) def copy_Action(self): pressPaper = QApplication.clipboard() pressPaper.setText(self.getPeer().ip) def double_clicked(self, row, col): self.show_Action() def resizeEvent(self, event): maxSize = self.table_peers.size().width() # Pseudo : 35% self.table_peers.horizontalHeader().resizeSection(0, maxSize*.35) event.accept()