Skip to content

Commit aaccf9c

Browse files
committed
Merge branch 'master' of https://github.com/hANSIc99/Pythonic
2 parents 8316438 + 1821f12 commit aaccf9c

File tree

15 files changed

+356
-166
lines changed

15 files changed

+356
-166
lines changed

CHANGES.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
0.12
2+
3+
Now five independent grids per Pythonic instance
4+
Jumping between grid possible (basic return element)
5+
16
0.11
27

38
REST element implemented

dist/Pythonic-0.12.tar.gz

346 KB
Binary file not shown.

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setuptools.setup(
77
name = 'Pythonic',
8-
version = '0.11',
8+
version = '0.12',
99
author = 'Stephan Avenwedde',
1010
author_email = '[email protected]',
1111
license = 'GPLv3',

src/Pythonic/basictools.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
from PyQt5.QtWidgets import QFrame, QHBoxLayout
2+
from PyQt5.QtCore import Qt, QMimeData, QDir, pyqtSignal
3+
from PyQt5.QtGui import QDrag, QPixmap
4+
from PyQt5.QtCore import QCoreApplication as QC
5+
from Pythonic.mastertool import MasterTool
6+
import logging
7+
8+
class BasicTools(QFrame):
9+
10+
reg_tool = pyqtSignal(tuple, name='register_tool_basic')
11+
12+
def __init__(self, parent):
13+
super().__init__(parent)
14+
self.initUI()
15+
16+
def initUI(self):
17+
18+
self.setStyleSheet('background-color: silver')
19+
image_folder = QDir('images')
20+
21+
self.layout_h = QHBoxLayout()
22+
23+
self.op_tool = MasterTool(self, 'ExecOp', 1)
24+
self.op_tool.setPixmap(QPixmap('images/ExecOp.png').scaled(120, 60))
25+
26+
self.branch_tool = MasterTool(self, 'ExecBranch', 2)
27+
self.branch_tool.setPixmap(QPixmap('images/ExecBranch.png').scaled(120, 60))
28+
29+
self.return_tool = MasterTool(self, 'ExecReturn', 0)
30+
self.return_tool.setPixmap(QPixmap('images/ExecReturn.png').scaled(120, 60))
31+
32+
self.proc_tool = MasterTool(self, 'ExecProcess', 2)
33+
self.proc_tool.setPixmap(QPixmap('images/ExecProcess.png').scaled(120, 60))
34+
35+
self.ta_tool = MasterTool(self, 'ExecTA', 1)
36+
self.ta_tool.setPixmap(QPixmap('images/ExecTA.png').scaled(120, 60))
37+
38+
self.sched_tool = MasterTool(self, 'ExecSched', 1)
39+
self.sched_tool.setPixmap(QPixmap('images/ExecSched.png').scaled(120, 60))
40+
41+
self.stack_tool = MasterTool(self, 'ExecStack', 1)
42+
self.stack_tool.setPixmap(QPixmap('images/ExecStack.png').scaled(120, 60))
43+
44+
self.layout_h.addWidget(self.op_tool)
45+
self.layout_h.addWidget(self.branch_tool)
46+
self.layout_h.addWidget(self.return_tool)
47+
self.layout_h.addWidget(self.proc_tool)
48+
self.layout_h.addWidget(self.ta_tool)
49+
self.layout_h.addWidget(self.sched_tool)
50+
self.layout_h.addWidget(self.stack_tool)
51+
self.layout_h.addStretch(1)
52+
53+
self.setLayout(self.layout_h)
54+
55+
def mousePressEvent(self, event):
56+
57+
child = self.childAt(event.pos())
58+
if not child:
59+
return
60+
61+
mimeData = QMimeData()
62+
mimeData.setText(child.type)
63+
64+
logging.debug('mousePressEvent() called: {}'.format(event.pos()))
65+
drag = QDrag(self)
66+
drag.setPixmap(child.pixmap())
67+
drag.setMimeData(mimeData)
68+
drag.setHotSpot(event.pos() - child.pos())
69+
70+
if drag.exec_(Qt.CopyAction | Qt.MoveAction, Qt.CopyAction) == Qt.MoveAction:
71+
child.close()
72+
else:
73+
child.show()
74+
child.setPixmap(child.pixmap())
75+
76+
def register_tools(self):
77+
78+
logging.debug('register_tools() called BasicTools')
79+
self.reg_tool.emit(self.op_tool.toolData())
80+
self.reg_tool.emit(self.branch_tool.toolData())
81+
self.reg_tool.emit(self.return_tool.toolData())
82+
self.reg_tool.emit(self.proc_tool.toolData())
83+
self.reg_tool.emit(self.ta_tool.toolData())
84+
self.reg_tool.emit(self.sched_tool.toolData())
85+
#uncomment in future release
86+
self.reg_tool.emit(self.stack_tool.toolData())
87+
88+

src/Pythonic/elements/basic_return.py

Lines changed: 56 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from PyQt5.QtCore import Qt, QCoreApplication, pyqtSignal, QVariant
33
from PyQt5.QtGui import QPixmap, QPainter, QColor
44
from PyQt5.QtWidgets import (QVBoxLayout, QHBoxLayout, QLabel, QTextEdit, QWidget, QComboBox, QCheckBox,
5-
QPushButton)
5+
QPushButton, QStackedWidget)
66
from PyQt5.QtCore import QCoreApplication as QC
77
import logging
88
import os.path
@@ -17,12 +17,14 @@ class ExecReturn(ElementMaster):
1717
pixmap_path = 'images/ExecReturn.png'
1818
child_pos = (False, False)
1919

