Switch project so src layout

This will make it possible to build pip packages.
Add a make file to compile UI files and build mac and win applications.
This commit is contained in:
2023-01-04 18:12:59 +01:00
parent 2400bd6951
commit 3f2f3e0478
73 changed files with 2606 additions and 2584 deletions

258
ui_dev/aclmanager.ui Normal file
View File

@@ -0,0 +1,258 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diag_aclmanager</class>
<widget class="QDialog" name="diag_aclmanager">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>454</width>
<height>572</height>
</rect>
</property>
<property name="windowTitle">
<string>IP access control list</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="gb_acls">
<property name="title">
<string>Existing ACLs</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTableWidget" name="tb_acls">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="tabKeyNavigation">
<bool>false</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="cornerButtonEnabled">
<bool>false</bool>
</property>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>IP Address</string>
</property>
</column>
<column>
<property name="text">
<string>Access Level</string>
</property>
</column>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="hl_acls">
<item>
<widget class="QPushButton" name="btn_edit">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>&amp;Edit</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_remove">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>&amp;Remove</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_edit">
<property name="title">
<string>Add / Edit access entry</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="0">
<widget class="QPushButton" name="btn_clear">
<property name="text">
<string>Clear fields</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="btn_add">
<property name="text">
<string>&amp;Save entry</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<layout class="QFormLayout" name="fl_edit">
<item row="0" column="0">
<widget class="QLabel" name="lbl_ip">
<property name="text">
<string>IP address:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lbl_level">
<property name="text">
<string>Access level:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="cbb_level"/>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="hl_ip">
<item>
<widget class="QLineEdit" name="txt_ip_a">
<property name="maxLength">
<number>3</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl_ip_a">
<property name="text">
<string>.</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="txt_ip_b">
<property name="maxLength">
<number>3</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl_ip_b">
<property name="text">
<string>.</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="txt_ip_c">
<property name="maxLength">
<number>3</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl_ip_c">
<property name="text">
<string>.</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="txt_ip_d">
<property name="maxLength">
<number>3</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl_level_info">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="btn_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>tb_acls</tabstop>
<tabstop>btn_edit</tabstop>
<tabstop>btn_remove</tabstop>
<tabstop>txt_ip_a</tabstop>
<tabstop>txt_ip_b</tabstop>
<tabstop>txt_ip_c</tabstop>
<tabstop>txt_ip_d</tabstop>
<tabstop>cbb_level</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>btn_box</sender>
<signal>accepted()</signal>
<receiver>diag_aclmanager</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>247</x>
<y>538</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>btn_box</sender>
<signal>rejected()</signal>
<receiver>diag_aclmanager</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>315</x>
<y>538</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

160
ui_dev/avahisearch.ui Normal file
View File

@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diag_search</class>
<widget class="QDialog" name="diag_search">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>480</width>
<height>360</height>
</rect>
</property>
<property name="windowTitle">
<string>Search Revolution Pi devices</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2">
<layout class="QHBoxLayout" name="hl_header">
<item>
<widget class="QLabel" name="lbl_search">
<property name="text">
<string>Searching for Revolution Pi devices in your network...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_restart">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Restart search</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="ressources.qrc">
<normaloff>:/action/ico/reload.ico</normaloff>:/action/ico/reload.ico</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0" colspan="2">
<widget class="QTableWidget" name="tb_revpi">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="tabKeyNavigation">
<bool>false</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="cornerButtonEnabled">
<bool>false</bool>
</property>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>Zero-conf name</string>
</property>
</column>
<column>
<property name="text">
<string>IP address</string>
</property>
</column>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="btn_connect">
<property name="text">
<string>&amp;Connect to Revolution Pi</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="btn_save">
<property name="text">
<string>&amp;Save connection</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QDialogButtonBox" name="btn_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
</layout>
<action name="act_copy_host">
<property name="text">
<string>Copy host name</string>
</property>
</action>
<action name="act_copy_ip">
<property name="text">
<string>Copy IP address</string>
</property>
</action>
<action name="act_open_pictory">
<property name="text">
<string>Open piCtory</string>
</property>
</action>
</widget>
<resources>
<include location="ressources.qrc"/>
</resources>
<connections>
<connection>
<sender>btn_box</sender>
<signal>rejected()</signal>
<receiver>diag_search</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>239</x>
<y>338</y>
</hint>
<hint type="destinationlabel">
<x>239</x>
<y>179</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diag_backgroundworker</class>
<widget class="QDialog" name="diag_backgroundworker">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>418</width>
<height>97</height>
</rect>
</property>
<property name="windowTitle">
<string>File transfer...</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="lbl_status">
<property name="text">
<string notr="true">Status message...</string>
</property>
</widget>
</item>
<item>
<widget class="QProgressBar" name="pgb_status">
<property name="minimumSize">
<size>
<width>400</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="btn_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

