Skip to content

Commit 2682820

Browse files
committed
Merge branch 'master' into dev
2 parents ab2187c + e6fe329 commit 2682820

6 files changed

Lines changed: 45 additions & 20 deletions

File tree

controls_dialogs/example_blinker_gui_from_py.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,14 @@ def __init__(self, parent, grid_layout, board, init_vars):
106106

107107
# image
108108
self.picture = QtWidgets.QLabel()
109-
image = QtGui.QPixmap("config/user_controls_dialogs/example_image.png")
109+
image = QtGui.QPixmap("controls_dialogs/example_image.png")
110110
self.picture.setPixmap(image)
111111
layout.addWidget(self.picture, row, 0, 1, 4)
112112
row += 1
113113

114114
# gif
115115
self.gif = QtWidgets.QLabel()
116-
self.movie = QtGui.QMovie("config/user_controls_dialogs/example_movie.gif")
116+
self.movie = QtGui.QMovie("controls_dialogs/example_movie.gif")
117117
self.gif.setMovie(self.movie)
118118
self.movie.start()
119119
layout.addWidget(self.gif, row, 0, 1, 4)

source/communication/pycboard.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,6 @@ def setup_state_machine(self, sm_name, sm_dir=None, uploaded=False):
421421
micropython_version=self.micropython_version,
422422
)
423423
self.data_logger.reset()
424-
self.timestamp = 0
425424

426425
def get_states(self):
427426
"""Return states as a dictionary {state_name: state_ID}"""
@@ -440,7 +439,8 @@ def start_framework(self, data_output=True):
440439
self.gc_collect()
441440
self.exec("fw.data_output = " + repr(data_output))
442441
self.serial.reset_input_buffer()
443-
self.last_message_time = 0
442+
self.last_message_time = time.time()
443+
self.timestamp = 0
444444
self.exec_raw_no_follow("fw.run()")
445445
self.framework_running = True
446446

source/gui/GUI_main.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ def launch_GUI():
230230
app = QtWidgets.QApplication(sys.argv)
231231
app.setStyle("Fusion")
232232
app.setWindowIcon(QtGui.QIcon("source/gui/icons/logo.svg"))
233+
app.setAttribute(QtCore.Qt.ApplicationAttribute.AA_DontShowIconsInMenus, False) # enable icons in mac menus
233234
font = QtGui.QFont()
234235
font.setPixelSize(get_setting("GUI", "ui_font_size"))
235236
app.setFont(font)

source/gui/custom_controls_dialog.py

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from copy import deepcopy
77
from dataclasses import dataclass, asdict
88
from pyqtgraph.Qt import QtGui, QtCore, QtWidgets
9-
from source.gui.settings import user_folder
9+
from source.gui.settings import user_folder, get_setting
1010
from source.gui.utility import variable_constants, null_resize, cbox_set_item, cbox_update_options
1111

1212

@@ -487,8 +487,27 @@ def __init__(self, parent_controls_dialog):
487487
widget.setLayout(layout)
488488
variable_tabs.addTab(widget, tab)
489489

490+
# the leftover section (a tab with ...) will containt a notes widget and
491+
# any variables not used by the Custom Controls Dialog Editor
490492
leftover_widget = QtWidgets.QWidget()
491493
leftover_layout = QtWidgets.QGridLayout()
494+
495+
# notes section
496+
self.parent_controls_dialog = parent_controls_dialog
497+
notes_widget = QtWidgets.QWidget()
498+
notes_layout = QtWidgets.QGridLayout()
499+
self.notes_textbox = QtWidgets.QTextEdit()
500+
self.notes_textbox.setFixedHeight(get_setting("GUI", "log_font_size") * 4)
501+
self.notes_textbox.setFont(QtGui.QFont("Courier New", get_setting("GUI", "log_font_size")))
502+
note_button = QtWidgets.QPushButton("Add note")
503+
note_button.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
504+
note_button.clicked.connect(self.add_note)
505+
notes_layout.addWidget(self.notes_textbox, 0, 0, 1, 3)
506+
notes_layout.addWidget(note_button, 1, 2)
507+
notes_layout.setContentsMargins(0, 0, 0, 10)
508+
notes_widget.setLayout(notes_layout)
509+
leftover_layout.addWidget(notes_widget, 0, 0, 1, 4)
510+
492511
leftover_vars = sorted(list(set(variables) - set(used_vars)), key=str.lower)
493512
leftover_vars = [
494513
v_name
@@ -498,19 +517,24 @@ def __init__(self, parent_controls_dialog):
498517
and not v_name.startswith("hw_")
499518
and v_name != "api_class"
500519
]
501-
if len(leftover_vars) > 0:
502-
for row, var in enumerate(leftover_vars):
503-
self.widget_dict[var] = Text_var(init_vars, var, var)
504-
self.widget_dict[var].setBoard(parent_controls_dialog.parent_tab.board)
505-
self.widget_dict[var].add_to_grid(leftover_layout, row + 1)
506-
leftover_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop)
507-
leftover_widget.setLayout(leftover_layout)
508-
variable_tabs.addTab(leftover_widget, "...")
520+
for row, var in enumerate(leftover_vars):
521+
self.widget_dict[var] = Text_var(init_vars, var, var)
522+
self.widget_dict[var].setBoard(parent_controls_dialog.parent_tab.board)
523+
self.widget_dict[var].add_to_grid(leftover_layout, row + 1)
524+
leftover_layout.setRowStretch(row + 2, 1)
525+
leftover_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop)
526+
leftover_widget.setLayout(leftover_layout)
527+
variable_tabs.addTab(leftover_widget, "...")
509528

