Source code for semi_cr.core.lab.utils.qharbor.form
from dataclasses import dataclass, field
import ipywidgets as widgets
from IPython.display import clear_output, display
from semi_cr.core.lab.utils.dataclass_base import Dataclass
from .attributes import (
ChipAttributes,
MeasurementAttributes,
UserAttributes,
)
[docs]
@dataclass
class MeasurementState(Dataclass):
user: UserAttributes = field(default_factory=UserAttributes)
chip: ChipAttributes = field(default_factory=ChipAttributes)
measurement: MeasurementAttributes = field(default_factory=MeasurementAttributes)
form_out = widgets.Output()
measurement_state = MeasurementState()
[docs]
def show_user_form():
display(form_out)
with form_out:
clear_output()
ku_id_widget = widgets.Text(description="KU ID")
name_widget = widgets.Text(description="Full Name")
next_button = widgets.Button(description="Next")
display(ku_id_widget, name_widget, next_button)
def on_next(_):
measurement_state.user = UserAttributes(
UserInitials=ku_id_widget.value,
UserName=name_widget.value,
)
show_chip_form()
next_button.on_click(on_next)
[docs]
def show_chip_form():
with form_out:
clear_output()
project_id_widget = widgets.Text(description="Project ID")
component_widget = widgets.Text(description="Component")
next_button = widgets.Button(description="Next")
display(project_id_widget, component_widget, next_button)
def on_next(_):
measurement_state.chip = ChipAttributes(
ProjectID=project_id_widget.value,
Component=component_widget.value,
)
show_measurement_form()
next_button.on_click(on_next)
[docs]
def show_measurement_form():
with form_out:
clear_output()
measurement_description_widget = widgets.Text(
description="Measurement Description",
style={"description_width": "200px"},
layout=widgets.Layout(width="500px"),
)
submit_button = widgets.Button(description="Create Measurement")
display(
measurement_description_widget,
submit_button,
)
def on_submit(_):
measurement_state.measurement = MeasurementAttributes(
description=measurement_description_widget.value,
# Date=date_widget.value,
# Notes=notes_widget.value,
)
show_summary()
submit_button.on_click(on_submit)
[docs]
def show_summary():
with form_out:
clear_output()
print("All forms completed.\n")
print("User:")
print(measurement_state.user)
print("\nChip:")
print(measurement_state.chip)
print("\nMeasurement:")
print(measurement_state.measurement)