import Tools from "../../../canvas/constants/tools" import { convertObjectToKeyValueString, removeKeyFromObject } from "../../../utils/common" import { CheckSquareFilled } from "@ant-design/icons" import { CustomTkWidgetBase } from "./base" export class CheckBox extends CustomTkWidgetBase{ static widgetType = "check_button" static displayName = "Check Box" constructor(props) { super(props) // const {layout, ...newAttrs} = this.state.attrs // Removes the layout attribute let newAttrs = removeKeyFromObject("layout", this.state.attrs) this.minSize = {width: 50, height: 30} this.state = { ...this.state, size: { width: 120, height: 30 }, widgetName: "Check box", attrs: { ...newAttrs, styling: { ...newAttrs.styling, foregroundColor: { label: "Foreground Color", tool: Tools.COLOR_PICKER, // the tool to display, can be either HTML ELement or a constant string value: "#000", onChange: (value) => { this.setWidgetInnerStyle("color", value) this.setAttrValue("styling.foregroundColor", value) } } }, checkLabel: { label: "Check Label", tool: Tools.INPUT, // the tool to display, can be either HTML ELement or a constant string toolProps: {placeholder: "Button label", maxLength: 100}, value: "Checkbox", onChange: (value) => this.setAttrValue("checkLabel", value) }, defaultChecked: { label: "Checked", tool: Tools.CHECK_BUTTON, // the tool to display, can be either HTML ELement or a constant string value: true, onChange: (value) => this.setAttrValue("defaultChecked", value) } } } } componentDidMount(){ super.componentDidMount() // this.setAttrValue("styling.backgroundColor", "#fff") this.setWidgetInnerStyle("backgroundColor", "#fff0") } generateCode(variableName, parent){ const labelText = this.getAttrValue("checkLabel") const config = this.getConfigCode() const code = [ `${variableName} = ctk.CTkCheckBox(master=${parent}, text="${labelText}")`, `${variableName}.configure(${convertObjectToKeyValueString(config)})`, ] if (this.getAttrValue("defaultChecked")){ code.push(`${variableName}.select()`) } code.push(`${variableName}.${this.getLayoutCode()}`) return code } getToolbarAttrs(){ const toolBarAttrs = super.getToolbarAttrs() const attrs = this.state.attrs return ({ id: this.__id, widgetName: toolBarAttrs.widgetName, checkLabel: attrs.checkLabel, size: toolBarAttrs.size, ...attrs, }) } renderContent(){ return (
{ this.getAttrValue("defaultChecked") === true && }
{this.getAttrValue("checkLabel")}
) } } export class RadioButton extends CustomTkWidgetBase{ // FIXME: the radio buttons are not visible because of the default heigh provided static widgetType = "radio_button" constructor(props) { super(props) this.minSize = {width: 50, height: 30} this.state = { ...this.state, size: { width: 80, height: 30 }, fitContent: { width: true, height: true }, widgetName: "Radio button", attrs: { ...this.state.attrs, radios: { label: "Radio Group", tool: Tools.INPUT_RADIO_LIST, value: {inputs: ["default"], selectedRadio: -1}, onChange: ({inputs, selectedRadio}) => { this.setAttrValue("radios", {inputs, selectedRadio}) } } } } } componentDidMount(){ super.componentDidMount() // this.setAttrValue("styling.backgroundColor", "#fff") this.setWidgetInnerStyle("backgroundColor", "#fff0") } generateCode(variableName, parent){ const {border_width, ...config} = this.getConfigCode() if (border_width){ // there is no border width in RadioButton config["border_width_checked"] = border_width } const code = [ `${variableName}_var = ctk.IntVar()`, ] const radios = this.getAttrValue("radios") // FIXME: Error: ValueError: ['value'] are not supported arguments. Look at the documentation for supported arguments. radios.inputs.forEach((radio_text, idx) => { const radioBtnVariable = `${variableName}_${idx}` code.push(`\n`) code.push(`${radioBtnVariable} = ctk.CTkRadioButton(master=${parent}, variable=${variableName}_var, text="${radio_text}", value=${idx})`) code.push(`${radioBtnVariable}.configure(${convertObjectToKeyValueString(config)})`) code.push(`${radioBtnVariable}.${this.getLayoutCode()}`) }) const defaultSelected = radios.selectedRadio if (defaultSelected !== -1){ code.push(`${variableName}_var.set(${defaultSelected})`) } return code } getToolbarAttrs(){ const toolBarAttrs = super.getToolbarAttrs() const attrs = this.state.attrs return ({ id: this.__id, widgetName: toolBarAttrs.widgetName, checkLabel: attrs.checkLabel, size: toolBarAttrs.size, ...attrs, }) } renderContent(){ const {inputs, selectedRadio} = this.getAttrValue("radios") return (
{ inputs.map((value, index) => { return (
{ selectedRadio === index &&
}
{value}
) }) }
) } }