20+
query_grid_config = pyqtSignal(name='query_grid_config')
21+
2022
def __init__(self, row, column):
2123
self.row = row
2224
self.column = column
2325

24-
# currentdata, currentindex, ischecked
25-
self.config = (None, None, False)
26+
# grid, wrk_selecctor_index, wrk_pos, ischecked
27+
self.config = (0, 0, (0,0), False)
2628
super().__init__(self.row, self.column, QPixmap(self.pixmap_path), True, self.config)
2729
super().edit_sig.connect(self.edit)
2830
logging.debug('ExecReturn called at row {}, column {}'.format(row, column))
@@ -43,15 +45,19 @@ def __getstate__(self):
4345
def openEditor(self):
4446
logging.debug('openEditor() called ExecReturn')
4547

48+
4649
def edit(self):
4750
logging.debug('edit() called ExecReturn')
4851
self.returnEditLayout = QVBoxLayout()
4952

5053
self.returnEdit = ElementEditor(self)
5154
self.returnEdit.setWindowTitle(QC.translate('', 'Edit Return'))
5255

53-
self.top_text = QLabel()
54-
self.top_text.setText(QC.translate('', 'Go to element:'))
56+
self.grid_text = QLabel()
57+
self.grid_text.setText(QC.translate('', 'Go to grid:'))
58+
59+
self.element_text = QLabel()
60+
self.element_text.setText(QC.translate('', 'Go to element:'))
5561

5662
self.help_text = QWidget()
5763
self.help_text_layout = QVBoxLayout(self.help_text)
@@ -83,17 +89,21 @@ def edit(self):
8389
self.log_line_layout.addStretch(1)
8490

8591

86-
self.element_selector = QComboBox()
87-
self.populateSelector()
92+
self.element_selector = QStackedWidget()
93+
94+
self.grid_selector = QComboBox()
8895

89-
if self.config[1]:
90-
self.element_selector.setCurrentIndex(self.config[1])
91-
if self.config[2]:
92-
self.log_checkbox.setChecked(True)
96+
# emmiting signal
97+
self.query_grid_config.emit()
98+
self.grid_selector.currentIndexChanged.connect(self.gridIndexChanged)
99+
100+
self.loadLastConfig()
93101

94102
self.confirm_button.clicked.connect(self.returnEdit.closeEvent)
95103
self.returnEdit.window_closed.connect(self.edit_done)
96-
self.returnEditLayout.addWidget(self.top_text)
104+
self.returnEditLayout.addWidget(self.grid_text)
105+
self.returnEditLayout.addWidget(self.grid_selector)
106+
self.returnEditLayout.addWidget(self.element_text)
97107
self.returnEditLayout.addWidget(self.element_selector)
98108
self.returnEditLayout.addWidget(self.log_line)
99109
self.returnEditLayout.addWidget(self.help_text)
@@ -102,17 +112,41 @@ def edit(self):
102112
self.returnEdit.setLayout(self.returnEditLayout)
103113
self.returnEdit.show()
104114

105-
def populateSelector(self):
115+
def baustelle(self, config):
116+
117+
self.wrk_selectors_arr = []
118+
119+
logging.debug('ExecReturn::baustelle config: {}'.format(config))
120+
for index, wrk_area in enumerate(config):
121+
self.grid_selector.addItem('Grid {}'.format(index + 1))
106122

107-
index = self.parent().returnCurrentElements()
123+
self.wrk_selectors_arr.append(QComboBox())
124+
self.element_selector.addWidget(self.wrk_selectors_arr[index])
125+
for pos in wrk_area:
126+
self.wrk_selectors_arr[index].addItem('{} {}'.format(pos[0], alphabet[pos[1]]), QVariant(pos))
108127

