mirror of
https://github.com/naruxde/revpicommander.git
synced 2025-11-08 16:43:53 +01:00
WIP: revpifiles.py has all functions for PyLoad 0.9.2
File download and delete functions are missing
This commit is contained in:
@@ -11,12 +11,21 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
class Ui_win_files(object):
|
||||
def setupUi(self, win_files):
|
||||
win_files.setObjectName("win_files")
|
||||
win_files.resize(891, 579)
|
||||
win_files.resize(725, 592)
|
||||
self.centralwidget = QtWidgets.QWidget(win_files)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.gb_select_local = QtWidgets.QGroupBox(self.centralwidget)
|
||||
self.splitter = QtWidgets.QSplitter(self.centralwidget)
|
||||
self.splitter.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.splitter.setChildrenCollapsible(False)
|
||||
self.splitter.setObjectName("splitter")
|
||||
self.gridLayoutWidget = QtWidgets.QWidget(self.splitter)
|
||||
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
|
||||
self.vl_local = QtWidgets.QVBoxLayout(self.gridLayoutWidget)
|
||||
self.vl_local.setContentsMargins(0, 0, 0, 0)
|
||||
self.vl_local.setObjectName("vl_local")
|
||||
self.gb_select_local = QtWidgets.QGroupBox(self.gridLayoutWidget)
|
||||
self.gb_select_local.setObjectName("gb_select_local")
|
||||
self.gridLayout_2 = QtWidgets.QGridLayout(self.gb_select_local)
|
||||
self.gridLayout_2.setObjectName("gridLayout_2")
|
||||
@@ -39,15 +48,39 @@ class Ui_win_files(object):
|
||||
self.btn_refresh_local.setObjectName("btn_refresh_local")
|
||||
self.gridLayout_2.addWidget(self.btn_refresh_local, 0, 2, 1, 1)
|
||||
self.lbl_path_local = QtWidgets.QLabel(self.gb_select_local)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.lbl_path_local.sizePolicy().hasHeightForWidth())
|
||||
self.lbl_path_local.setSizePolicy(sizePolicy)
|
||||
self.lbl_path_local.setObjectName("lbl_path_local")
|
||||
self.gridLayout_2.addWidget(self.lbl_path_local, 1, 0, 1, 3)
|
||||
self.gridLayout_2.setColumnStretch(0, 1)
|
||||
self.gridLayout.addWidget(self.gb_select_local, 0, 0, 1, 1)
|
||||
self.gb_select_revpi = QtWidgets.QGroupBox(self.centralwidget)
|
||||
self.vl_local.addWidget(self.gb_select_local)
|
||||
self.tree_files_local = QtWidgets.QTreeWidget(self.gridLayoutWidget)
|
||||
self.tree_files_local.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
|
||||
self.tree_files_local.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
|
||||
self.tree_files_local.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
|
||||
self.tree_files_local.setIconSize(QtCore.QSize(24, 24))
|
||||
self.tree_files_local.setObjectName("tree_files_local")
|
||||
self.tree_files_local.headerItem().setText(0, "1")
|
||||
self.tree_files_local.header().setVisible(False)
|
||||
self.vl_local.addWidget(self.tree_files_local)
|
||||
self.gridLayoutWidget_2 = QtWidgets.QWidget(self.splitter)
|
||||
self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
|
||||
self.vl_revpi = QtWidgets.QVBoxLayout(self.gridLayoutWidget_2)
|
||||
self.vl_revpi.setContentsMargins(0, 0, 0, 0)
|
||||
self.vl_revpi.setObjectName("vl_revpi")
|
||||
self.gb_select_revpi = QtWidgets.QGroupBox(self.gridLayoutWidget_2)
|
||||
self.gb_select_revpi.setObjectName("gb_select_revpi")
|
||||
self.gridLayout_3 = QtWidgets.QGridLayout(self.gb_select_revpi)
|
||||
self.gridLayout_3.setObjectName("gridLayout_3")
|
||||
self.lbl_path_revpi = QtWidgets.QLabel(self.gb_select_revpi)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.lbl_path_revpi.sizePolicy().hasHeightForWidth())
|
||||
self.lbl_path_revpi.setSizePolicy(sizePolicy)
|
||||
self.lbl_path_revpi.setObjectName("lbl_path_revpi")
|
||||
self.gridLayout_3.addWidget(self.lbl_path_revpi, 1, 0, 1, 2)
|
||||
self.lbl_select_revpi = QtWidgets.QLabel(self.gb_select_revpi)
|
||||
@@ -59,49 +92,40 @@ class Ui_win_files(object):
|
||||
self.btn_refresh_revpi.setObjectName("btn_refresh_revpi")
|
||||
self.gridLayout_3.addWidget(self.btn_refresh_revpi, 0, 1, 1, 1)
|
||||
self.gridLayout_3.setColumnStretch(0, 1)
|
||||
self.gridLayout.addWidget(self.gb_select_revpi, 0, 2, 1, 1)
|
||||
self.tree_files_local = QtWidgets.QTreeWidget(self.centralwidget)
|
||||
self.tree_files_local.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
|
||||
self.tree_files_local.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
|
||||
self.tree_files_local.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
|
||||
self.tree_files_local.setIconSize(QtCore.QSize(24, 24))
|
||||
self.tree_files_local.setObjectName("tree_files_local")
|
||||
self.tree_files_local.headerItem().setText(0, "1")
|
||||
self.tree_files_local.header().setVisible(False)
|
||||
self.gridLayout.addWidget(self.tree_files_local, 1, 0, 1, 1)
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.btn_to_left = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.btn_to_left.setText("")
|
||||
icon2 = QtGui.QIcon()
|
||||
icon2.addPixmap(QtGui.QPixmap(":/action/ico/arrow-left.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.btn_to_left.setIcon(icon2)
|
||||
self.btn_to_left.setIconSize(QtCore.QSize(24, 24))
|
||||
self.btn_to_left.setAutoDefault(False)
|
||||
self.btn_to_left.setObjectName("btn_to_left")
|
||||
self.verticalLayout_2.addWidget(self.btn_to_left)
|
||||
self.btn_to_right = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.vl_revpi.addWidget(self.gb_select_revpi)
|
||||
self.hl_revpi = QtWidgets.QHBoxLayout()
|
||||
self.hl_revpi.setObjectName("hl_revpi")
|
||||
self.btn_to_right = QtWidgets.QPushButton(self.gridLayoutWidget_2)
|
||||
self.btn_to_right.setText("")
|
||||
icon3 = QtGui.QIcon()
|
||||
icon3.addPixmap(QtGui.QPixmap(":/action/ico/arrow-right.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.btn_to_right.setIcon(icon3)
|
||||
icon2 = QtGui.QIcon()
|
||||
icon2.addPixmap(QtGui.QPixmap(":/action/ico/arrow-right.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.btn_to_right.setIcon(icon2)
|
||||
self.btn_to_right.setIconSize(QtCore.QSize(24, 24))
|
||||
self.btn_to_right.setAutoDefault(False)
|
||||
self.btn_to_right.setObjectName("btn_to_right")
|
||||
self.verticalLayout_2.addWidget(self.btn_to_right)
|
||||
self.btn_delete = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.btn_delete.setText("")
|
||||
self.hl_revpi.addWidget(self.btn_to_right)
|
||||
self.btn_to_left = QtWidgets.QPushButton(self.gridLayoutWidget_2)
|
||||
self.btn_to_left.setText("")
|
||||
icon3 = QtGui.QIcon()
|
||||
icon3.addPixmap(QtGui.QPixmap(":/action/ico/arrow-left.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.btn_to_left.setIcon(icon3)
|
||||
self.btn_to_left.setIconSize(QtCore.QSize(24, 24))
|
||||
self.btn_to_left.setAutoDefault(False)
|
||||
self.btn_to_left.setObjectName("btn_to_left")
|
||||
self.hl_revpi.addWidget(self.btn_to_left)
|
||||
self.btn_delete_revpi = QtWidgets.QPushButton(self.gridLayoutWidget_2)
|
||||
self.btn_delete_revpi.setText("")
|
||||
icon4 = QtGui.QIcon()
|
||||
icon4.addPixmap(QtGui.QPixmap(":/action/ico/edit-delete.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.btn_delete.setIcon(icon4)
|
||||
self.btn_delete.setIconSize(QtCore.QSize(24, 24))
|
||||
self.btn_delete.setAutoDefault(False)
|
||||
self.btn_delete.setObjectName("btn_delete")
|
||||
self.verticalLayout_2.addWidget(self.btn_delete)
|
||||
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
self.verticalLayout_2.addItem(spacerItem)
|
||||
self.gridLayout.addLayout(self.verticalLayout_2, 1, 1, 1, 1)
|
||||
self.tree_files_revpi = QtWidgets.QTreeWidget(self.centralwidget)
|
||||
self.btn_delete_revpi.setIcon(icon4)
|
||||
self.btn_delete_revpi.setIconSize(QtCore.QSize(24, 24))
|
||||
self.btn_delete_revpi.setAutoDefault(False)
|
||||
self.btn_delete_revpi.setObjectName("btn_delete_revpi")
|
||||
self.hl_revpi.addWidget(self.btn_delete_revpi)
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.hl_revpi.addItem(spacerItem)
|
||||
self.vl_revpi.addLayout(self.hl_revpi)
|
||||
self.tree_files_revpi = QtWidgets.QTreeWidget(self.gridLayoutWidget_2)
|
||||
self.tree_files_revpi.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
|
||||
self.tree_files_revpi.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
|
||||
self.tree_files_revpi.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
|
||||
@@ -109,10 +133,11 @@ class Ui_win_files(object):
|
||||
self.tree_files_revpi.setObjectName("tree_files_revpi")
|
||||
self.tree_files_revpi.headerItem().setText(0, "1")
|
||||
self.tree_files_revpi.header().setVisible(False)
|
||||
self.gridLayout.addWidget(self.tree_files_revpi, 1, 2, 1, 1)
|
||||
self.vl_revpi.addWidget(self.tree_files_revpi)
|
||||
self.gridLayout.addWidget(self.splitter, 0, 0, 1, 1)
|
||||
self.btn_all = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.btn_all.setObjectName("btn_all")
|
||||
self.gridLayout.addWidget(self.btn_all, 2, 0, 1, 3)
|
||||
self.gridLayout.addWidget(self.btn_all, 1, 0, 1, 1)
|
||||
win_files.setCentralWidget(self.centralwidget)
|
||||
self.statusbar = QtWidgets.QStatusBar(win_files)
|
||||
self.statusbar.setObjectName("statusbar")
|
||||
@@ -128,12 +153,14 @@ class Ui_win_files(object):
|
||||
self.lbl_select_local.setText(_translate("win_files", "Path to development root:"))
|
||||
self.btn_select_local.setToolTip(_translate("win_files", "Open developer root directory"))
|
||||
self.btn_refresh_local.setToolTip(_translate("win_files", "Reload file list"))
|
||||
self.lbl_path_local.setToolTip(_translate("win_files", "/"))
|
||||
self.lbl_path_local.setText(_translate("win_files", "/"))
|
||||
self.tree_files_local.setSortingEnabled(True)
|
||||
self.gb_select_revpi.setTitle(_translate("win_files", "Revolution Pi"))
|
||||
self.lbl_path_revpi.setToolTip(_translate("win_files", "/"))
|
||||
self.lbl_path_revpi.setText(_translate("win_files", "/"))
|
||||
self.lbl_select_revpi.setText(_translate("win_files", "RevPiPyLoad working directory:"))
|
||||
self.btn_refresh_revpi.setToolTip(_translate("win_files", "Reload file list"))
|
||||
self.tree_files_local.setSortingEnabled(True)
|
||||
self.tree_files_revpi.setSortingEnabled(True)
|
||||
self.btn_all.setText(_translate("win_files", "Stop - Upload - Start"))
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>891</width>
|
||||
<height>579</height>
|
||||
<width>725</width>
|
||||
<height>592</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -16,6 +16,16 @@
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="childrenCollapsible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="gridLayoutWidget">
|
||||
<layout class="QVBoxLayout" name="vl_local">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="gb_select_local">
|
||||
<property name="title">
|
||||
<string>Local computer</string>
|
||||
@@ -67,6 +77,15 @@
|
||||
</item>
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QLabel" name="lbl_path_local">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Ignored" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>/</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>/</string>
|
||||
</property>
|
||||
@@ -75,7 +94,41 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<item>
|
||||
<widget class="QTreeWidget" name="tree_files_local">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::MultiSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="sortingEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="gridLayoutWidget_2">
|
||||
<layout class="QVBoxLayout" name="vl_revpi">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="gb_select_revpi">
|
||||
<property name="title">
|
||||
<string>Revolution Pi</string>
|
||||
@@ -83,6 +136,15 @@
|
||||
<layout class="QGridLayout" name="gridLayout_3" columnstretch="1,0">
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QLabel" name="lbl_path_revpi">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Ignored" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>/</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>/</string>
|
||||
</property>
|
||||
@@ -115,58 +177,8 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QTreeWidget" name="tree_files_local">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::MultiSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="sortingEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_to_left">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="ressources.qrc">
|
||||
<normaloff>:/action/ico/arrow-left.ico</normaloff>:/action/ico/arrow-left.ico</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<layout class="QHBoxLayout" name="hl_revpi">
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_to_right">
|
||||
<property name="text">
|
||||
@@ -188,7 +200,27 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_delete">
|
||||
<widget class="QPushButton" name="btn_to_left">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="ressources.qrc">
|
||||
<normaloff>:/action/ico/arrow-left.ico</normaloff>:/action/ico/arrow-left.ico</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_delete_revpi">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
@@ -208,21 +240,21 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<item>
|
||||
<widget class="QTreeWidget" name="tree_files_revpi">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
@@ -252,7 +284,11 @@
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="3">
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QPushButton" name="btn_all">
|
||||
<property name="text">
|
||||
<string>Stop - Upload - Start</string>
|
||||
|
||||
@@ -241,7 +241,7 @@ class ConnectionManager(QtCore.QThread):
|
||||
|
||||
# Load values and test connection to Revolution Pi
|
||||
try:
|
||||
pyload_version = list(map(int, sp.version().split(".")))
|
||||
pyload_version = tuple(map(int, sp.version().split(".")))
|
||||
xml_funcs = sp.system.listMethods()
|
||||
xml_mode = sp.xmlmodus()
|
||||
except Exception as e:
|
||||
|
||||
@@ -281,7 +281,7 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
|
||||
return
|
||||
|
||||
# Check version of RevPiPyLoad, must be greater than 0.5!
|
||||
if helper.cm.pyload_version[0] == 0 and helper.cm.pyload_version[1] < 6:
|
||||
if helper.cm.pyload_version < (0, 6, 0):
|
||||
QtWidgets.QMessageBox.critical(
|
||||
self, self.tr("Error"), self.tr(
|
||||
"The Version of RevPiPyLoad on your Revolution Pi ({0}) is to old. "
|
||||
|
||||
@@ -29,21 +29,33 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
super(RevPiFiles, self).__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.dc_settings = {}
|
||||
self.tree_files_counter = 0
|
||||
self.tree_files_counter_max = 10000
|
||||
self.lbl_path_local.setText(helper.cm.develop_watch_path or self.tr("Please select..."))
|
||||
self.lbl_path_local.setToolTip(self.lbl_path_local.text())
|
||||
|
||||
self.btn_all.setEnabled(False)
|
||||
self.btn_to_left.setEnabled(False)
|
||||
self.btn_to_right.setEnabled(False)
|
||||
self.btn_delete.setEnabled(False)
|
||||
self.btn_delete_revpi.setEnabled(False)
|
||||
|
||||
if helper.cm.develop_watch_path:
|
||||
self._load_path_files(True)
|
||||
self._load_files_local(True)
|
||||
if helper.cm.connected:
|
||||
self._load_files_revpi(True)
|
||||
|
||||
self.restoreGeometry(helper.settings.value("files/geo", b''))
|
||||
self.splitter.setSizes(list(map(int, helper.settings.value("files/splitter", [0, 0]))))
|
||||
|
||||
def __del__(self):
|
||||
pi.logger.debug("RevPiFiles.__del__")
|
||||
|
||||
def closeEvent(self, a0: QtGui.QCloseEvent) -> None:
|
||||
pi.logger.debug("RevPiFiles.closeEvent")
|
||||
helper.settings.setValue("files/geo", self.saveGeometry())
|
||||
helper.settings.setValue("files/splitter", self.splitter.sizes())
|
||||
|
||||
def _do_my_job(self, stop_restart=True):
|
||||
"""
|
||||
Upload the selected files and do a optionally restart.
|
||||
@@ -67,7 +79,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
uploaded = True # Will be False, when opt_program was found in files
|
||||
ec = 0
|
||||
|
||||
for file_name in self.file_list():
|
||||
for file_name in self.file_list_local():
|
||||
# todo: Check exception of local file
|
||||
with open(file_name, "rb") as fh:
|
||||
# Remove base dir of file to set relative for PyLoad
|
||||
@@ -126,16 +138,78 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
|
||||
def _set_gui_control_states(self):
|
||||
"""Setup states of actions and buttons."""
|
||||
state = len(self.tree_files_local.selectedItems()) > 0
|
||||
self.btn_all.setEnabled(state)
|
||||
self.btn_to_left.setEnabled(state)
|
||||
self.btn_to_right.setEnabled(state)
|
||||
self.btn_delete.setEnabled(state)
|
||||
version_okay = helper.cm.pyload_version >= (0, 9, 3)
|
||||
if not version_okay:
|
||||
self.btn_to_left.setToolTip(self.tr("The RevPiPyLoad version on the Revolution Pi is to old."))
|
||||
self.btn_delete_revpi.setToolTip(self.tr("The RevPiPyLoad version on the Revolution Pi is to old."))
|
||||
state_local = len(self.tree_files_local.selectedItems()) > 0
|
||||
state_revpi = version_okay and len(self.tree_files_revpi.selectedItems()) > 0
|
||||
self.btn_all.setEnabled(state_local)
|
||||
self.btn_to_left.setEnabled(state_revpi)
|
||||
self.btn_to_right.setEnabled(state_local)
|
||||
self.btn_delete_revpi.setEnabled(state_revpi)
|
||||
|
||||
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# region # REGION: Tree management
|
||||
|
||||
def __insert_files(self, base_dir: str, child=None):
|
||||
@staticmethod
|
||||
def _parent_selection_state(item: QtWidgets.QTreeWidgetItem):
|
||||
"""Set selected, if all children are selected."""
|
||||
if item.parent():
|
||||
all_selected = True
|
||||
for i in range(item.parent().childCount()):
|
||||
if not item.parent().child(i).isSelected():
|
||||
all_selected = False
|
||||
break
|
||||
item.parent().setSelected(all_selected)
|
||||
|
||||
def _select_children(self, top_item: QtWidgets.QTreeWidgetItem, value: bool):
|
||||
"""Recursive select children from parent."""
|
||||
pi.logger.debug("RevPiFiles._select_children")
|
||||
|
||||
for i in range(top_item.childCount()):
|
||||
item = top_item.child(i)
|
||||
if item.type() == NodeType.DIR:
|
||||
item.setSelected(value)
|
||||
self._select_children(item, value)
|
||||
elif item.type() == NodeType.FILE:
|
||||
item.setSelected(value)
|
||||
|
||||
def __item_selection_changed(self, tree_view: QtWidgets.QTreeView):
|
||||
"""Manager vor item selection of three views."""
|
||||
item = tree_view.currentItem()
|
||||
if item is None:
|
||||
return
|
||||
|
||||
pi.logger.debug("RevPiFiles.__itemSelectionChanged")
|
||||
|
||||
# Block while preselect other entries
|
||||
tree_view.blockSignals(True)
|
||||
|
||||
if item.type() == NodeType.DIR:
|
||||
self._select_children(item, item.isSelected())
|
||||
elif item.type() == NodeType.FILE:
|
||||
self._parent_selection_state(item)
|
||||
|
||||
tree_view.blockSignals(False)
|
||||
|
||||
self._set_gui_control_states()
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_tree_files_local_itemSelectionChanged(self):
|
||||
self.__item_selection_changed(self.tree_files_local)
|
||||
helper.cm.develop_watch_files = self.file_list_local()
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_tree_files_revpi_itemSelectionChanged(self):
|
||||
self.__item_selection_changed(self.tree_files_revpi)
|
||||
|
||||
# endregion # # # # #
|
||||
|
||||
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# region # REGION: Local file lists
|
||||
|
||||
def __insert_files_local(self, base_dir: str, child=None):
|
||||
"""
|
||||
Recursively add files to tree view.
|
||||
|
||||
@@ -156,7 +230,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
else:
|
||||
self.tree_files_local.addTopLevelItem(item)
|
||||
|
||||
self.__insert_files(de.path, item)
|
||||
self.__insert_files_local(de.path, item)
|
||||
|
||||
elif de.is_file(follow_symlinks=False):
|
||||
self.tree_files_counter += 1
|
||||
@@ -174,34 +248,22 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
self.tree_files_local.addTopLevelItem(item)
|
||||
|
||||
item.setSelected(de.path in helper.cm.develop_watch_files)
|
||||
self._parent_selected(item)
|
||||
self._parent_selection_state(item)
|
||||
|
||||
def __select_children(self, top_item: QtWidgets.QTreeWidgetItem, value: bool):
|
||||
"""Recursive select files from directory."""
|
||||
pi.logger.debug("RevPiFiles.__select_children")
|
||||
|
||||
for i in range(top_item.childCount()):
|
||||
item = top_item.child(i)
|
||||
if item.type() == NodeType.DIR:
|
||||
self.__select_children(item, value)
|
||||
elif item.type() == NodeType.FILE:
|
||||
item.setSelected(value)
|
||||
|
||||
def _load_path_files(self, silent=False):
|
||||
def _load_files_local(self, silent=False):
|
||||
"""
|
||||
Refresh the file list.
|
||||
|
||||
:param silent: Do not show message boxes
|
||||
"""
|
||||
pi.logger.debug("RevPiFiles._load_path_files")
|
||||
pi.logger.debug("RevPiFiles._load_files_local")
|
||||
|
||||
self.tree_files_counter = 0
|
||||
self.tree_files_local.blockSignals(True)
|
||||
self.tree_files_local.clear()
|
||||
self.tree_files_local.blockSignals(False)
|
||||
|
||||
self.__insert_files(helper.cm.develop_watch_path)
|
||||
self.__insert_files_local(helper.cm.develop_watch_path)
|
||||
self.tree_files_local.sortItems(0, QtCore.Qt.AscendingOrder)
|
||||
self.tree_files_local.blockSignals(False)
|
||||
|
||||
if not silent and self.tree_files_counter > self.tree_files_counter_max:
|
||||
QtWidgets.QMessageBox.critical(
|
||||
@@ -212,49 +274,122 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
|
||||
self._set_gui_control_states()
|
||||
|
||||
def _parent_selected(self, item: QtWidgets.QTreeWidgetItem):
|
||||
"""Check all children of a parent are selected."""
|
||||
if item.parent():
|
||||
all_selected = True
|
||||
for i in range(item.parent().childCount()):
|
||||
if not item.parent().child(i).isSelected():
|
||||
all_selected = False
|
||||
break
|
||||
item.parent().setSelected(all_selected)
|
||||
|
||||
def file_list(self):
|
||||
def file_list_local(self):
|
||||
"""Generate a file list with full path of selected entries."""
|
||||
pi.logger.debug("RevPiFiles.file_list")
|
||||
pi.logger.debug("RevPiFiles.file_list_local")
|
||||
lst = []
|
||||
for item in self.tree_files_local.selectedItems():
|
||||
if item.type() == NodeType.DIR:
|
||||
# We just want files
|
||||
continue
|
||||
lst.append(item.data(0, WidgetData.file_name))
|
||||
|
||||
return lst
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_tree_files_local_itemSelectionChanged(self):
|
||||
item = self.tree_files_local.currentItem()
|
||||
if item is None:
|
||||
return
|
||||
# endregion # # # # #
|
||||
|
||||
pi.logger.debug("RevPiFiles.on_tree_files_itemSelectionChanged")
|
||||
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# region # REGION: RevPi file lists
|
||||
|
||||
# Block while preselect other entries
|
||||
self.tree_files_local.blockSignals(True)
|
||||
def _load_files_revpi(self, silent=False):
|
||||
"""
|
||||
Refresh the file list of revolution pi.
|
||||
|
||||
if item.type() == NodeType.DIR:
|
||||
self.__select_children(item, item.isSelected())
|
||||
:param silent: Do not show message boxes
|
||||
"""
|
||||
pi.logger.debug("RevPiFiles._load_files_revpi")
|
||||
|
||||
elif item.type() == NodeType.FILE:
|
||||
self._parent_selected(item)
|
||||
self.tree_files_revpi.blockSignals(True)
|
||||
self.tree_files_revpi.clear()
|
||||
self.tree_files_revpi.blockSignals(False)
|
||||
|
||||
self.tree_files_local.blockSignals(False)
|
||||
if not helper.cm.connected:
|
||||
lst_revpi = None
|
||||
else:
|
||||
lst_revpi = helper.cm.call_remote_function("get_filelist")
|
||||
# Just load settings once
|
||||
if not self.dc_settings:
|
||||
self.dc_settings = helper.cm.call_remote_function("get_config", default_value={})
|
||||
self.lbl_path_revpi.setText(
|
||||
self.dc_settings.get("plcworkdir", self.tr("Could not load path of working dir"))
|
||||
)
|
||||
self.lbl_path_revpi.setToolTip(self.lbl_path_revpi.text())
|
||||
|
||||
if lst_revpi:
|
||||
lst_revpi.sort()
|
||||
|
||||
for path_file in lst_revpi:
|
||||
lst_path_file = path_file.split("/")
|
||||
dir_node = None # type: QtWidgets.QTreeWidgetItem
|
||||
|
||||
for folder in lst_path_file[:-1]:
|
||||
new_dir_node = QtWidgets.QTreeWidgetItem(NodeType.DIR)
|
||||
new_dir_node.setText(0, folder)
|
||||
new_dir_node.setIcon(0, QtGui.QIcon(":/main/ico/folder.ico"))
|
||||
|
||||
if dir_node:
|
||||
# Subfolder of top level
|
||||
for i in range(dir_node.childCount()):
|
||||
item = dir_node.child(i)
|
||||
if item.type() != NodeType.DIR:
|
||||
continue
|
||||
if item.text(0) == new_dir_node.text(0):
|
||||
dir_node = item
|
||||
new_dir_node = None
|
||||
break
|
||||
if new_dir_node:
|
||||
dir_node.addChild(new_dir_node)
|
||||
dir_node = new_dir_node
|
||||
else:
|
||||
# Search in top level
|
||||
for i in range(self.tree_files_revpi.topLevelItemCount()):
|
||||
item = self.tree_files_revpi.topLevelItem(i)
|
||||
if item.type() != NodeType.DIR:
|
||||
continue
|
||||
if item.text(0) == new_dir_node.text(0):
|
||||
dir_node = item
|
||||
new_dir_node = None
|
||||
break
|
||||
if new_dir_node:
|
||||
self.tree_files_revpi.addTopLevelItem(new_dir_node)
|
||||
dir_node = new_dir_node
|
||||
|
||||
# This is the file name
|
||||
object_name = lst_path_file[-1]
|
||||
item = QtWidgets.QTreeWidgetItem(NodeType.FILE)
|
||||
item.setText(0, object_name)
|
||||
item.setData(0, WidgetData.file_name, path_file)
|
||||
item.setIcon(0, QtGui.QIcon(
|
||||
":/file/ico/file-else.ico" if object_name.find(".py") == -1 else
|
||||
":/file/ico/file-python.ico"
|
||||
))
|
||||
if dir_node:
|
||||
dir_node.addChild(item)
|
||||
else:
|
||||
self.tree_files_revpi.addTopLevelItem(item)
|
||||
|
||||
self.tree_files_revpi.sortItems(0, QtCore.Qt.AscendingOrder)
|
||||
|
||||
elif not silent:
|
||||
QtWidgets.QMessageBox.critical(
|
||||
self, self.tr("Error"), self.tr(
|
||||
"Can not load file list from Revolution Pi."
|
||||
)
|
||||
)
|
||||
|
||||
self._set_gui_control_states()
|
||||
|
||||
helper.cm.develop_watch_files = self.file_list()
|
||||
def file_list_revpi(self):
|
||||
"""Generate a file list with full path of selected entries."""
|
||||
pi.logger.debug("RevPiFiles.file_list_revpi")
|
||||
lst = []
|
||||
for item in self.tree_files_revpi.selectedItems():
|
||||
if item.type() == NodeType.DIR:
|
||||
# We just want files
|
||||
continue
|
||||
lst.append(item.data(0, WidgetData.file_name))
|
||||
|
||||
return lst
|
||||
|
||||
# endregion # # # # #
|
||||
|
||||
@@ -262,6 +397,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
def on_btn_all_pressed(self):
|
||||
pi.logger.debug("RevPiDevelop.on_btn_all_pressed")
|
||||
self._do_my_job(True)
|
||||
self.file_list_revpi()
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_select_local_pressed(self):
|
||||
@@ -288,12 +424,25 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
return
|
||||
|
||||
self.lbl_path_local.setText(selected_dir)
|
||||
self.lbl_path_local.setToolTip(self.lbl_path_local.text())
|
||||
helper.cm.develop_watch_path = selected_dir
|
||||
helper.cm.develop_watch_files = []
|
||||
|
||||
self._load_path_files(False)
|
||||
self._load_files_local(False)
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_refresh_local_pressed(self):
|
||||
pi.logger.debug("RevPiDevelop.on_btn_refresh_pressed")
|
||||
self._load_path_files(False)
|
||||
self._load_files_local(False)
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_refresh_revpi_pressed(self):
|
||||
pi.logger.debug("RevPiDevelop.on_btn_refresh_revpi_pressed")
|
||||
self._load_files_revpi(False)
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_to_right_pressed(self):
|
||||
"""Upload selected files to revolution pi."""
|
||||
pi.logger.debug("RevPiDevelop.on_btn_to_right_pressed")
|
||||
self._do_my_job(False)
|
||||
self.file_list_revpi()
|
||||
|
||||
Reference in New Issue
Block a user