126
ui_dev/debugcontrol.ui Normal file
View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>wid_debugcontrol</class>
<widget class="QWidget" name="wid_debugcontrol">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>402</width>
<height>214</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QGroupBox" name="gb_devices">
<property name="title">
<string>Revolution Pi devices</string>
</property>
<layout class="QVBoxLayout" name="vl_devices"/>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="cbx_stay_on_top">
<property name="text">
<string>Open to stay on top</string>
</property>
</widget>
</item>
<item row="0" column="1" rowspan="2">
<widget class="QGroupBox" name="gb_control">
<property name="title">
<string>IO Control</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="btn_read_io">
<property name="toolTip">
<string>Read all IO values and discard local changes (F4)</string>
</property>
<property name="text">
<string>Read &amp;all IO values</string>
</property>
<property name="shortcut">
<string>F4</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_refresh_io">
<property name="toolTip">
<string>Refresh all IO values which are locally not changed (F5)</string>
</property>
<property name="text">
<string>&amp;Refresh unchanged IOs</string>
</property>
<property name="shortcut">
<string>F5</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_write_o">
<property name="toolTip">
<string>Write locally changed output values to process image (F6)</string>
</property>
<property name="text">
<string>&amp;Write changed outputs</string>
</property>
<property name="shortcut">
<string>F6</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbx_refresh">
<property name="text">
<string>&amp;Auto refresh values</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbx_write">
<property name="text">
<string>and write outputs</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

110
ui_dev/debugios.ui Normal file
View File

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>win_debugios</class>
<widget class="QMainWindow" name="win_debugios">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>434</width>
<height>343</height>
</rect>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="gb_io">
<property name="title">
<string>{0}: Inputs | Outputs</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="childrenCollapsible">
<bool>false</bool>
</property>
<widget class="QScrollArea" name="sca_inp">
<property name="lineWidth">
<number>0</number>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="saw_inp">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>201</width>
<height>275</height>
</rect>
</property>
<layout class="QFormLayout" name="form_inp">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
</layout>
</widget>
</widget>
<widget class="QScrollArea" name="sca_out">
<property name="lineWidth">
<number>0</number>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="saw_out">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>201</width>
<height>275</height>
</rect>
</property>
<layout class="QFormLayout" name="form_out">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
</layout>
</widget>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="stat_bar"/>
</widget>
<resources/>
<connections/>
</ui>

323
ui_dev/files.ui Normal file
View File

@@ -0,0 +1,323 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>win_files</class>
<widget class="QMainWindow" name="win_files">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>725</width>
<height>519</height>
</rect>
</property>
<property name="windowTitle">
<string>File manager</string>
</property>
<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="verticalLayoutWidget">
<layout class="QVBoxLayout" name="vl_local">
<item>
<widget class="QGroupBox" name="gb_select_local">
<property name="title">
<string>Local computer</string>
</property>
<layout class="QGridLayout" name="gridLayout_2" columnstretch="1,0,0">
<item row="0" column="0">
<widget class="QLabel" name="lbl_select_local">
<property name="text">
<string>Path to development root:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="btn_select_local">
<property name="toolTip">
<string>Open developer root directory</string>
</property>
<property name="icon">
<iconset resource="ressources.qrc">
<normaloff>:/action/ico/folder-open.ico</normaloff>:/action/ico/folder-open.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 row="0" column="2">
<widget class="QPushButton" name="btn_refresh_local">
<property name="toolTip">
<string>Reload file list</string>
</property>
<property name="icon">
<iconset resource="ressources.qrc">
<normaloff>:/action/ico/refresh.ico</normaloff>:/action/ico/refresh.ico</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
</widget>
</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 notr="true">/</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="hl_revpi_2">
<item>
<spacer name="hs_local">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btn_to_right">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="ressources.qrc">
<normaloff>:/action/ico/arrow-right.ico</normaloff>:/action/ico/arrow-right.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>
</item>
<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>
</property>
<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 notr="true">/</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_select_revpi">
<property name="text">
<string>RevPiPyLoad working directory:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="btn_refresh_revpi">
<property name="toolTip">
<string>Reload file list</string>
</property>
<property name="icon">
<iconset resource="ressources.qrc">
<normaloff>:/action/ico/refresh.ico</normaloff>:/action/ico/refresh.ico</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="hl_revpi">
<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>
<item>
<widget class="QPushButton" name="btn_delete_revpi">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="ressources.qrc">
<normaloff>:/action/ico/edit-delete.ico</normaloff>:/action/ico/edit-delete.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>
<spacer name="hs_revpi">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QTreeWidget" name="tree_files_revpi">
<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>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="btn_all">
<property name="text">
<string>Stop - Upload - Start</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources>
<include location="ressources.qrc"/>
</resources>
<connections/>
</ui>

