WIP add input handler for each widget in the form
parent
fd73d1eef1
commit
4336939507
|
@ -18,13 +18,16 @@
|
|||
Text entry "forms" widgets (mostly for configuration and UI user input).
|
||||
|
||||
'''
|
||||
from functools import partial
|
||||
from typing import Optional
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
# import trio
|
||||
import trio
|
||||
from PyQt5 import QtCore, QtGui
|
||||
from PyQt5.QtCore import QSize, QModelIndex
|
||||
from PyQt5.QtCore import QSize, QModelIndex, Qt, QEvent
|
||||
from PyQt5.QtWidgets import (
|
||||
QWidget,
|
||||
QLabel,
|
||||
QComboBox,
|
||||
QLineEdit,
|
||||
QProgressBar,
|
||||
|
@ -33,6 +36,7 @@ from PyQt5.QtWidgets import (
|
|||
QStyleOptionViewItem,
|
||||
)
|
||||
|
||||
from ._event import open_handlers
|
||||
from ._style import hcolor, _font, DpiAwareFont
|
||||
|
||||
|
||||
|
@ -144,7 +148,7 @@ class FontScaledDelegate(QStyledItemDelegate):
|
|||
return super().sizeHint(option, index)
|
||||
|
||||
|
||||
class FieldsForm(QtGui.QWidget):
|
||||
class FieldsForm(QWidget):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
|
@ -166,6 +170,9 @@ class FieldsForm(QtGui.QWidget):
|
|||
self.hbox.setContentsMargins(16, 0, 16, 0)
|
||||
self.hbox.setSpacing(3)
|
||||
|
||||
self.labels: dict[str, QLabel] = {}
|
||||
self.fields: dict[str, QWidget] = {}
|
||||
|
||||
def add_field_label(
|
||||
self,
|
||||
name: str,
|
||||
|
@ -190,6 +197,8 @@ class FieldsForm(QtGui.QWidget):
|
|||
label.show()
|
||||
|
||||
self.hbox.addWidget(label)
|
||||
self.labels[name] = label
|
||||
|
||||
return label
|
||||
|
||||
def add_edit_field(
|
||||
|
@ -200,21 +209,25 @@ class FieldsForm(QtGui.QWidget):
|
|||
|
||||
widget: Optional[QWidget] = None,
|
||||
|
||||
) -> None:
|
||||
) -> FontAndChartAwareLineEdit:
|
||||
|
||||
# TODO: maybe a distint layout per "field" item?
|
||||
self.add_field_label(name)
|
||||
|
||||
self.edit = FontAndChartAwareLineEdit(
|
||||
edit = FontAndChartAwareLineEdit(
|
||||
parent=self,
|
||||
# parent_chart=self.godwidget,
|
||||
# width_in_chars=6,
|
||||
)
|
||||
self.edit.setStyleSheet(
|
||||
edit.setStyleSheet(
|
||||
f"QLineEdit {{ color : {hcolor('gunmetal')}; }}"
|
||||
)
|
||||
self.edit.setText(str(value))
|
||||
self.hbox.addWidget(self.edit)
|
||||
edit.setText(str(value))
|
||||
self.hbox.addWidget(edit)
|
||||
|
||||
self.fields[name] = edit
|
||||
|
||||
return edit
|
||||
|
||||
def add_select_field(
|
||||
self,
|
||||
|
@ -264,37 +277,39 @@ class FieldsForm(QtGui.QWidget):
|
|||
return select
|
||||
|
||||
|
||||
# async def handle_form_input(
|
||||
async def handle_field_input(
|
||||
|
||||
# chart: 'ChartPlotWidget', # noqa
|
||||
# form: FieldsForm,
|
||||
# recv_chan: trio.abc.ReceiveChannel,
|
||||
# chart: 'ChartPlotWidget', # noqa
|
||||
widget: QWidget,
|
||||
recv_chan: trio.abc.ReceiveChannel,
|
||||
form: FieldsForm,
|
||||
|
||||
# ) -> None:
|
||||
) -> None:
|
||||
|
||||
# async for event, etype, key, mods, txt in recv_chan:
|
||||
# print(f'key: {key}, mods: {mods}, txt: {txt}')
|
||||
async for event, etype, key, mods, txt in recv_chan:
|
||||
print(f'key: {key}, mods: {mods}, txt: {txt}')
|
||||
|
||||
# ctl = False
|
||||
# if mods == Qt.ControlModifier:
|
||||
# ctl = True
|
||||
ctl = False
|
||||
if mods == Qt.ControlModifier:
|
||||
ctl = True
|
||||
|
||||
# # cancel and close
|
||||
# if ctl and key in {
|
||||
# Qt.Key_C,
|
||||
# Qt.Key_Space, # i feel like this is the "native" one
|
||||
# Qt.Key_Alt,
|
||||
# }:
|
||||
# # search.bar.unfocus()
|
||||
# cancel and close
|
||||
if ctl and key in {
|
||||
Qt.Key_C,
|
||||
Qt.Key_Space, # i feel like this is the "native" one
|
||||
Qt.Key_Alt,
|
||||
}:
|
||||
# search.bar.unfocus()
|
||||
|
||||
# # kill the search and focus back on main chart
|
||||
# if chart:
|
||||
# chart.linkedsplits.focus()
|
||||
# kill the search and focus back on main chart
|
||||
if chart:
|
||||
chart.linkedsplits.focus()
|
||||
|
||||
# continue
|
||||
continue
|
||||
|
||||
|
||||
def mk_form(
|
||||
@asynccontextmanager
|
||||
async def mk_form(
|
||||
|
||||
parent: QWidget,
|
||||
fields: dict,
|
||||
|
@ -307,7 +322,7 @@ def mk_form(
|
|||
for name, value in fields.items():
|
||||
form.add_edit_field(name, value)
|
||||
|
||||
form.add_select_field('policy:', ['uniform', 'halfs'])
|
||||
form.add_select_field('policy:', ['uniform'])
|
||||
|
||||
form.add_field_label('fills:')
|
||||
fill_bar = QProgressBar(form)
|
||||
|
@ -317,4 +332,17 @@ def mk_form(
|
|||
|
||||
form.hbox.addWidget(fill_bar)
|
||||
|
||||
return form
|
||||
async with open_handlers(
|
||||
|
||||
list(form.fields.values()),
|
||||
event_types={QEvent.KeyPress},
|
||||
|
||||
async_handler=partial(
|
||||
handle_field_input,
|
||||
form=form,
|
||||
),
|
||||
|
||||
# block key repeats?
|
||||
filter_auto_repeats=True,
|
||||
):
|
||||
yield form
|
||||
|
|
Loading…
Reference in New Issue