109-
for pos in index:
110-
if self.getPos() != pos:
111-
self.element_selector.addItem('{} {}'.format(pos[0], alphabet[pos[1]]), QVariant(pos))
128+
def gridIndexChanged(self, index):
129+
130+
logging.debug('ExecReturn::gridIndexChanged() called: {}'.format(index))
131+
self.element_selector.setCurrentIndex(index)
132+
133+
134+
def loadLastConfig(self):
135+
136+
grid, wrk_selecctor_index, wrk_pos, log_state = self.config
137+
138+
self.grid_selector.setCurrentIndex(grid)
139+
self.element_selector.setCurrentIndex(grid)
140+
self.wrk_selectors_arr[grid].setCurrentIndex(wrk_selecctor_index)
141+
self.log_checkbox.setChecked(log_state)
112142

113143
def edit_done(self):
114144
logging.debug('edit_done() called ExecReturn' )
115-
self.config = (self.element_selector.currentData(), self.element_selector.currentIndex(), self.log_checkbox.isChecked())
145+
grid = self.grid_selector.currentIndex()
146+
wrk_selecctor_index = self.wrk_selectors_arr[grid].currentIndex()
147+
wrk_pos = self.wrk_selectors_arr[grid].currentData()
148+
149+
self.config = (grid, wrk_selecctor_index, wrk_pos, self.log_checkbox.isChecked())
116150
self.addFunction(ReturnFunction)
117151

118152
class ReturnFunction(Function):
@@ -122,7 +156,9 @@ def __init__(self, config, b_debug, row, column):
122156

123157
def execute(self, record):
124158

125-
log_txt = '{{BASIC RETURN}} Return to {}|{}'.format(self.config[0][0], alphabet[self.config[0][1]])
126-
result = Record(self.getPos(), self.config[0], record, log=self.config[2], log_txt=log_txt)
159+
grid, wrk_selecctor_index, wrk_pos, log_state = self.config
160+
target_0 = (grid, wrk_pos[0], wrk_pos[1])
161+
log_txt = '{{BASIC RETURN}} Grid {} - Pos {}|{}'.format(grid, wrk_pos[0], alphabet[wrk_pos[1]])
162+
result = Record(self.getPos(), target_0, record, log=log_state, log_txt=log_txt)
127163
return result
128164

src/Pythonic/executor.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@ class WorkerSignals(QObject):
2121

2222
finished = pyqtSignal(object, name='element_finished' )
2323
except_sig = pyqtSignal(object, name='exception')
24-
proc_ret = pyqtSignal(object)
24+
#proc_ret = pyqtSignal(object)
2525
pid_sig = pyqtSignal(object)
2626

2727
class GridOperator(QObject):
2828

2929
update_logger = pyqtSignal(name='update_logger')
3030
exec_pending = pyqtSignal(name='exec_pending')
31+
switch_grid = pyqtSignal('PyQt_PyObject', name='switch_grid')
3132

3233
def __init__(self, grid):
3334
super().__init__()
@@ -42,7 +43,6 @@ def __init__(self, grid):
4243
self.pending_return = []
4344
self.pid_register = []
4445
self.exec_pending.connect(self.checkPending)
45-
mp.set_start_method('spawn')
4646
logging.debug('__init__() GridOperator, threadCount: {}'.format(
4747
self.threadpool.maxThreadCount()))
4848

@@ -162,19 +162,32 @@ def proceedExec(self, prg_return):
162162

163163
def goNext(self, prg_return):
164164

165+
# check is target_0 includes a diffrent grid
166+
# ExecReturn elemenot
165167

166168
if prg_return.target_0:
167169
logging.debug('GridOperator::goNext() called with next target_0: {}'.format(prg_return.target_0))
168170
logging.debug('GridOperator::goNext() called with record_0: {}'.format(prg_return.record_0))
169171

170172
if self.fastpath:
173+
174+
if len(prg_return.target_0) == 3: # switch grid, go over main
175+
# fastpath = True
176+
self.switch_grid.emit((prg_return, True))
177+
return
171178

172179
new_rec = self.fastPath(prg_return.target_0, prg_return.record_0)
173180
if new_rec: # check for ExecR or ExecRB
174181
self.goNext(new_rec)
175182
else: # if nothing found: proceed as usual
176183
self.startExec(prg_return.target_0, prg_return.record_0)
177184
else:
185+
186+
if len(prg_return.target_0) == 3: # switch grid, go over main
187+
# fastpath = False
188+
self.switch_grid.emit((prg_return, False))
189+
return
190+
178191
self.startExec(prg_return.target_0, prg_return.record_0)
179192

180193
if prg_return.target_1:

0 commit comments

Comments
 (0)