BIN
ui_dev/ico/arrow-down.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/arrow-left.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/arrow-right.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/arrow-up.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/cpu.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/edit-add.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/edit-delete.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/file-else.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/file-python.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/folder-open.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/folder.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/refresh.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
ui_dev/ico/reload.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

259
ui_dev/mqttmanager.ui Normal file
View File

@@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diag_mqtt</class>
<widget class="QDialog" name="diag_mqtt">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>489</width>
<height>709</height>
</rect>
</property>
<property name="windowTitle">
<string>MQTT settings</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="gb_basetopic">
<property name="title">
<string>Base topic</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0" colspan="4">
<widget class="QLabel" name="lbl_basetopic_description">
<property name="maximumSize">
<size>
<width>450</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>The base topic is the first part of any mqtt topic, the Revolution Pi will publish. You can use any character includig '/' to structure the messages on your broker.
For example: revpi0000/data</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_basetopic">
<property name="text">
<string>Base topic:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="txt_basetopic"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_send_on_event">
<property name="title">
<string>Publish settings</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="lbl_sendinterval">
<property name="text">
<string>Publish all exported values every n seconds:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="sbx_sendinterval">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>21600</number>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QLabel" name="lbl_topic_io">
<property name="text">
<string>Topic: [basetopic]/io/[ioname]</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="cbx_send_on_event">
<property name="text">
<string>Send exported values immediately on value change</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QLabel" name="lbl_topic_event">
<property name="text">
<string>Topic: [basetopic]/event/[ioname]</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_write_outputs">
<property name="title">
<string>Set outputs</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0">
<widget class="QLabel" name="lbl_write_outputs">
<property name="maximumSize">
<size>
<width>450</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>The Revolution Pi will subscribe a topic on which your mqtt client can publish messages with the new io value as payload.
Publish values with topic: [basetopic]/set/[outputname]</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="cbx_write_outputs">
<property name="text">
<string>Allow MQTT to to set outputs on Revolution Pi</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_broker">
<property name="title">
<string>Broker settings</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="lbl_broker_address">
<property name="text">
<string>Broker address:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="txt_broker_address"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lbl_port">
<property name="text">
<string>Broker port:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lbl_username">
<property name="text">
<string>User name:</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lbl_password">
<property name="text">
<string>Password:</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="lbl_client_id">
<property name="text">
<string>Client ID:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="txt_username"/>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="txt_password"/>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="txt_client_id"/>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QSpinBox" name="sbx_port">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbx_tls_set">
<property name="text">
<string>Use TLS</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="btn_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>btn_box</sender>
<signal>accepted()</signal>
<receiver>diag_mqtt</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>btn_box</sender>
<signal>rejected()</signal>
<receiver>diag_mqtt</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

22
ui_dev/ressources.qrc Normal file
View File

