Newer
Older
from PySide2.QtWidgets import QVBoxLayout, QHBoxLayout, QWidget, QDialog, QLabel, QFrame, QScrollArea
from PySide2.QtCore import Qt
QUESTIONS = {
"Adding operations": "Select an operation under 'Special operations' or 'Core operations' to add it to the workspace.",
"Moving operations": "To drag an operation, select the operation on the workspace and drag it around.",
"Selecting operations": "To select one operation just press it once, it will then turn grey.",
"Selecting multiple operations using dragging": "To select multiple operations using your mouse, \ndrag the mouse while pressing left mouse button, any operation under the selection box will then be selected.",
"Selecting multiple operations using without dragging": "To select mutliple operations using without dragging, \npress 'Ctrl+LMouseButton' on any operation.",
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
"Remove operations": "To remove an operation, select the operation to be deleted, \nfinally press RMouseButton to bring up the context menu, then press 'Delete'.",
"Remove multiple operations": "To remove multiple operations, \nselect all operations to be deleted and press 'Delete' on your keyboard.",
"Connecting operations": "To connect operations, select the ports on the operation to connect from, \nthen select the next port by pressing 'Ctrl+LMouseButton' on the destination port. Tip: You can chain connection by selecting the ports in the order they should be connected.",
"Creating a signal-flow-graph": "To create a signal-flow-graph (SFG), \ncouple together the operations you wish to create a sfg from, then select all operations you wish to include in the sfg, \nfinally press 'Create SFG' in the upper left corner and enter the name of the sfg.",
"Simulating a signal-flow-graph": "To simulate a signal-flow-graph (SFG), press the run button in the toolbar, \nthen press 'Simulate SFG' and enter the properties of the simulation.",
"Properties of simulation": "The properties of the simulation are, 'Iteration Count': The number of iterations to run the simulation for, \n'Plot Results': Open a plot over the output in matplotlib, \n'Get All Results': Print the detailed output from simulating the sfg in the terminal, \n'Input Values': The input values to the SFG by index of the port."
}
class KeybindsWindow(QDialog):
def __init__(self, window):
super(KeybindsWindow, self).__init__()
self._window = window
self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowCloseButtonHint)
self.setWindowTitle("B-ASIC Keybinds")
self.dialog_layout = QVBoxLayout()
self.setLayout(self.dialog_layout)
self.add_information_to_layout()
def add_information_to_layout(self):
information_layout = QVBoxLayout()
title_label = QLabel("B-ASIC / Better ASIC Toolbox")
subtitle_label = QLabel("Keybinds in the GUI.")
frame = QFrame()
frame.setFrameShape(QFrame.HLine)
frame.setFrameShadow(QFrame.Sunken)
self.dialog_layout.addWidget(frame)
keybinds_label = QLabel(
"'Ctrl+R' - Reload the operation list to add any new operations created.\n"
"'Ctrl+Q' - Quit the application.\n"
"'Ctrl+LMouseButton' - On a operation will select the operation, without deselecting the other operations.\n"
"'Ctrl+S' (Plot) - Save the plot if a plot is visible.\n"
"'Ctrl+?' - Open the FAQ section."
)
information_layout.addWidget(title_label)
information_layout.addWidget(subtitle_label)
self.dialog_layout.addLayout(information_layout)
self.dialog_layout.addWidget(frame)
self.dialog_layout.addWidget(keybinds_label)
class AboutWindow(QDialog):
def __init__(self, window):
super(AboutWindow, self).__init__()
self._window = window
self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowCloseButtonHint)
self.setWindowTitle("About B-ASIC")
self.dialog_layout = QVBoxLayout()
self.setLayout(self.dialog_layout)
self.add_information_to_layout()
def add_information_to_layout(self):
information_layout = QVBoxLayout()
title_label = QLabel("B-ASIC / Better ASIC Toolbox")
subtitle_label = QLabel("Construct, simulate and analyze components of an ASIC.")
frame = QFrame()
frame.setFrameShape(QFrame.HLine)
frame.setFrameShadow(QFrame.Sunken)
self.dialog_layout.addWidget(frame)
about_label = QLabel(
"B-ASIC is a open source tool using the B-ASIC library to construct, simulate and analyze ASICs.\n"
"B-ASIC is developed under the MIT-license and any extension to the program should follow that same license.\n"
"To read more about how the GUI works please refer to the FAQ under 'Help'."
)
information_layout.addWidget(title_label)
information_layout.addWidget(subtitle_label)
self.dialog_layout.addLayout(information_layout)
self.dialog_layout.addWidget(frame)
self.dialog_layout.addWidget(about_label)
class FaqWindow(QDialog):
def __init__(self, window):
super(FaqWindow, self).__init__()
self._window = window
self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowCloseButtonHint)
self.setWindowTitle("Frequently Asked Questions")
self.dialog_layout = QVBoxLayout()
self.scroll_area = QScrollArea()
self.setLayout(self.dialog_layout)
for question, answer in QUESTIONS.items():
self.add_question_to_layout(question, answer)
self.scroll_area.setWidget(self)
self.scroll_area.setWidgetResizable(True)
def add_question_to_layout(self, question, answer):
question_layout = QVBoxLayout()
answer_layout = QHBoxLayout()
question_label = QLabel(question)
question_layout.addWidget(question_label)
answer_label = QLabel(answer)
answer_layout.addWidget(answer_label)
frame = QFrame()
frame.setFrameShape(QFrame.HLine)
frame.setFrameShadow(QFrame.Sunken)
self.dialog_layout.addWidget(frame)
question_layout.addLayout(answer_layout)
self.dialog_layout.addLayout(question_layout)