+++ /dev/null
-# Authors: Amaury Medeiros and Paulo Ouriques
-# Software License: GPL
-
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-
-from functools import partial
-from time import sleep
-
-from pcsdeviceinfoviewer import PcsDeviceInfoViewer
-from pcsdevicewidget import PcsDeviceWidget
-from pcsuiutils import *
-from tsuigeneralmethods import *
-from pcsutils import *
-
-from style.styleTabletSuite import *
-from backup.pcswindowmanager import *
-
-class PcsDeviceViewer(QFrame):
-
- '''Class that displays the devices which are connected to the PC'''
-
- _ip = "None"
- CONNECTION_ERROR_MESSAGE = "Could not connect to device with the given IP " + \
- "address.\nCheck if device is turned on and is properly " + \
- "connected to network"
-
- def __init__(self, deviceManager, pcSuite):
- super(PcsDeviceViewer, self).__init__()
- self.deviceManager = deviceManager
- self.deviceManager.loadDevices()
-# self.pcSuite = pcSuite
- self.setFixedSize(WINDOW_WIDTH, 150)
- self.deviceWidget = PcsDeviceWidget(0)
-
- # Create device connection type
- self.deviceInfoViewer = PcsDeviceInfoViewer(pcSuite)
-
- self.mainLayout = QHBoxLayout()
- self.mainLayout.setMargin(0)
-
- spacer = QSpacerItem(15, 15)
- self.mainLayout.addItem(spacer)
- self.mainLayout.addWidget(self.deviceWidget)
- self.mainLayout.addItem(QSpacerItem(20,20))
- self.mainLayout.addLayout(self.deviceInfoViewer)
- self.mainLayout.addItem(spacer)
- self.setLayout(self.mainLayout)
-
- self.connectDialog = None
-
- def checkIp(self, ip):
- list = ip.split(".")
- if len(list) != 4:
- return False
- for sublist in list:
- if len(sublist) < 1 or len(sublist) > 3:
- return False
- for element in sublist:
- if not str(element).isdigit():
- return False
- return True
-
- def showConnectDialog(self):
- if(self.connectDialog == None):
- self.connectDialog = QDialog(self, Qt.FramelessWindowHint)
- self.connectDialog.setObjectName("connectDialog")
- self.connectDialog.setWindowIcon(QIcon(TABLET_SUITE_LOGO))
- self.connectDialog.setWindowTitle("Device Selection")
- connectDialogLayout = QVBoxLayout()
-
- hLayout = QHBoxLayout()
- addButton = QPushButton("Add")
- addButton.setObjectName("smallButton")
- self.connect(addButton, SIGNAL("clicked()"), self.addIp)
-
- self.ipField = QLineEdit()
- self.ipField.setText("IP Number")
- self.ipField.setObjectName("ipField")
- hLayout.addWidget(self.ipField)
- hLayout.addWidget(addButton)
-
- buttonLayout = QHBoxLayout()
- self.connectButton = QPushButton("Connect")
- self.connectButton.setObjectName("tsButton")
- self.connect(self.connectButton, SIGNAL("clicked()"), self._connect)
-
- self.deleteButton = QPushButton("Delete")
- self.deleteButton.setObjectName("tsButton")
- self.connect(self.deleteButton, SIGNAL("clicked()"), self._deleteSelectedIp)
-
- cancelButton = QPushButton("Cancel")
- cancelButton.setObjectName("tsButton")
- setVisible = partial(self.connectDialog.setVisible, False)
- self.connect(cancelButton, SIGNAL("clicked()"), setVisible)
-
- buttonLayout.addWidget(self.connectButton)
- buttonLayout.addWidget(self.deleteButton)
- buttonLayout.addWidget(cancelButton)
-
- vLayout = QVBoxLayout()
- vLayout.setMargin(15)
- vLayout.addWidget(QLabel("Select the device IP"))
- vLayout.addLayout(hLayout)
- vLayout.addWidget(self._createIpList())
- connectDialogLayout.addLayout(vLayout)
- connectDialogLayout.addLayout(buttonLayout)
- self.connectDialog.setLayout(connectDialogLayout)
- self._updateIpList()
- self.connectDialog.exec_()
-
- else:
- self._updateIpList()
- self.connectDialog.setVisible(True)
-
- def _connect(self):
- self._ip = self.getSelectedIp()
- if not create_route(self._ip):
- showMessageBox(self.CONNECTION_ERROR_MESSAGE,
- "Error while connecting to device")
- return False
- if not verify_exist_keys(self._ip):
- dialog = QMessageBox()
- dialog.setText( "Wrong Key, It seems that the device key " + \
- "changed. Do you want to exchange keys again?")
- dialog.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
- dialog.setWindowFlags(Qt.FramelessWindowHint)
- dialog.setStyleSheet(MESSAGE_BOX_DEFAULT)
- ret = dialog.exec_()
- if ret == QMessageBox.Yes:
- if not self.showPasswdDialog():
- return False
- else:
- return False
- self._runAddDevice()
-
- def _createIpList(self):
- self.ipList = QTableView(self)
- self.ipList.setObjectName("ipList")
- self.ipList.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
- self.ipList.setAlternatingRowColors(True)
- self.ipList.setShowGrid(False)
- self.ipList.setEditTriggers(QAbstractItemView.NoEditTriggers)
- self.model = QStandardItemModel()
- self.ipList.setModel(self.model)
- self._updateButtonsState()
- self.connect(self.ipList.selectionModel(),
- SIGNAL("selectionChanged(QItemSelection, QItemSelection)"),
- self._updateButtonsState)
-
- hHeader = QHeaderView(Qt.Horizontal)
- hHeader.setVisible(False)
- hHeader.setResizeMode(QHeaderView.ResizeToContents)
- hHeader.setMinimumSectionSize(225)
- self.ipList.setHorizontalHeader(hHeader)
-
- vHeader = QHeaderView(Qt.Vertical)
- vHeader.setVisible(False)
- self.ipList.setVerticalHeader(vHeader)
-
- return self.ipList
-
- def _deleteSelectedIp(self):
- dialog = QMessageBox()
- dialog.setText("Remove selected ip?")
- dialog.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
- dialog.setWindowFlags(Qt.FramelessWindowHint)
- dialog.setStyleSheet(MESSAGE_BOX_APP)
- ret = dialog.exec_()
- if ret == QMessageBox.Yes:
- selectionModel = self.ipList.selectionModel()
- indexList = selectionModel.selectedRows()
- for index in indexList:
- if index.isValid():
- try:
- ipAdress = self.model.itemData(index)[0].toString()
- self.deviceManager.removeDevice(ipAdress)
- except:
- pass
- finally:
- self.model.removeRow(index.row())
-
- def getSelectedIp(self):
- selectionModel = self.ipList.selectionModel()
- indexList = selectionModel.selectedRows()
-
- for index in indexList:
- if index.isValid():
- data = self.model.itemData(index)
- return data[0].toString()
-
- def showInvalidIpDialog(self):
- showMessageBox("Invalid ip adress", "Invalid ip")
-
- def addIp(self):
- ip = self.ipField.text()
-
- if self.checkIp(ip):
- for i in range(self.model.rowCount()):
- if(self.model.item(i).text() == ip):
- self.ipField.setText("IP Number")
- return
- item = QStandardItem(ip)
- self.model.appendRow([item])
- self.ipField.setText("IP Number")
- else:
- self.showInvalidIpDialog()
-
- def showPasswdDialog(self):
- (passwd, ok) = QInputDialog.getText(self, "Device Selection",
- "Root Password:",
- QLineEdit.Password,
- QString(),
- Qt.FramelessWindowHint)
- if ok and not passwd.isEmpty():
- self._passwd = passwd
- if not keyExchange(self._ip, self._passwd):
- errorMessage = "Could not connect to device with the given IP " + \
- "Could not exchange keys"
- showMessageBox(errorMessage, "Error while connecting to device")
- return False
- return True
-
- def _updateButtonsState(self):
- selectionModel = self.ipList.selectionModel()
- indexList = selectionModel.selectedRows()
- if len(indexList) > 1 or len(indexList) <= 0:
- self.connectButton.setDisabled(True)
- self.deleteButton.setDisabled(True)
- else:
- self.connectButton.setEnabled(True)
- self.deleteButton.setEnabled(True)
-
- def _createWindowManager(self, deviceInf):
- if deviceInf != None:
- PcsWindowManager(deviceInf, self)
-
- def _runAddDevice(self):
- self.connectingThread = connectingThread(self.deviceManager, self._ip)
- self.connect(self.connectingThread, SIGNAL("connectException"), self._connectException)
- self.connect(self.connectingThread, SIGNAL("createWindowManager"), self._createWindowManager)
- self.connectingThread.start()
-
- self.connectionProgress()
- self.connect(self.connectingThread, SIGNAL("connectionDone"), self.updateDeviceInformation)
-
- def updateDeviceInformation(self, deviceInfo):
- self._progressDialog.cancel()
- self.deviceInfo = deviceInfo
- self.deviceManager.setCurrentDevice(self._ip)
- if self.deviceInfo:
- self.deviceManager.loadDevices()
- self.deviceWidget.setDeviceInfo(self.deviceInfo)
- self.deviceInfoViewer.setDeviceInfo(self.deviceInfo)
- else:
- showMessageBox("An error occurred while connect.", "Connection error")
-
- def _updateIpList(self):
- self.model.clear()
- devices = self.deviceManager.getDevices()
- for device in devices:
- self.model.appendRow(QStandardItem(str(device)))
-
- def connectionProgress(self):
- self.connectDialog.setVisible(False)
- self._progressDialog = QProgressDialog("Connecting...",
- QString(), 0, -1, self,
- Qt.FramelessWindowHint)
- self._progressDialog.setObjectName("progressDialog")
- self._progressDialog.setWindowIcon(QIcon(BACKUP_IMAGE))
- self._progressDialog.setValue(0)
- self._progressDialog.show()
-
- def _connectException(self):
- showMessageBox("", "Error while connect to device")
-
-
-class connectingThread(QThread):
- def __init__(self, deviceManager, deviceIp):
- QThread.__init__(self)
- self.deviceManager = deviceManager
- self.deviceIp = deviceIp
-
- def run(self):
- try:
- deviceInf = self.deviceManager._addDevice(self.deviceIp)
- self.emit(SIGNAL("createWindowManager"), deviceInf)
- self.emit(SIGNAL("connectionDone"), deviceInf)
- except:
- self.emit(SIGNAL("connectException"))
- self.emit(SIGNAL("connectionDone"), None)
-
\ No newline at end of file