@@ -0,0 +1,22 @@
<RCC>
<qresource prefix="main">
<file>ico/cpu.ico</file>
<file>ico/folder.ico</file>
<file>ico/revpipycontrol.ico</file>
</qresource>
<qresource prefix="file">
<file>ico/file-else.ico</file>
<file>ico/file-python.ico</file>
</qresource>
<qresource prefix="action">
<file>ico/arrow-left.ico</file>
<file>ico/arrow-right.ico</file>
<file>ico/folder-open.ico</file>
<file>ico/refresh.ico</file>
<file>ico/reload.ico</file>
<file>ico/arrow-down.ico</file>
<file>ico/arrow-up.ico</file>
<file>ico/edit-add.ico</file>
<file>ico/edit-delete.ico</file>
</qresource>
</RCC>

298
ui_dev/revpicommander.ui Normal file
View File

@@ -0,0 +1,298 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<author>Sven Sager</author>
<class>win_revpicommander</class>
<widget class="QMainWindow" name="win_revpicommander">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>353</width>
<height>299</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true">RevPi Commander</string>
</property>
<property name="windowIcon">
<iconset resource="ressources.qrc">
<normaloff>:/main/ico/revpipycontrol.ico</normaloff>:/main/ico/revpipycontrol.ico</iconset>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="gl">
<item>
<layout class="QHBoxLayout" name="hzl_connection">
<item>
<widget class="QLineEdit" name="txt_host">
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string notr="true"/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="txt_connection">
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string notr="true"/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="btn_plc_start">
<property name="text">
<string>PLC &amp;start</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_plc_stop">
<property name="text">
<string>PLC s&amp;top</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_plc_restart">
<property name="text">
<string>PLC restart</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_plc_logs">
<property name="text">
<string>PLC &amp;logs</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="hzl_status">
<item>
<widget class="QLabel" name="lbl_status">
<property name="text">
<string>Status:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="txt_status">
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string notr="true"/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="btn_plc_debug">
<property name="minimumSize">
<size>
<width>300</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>PLC watch &amp;mode</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>353</width>
<height>24</height>
</rect>
</property>
<widget class="QMenu" name="men_file">
<property name="title">
<string>&amp;File</string>
</property>
<addaction name="act_connections"/>
<addaction name="act_search"/>
<addaction name="separator"/>
<addaction name="act_simulator"/>
<addaction name="separator"/>
<addaction name="act_quit"/>
</widget>
<widget class="QMenu" name="men_help">
<property name="title">
<string>&amp;Help</string>
</property>
<addaction name="act_webpage"/>
<addaction name="separator"/>
<addaction name="act_info"/>
</widget>
<widget class="QMenu" name="men_plc">
<property name="title">
<string>&amp;PLC</string>
</property>
<addaction name="act_logs"/>
<addaction name="act_options"/>
<addaction name="act_program"/>
<addaction name="act_developer"/>
<addaction name="separator"/>
<addaction name="act_pictory"/>
<addaction name="act_reset"/>
<addaction name="separator"/>
<addaction name="act_disconnect"/>
</widget>
<widget class="QMenu" name="men_connections">
<property name="title">
<string>&amp;Connections</string>
</property>
</widget>
<addaction name="men_file"/>
<addaction name="men_plc"/>
<addaction name="men_connections"/>
<addaction name="men_help"/>
</widget>
<widget class="QStatusBar" name="statusbar">
<property name="sizeGripEnabled">
<bool>false</bool>
</property>
</widget>
<action name="act_connections">
<property name="text">
<string>&amp;Connections...</string>
</property>
<property name="shortcut">
<string>Ctrl+N</string>
</property>
</action>
<action name="act_search">
<property name="text">
<string>&amp;Search Revolution Pi...</string>
</property>
<property name="shortcut">
<string>Ctrl+F</string>
</property>
</action>
<action name="act_quit">
<property name="text">
<string>&amp;Quit</string>
</property>
</action>
<action name="act_webpage">
<property name="text">
<string>Visit &amp;webpage...</string>
</property>
</action>
<action name="act_info">
<property name="text">
<string>&amp;Info...</string>
</property>
</action>
<action name="act_logs">
<property name="text">
<string>PLC &amp;logs...</string>
</property>
<property name="shortcut">
<string>Ctrl+L</string>
</property>
</action>
<action name="act_options">
<property name="text">
<string>PLC &amp;options...</string>
</property>
<property name="shortcut">
<string>Ctrl+O</string>
</property>
</action>
<action name="act_program">
<property name="text">
<string>PLC progra&amp;m...</string>
</property>
<property name="shortcut">
<string>Ctrl+P</string>
</property>
</action>
<action name="act_developer">
<property name="text">
<string>PLC de&amp;veloper...</string>
</property>
<property name="shortcut">
<string>Ctrl+D</string>
</property>
</action>
<action name="act_pictory">
<property name="text">
<string>piCtory configuraiton...</string>
</property>
</action>
<action name="act_disconnect">
<property name="text">
<string>&amp;Disconnect</string>
</property>
<property name="shortcut">
<string>Ctrl+X</string>
</property>
</action>
<action name="act_reset">
<property name="text">
<string>Reset driver...</string>
</property>
</action>
<action name="act_simulator">
<property name="text">
<string>RevPi si&amp;mulator...</string>
</property>
</action>
</widget>
<tabstops>
<tabstop>btn_plc_start</tabstop>
<tabstop>btn_plc_stop</tabstop>
<tabstop>btn_plc_restart</tabstop>
<tabstop>btn_plc_logs</tabstop>
<tabstop>btn_plc_debug</tabstop>
</tabstops>
<resources>
<include location="ressources.qrc"/>
</resources>
<connections>
<connection>
<sender>act_quit</sender>
<signal>triggered()</signal>
<receiver>win_revpicommander</receiver>
<slot>close()</slot>
<hints>
<hint type="sourcelabel">
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel">
<x>159</x>
<y>136</y>
</hint>
</hints>
</connection>
</connections>
</ui>

