15 changed files with 655 additions and 33 deletions
@ -1,4 +1,8 @@ |
|||||||
#!/bin/bash |
#!/bin/bash |
||||||
|
|
||||||
/usr/bin/pyuic5 ui/mainwindow.ui > src/nailab/ui_gen/mainwindow.py |
/usr/bin/pyuic5 ui/csvdatasourceconfigwidget.ui > src/nailab/ui_gen/csvdatasourceconfigwidget.py |
||||||
|
/usr/bin/pyuic5 ui/mainwindow.ui > src/nailab/ui_gen/mainwindow.py.py |
||||||
|
/usr/bin/pyuic5 ui/newdatasourcedialog.ui > src/nailab/ui_gen/newdatasourcedialog.py |
||||||
/usr/bin/pyuic5 ui/strategywidget.ui > src/nailab/ui_gen/strategywidget.py |
/usr/bin/pyuic5 ui/strategywidget.ui > src/nailab/ui_gen/strategywidget.py |
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,19 @@ |
|||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets |
||||||
|
from PyQt5.Qsci import * |
||||||
|
|
||||||
|
from ui_gen.csvdatasourceconfigwidget import Ui_CSVDataSourceConfigWidget |
||||||
|
|
||||||
|
class CSVDataSourceConfigWidget(QtWidgets.QWidget): |
||||||
|
|
||||||
|
def __init__(self, parent=None): |
||||||
|
super().__init__(parent) |
||||||
|
|
||||||
|
self.ui = Ui_CSVDataSourceConfigWidget() |
||||||
|
self.ui.setupUi(self) |
||||||
|
|
||||||
|
def browse(self): |
||||||
|
dirname = QtWidgets.QFileDialog.getExistingDirectory(self, self.tr("Select a directory..."), "", QtWidgets.QFileDialog.ShowDirsOnly) |
||||||
|
if dirname != "": |
||||||
|
self.ui.e_path.setText(dirname) |
||||||
|
|
||||||
@ -0,0 +1,24 @@ |
|||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets |
||||||
|
from PyQt5.Qsci import * |
||||||
|
|
||||||
|
from ui_gen.newdatasourcedialog import Ui_NewDataSourceDialog |
||||||
|
from ui.csvdatasourceconfigwidget import CSVDataSourceConfigWidget |
||||||
|
|
||||||
|
from data.csvfolderdatasource import CsvFolderDataSource |
||||||
|
|
||||||
|
class NewDataSourceDialog(QtWidgets.QDialog): |
||||||
|
|
||||||
|
def __init__(self, parent): |
||||||
|
super().__init__(parent) |
||||||
|
|
||||||
|
self.ui = Ui_NewDataSourceDialog() |
||||||
|
self.ui.setupUi(self) |
||||||
|
|
||||||
|
index = self.ui.widgets.addWidget(CSVDataSourceConfigWidget()) |
||||||
|
self.ui.widgets.setCurrentIndex(index) |
||||||
|
|
||||||
|
def get_data_source(self): |
||||||
|
return CsvFolderDataSource(self.ui.e_sourceName.text(), self.ui.widgets.currentWidget().ui.e_path.text()) |
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,48 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'ui/csvdatasourceconfigwidget.ui' |
||||||
|
# |
||||||
|
# Created by: PyQt5 UI code generator 5.5.1 |
||||||
|
# |
||||||
|
# WARNING! All changes made in this file will be lost! |
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets |
||||||
|
|
||||||
|
class Ui_CSVDataSourceConfigWidget(object): |
||||||
|
def setupUi(self, CSVDataSourceConfigWidget): |
||||||
|
CSVDataSourceConfigWidget.setObjectName("CSVDataSourceConfigWidget") |
||||||
|
CSVDataSourceConfigWidget.resize(529, 313) |
||||||
|
self.gridLayout = QtWidgets.QGridLayout(CSVDataSourceConfigWidget) |
||||||
|
self.gridLayout.setObjectName("gridLayout") |
||||||
|
self.label = QtWidgets.QLabel(CSVDataSourceConfigWidget) |
||||||
|
self.label.setObjectName("label") |
||||||
|
self.gridLayout.addWidget(self.label, 0, 0, 1, 1) |
||||||
|
self.e_path = QtWidgets.QLineEdit(CSVDataSourceConfigWidget) |
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) |
||||||
|
sizePolicy.setHorizontalStretch(0) |
||||||
|
sizePolicy.setVerticalStretch(0) |
||||||
|
sizePolicy.setHeightForWidth(self.e_path.sizePolicy().hasHeightForWidth()) |
||||||
|
self.e_path.setSizePolicy(sizePolicy) |
||||||
|
self.e_path.setObjectName("e_path") |
||||||
|
self.gridLayout.addWidget(self.e_path, 0, 1, 1, 1) |
||||||
|
self.b_browse = QtWidgets.QPushButton(CSVDataSourceConfigWidget) |
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) |
||||||
|
sizePolicy.setHorizontalStretch(0) |
||||||
|
sizePolicy.setVerticalStretch(0) |
||||||
|
sizePolicy.setHeightForWidth(self.b_browse.sizePolicy().hasHeightForWidth()) |
||||||
|
self.b_browse.setSizePolicy(sizePolicy) |
||||||
|
self.b_browse.setObjectName("b_browse") |
||||||
|
self.gridLayout.addWidget(self.b_browse, 0, 2, 1, 1) |
||||||
|
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) |
||||||
|
self.gridLayout.addItem(spacerItem, 1, 0, 1, 1) |
||||||
|
|
||||||
|
self.retranslateUi(CSVDataSourceConfigWidget) |
||||||
|
self.b_browse.clicked.connect(CSVDataSourceConfigWidget.browse) |
||||||
|
QtCore.QMetaObject.connectSlotsByName(CSVDataSourceConfigWidget) |
||||||
|
|
||||||
|
def retranslateUi(self, CSVDataSourceConfigWidget): |
||||||
|
_translate = QtCore.QCoreApplication.translate |
||||||
|
CSVDataSourceConfigWidget.setWindowTitle(_translate("CSVDataSourceConfigWidget", "Form")) |
||||||
|
self.label.setText(_translate("CSVDataSourceConfigWidget", "CSV folder path")) |
||||||
|
self.b_browse.setText(_translate("CSVDataSourceConfigWidget", "...")) |
||||||
|
|
||||||
@ -0,0 +1,77 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'ui/mainwindow.ui' |
||||||
|
# |
||||||
|
# Created by: PyQt5 UI code generator 5.5.1 |
||||||
|
# |
||||||
|
# WARNING! All changes made in this file will be lost! |
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets |
||||||
|
|
||||||
|
class Ui_MainWindow(object): |
||||||
|
def setupUi(self, MainWindow): |
||||||
|
MainWindow.setObjectName("MainWindow") |
||||||
|
MainWindow.resize(1060, 587) |
||||||
|
self.centralwidget = QtWidgets.QWidget(MainWindow) |
||||||
|
self.centralwidget.setObjectName("centralwidget") |
||||||
|
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) |
||||||
|
self.gridLayout.setContentsMargins(3, 3, 3, 3) |
||||||
|
self.gridLayout.setObjectName("gridLayout") |
||||||
|
self.tabs = QtWidgets.QTabWidget(self.centralwidget) |
||||||
|
self.tabs.setTabsClosable(True) |
||||||
|
self.tabs.setObjectName("tabs") |
||||||
|
self.gridLayout.addWidget(self.tabs, 0, 0, 1, 1) |
||||||
|
MainWindow.setCentralWidget(self.centralwidget) |
||||||
|
self.menubar = QtWidgets.QMenuBar(MainWindow) |
||||||
|
self.menubar.setGeometry(QtCore.QRect(0, 0, 1060, 19)) |
||||||
|
self.menubar.setObjectName("menubar") |
||||||
|
self.menuFile = QtWidgets.QMenu(self.menubar) |
||||||
|
self.menuFile.setObjectName("menuFile") |
||||||
|
self.menuBacktest = QtWidgets.QMenu(self.menubar) |
||||||
|
self.menuBacktest.setObjectName("menuBacktest") |
||||||
|
MainWindow.setMenuBar(self.menubar) |
||||||
|
self.statusbar = QtWidgets.QStatusBar(MainWindow) |
||||||
|
self.statusbar.setObjectName("statusbar") |
||||||
|
MainWindow.setStatusBar(self.statusbar) |
||||||
|
self.toolBar = QtWidgets.QToolBar(MainWindow) |
||||||
|
self.toolBar.setObjectName("toolBar") |
||||||
|
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) |
||||||
|
self.actionOpenTrades = QtWidgets.QAction(MainWindow) |
||||||
|
self.actionOpenTrades.setObjectName("actionOpenTrades") |
||||||
|
self.actionNew_strategy = QtWidgets.QAction(MainWindow) |
||||||
|
self.actionNew_strategy.setObjectName("actionNew_strategy") |
||||||
|
self.actionOpen_strategy = QtWidgets.QAction(MainWindow) |
||||||
|
self.actionOpen_strategy.setObjectName("actionOpen_strategy") |
||||||
|
self.actionExecute = QtWidgets.QAction(MainWindow) |
||||||
|
self.actionExecute.setObjectName("actionExecute") |
||||||
|
self.actionSave_strategy = QtWidgets.QAction(MainWindow) |
||||||
|
self.actionSave_strategy.setObjectName("actionSave_strategy") |
||||||
|
self.menuFile.addAction(self.actionNew_strategy) |
||||||
|
self.menuFile.addAction(self.actionOpen_strategy) |
||||||
|
self.menuBacktest.addAction(self.actionExecute) |
||||||
|
self.menubar.addAction(self.menuFile.menuAction()) |
||||||
|
self.menubar.addAction(self.menuBacktest.menuAction()) |
||||||
|
self.toolBar.addAction(self.actionSave_strategy) |
||||||
|
self.toolBar.addAction(self.actionExecute) |
||||||
|
|
||||||
|
self.retranslateUi(MainWindow) |
||||||
|
self.tabs.setCurrentIndex(-1) |
||||||
|
self.actionOpen_strategy.triggered.connect(MainWindow.openStrategy) |
||||||
|
self.tabs.tabCloseRequested['int'].connect(MainWindow.tabCloseRequested) |
||||||
|
self.actionNew_strategy.triggered.connect(MainWindow.newStrategy) |
||||||
|
self.actionExecute.triggered.connect(MainWindow.executeStrategy) |
||||||
|
self.actionSave_strategy.triggered.connect(MainWindow.saveStrategy) |
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow) |
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow): |
||||||
|
_translate = QtCore.QCoreApplication.translate |
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "Nailab")) |
||||||
|
self.menuFile.setTitle(_translate("MainWindow", "File")) |
||||||
|
self.menuBacktest.setTitle(_translate("MainWindow", "Backtest")) |
||||||
|
self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar")) |
||||||
|
self.actionOpenTrades.setText(_translate("MainWindow", "Open...")) |
||||||
|
self.actionNew_strategy.setText(_translate("MainWindow", "New strategy")) |
||||||
|
self.actionOpen_strategy.setText(_translate("MainWindow", "Open strategy")) |
||||||
|
self.actionExecute.setText(_translate("MainWindow", "Execute")) |
||||||
|
self.actionSave_strategy.setText(_translate("MainWindow", "Save strategy")) |
||||||
|
|
||||||
@ -0,0 +1,60 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'ui/newdatasourcedialog.ui' |
||||||
|
# |
||||||
|
# Created by: PyQt5 UI code generator 5.5.1 |
||||||
|
# |
||||||
|
# WARNING! All changes made in this file will be lost! |
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets |
||||||
|
|
||||||
|
class Ui_NewDataSourceDialog(object): |
||||||
|
def setupUi(self, NewDataSourceDialog): |
||||||
|
NewDataSourceDialog.setObjectName("NewDataSourceDialog") |
||||||
|
NewDataSourceDialog.resize(786, 334) |
||||||
|
self.gridLayout = QtWidgets.QGridLayout(NewDataSourceDialog) |
||||||
|
self.gridLayout.setObjectName("gridLayout") |
||||||
|
self.widgets = QtWidgets.QStackedWidget(NewDataSourceDialog) |
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) |
||||||
|
sizePolicy.setHorizontalStretch(0) |
||||||
|
sizePolicy.setVerticalStretch(0) |
||||||
|
sizePolicy.setHeightForWidth(self.widgets.sizePolicy().hasHeightForWidth()) |
||||||
|
self.widgets.setSizePolicy(sizePolicy) |
||||||
|
self.widgets.setObjectName("widgets") |
||||||
|
self.gridLayout.addWidget(self.widgets, 3, 0, 1, 2) |
||||||
|
self.e_sourceName = QtWidgets.QLineEdit(NewDataSourceDialog) |
||||||
|
self.e_sourceName.setObjectName("e_sourceName") |
||||||
|
self.gridLayout.addWidget(self.e_sourceName, 0, 1, 1, 1) |
||||||
|
self.label = QtWidgets.QLabel(NewDataSourceDialog) |
||||||
|
self.label.setObjectName("label") |
||||||
|
self.gridLayout.addWidget(self.label, 1, 0, 1, 1) |
||||||
|
self.cb_sourceType = QtWidgets.QComboBox(NewDataSourceDialog) |
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) |
||||||
|
sizePolicy.setHorizontalStretch(0) |
||||||
|
sizePolicy.setVerticalStretch(0) |
||||||
|
sizePolicy.setHeightForWidth(self.cb_sourceType.sizePolicy().hasHeightForWidth()) |
||||||
|
self.cb_sourceType.setSizePolicy(sizePolicy) |
||||||
|
self.cb_sourceType.setObjectName("cb_sourceType") |
||||||
|
self.cb_sourceType.addItem("") |
||||||
|
self.gridLayout.addWidget(self.cb_sourceType, 1, 1, 1, 1) |
||||||
|
self.label_2 = QtWidgets.QLabel(NewDataSourceDialog) |
||||||
|
self.label_2.setObjectName("label_2") |
||||||
|
self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1) |
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(NewDataSourceDialog) |
||||||
|
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) |
||||||
|
self.buttonBox.setObjectName("buttonBox") |
||||||
|
self.gridLayout.addWidget(self.buttonBox, 4, 0, 1, 2) |
||||||
|
|
||||||
|
self.retranslateUi(NewDataSourceDialog) |
||||||
|
self.widgets.setCurrentIndex(-1) |
||||||
|
self.buttonBox.accepted.connect(NewDataSourceDialog.accept) |
||||||
|
self.buttonBox.rejected.connect(NewDataSourceDialog.reject) |
||||||
|
QtCore.QMetaObject.connectSlotsByName(NewDataSourceDialog) |
||||||
|
|
||||||
|
def retranslateUi(self, NewDataSourceDialog): |
||||||
|
_translate = QtCore.QCoreApplication.translate |
||||||
|
NewDataSourceDialog.setWindowTitle(_translate("NewDataSourceDialog", "New data source")) |
||||||
|
self.label.setText(_translate("NewDataSourceDialog", "Data source type")) |
||||||
|
self.cb_sourceType.setItemText(0, _translate("NewDataSourceDialog", "CSV")) |
||||||
|
self.label_2.setText(_translate("NewDataSourceDialog", "Data source name")) |
||||||
|
|
||||||
@ -0,0 +1,84 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<ui version="4.0"> |
||||||
|
<class>CSVDataSourceConfigWidget</class> |
||||||
|
<widget class="QWidget" name="CSVDataSourceConfigWidget"> |
||||||
|
<property name="geometry"> |
||||||
|
<rect> |
||||||
|
<x>0</x> |
||||||
|
<y>0</y> |
||||||
|
<width>529</width> |
||||||
|
<height>313</height> |
||||||
|
</rect> |
||||||
|
</property> |
||||||
|
<property name="windowTitle"> |
||||||
|
<string>Form</string> |
||||||
|
</property> |
||||||
|
<layout class="QGridLayout" name="gridLayout"> |
||||||
|
<item row="0" column="0"> |
||||||
|
<widget class="QLabel" name="label"> |
||||||
|
<property name="text"> |
||||||
|
<string>CSV folder path</string> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item row="0" column="1"> |
||||||
|
<widget class="QLineEdit" name="e_path"> |
||||||
|
<property name="sizePolicy"> |
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> |
||||||
|
<horstretch>0</horstretch> |
||||||
|
<verstretch>0</verstretch> |
||||||
|
</sizepolicy> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item row="0" column="2"> |
||||||
|
<widget class="QPushButton" name="b_browse"> |
||||||
|
<property name="sizePolicy"> |
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed"> |
||||||
|
<horstretch>0</horstretch> |
||||||
|
<verstretch>0</verstretch> |
||||||
|
</sizepolicy> |
||||||
|
</property> |
||||||
|
<property name="text"> |
||||||
|
<string>...</string> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item row="1" 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>b_browse</sender> |
||||||
|
<signal>clicked()</signal> |
||||||
|
<receiver>CSVDataSourceConfigWidget</receiver> |
||||||
|
<slot>browse()</slot> |
||||||
|
<hints> |
||||||
|
<hint type="sourcelabel"> |
||||||
|
<x>482</x> |
||||||
|
<y>27</y> |
||||||
|
</hint> |
||||||
|
<hint type="destinationlabel"> |
||||||
|
<x>494</x> |
||||||
|
<y>47</y> |
||||||
|
</hint> |
||||||
|
</hints> |
||||||
|
</connection> |
||||||
|
</connections> |
||||||
|
<slots> |
||||||
|
<slot>browse()</slot> |
||||||
|
</slots> |
||||||
|
</ui> |
||||||
@ -0,0 +1,106 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<ui version="4.0"> |
||||||
|
<class>NewDataSourceDialog</class> |
||||||
|
<widget class="QDialog" name="NewDataSourceDialog"> |
||||||
|
<property name="geometry"> |
||||||
|
<rect> |
||||||
|
<x>0</x> |
||||||
|
<y>0</y> |
||||||
|
<width>786</width> |
||||||
|
<height>334</height> |
||||||
|
</rect> |
||||||
|
</property> |
||||||
|
<property name="windowTitle"> |
||||||
|
<string>New data source</string> |
||||||
|
</property> |
||||||
|
<layout class="QGridLayout" name="gridLayout"> |
||||||
|
<item row="3" column="0" colspan="2"> |
||||||
|
<widget class="QStackedWidget" name="widgets"> |
||||||
|
<property name="sizePolicy"> |
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Expanding"> |
||||||
|
<horstretch>0</horstretch> |
||||||
|
<verstretch>0</verstretch> |
||||||
|
</sizepolicy> |
||||||
|
</property> |
||||||
|
<property name="currentIndex"> |
||||||
|
<number>-1</number> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item row="0" column="1"> |
||||||
|
<widget class="QLineEdit" name="e_sourceName"/> |
||||||
|
</item> |
||||||
|
<item row="1" column="0"> |
||||||
|
<widget class="QLabel" name="label"> |
||||||
|
<property name="text"> |
||||||
|
<string>Data source type</string> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item row="1" column="1"> |
||||||
|
<widget class="QComboBox" name="cb_sourceType"> |
||||||
|
<property name="sizePolicy"> |
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> |
||||||
|
<horstretch>0</horstretch> |
||||||
|
<verstretch>0</verstretch> |
||||||
|
</sizepolicy> |
||||||
|
</property> |
||||||
|
<item> |
||||||
|
<property name="text"> |
||||||
|
<string>CSV</string> |
||||||
|
</property> |
||||||
|
</item> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item row="0" column="0"> |
||||||
|
<widget class="QLabel" name="label_2"> |
||||||
|
<property name="text"> |
||||||
|
<string>Data source name</string> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item row="4" column="0" colspan="2"> |
||||||
|
<widget class="QDialogButtonBox" name="buttonBox"> |
||||||
|
<property name="standardButtons"> |
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
</layout> |
||||||
|
</widget> |
||||||
|
<resources/> |
||||||
|
<connections> |
||||||
|
<connection> |
||||||
|
<sender>buttonBox</sender> |
||||||
|
<signal>accepted()</signal> |
||||||
|
<receiver>NewDataSourceDialog</receiver> |
||||||
|
<slot>accept()</slot> |
||||||
|
<hints> |
||||||
|
<hint type="sourcelabel"> |
||||||
|
<x>623</x> |
||||||
|
<y>323</y> |
||||||
|
</hint> |
||||||
|
<hint type="destinationlabel"> |
||||||
|
<x>600</x> |
||||||
|
<y>333</y> |
||||||
|
</hint> |
||||||
|
</hints> |
||||||
|
</connection> |
||||||
|
<connection> |
||||||
|
<sender>buttonBox</sender> |
||||||
|
<signal>rejected()</signal> |
||||||
|
<receiver>NewDataSourceDialog</receiver> |
||||||
|
<slot>reject()</slot> |
||||||
|
<hints> |
||||||
|
<hint type="sourcelabel"> |
||||||
|
<x>563</x> |
||||||
|
<y>317</y> |
||||||
|
</hint> |
||||||
|
<hint type="destinationlabel"> |
||||||
|
<x>461</x> |
||||||
|
<y>331</y> |
||||||
|
</hint> |
||||||
|
</hints> |
||||||
|
</connection> |
||||||
|
</connections> |
||||||
|
</ui> |
||||||
Loading…
Reference in new issue