510529
grid_layout.addWidget(variable_tabs, 0, 0, QtCore.Qt.AlignmentFlag.AlignLeft)
511530
grid_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop)
512531
self.setLayout(grid_layout)
513532

533+
def add_note(self):
534+
note_text = self.notes_textbox.toPlainText()
535+
self.notes_textbox.clear()
536+
self.parent_controls_dialog.parent_tab.board.data_logger.print_message(note_text, source="u")
537+
514538

515539
# GUI editor dialog. ---------------------------------------------------------
516540

@@ -663,7 +687,7 @@ def add_tab(self, data=None, name=None):
663687
if name:
664688
tab_title = name
665689
else:
666-
tab_title = f"tab-{len(self.tables)+1}"
690+
tab_title = f"tab-{len(self.tables) + 1}"
667691
self.tables[tab_title] = new_table
668692
self.tabs.addTab(new_table, tab_title)
669693
if len(self.tables) < 2:

source/pyControl/audio.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,19 @@ def __init__(self, channel=1):
3838
def off(self):
3939
self._timer.deinit()
4040
self._playing = False
41-
self._DAC.write_timed(_off_buf, pyb.Timer(2, freq=10000), mode=pyb.DAC.NORMAL)
41+
self._DAC.write_timed(_off_buf, pyb.Timer(4, freq=10000), mode=pyb.DAC.NORMAL)
4242

4343
def sine(self, freq): # Play a sine wave tone at the specified frequency.
44-
self._DAC.write_timed(_sine_buf, pyb.Timer(2, freq=freq * _sine_len), mode=pyb.DAC.CIRCULAR)
44+
self._DAC.write_timed(_sine_buf, pyb.Timer(4, freq=freq * _sine_len), mode=pyb.DAC.CIRCULAR)
4545

4646
def square(self, freq): # Play a square wave tone at the specified frequency.
47-
self._DAC.write_timed(_sqr_buf, pyb.Timer(2, freq=freq * 2), mode=pyb.DAC.CIRCULAR)
47+
self._DAC.write_timed(_sqr_buf, pyb.Timer(4, freq=freq * 2), mode=pyb.DAC.CIRCULAR)
4848

4949
def noise(self, freq=10000): # Play white noise with specified maximum frequency.
5050
self._DAC.noise(freq * 2)
5151

5252
def click(self, timer=None): # Play a single click.
53-
self._DAC.write_timed(_click_buf, pyb.Timer(2, freq=40000), mode=pyb.DAC.NORMAL)
53+
self._DAC.write_timed(_click_buf, pyb.Timer(4, freq=40000), mode=pyb.DAC.NORMAL)
5454

5555
def clicks(self, rate): # Play clicks at specified rate.
5656
self._timer.init(freq=rate)

source/pyControl/hardware.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ def get(self) -> int:
4343

4444
IO_dict = {} # Dictionary {ID: IO_object} containing all hardware inputs and outputs.
4545

46-
available_timers = [3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14] # Hardware timers not in use
47-
# Used timers; 1: Framework clock tick, 2: Audio write_timed, 6: DAC write_timed.
46+
available_timers = [3, 5, 7, 8, 9, 10, 11, 12, 13, 14] # Hardware timers not in use.
47+
# Used timers; 1: Framework clock tick, 2: Rotary encoder, 4: Audio write_timed, 6: DAC write_timed.
4848

4949
initialised = False # Set to True once hardware has been intiialised.
5050

0 commit comments

Comments
 (0)