187
ui_dev/revpiinfo.ui Normal file
View File

@@ -0,0 +1,187 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diag_revpiinfo</class>
<widget class="QDialog" name="diag_revpiinfo">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>627</width>
<height>398</height>
</rect>
</property>
<property name="windowTitle">
<string>Program information</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="lbl_head">
<property name="font">
<font>
<pointsize>20</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>RevPi Python PLC - Commander</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lbl_lbl_version_pyload">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>RevPiPyLoad version on RevPi:</string>
</property>
</widget>
</item>
<item row="3" column="2" rowspan="4">
<widget class="QListWidget" name="lst_files"/>
</item>
<item row="3" column="1">
<widget class="QLabel" name="lbl_version_pyload">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string notr="true">0.0.0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="lbl_link">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://revpimodio.org/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;https://revpimodio.org/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="7" column="0" colspan="3">
<widget class="QDialogButtonBox" name="btn_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="lbl_lbl_version_control">
<property name="font">
<font>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>Version:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl_version_control">
<property name="font">
<font>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string notr="true">0.0.0</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="0" colspan="2">
<widget class="QLabel" name="lbl_info">
<property name="minimumSize">
<size>
<width>300</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>RevPiModIO, RevPiPyLoad and RevPiPyControl are community driven projects. They are all free and open source software.
All of them comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
(c) Sven Sager, License: GPLv3</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>btn_box</sender>
<signal>accepted()</signal>
<receiver>diag_revpiinfo</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>btn_box</sender>
<signal>rejected()</signal>
<receiver>diag_revpiinfo</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

127
ui_dev/revpilogfile.ui Normal file
View File

@@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>win_revpilogfile</class>
<widget class="QMainWindow" name="win_revpilogfile">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>796</width>
<height>347</height>
</rect>
</property>
<property name="windowTitle">
<string>RevPi Python PLC Logfiles</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0">
<widget class="QCheckBox" name="cbx_stay_on_top">
<property name="text">
<string>Stay on top of all windows</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="cbx_wrap">
<property name="text">
<string>Linewrap</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<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="QGridLayout" name="grid_daemon" columnstretch="1,0">
<item row="0" column="0">
<widget class="QLabel" name="lbl_daemon">
<property name="text">
<string>RevPiPyLoad - Logfile</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="btn_daemon">
<property name="text">
<string>Clear view</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QPlainTextEdit" name="txt_daemon">
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="tabChangesFocus">
<bool>true</bool>
</property>
<property name="undoRedoEnabled">
<bool>false</bool>
</property>
<property name="lineWrapMode">
<enum>QPlainTextEdit::NoWrap</enum>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="gridLayoutWidget_2">
<layout class="QGridLayout" name="grid_app" columnstretch="1,0">
<item row="0" column="1">
<widget class="QPushButton" name="btn_app">
<property name="text">
<string>Clear view</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_app">
<property name="text">
<string>Python PLC program - Logfile</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QPlainTextEdit" name="txt_app">
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="tabChangesFocus">
<bool>true</bool>
</property>
<property name="undoRedoEnabled">
<bool>false</bool>
</property>
<property name="lineWrapMode">
<enum>QPlainTextEdit::NoWrap</enum>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>

283
ui_dev/revpioption.ui Normal file
View File

@@ -0,0 +1,283 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diag_options</class>
<widget class="QDialog" name="diag_options">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>458</width>
<height>557</height>
</rect>
</property>
<property name="windowTitle">
<string>RevPi Python PLC Options</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="gb_plc">
<property name="title">
<string>Start / Stop behavior of PLC program</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="6" column="0">
<widget class="QLabel" name="lbl_replace_io">
<property name="text">
<string>Replace IO file:</string>
</property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="QCheckBox" name="cbx_zeroonerror">
<property name="text">
<string>... after exception and errors</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<widget class="QCheckBox" name="cbx_autostart">
<property name="text">
<string>Start PLC program automatically</string>
</property>
</widget>
</item>
<item row="8" column="1" colspan="2">
<widget class="QComboBox" name="cbb_reset_driver_action">
<item>
<property name="text">
<string>Do nothing</string>
</property>
</item>
<item>
<property name="text">
<string>Restart after piCtory changed</string>
</property>
</item>
<item>
<property name="text">
<string>Always restart the PLC program</string>
</property>
</item>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="lbl_reset_driver_action">
<property name="text">
<string>Driver reset action:</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="3">
<widget class="QLabel" name="lbl_plc_zero">
<property name="text">
<string>Set process image to NULL if program terminates...</string>
</property>
</widget>
</item>
<item row="6" column="1" colspan="2">
<widget class="QComboBox" name="cbb_replace_io">
<item>
<property name="text">
<string>Do not use replace io file</string>
</property>
</item>
<item>
<property name="text">
<string>Use static file from RevPiPyLoad</string>
</property>
</item>
<item>
<property name="text">
<string>Use dynamic file from work directory</string>
</property>
</item>
<item>
<property name="text">
<string>Give own path and filename</string>
</property>
</item>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QCheckBox" name="cbx_zeroonexit">
<property name="text">
<string>... sucessfully without error</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="lbl_plc_delay">
<property name="text">
<string>Restart delay in seconds:</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="sbx_autoreloaddelay">
<property name="minimum">
<number>5</number>
</property>
<property name="maximum">
<number>120</number>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QCheckBox" name="cbx_autoreload">
<property name="text">
<string>Restart PLC program after exit or crash</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="2">
<widget class="QLineEdit" name="txt_replace_io"/>
</item>
<item row="9" column="0" colspan="3">
<widget class="QLabel" name="lbl_lbl_reset_driver_action">
<property name="text">
<string>PLC program behavior after piCtory driver reset clicked</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_server">
<property name="title">
<string>RevPiPyLoad server services</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="1">
<widget class="QPushButton" name="btn_aclplcslave">
<property name="text">
<string>Edit ACL</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="cbx_mqtt">
<property name="text">
<string>MQTT process image publisher</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="cbx_plcslave">
<property name="text">
<string>Start RevPi piControl server</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="lbl_slave_status">
<property name="text">
<string>status</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lbl_lbl_slave_status">
<property name="text">
<string>piControl server is:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="lbl_mqtt_status">
<property name="text">
<string>status</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lbl_lbl_mqtt_status">
<property name="text">
<string>MQTT publish service is:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="btn_mqtt">
<property name="text">
<string>Settings</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="btn_aclxmlrpc">
<property name="text">
<string>Edit ACL</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="cbx_xmlrpc">
<property name="text">
<string>Activate XML-RPC for RevPiCommander</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="btn_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>btn_box</sender>
<signal>accepted()</signal>
<receiver>diag_options</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>btn_box</sender>
<signal>rejected()</signal>
<receiver>diag_options</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

244
ui_dev/revpiplclist.ui Normal file
View File

@@ -0,0 +1,244 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diag_connections</class>
<widget class="QDialog" name="diag_connections">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>520</width>
<height>508</height>
</rect>
</property>
<property name="windowTitle">
<string>Revolution Pi connections</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QTreeWidget" name="tre_connections">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<column>
<property name="text">
<string>Connection name</string>
</property>
</column>
<column>
<property name="text">
<string>Address</string>
</property>
</column>
</widget>
</item>
<item row="0" column="1">
<layout class="QVBoxLayout" name="vl_edit">
<item>
<spacer name="vs_edit">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btn_up">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="ressources.qrc">
<normaloff>:/action/ico/arrow-up.ico</normaloff>:/action/ico/arrow-up.ico</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_down">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="ressources.qrc">
<normaloff>:/action/ico/arrow-down.ico</normaloff>:/action/ico/arrow-down.ico</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_delete">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="ressources.qrc">
<normaloff>:/action/ico/edit-delete.ico</normaloff>:/action/ico/edit-delete.ico</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_add">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="ressources.qrc">
<normaloff>:/action/ico/edit-add.ico</normaloff>:/action/ico/edit-add.ico</iconset>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="gb_properties">
<property name="title">
<string>Connection properties</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="lbl_name">
<property name="text">
<string>Display name:</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="lbl_folder">
<property name="text">
<string>Sub folder:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lbl_address">
<property name="text">
<string>Address (DNS/IP):</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lbl_port">
<property name="text">
<string>Port (Default {0}):</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="txt_name"/>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="txt_address"/>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="sbx_port">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>55123</number>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="cbb_folder">
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string/>
</property>
</item>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lbl_timeout">
<property name="text">
<string>Connection timeout:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="sbx_timeout">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string> sec.</string>
</property>
<property name="minimum">
<number>5</number>
</property>
<property name="maximum">
<number>30</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QDialogButtonBox" name="btn_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Discard|QDialogButtonBox::Save</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="ressources.qrc"/>
</resources>
<connections>
<connection>
<sender>btn_box</sender>
<signal>accepted()</signal>
<receiver>diag_connections</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>btn_box</sender>
<signal>rejected()</signal>
<receiver>diag_connections</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

255
ui_dev/revpiprogram.ui Normal file
View File

@@ -0,0 +1,255 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diag_program</class>
<widget class="QDialog" name="diag_program">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>501</height>
</rect>
</property>
<property name="windowTitle">
<string>PLC program</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="gb_plc">
<property name="title">
<string>PLC program</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0" colspan="3">
<widget class="QComboBox" name="cbb_plcprogram"/>
</item>
<item row="3" column="2">
<widget class="QRadioButton" name="rbn_pythonversion_3">
<property name="text">
<string>Python 3</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="3">
<widget class="QCheckBox" name="cbx_plcworkdir_set_uid">
<property name="text">
<string>Set write permissions for plc program to workdirectory</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="lbl_plcprogram">
<property name="text">
<string>Python PLC start program:</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lbl_pythonversion">
<property name="text">
<string>Python version:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QRadioButton" name="rbn_pythonversion_2">
<property name="text">
<string>Python 2</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lbl_plcarguments">
<property name="text">
<string>Program arguments:</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QLineEdit" name="txt_plcarguments"/>
</item>
<item row="5" column="2">
<widget class="QSpinBox" name="sbx_plcprogram_watchdog">
<property name="suffix">
<string> sec.</string>
</property>
<property name="maximum">
<number>600</number>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QLabel" name="lbl_plcprogram_watchdog">
<property name="text">
<string>Software watchdog (0=disabled):</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="cb_transfair">
<property name="title">
<string>Transfair PLC program</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="1">
<widget class="QComboBox" name="cbb_format">
<item>
<property name="text">
<string>ZIP archive</string>
</property>
</item>
<item>
<property name="text">
<string>TGZ archive</string>
</property>
</item>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="btn_program_upload">
<property name="text">
<string>Upload</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="btn_program_download">
<property name="text">
<string>Download</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_format">
<property name="text">
<string>Transfair format:</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QCheckBox" name="cbx_pictory">
<property name="text">
<string>Including piCtory configuration</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="cbx_clear">
<property name="text">
<string>Remove all files on Revolution Pi before upload</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_control">
<property name="title">
<string>Control files</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="1">
<widget class="QPushButton" name="btn_procimg_download">
<property name="text">
<string>Download</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="btn_pictory_download">
<property name="text">
<string>Download</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="btn_pictory_upload">
<property name="text">
<string>Upload</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_pictory">
<property name="text">
<string>piCtory configuraiton</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lbl_procimg">
<property name="text">
<string>Process image from piControl0</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="btn_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>cbb_plcprogram</tabstop>
<tabstop>txt_plcarguments</tabstop>
<tabstop>rbn_pythonversion_2</tabstop>
<tabstop>rbn_pythonversion_3</tabstop>
<tabstop>cbx_plcworkdir_set_uid</tabstop>
<tabstop>cbb_format</tabstop>
<tabstop>cbx_pictory</tabstop>
<tabstop>cbx_clear</tabstop>
<tabstop>btn_program_download</tabstop>
<tabstop>btn_program_upload</tabstop>
<tabstop>btn_pictory_download</tabstop>
<tabstop>btn_pictory_upload</tabstop>
<tabstop>btn_procimg_download</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>btn_box</sender>
<signal>accepted()</signal>
<receiver>diag_program</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>257</x>
<y>490</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>btn_box</sender>
<signal>rejected()</signal>
<receiver>diag_program</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>325</x>
<y>490</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

245
ui_dev/simulator.ui Normal file
View File

@@ -0,0 +1,245 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diag_simulator</class>
<widget class="QDialog" name="diag_simulator">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>522</width>
<height>500</height>
</rect>
</property>
<property name="windowTitle">
<string>piControl simulator</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="gb_settings">
<property name="title">
<string>Simulator settings</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="lbl_history">
<property name="text">
<string>Last used:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lbl_configrsc">
<property name="text">
<string>piCtory file:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="txt_configrsc">
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="btn_configrsc">
<property name="text">
<string>select...</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lbl_procimg">
<property name="text">
<string>Process image:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="txt_procimg">
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lbl_stop">
<property name="text">
<string>Stop action:</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="lbl_restart">
<property name="text">
<string>Restart action:</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QComboBox" name="cbb_history">
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToMinimumContentsLength</enum>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2">
<widget class="QCheckBox" name="cbx_stop_remove">
<property name="text">
<string>Remove process image file</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QRadioButton" name="rb_restart_pictory">
<property name="text">
<string>Restore piCtory default values</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="QRadioButton" name="rb_restart_zero">
<property name="text">
<string>Reset everything to ZERO</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_info">
<property name="title">
<string>RevPiModIO integration</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="lbl_info">
<property name="text">
<string>You can work with this simulator if you call RevPiModIO with this additional parameters:</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPlainTextEdit" name="txt_info">
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="plainText">
<string notr="true"/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_start_pictory">
<property name="text">
<string>Start with piCtory default values</string>
</property>
<property name="shortcut">
<string notr="true">Ctrl+1</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_start_empty">
<property name="text">
<string>Start with empty process image</string>
</property>
<property name="shortcut">
<string notr="true">Ctrl+2</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_start_nochange">
<property name="text">
<string>Start without changing actual process image</string>
</property>
<property name="shortcut">
<string notr="true">Ctrl+3</string>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>cbb_history</tabstop>
<tabstop>btn_configrsc</tabstop>
<tabstop>cbx_stop_remove</tabstop>
<tabstop>rb_restart_pictory</tabstop>
<tabstop>rb_restart_zero</tabstop>
<tabstop>txt_info</tabstop>
<tabstop>btn_start_pictory</tabstop>
<tabstop>btn_start_empty</tabstop>
<tabstop>btn_start_nochange</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>btn_start_empty</sender>
<signal>clicked()</signal>
<receiver>diag_simulator</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>268</x>
<y>447</y>
</hint>
<hint type="destinationlabel">
<x>268</x>
<y>249</y>
</hint>
</hints>
</connection>
<connection>
<sender>btn_start_nochange</sender>
<signal>clicked()</signal>
<receiver>diag_simulator</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>268</x>
<y>478</y>
</hint>
<hint type="destinationlabel">
<x>268</x>
<y>249</y>
</hint>
</hints>
</connection>
<connection>
<sender>btn_start_pictory</sender>
<signal>clicked()</signal>
<receiver>diag_simulator</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>268</x>
<y>416</y>
</hint>
<hint type="destinationlabel">
<x>268</x>
<y>249</y>
</hint>
</hints>
</connection>
</connections>
</ui>