├── .gitattributes ├── .gitignore ├── .scripts ├── after_install.sh ├── after_remove.sh ├── build_deb.sh ├── publish_github_release.sh └── publish_pypi_release.sh ├── .trigger.txt ├── COPYING.rst ├── LICENSES ├── GPLv2.md ├── MIT.md └── PyDM-BSD.md ├── MANIFEST.in ├── README.md ├── debian ├── control ├── rules └── source │ └── format ├── docs ├── Makefile └── source │ ├── 404.rst │ ├── CNAME │ ├── _static │ ├── demo.png │ ├── qtpyvcp_logo.png │ ├── qtpyvcp_logo_small.png │ ├── rules │ │ ├── homed_label_example.png │ │ ├── open_editor.gif │ │ └── rules_editor.png │ ├── vcp-chooser.png │ └── widgets │ │ ├── homing_menu.png │ │ └── recent_files_menu.png │ ├── _templates │ └── footer.html │ ├── acknowledgements.rst │ ├── actions │ ├── action_helpers.rst │ ├── coolant_actions.rst │ ├── index.rst │ ├── machine_actions.rst │ ├── program_actions.rst │ ├── spindle_actions.rst │ └── tool_actions.rst │ ├── application.rst │ ├── components │ ├── action_buttons.rst │ ├── action_sliders.rst │ ├── backplot.rst │ ├── containers.rst │ ├── images │ │ ├── Screenshot at 2020-03-14 07-24-48.png │ │ ├── backplot-01.png │ │ ├── backplot-02.png │ │ ├── backplot-03.png │ │ ├── backplot-04.png │ │ ├── backplot-05.png │ │ ├── backplot-06.png │ │ ├── backplot-07.png │ │ ├── backplot-08.png │ │ ├── backplot-09.png │ │ ├── backplot-10.png │ │ ├── containers-01.png │ │ ├── containers-02.png │ │ ├── containers-03.png │ │ ├── containers-04.png │ │ ├── mill-touch-01.png │ │ ├── stacked-01.png │ │ ├── stacked-02.png │ │ ├── stacked-03.png │ │ └── stacked-04.png │ ├── index.rst │ ├── stacked_widget.rst │ ├── status_items.rst │ └── subcallbutton.rst │ ├── conf.py │ ├── configuration │ ├── index.rst │ ├── ini_options.rst │ └── yml_config.rst │ ├── designer │ ├── plugins │ │ ├── clock.rst │ │ ├── index.rst │ │ ├── notifications.rst │ │ ├── position.rst │ │ ├── status.rst │ │ └── tool_table.rst │ └── widgets │ │ └── index.rst │ ├── development │ ├── contribution_guide.rst │ └── dev_environment.rst │ ├── hal.rst │ ├── index.rst │ ├── install │ ├── apt_install.rst │ ├── basic_usage.rst │ ├── bookworm.rst │ ├── build_debs.rst │ ├── bullseye.rst │ ├── dev_install.rst │ ├── index.rst │ ├── prerequisites.rst │ ├── pypi_install.rst │ └── python2.rst │ ├── plugins │ ├── base_plugins.rst │ ├── clock.rst │ ├── index.rst │ ├── notifications.rst │ ├── positions.rst │ ├── status.rst │ └── tool_table.rst │ ├── showcase │ ├── images │ │ ├── jcnc.png │ │ ├── monokrom.png │ │ └── probebasic-lathe.png │ ├── index.rst │ ├── lathe_vcps.rst │ ├── mill_vcps.rst │ └── plasma_vcps.rst │ ├── tools │ ├── editvcp.rst │ ├── index.rst │ └── qcompile.rst │ ├── tutorials │ ├── basic_vcp │ │ ├── basic_vcp_01.rst │ │ ├── basic_vcp_02.rst │ │ ├── basic_vcp_03.rst │ │ ├── basic_vcp_04.rst │ │ ├── basic_vcp_05.rst │ │ ├── basic_vcp_06.rst │ │ ├── basic_vcp_07.rst │ │ ├── basic_vcp_08.rst │ │ ├── images │ │ │ ├── vcp1-config-selector.png │ │ │ ├── vcp1-designer-01.png │ │ │ ├── vcp1-designer-02.png │ │ │ ├── vcp1-designer-03.png │ │ │ ├── vcp1-designer-04.png │ │ │ ├── vcp1-designer-05.png │ │ │ ├── vcp1-designer-06.png │ │ │ ├── vcp1-designer-07.png │ │ │ ├── vcp1-designer-08.png │ │ │ ├── vcp1-designer-09.png │ │ │ ├── vcp1-designer-10.png │ │ │ ├── vcp1-designer-11.png │ │ │ ├── vcp1-designer-12.png │ │ │ ├── vcp1-designer-13.png │ │ │ ├── vcp1-designer-14.png │ │ │ ├── vcp1-designer-15.png │ │ │ ├── vcp1-designer-16.png │ │ │ ├── vcp1-designer-17.png │ │ │ ├── vcp1-designer-18.png │ │ │ ├── vcp1-designer-19.png │ │ │ ├── vcp1-designer-20.png │ │ │ ├── vcp1-designer-21.png │ │ │ ├── vcp1-designer-22-1.png │ │ │ ├── vcp1-designer-22.png │ │ │ ├── vcp1-designer-23.png │ │ │ ├── vcp1-designer-24.png │ │ │ ├── vcp1-designer-25.png │ │ │ ├── vcp1-designer-26.png │ │ │ ├── vcp1-designer-27.png │ │ │ ├── vcp1-designer-28.png │ │ │ ├── vcp1-designer-29.png │ │ │ ├── vcp1-designer-30.png │ │ │ ├── vcp1-designer-31.png │ │ │ ├── vcp1-designer-32.png │ │ │ ├── vcp1-designer-33.png │ │ │ ├── vcp1-designer-34.png │ │ │ ├── vcp1-run-01.png │ │ │ ├── vcp1-run-02.png │ │ │ ├── vcp1-run-03.png │ │ │ ├── vcp1-run-04.png │ │ │ ├── vcp1-run-05.png │ │ │ ├── vcp1-run-06.png │ │ │ ├── vcp1-run-07.png │ │ │ ├── vcp1-run-08.png │ │ │ ├── vcp1-run-09.png │ │ │ ├── vcp1-run-10.png │ │ │ ├── vcp1-run-11.png │ │ │ ├── vcp1-run-12.png │ │ │ ├── vcp1-run-13.png │ │ │ └── vcp1-run-14.png │ │ └── index.rst │ ├── components │ │ ├── button_groups.rst │ │ ├── dialogs.rst │ │ ├── dro_tutorial.rst │ │ ├── images │ │ │ ├── btn-grp-designer-01.png │ │ │ ├── btn-grp-designer-02.png │ │ │ ├── btn-grp-designer-03.png │ │ │ ├── btn-grp-designer-04.png │ │ │ ├── btn-grp-designer-05.png │ │ │ ├── btn-grp-designer-06.png │ │ │ ├── btn-grp-designer-07.png │ │ │ ├── btn-grp-designer-08.png │ │ │ ├── btn-grp-designer-09.png │ │ │ ├── btn-grp-designer-10.png │ │ │ ├── btn-grp-designer-11.png │ │ │ ├── btn-grp-designer-12.png │ │ │ ├── btn-grp-designer-13.png │ │ │ ├── btn-grp-run-01.png │ │ │ ├── btn-grp-run-02.png │ │ │ ├── btn-grp-run-03.png │ │ │ ├── btn-grp-run-04.png │ │ │ ├── dro-example.png │ │ │ ├── dro-properties.png │ │ │ ├── dro-rule-01.png │ │ │ ├── dro-rule-02.png │ │ │ ├── edit-style-sheet.png │ │ │ ├── home-rule1.png │ │ │ ├── home-rule2-ss.png │ │ │ ├── home-rule2.png │ │ │ ├── led-rule.png │ │ │ ├── slider-rule-01.png │ │ │ ├── slider-style-01.png │ │ │ └── tab-bar-style.png │ │ ├── index.rst │ │ ├── machine_buttons.rst │ │ ├── mdi.rst │ │ ├── overrides.rst │ │ └── touch_screen.rst │ ├── first_vcp.rst │ ├── images │ │ ├── config-selector.png │ │ ├── cp1-designer-25.png │ │ ├── rules-04.png │ │ ├── vcp-chooser.png │ │ ├── vcp-template-01.png │ │ ├── vcp-template-02.png │ │ ├── vcp-template-03.png │ │ ├── vcp-template-04.png │ │ ├── vcp-template-05.png │ │ ├── vcp1-01.png │ │ ├── vcp1-02.png │ │ ├── vcp1-03.png │ │ ├── vcp1-04.png │ │ ├── vcp1-05.png │ │ ├── vcp1-06.png │ │ ├── vcp1run-01.png │ │ ├── vcp1run-02.png │ │ ├── vcp1run-03.png │ │ ├── vcp1run-04.png │ │ ├── vcp1run-05.png │ │ ├── vcp1run-06.png │ │ ├── vcp1run-07.png │ │ ├── vcp1run-08.png │ │ ├── vcp1run-09.png │ │ ├── vcp1run-10.png │ │ ├── vcp1run-11.png │ │ ├── vcp1run-12.png │ │ ├── vcp1run-13.png │ │ ├── vcp1run-14.png │ │ ├── vcp1run-15.png │ │ ├── vcp1run-16.png │ │ ├── vcp1run-17.png │ │ ├── vcp1run-18.png │ │ ├── vcp1run-19.png │ │ ├── vcpb-chooser-01.png │ │ ├── vcpb-designer-01.png │ │ └── vcpb-designer-02.png │ ├── index.rst │ ├── misc.rst │ ├── vcp_template.rst │ └── widget_rules.rst │ └── widgets │ ├── base_widget.rst │ ├── buttons │ └── index.rst │ ├── containers │ └── index.rst │ ├── dialogs │ └── index.rst │ ├── hal │ └── index.rst │ ├── images │ ├── rules-01.png │ ├── rules-02.png │ ├── rules-03.png │ ├── rules-04.png │ ├── rules-05.png │ ├── rules-06.png │ ├── rules-07.png │ ├── rules-08.png │ ├── rules-09.png │ ├── rules-10.png │ └── rules-11.png │ ├── index.rst │ ├── input │ └── index.rst │ ├── menus.rst │ └── rules.rst ├── linuxcnc ├── configs │ ├── sim.qtpyvcp.foam │ │ ├── cmd.hal │ │ ├── foam.ini │ │ └── sim.tbl │ ├── sim.qtpyvcp.machine_parts │ │ ├── README │ │ ├── custom_config.yml │ │ ├── hal-widgets.hal │ │ ├── hal-widgets.ini │ │ ├── hal-widgets.ui │ │ ├── hallib │ │ │ ├── core_sim_2.hal │ │ │ ├── core_sim_3.hal │ │ │ ├── core_sim_4.hal │ │ │ ├── core_sim_5.hal │ │ │ ├── gantrysim.hal │ │ │ ├── sim_spindle_encoder.hal │ │ │ ├── simulated_gantry_home.hal │ │ │ ├── simulated_home.hal │ │ │ ├── simulated_home_xyzab.hal │ │ │ ├── simulated_home_xz.hal │ │ │ ├── simulated_lathe.hal │ │ │ └── spindle_sim.hal │ │ ├── halshow.preferences │ │ ├── lathe.tbl │ │ ├── machine.yml │ │ ├── mini.ini │ │ ├── parts │ │ │ ├── Base.stl │ │ │ ├── Baxis.stl │ │ │ ├── Caxis.stl │ │ │ ├── Xaxis.stl │ │ │ ├── Yaxis.stl │ │ │ └── Zaxis.stl │ │ ├── probe-results.ngc │ │ ├── tool.tbl │ │ ├── xyz-metric.ini │ │ ├── xyz.ini │ │ ├── xyz3s.ini │ │ ├── xyzab-metric.ini │ │ ├── xyzab.ini │ │ ├── xyzb.ini │ │ ├── xyzbc-metric.ini │ │ ├── xyzcw.ini │ │ ├── xyzy-gantry.ini │ │ └── xz-lathe-inch.ini │ └── sim.qtpyvcp │ │ ├── README │ │ ├── custom_config.yml │ │ ├── hal-widgets.hal │ │ ├── hal-widgets.ini │ │ ├── hal-widgets.ui │ │ ├── hallib │ │ ├── core_sim_2.hal │ │ ├── core_sim_3.hal │ │ ├── core_sim_4.hal │ │ ├── core_sim_5.hal │ │ ├── gantrysim.hal │ │ ├── sim_spindle_encoder.hal │ │ ├── simulated_gantry_home.hal │ │ ├── simulated_home.hal │ │ ├── simulated_home_xyzab.hal │ │ ├── simulated_home_xz.hal │ │ ├── simulated_lathe.hal │ │ └── spindle_sim.hal │ │ ├── lathe.tbl │ │ ├── mini.ini │ │ ├── probe-results.ngc │ │ ├── tool.tbl │ │ ├── xyz-metric.ini │ │ ├── xyz.ini │ │ ├── xyz3s.ini │ │ ├── xyzab-metric.ini │ │ ├── xyzab.ini │ │ ├── xyzb.ini │ │ ├── xyzcw.ini │ │ ├── xyzy-gantry.ini │ │ └── xz-lathe-inch.ini └── nc_files │ └── qtpyvcp │ ├── examples │ ├── bezel_fast.ngc │ ├── hazzy.ngc │ ├── impeller.ngc │ └── polar spiral.ngc │ ├── foam │ └── foam.ngc │ ├── qtpyvcp.ngc │ └── subroutines │ ├── change.ngc │ ├── clamptool.ngc │ ├── extendatc.ngc │ ├── go_to_position.ngc │ ├── increment.ngc │ ├── m10.ngc │ ├── m11.ngc │ ├── m12.ngc │ ├── m13.ngc │ ├── m21.ngc │ ├── m22.ngc │ ├── m23.ngc │ ├── m24.ngc │ ├── m25.ngc │ ├── m26.ngc │ ├── macro_Instructions.txt │ ├── on_abort.ngc │ ├── probe_back_left_inside_corner.ngc │ ├── probe_back_left_top_corner.ngc │ ├── probe_back_right_inside_corner.ngc │ ├── probe_back_right_top_corner.ngc │ ├── probe_back_top_side.ngc │ ├── probe_cal_round_boss.ngc │ ├── probe_cal_round_pocket.ngc │ ├── probe_cal_square_boss.ngc │ ├── probe_cal_square_pocket.ngc │ ├── probe_corner_x_minus_edge_angle.ngc │ ├── probe_corner_x_plus_edge_angle.ngc │ ├── probe_corner_y_minus_edge_angle.ngc │ ├── probe_corner_y_plus_edge_angle.ngc │ ├── probe_front_left_inside_corner.ngc │ ├── probe_front_left_top_corner.ngc │ ├── probe_front_right_inside_corner.ngc │ ├── probe_front_right_top_corner.ngc │ ├── probe_front_top_side.ngc │ ├── probe_left_top_side.ngc │ ├── probe_rect_boss.ngc │ ├── probe_rect_pocket.ngc │ ├── probe_ridge_x.ngc │ ├── probe_ridge_y.ngc │ ├── probe_right_top_side.ngc │ ├── probe_round_boss.ngc │ ├── probe_round_pocket.ngc │ ├── probe_top_back_edge_angle.ngc │ ├── probe_top_front_edge_angle.ngc │ ├── probe_top_left_edge_angle.ngc │ ├── probe_top_right_edge_angle.ngc │ ├── probe_valley_x.ngc │ ├── probe_valley_y.ngc │ ├── probe_x_minus.ngc │ ├── probe_x_minus_wco.ngc │ ├── probe_x_plus.ngc │ ├── probe_x_plus_wco.ngc │ ├── probe_y_minus.ngc │ ├── probe_y_minus_wco.ngc │ ├── probe_y_plus.ngc │ ├── probe_y_plus_wco.ngc │ ├── probe_z_minus.ngc │ ├── probe_z_minus_sub.ngc │ ├── probe_z_minus_wco.ngc │ ├── reset_all_data.ngc │ ├── retractatc.ngc │ ├── toolchange.ngc │ ├── unclamptool.ngc │ ├── x_data_reset.ngc │ └── y_data_reset.ngc ├── pyproject.toml ├── pyqt5designer ├── Qt5.15.2-64bit │ ├── python3.7 │ │ ├── README.md │ │ ├── install.sh │ │ └── libpyqt5.so │ ├── python3.8 │ │ ├── README.md │ │ ├── install.sh │ │ └── libpyqt5.so │ └── python3.9 │ │ ├── README.md │ │ ├── install.sh │ │ └── libpyqt5.so ├── Qt5.15.4-64bit │ └── python3.10 │ │ ├── README.md │ │ ├── install.sh │ │ └── libpyqt5.so ├── Qt5.7.1-64bit │ ├── README.md │ ├── install.sh │ ├── libpyqt5_py2.so │ └── libpyqt5_py3.so └── building_libpyqt5.md ├── requirements.txt ├── scripts └── .xsessionrc └── src ├── examples ├── README.md ├── __init__.py ├── actions │ ├── README.md │ ├── __init__.py │ ├── config.yml │ └── ui │ │ ├── mainwindow.ui │ │ └── style.qss ├── brender │ ├── README.md │ ├── __init__.py │ ├── brender.py │ ├── brender.yml │ ├── resources │ │ ├── brender.qrc │ │ ├── brender.qss │ │ └── images │ │ │ ├── brushed_metal.png │ │ │ ├── button.png │ │ │ ├── checkbox_checked.png │ │ │ ├── checkbox_checked_hover.png │ │ │ ├── checkbox_checked_pressed.png │ │ │ ├── checkbox_unchecked.png │ │ │ ├── checkbox_unchecked_hover.png │ │ │ ├── checkbox_unchecked_pressed.png │ │ │ ├── dark_background.png │ │ │ ├── down_arrow.png │ │ │ ├── down_arrow_disabled.png │ │ │ ├── frame.png │ │ │ ├── pagefold.png │ │ │ ├── pp_border.png │ │ │ ├── probe.png │ │ │ ├── pushbutton.png │ │ │ ├── pushbutton_hover.png │ │ │ ├── pushbutton_pressed.png │ │ │ ├── radiobutton_checked.png │ │ │ ├── radiobutton_checked_hover.png │ │ │ ├── radiobutton_checked_pressed.png │ │ │ ├── radiobutton_unchecked.png │ │ │ ├── radiobutton_unchecked_hover.png │ │ │ ├── radiobutton_unchecked_pressed.png │ │ │ ├── sizegrip.png │ │ │ ├── spindown.png │ │ │ ├── spindown_hover.png │ │ │ ├── spindown_off.png │ │ │ ├── spindown_pressed.png │ │ │ ├── spinup.png │ │ │ ├── spinup_hover.png │ │ │ ├── spinup_off.png │ │ │ ├── spinup_pressed.png │ │ │ ├── up_arrow.png │ │ │ └── up_arrow_disabled.png │ └── ui │ │ └── brender.ui ├── file-chooser.ui ├── filemanager.ui ├── icons │ ├── file-edit.png │ ├── file-edit.svg │ ├── file-new.svg │ ├── file-open.svg │ ├── folder-new.svg │ └── trash.svg ├── mini │ ├── __init__.py │ ├── mini.py │ ├── mini.qss │ ├── mini.ui │ └── mini.yml ├── multi-spindle.ui ├── python_only_vcp.py ├── status-labels.ui └── tool-table.ui ├── qtpyvcp ├── __init__.py ├── _version.py ├── actions │ ├── __init__.py │ ├── base_actions.py │ ├── coolant_actions.py │ ├── machine_actions.py │ ├── power_actions.py │ ├── program_actions.py │ ├── spindle_actions.py │ └── tool_actions.py ├── app │ ├── __init__.py │ ├── application.py │ ├── enums.py │ ├── launcher.py │ └── runtime_config.py ├── hal │ ├── __init__.py │ └── hal_qlib.py ├── lib │ ├── __init__.py │ ├── colored_formatter.py │ ├── db_tool │ │ ├── __init__.py │ │ ├── base.py │ │ ├── inserts.py │ │ ├── queries.py │ │ └── tool_table.py │ ├── dbus_notification.py │ ├── decorators.py │ ├── logger.py │ ├── native_notification.py │ └── types.py ├── ops │ ├── __init__.py │ ├── base_op.py │ ├── drill_ops.py │ ├── face_ops.py │ └── gcode_file.py ├── plugins │ ├── __init__.py │ ├── base_plugins.py │ ├── clock.py │ ├── db_tool_table.py │ ├── exported_hal.py │ ├── file_locations.py │ ├── gcode_properties.py │ ├── notifications.py │ ├── offset_table.py │ ├── persistent_data_manager.py │ ├── plasma_processes.py │ ├── positions.py │ ├── settings.py │ ├── status.py │ ├── tool_table.py │ ├── user_managment.py │ └── virtual_input_manager.py ├── tools │ ├── __init__.py │ ├── editvcp.py │ ├── plasma_gcode_preprocessor.py │ ├── plasma_tooldbpipe.py │ ├── qcompile.py │ ├── tbl2sql.py │ └── tool_db_backend.py ├── utilities │ ├── __init__.py │ ├── config_loader.py │ ├── encode_utils.py │ ├── info.py │ ├── logger.py │ ├── misc.py │ ├── obj_status.py │ ├── opt_parser.py │ ├── settings.py │ └── yaml_filters.py ├── vcp_chooser │ ├── __init__.py │ ├── vcp_chooser.py │ └── vcp_chooser.ui ├── widgets │ ├── __init__.py │ ├── base_widgets │ │ ├── __init__.py │ │ ├── bar_indicator.py │ │ ├── base_widget.py │ │ ├── dro_base_widget.py │ │ ├── eval_line_edit.py │ │ └── led_widget.py │ ├── button_widgets │ │ ├── __init__.py │ │ ├── action_button.py │ │ ├── action_checkbox.py │ │ ├── action_spinbox.py │ │ ├── designer_plugins.py │ │ ├── dialog_button.py │ │ ├── led_button.py │ │ ├── mdi_button.py │ │ └── subcall_button.py │ ├── containers │ │ ├── __init__.py │ │ ├── designer_plugins.py │ │ ├── frame.py │ │ ├── stack.py │ │ └── widget.py │ ├── db_widgets │ │ ├── __init__.py │ │ ├── designer_plugins.py │ │ └── tool_model.py │ ├── default_stylesheet.qss │ ├── dialogs │ │ ├── __init__.py │ │ ├── about_dialog.py │ │ ├── base_dialog.py │ │ ├── error_dialog.py │ │ ├── error_dialog.ui │ │ ├── find_replace_dialog.py │ │ ├── offsets_dialog.py │ │ ├── open_file_dialog.py │ │ ├── probesim_dialog.py │ │ ├── shutdown_dialog.py │ │ ├── shutdown_dialog.ui │ │ ├── tool_edit_dialog.py │ │ ├── tool_edit_lathe_dialog.ui │ │ ├── tool_edit_mill_dialog.ui │ │ ├── toolchange_dialog.py │ │ ├── toolchange_dialog.ui │ │ └── toolchange_dialog_pb.ui │ ├── display_widgets │ │ ├── __init__.py │ │ ├── active_gcodes_table.py │ │ ├── bar_indicator.py │ │ ├── camera │ │ │ ├── __init__.py │ │ │ ├── camera.py │ │ │ ├── camera.ui │ │ │ ├── settings.py │ │ │ └── settings.ui │ │ ├── designer_plugins.py │ │ ├── dro_label.py │ │ ├── dro_widget.py │ │ ├── gcode_properties.py │ │ ├── gcode_properties.ui │ │ ├── load_meter.py │ │ ├── notification_widget.py │ │ ├── status_label.py │ │ ├── status_led.py │ │ └── vtk_backplot │ │ │ ├── __init__.py │ │ │ ├── axes_actor.py │ │ │ ├── base_backplot.py │ │ │ ├── base_canon.py │ │ │ ├── grid_actor.py │ │ │ ├── linuxcnc_datasource.py │ │ │ ├── machine_actor.py │ │ │ ├── models │ │ │ ├── GDZ80X73-1.stl │ │ │ ├── jet_tracking_crosshair.stl │ │ │ ├── laser.stl │ │ │ ├── spindle.stl │ │ │ ├── spindle_elte.stl │ │ │ └── tool.stl │ │ │ ├── path_actor.py │ │ │ ├── path_cache_actor.py │ │ │ ├── points_surface.py │ │ │ ├── program_bounds_actor.py │ │ │ ├── spindle_actor.py │ │ │ ├── table_actor.py │ │ │ ├── tool_actor.py │ │ │ ├── vtk_backplot.py │ │ │ └── vtk_canon.py │ ├── external_widgets.py │ ├── form_widgets │ │ ├── __init__.py │ │ ├── designer_plugins.py │ │ ├── init_keypad.ui │ │ ├── main_window.py │ │ └── probe_widget │ │ │ ├── __init__.py │ │ │ ├── probe.py │ │ │ └── probe.ui │ ├── hal_widgets │ │ ├── __init__.py │ │ ├── designer_plugins.py │ │ ├── hal_bar_indicator.py │ │ ├── hal_button.py │ │ ├── hal_checkbox.py │ │ ├── hal_double_spinbox.py │ │ ├── hal_groupbox.py │ │ ├── hal_label.py │ │ ├── hal_lcd.py │ │ ├── hal_led.py │ │ ├── hal_led_button.py │ │ ├── hal_plot.py │ │ ├── hal_slider.py │ │ └── hal_spinbox.py │ ├── input_widgets │ │ ├── __init__.py │ │ ├── action_combobox.py │ │ ├── action_dial.py │ │ ├── action_slider.py │ │ ├── designer_plugins.py │ │ ├── dro_line_edit.py │ │ ├── file_system.py │ │ ├── gcode_editor.py │ │ ├── gcode_text_edit.py │ │ ├── jog_increment.py │ │ ├── line_edit.py │ │ ├── mdientry_widget.py │ │ ├── mdihistory_widget.py │ │ ├── offset_table.py │ │ ├── probesim_widget.py │ │ ├── recent_file_combobox.py │ │ ├── setting_slider.py │ │ └── tool_table.py │ ├── menus │ │ ├── __init__.py │ │ └── homing_menu.py │ ├── qtdesigner │ │ ├── __init__.py │ │ ├── channel_info_dialog.ui │ │ ├── designer_hooks.py │ │ ├── designer_plugin.py │ │ ├── dro_editor.py │ │ ├── dro_editor.ui │ │ ├── plugin_extension.py │ │ ├── rules_editor.py │ │ ├── settings_selector.py │ │ ├── settings_selector.ui │ │ └── stylesheet.py │ ├── qtdesigner_plugin.py │ ├── recent_files_menu.py │ └── virtual_input │ │ ├── __init__.py │ │ ├── images │ │ ├── backspace-white-24dp.svg │ │ ├── keyboard_arrow_down-white-24dp.svg │ │ ├── keyboard_arrow_left-white-24dp.svg │ │ ├── keyboard_arrow_right-white-24dp.svg │ │ └── keyboard_arrow_up-white-24dp.svg │ │ ├── keyboard.ui │ │ ├── numpad.ui │ │ └── virtual_input.py └── yaml_lib │ ├── default_config.yml │ ├── default_menubar.yml │ └── gcode_syntax.yml ├── versioneer.py └── video_tests ├── __init__.py ├── opengl_test ├── __init__.py ├── config.yml ├── mainwindow.py ├── mainwindow.ui └── style.qss ├── qtpyvcp_test ├── __init__.py ├── config.yml ├── mainwindow.py ├── mainwindow.ui └── style.qss └── vtk_test ├── __init__.py ├── config.yml ├── mainwindow.py ├── mainwindow.ui └── style.qss /.gitattributes: -------------------------------------------------------------------------------- 1 | qtpyvcp/_version.py export-subst 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /site 2 | /build 3 | /dist 4 | /venv 5 | *.egg-info 6 | *.pyc 7 | *.qmlc 8 | *.pdf 9 | *.log 10 | *.var 11 | *.var.bak 12 | *.pref 13 | *.halscope 14 | .tmp* 15 | .idea/ 16 | *~ 17 | *# 18 | *.temp 19 | *.bak 20 | 21 | # Compiled Qt resource and ui files 22 | *_rc.py 23 | *_ui.py 24 | 25 | # sphinx 26 | /docs/build 27 | 28 | # debian packages 29 | *.deb 30 | 31 | # update INI backups 32 | linuxcnc/configs/**/*.old 33 | 34 | # persistent data files 35 | linuxcnc/configs/**/.*.json 36 | linuxcnc/configs/**/.*.pickle 37 | qtpyvcp/.settings/ 38 | qtpyvcp/.pydevproject 39 | qtpyvcp/.project 40 | /.project 41 | /.pydevproject 42 | 43 | .settings/ 44 | 45 | .vscode/ 46 | 47 | docs/source/_build/ 48 | 49 | .pybuild/ 50 | 51 | .debian/changelog 52 | DEBIAN/ 53 | tmp/ 54 | 55 | poetry.lock 56 | -------------------------------------------------------------------------------- /.scripts/after_install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # install python deps 4 | pip install docopt qtpy pyudev psutil HiYaPyCo 5 | 6 | libpath="/usr/lib/x86_64-linux-gnu/qt5/plugins/designer" 7 | oldlib=$libpath/"libpyqt5.so" 8 | if [ -f "$oldlib" ] 9 | then 10 | echo "renaming existing libpyqt5.so to libpyqt5.so.old" 11 | mv "$oldlib" "$oldlib.old" 12 | fi 13 | -------------------------------------------------------------------------------- /.scripts/after_remove.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # unrename the old libpyqt5.so file 4 | libpath="/usr/lib/x86_64-linux-gnu/qt5/plugins/designer" 5 | oldlib="${libpath}/libpyqt5.so.old" 6 | if [ -f "$oldlib" ] 7 | then 8 | echo "renaming libpyqt5.so.old to libpyqt5.so" 9 | mv "$oldlib" "${libpath}/libpyqt5.so" 10 | fi 11 | -------------------------------------------------------------------------------- /.scripts/build_deb.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo 'Installing fpm gem...' 4 | gem install fpm 5 | 6 | echo 'Creating debs dir' 7 | mkdir debs 8 | 9 | export DEB_BUILD=true 10 | 11 | echo 'Building debian package in debs/...' 12 | fpm -t deb \ 13 | -p debs/ \ 14 | -s python \ 15 | -f \ 16 | --license "GPLv2" \ 17 | --vendor "KCJ Engineering" \ 18 | --maintainer "'Kurt Jacobson '" \ 19 | --url "https://www.qtpyvcp.com" \ 20 | --description "QtPyVCP - Qt and Python based Virtual Control Panel framework for LinuxCNC." \ 21 | -d python-pip \ 22 | -d python-pyqt5 \ 23 | -d python-dbus.mainloop.pyqt5 \ 24 | -d python-pyqt5.qtopengl \ 25 | -d python-pyqt5.qsci \ 26 | -d python-pyqt5.qtmultimedia \ 27 | -d gstreamer1.0-plugins-bad \ 28 | -d libqt5multimedia5-plugins \ 29 | -d pyqt5-dev-tools \ 30 | -d qttools5-dev-tools \ 31 | --after-install .travis/after_install.sh \ 32 | --after-remove .travis/after_remove.sh \ 33 | --no-auto-depends \ 34 | --verbose \ 35 | setup.py 36 | 37 | unset DEB_BUILD 38 | -------------------------------------------------------------------------------- /.scripts/publish_pypi_release.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | PYPI_PASS=$1 4 | 5 | echo 'Installing twine... ' 6 | pip install twine 7 | 8 | echo -n 'Using setuptools version: ' 9 | python -c "import setuptools; print(setuptools.__version__)" 10 | 11 | echo 'Uploading files to PyPi...' 12 | twine upload \ 13 | --username kcjengr \ 14 | --password $PYPI_PASS \ 15 | 'dist/qtpyvcp*.tar.gz' 16 | -------------------------------------------------------------------------------- /.trigger.txt: -------------------------------------------------------------------------------- 1 | change line below to trigger a build out side of the buildbot UI 2 | --- 4:15am --- 3 | -------------------------------------------------------------------------------- /COPYING.rst: -------------------------------------------------------------------------------- 1 | Terms and Conditions 2 | ======================================================================== 3 | 4 | The QtPyVCP project contains code with separate copyright notices 5 | and license terms. As a whole QtPyVCP may be redistributed and/or 6 | modified in accordance with the GNU General Public License as published 7 | by the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. Individual files may be licensed 9 | under less strict terms and conditions and can be distributed subject 10 | to the terms and conditions set forth in the file header. 11 | 12 | All files distributed as part of QtPyVCP are assumed to be covered by 13 | the GPLv2 License unless stated otherwise in the file header. 14 | 15 | Each license is included in its entirety in the LICENCES directory. 16 | 17 | ------------------------------------------------------------------------ 18 | Components provided under additional licenses 19 | ------------------------------------------------------------------------ 20 | 21 | Some self-contained python modules are covered by the MIT License (to 22 | make reuse in other non GPL projects easier). 23 | 24 | Code adapted from PyDM is covered by the BSD 3-Clause License. 25 | 26 | Images and icons are covered by the CC Attribution-ShareAlike License. 27 | 28 | 29 | Links 30 | ----- 31 | PyDM (https://github.com/slaclab/pydm) 32 | -------------------------------------------------------------------------------- /LICENSES/MIT.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 Kurt Jacobson 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | recursive-include src/examples *.yml *.yaml *.ui *.qss *.qrc *.qml *.png 2 | recursive-include src/qtpyvcp *.yml *.yaml *.ui *.qss *.qrc *.qml *.png 3 | recursive-include src/video_tests 4 | recursive-include linuxcnc *.* 5 | 6 | include versioneer.py 7 | include qtpyvcp/_version.py 8 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: qtpyvcp 2 | Section: cnc 3 | Priority: optional 4 | Maintainer: Kcjengr 5 | Build-Depends: debhelper-compat (= 13), dh-python, python3-setuptools, python3-yaml, python3-pyqt5, python3-dbus.mainloop.pyqt5, python3-pyqt5.qtopengl, python3-pyqt5.qsci, python3-pyqt5.qtmultimedia, python3-pyqt5.qtquick, qml-module-qtquick-controls, gstreamer1.0-plugins-bad, libqt5multimedia5-plugins, pyqt5-dev-tools, python3-dev, python3-six, python3-docopt, python3-qtpy, python3-pyudev, python3-psutil, python3-markupsafe, python3-opengl, python3-vtk9, python3-pyqtgraph, python3-simpleeval, python3-jinja2, python3-deepdiff, python3-sqlalchemy, python3-serial, python3-distro, qttools5-dev-tools 6 | Standards-Version: 4.5.1 7 | Homepage: https://qtpyvcp.com 8 | Vcs-Git: https://github.com/kcjengr/qtpyvcp.git 9 | X-Python3-Version: >= 3.7 10 | #Testsuite: autopkgtest-pkg-python 11 | Rules-Requires-Root: no 12 | 13 | Package: python3-qtpyvcp 14 | Architecture: amd64 arm64 15 | Description: QtPyVCP is a Qt and Python based framework for building virtual control panels for the LinuxCNC machine control. 16 | Depends: ${python3:Depends}, ${misc:Depends}, python3-setuptools, python3-hiyapyco, python3-yaml, python3-pyqt5, python3-dbus.mainloop.pyqt5, python3-pyqt5.qtopengl, python3-pyqt5.qsci, python3-serial, python3-docopt, python3-qtpy, python3-psutil, python3-pyudev, python3-vtk9, python3-deepdiff, python3-sqlalchemy, python3-pyqtgraph, python3-simpleeval, python3-distro, qttools5-dev-tools 17 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | export PYTHONPATH=$PYTHONPATH:debian/python3-qtpyvcp/usr/lib/python3.11/dist-packages 4 | 5 | %: 6 | dh $@ --with python3 --buildsystem=pybuild 7 | 8 | override_dh_auto_test: 9 | 10 | override_dh_install: 11 | dh_install 12 | debian/python3-qtpyvcp/usr/bin/qcompile debian/python3-qtpyvcp 13 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (native) 2 | -------------------------------------------------------------------------------- /docs/source/404.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | =========================== 4 | 404 Error - Page Not Found 5 | =========================== 6 | 7 | The requested page has either moved, or does not exist. 8 | Please try using the links from the sidebar to find what you are looking for. 9 | 10 | If you think this page *should* exit, please contact one of the site administrators or open an issue on GitHub. 11 | -------------------------------------------------------------------------------- /docs/source/CNAME: -------------------------------------------------------------------------------- 1 | www.qtpyvcp.com 2 | -------------------------------------------------------------------------------- /docs/source/_static/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/_static/demo.png -------------------------------------------------------------------------------- /docs/source/_static/qtpyvcp_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/_static/qtpyvcp_logo.png -------------------------------------------------------------------------------- /docs/source/_static/qtpyvcp_logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/_static/qtpyvcp_logo_small.png -------------------------------------------------------------------------------- /docs/source/_static/rules/homed_label_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/_static/rules/homed_label_example.png -------------------------------------------------------------------------------- /docs/source/_static/rules/open_editor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/_static/rules/open_editor.gif -------------------------------------------------------------------------------- /docs/source/_static/rules/rules_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/_static/rules/rules_editor.png -------------------------------------------------------------------------------- /docs/source/_static/vcp-chooser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/_static/vcp-chooser.png -------------------------------------------------------------------------------- /docs/source/_static/widgets/homing_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/_static/widgets/homing_menu.png -------------------------------------------------------------------------------- /docs/source/_static/widgets/recent_files_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/_static/widgets/recent_files_menu.png -------------------------------------------------------------------------------- /docs/source/acknowledgements.rst: -------------------------------------------------------------------------------- 1 | Acknowledgements 2 | ================ 3 | 4 | The QtPyVCP team would like to acknowledge the following projects 5 | which have been particularly valuable as sources of inspiration and 6 | code snippets. 7 | 8 | PyDM 9 | ---- 10 | 11 | | **Project URL:** https://github.com/slaclab/pydm 12 | 13 | 14 | QtVCP 15 | ----- 16 | 17 | | **Project URL:** Included with LinuxCNC. 18 | 19 | -------------------------------------------------------------------------------- /docs/source/actions/action_helpers.rst: -------------------------------------------------------------------------------- 1 | ============== 2 | Action Helpers 3 | ============== 4 | 5 | .. automodule:: qtpyvcp.actions 6 | :members: 7 | 8 | .. automodule:: qtpyvcp.actions.base_actions 9 | :members: 10 | -------------------------------------------------------------------------------- /docs/source/actions/coolant_actions.rst: -------------------------------------------------------------------------------- 1 | =============== 2 | Coolant Actions 3 | =============== 4 | 5 | .. automodule:: qtpyvcp.actions.coolant_actions 6 | :members: 7 | -------------------------------------------------------------------------------- /docs/source/actions/index.rst: -------------------------------------------------------------------------------- 1 | ======= 2 | Actions 3 | ======= 4 | 5 | .. toctree:: 6 | :maxdepth: 1 7 | 8 | action_helpers 9 | machine_actions 10 | program_actions 11 | spindle_actions 12 | coolant_actions 13 | tool_actions 14 | 15 | -------------------------------------------------------------------------------- /docs/source/actions/machine_actions.rst: -------------------------------------------------------------------------------- 1 | =============== 2 | Machine Actions 3 | =============== 4 | 5 | .. automodule:: qtpyvcp.actions.machine_actions 6 | :members: 7 | -------------------------------------------------------------------------------- /docs/source/actions/program_actions.rst: -------------------------------------------------------------------------------- 1 | =============== 2 | Program Actions 3 | =============== 4 | 5 | .. automodule:: qtpyvcp.actions.program_actions 6 | :members: 7 | -------------------------------------------------------------------------------- /docs/source/actions/spindle_actions.rst: -------------------------------------------------------------------------------- 1 | =============== 2 | Spindle Actions 3 | =============== 4 | 5 | .. automodule:: qtpyvcp.actions.spindle_actions 6 | :members: 7 | -------------------------------------------------------------------------------- /docs/source/actions/tool_actions.rst: -------------------------------------------------------------------------------- 1 | ============ 2 | Tool Actions 3 | ============ 4 | 5 | .. automodule:: qtpyvcp.actions.tool_actions 6 | :members: 7 | -------------------------------------------------------------------------------- /docs/source/application.rst: -------------------------------------------------------------------------------- 1 | =========== 2 | Application 3 | =========== 4 | 5 | .. automodule:: qtpyvcp.app.application 6 | :members: 7 | -------------------------------------------------------------------------------- /docs/source/components/action_sliders.rst: -------------------------------------------------------------------------------- 1 | ============== 2 | Action Sliders 3 | ============== 4 | 5 | **Feed Override** `actionNames` for `ActionSliders` 6 | :: 7 | 8 | machine.feed-override.set 9 | 10 | **Maximum Velocity Override** `actionNames` for `ActionSliders` 11 | :: 12 | 13 | machine.max-velocity.set 14 | -------------------------------------------------------------------------------- /docs/source/components/images/Screenshot at 2020-03-14 07-24-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/Screenshot at 2020-03-14 07-24-48.png -------------------------------------------------------------------------------- /docs/source/components/images/backplot-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/backplot-01.png -------------------------------------------------------------------------------- /docs/source/components/images/backplot-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/backplot-02.png -------------------------------------------------------------------------------- /docs/source/components/images/backplot-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/backplot-03.png -------------------------------------------------------------------------------- /docs/source/components/images/backplot-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/backplot-04.png -------------------------------------------------------------------------------- /docs/source/components/images/backplot-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/backplot-05.png -------------------------------------------------------------------------------- /docs/source/components/images/backplot-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/backplot-06.png -------------------------------------------------------------------------------- /docs/source/components/images/backplot-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/backplot-07.png -------------------------------------------------------------------------------- /docs/source/components/images/backplot-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/backplot-08.png -------------------------------------------------------------------------------- /docs/source/components/images/backplot-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/backplot-09.png -------------------------------------------------------------------------------- /docs/source/components/images/backplot-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/backplot-10.png -------------------------------------------------------------------------------- /docs/source/components/images/containers-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/containers-01.png -------------------------------------------------------------------------------- /docs/source/components/images/containers-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/containers-02.png -------------------------------------------------------------------------------- /docs/source/components/images/containers-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/containers-03.png -------------------------------------------------------------------------------- /docs/source/components/images/containers-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/containers-04.png -------------------------------------------------------------------------------- /docs/source/components/images/mill-touch-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/mill-touch-01.png -------------------------------------------------------------------------------- /docs/source/components/images/stacked-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/stacked-01.png -------------------------------------------------------------------------------- /docs/source/components/images/stacked-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/stacked-02.png -------------------------------------------------------------------------------- /docs/source/components/images/stacked-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/stacked-03.png -------------------------------------------------------------------------------- /docs/source/components/images/stacked-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcjengr/qtpyvcp/abbade6cd796e90b2263df3ffab9066f7f9aec3f/docs/source/components/images/stacked-04.png -------------------------------------------------------------------------------- /docs/source/components/index.rst: -------------------------------------------------------------------------------- 1 | ========== 2 | Components 3 | ========== 4 | 5 | QtPyVCP components available in Qt Designer 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | action_buttons 11 | action_sliders 12 | backplot 13 | containers 14 | stacked_widget 15 | status_items 16 | subcallbutton 17 | 18 | -------------------------------------------------------------------------------- /docs/source/components/subcallbutton.rst: -------------------------------------------------------------------------------- 1 | =============== 2 | Sub Call Button 3 | =============== 4 | 5 | The `SubCallButton` is used to call subroutines similar to NGCGUI subroutines. 6 | The file format is almost the same. 7 | 8 | The way you get information into the subroutine is by having widgets with the 9 | same name as the variable or using a default value for the variable. The file 10 | must be executable and have the same name as the sub/endsub. 11 | 12 | You can use a line edit, a spin box or a double spin box to set the values for 13 | the variable. 14 | 15 | For example if you had a spin box on the tool change page called `tool_number` 16 | you could have one button to change the tool by getting the value from the 17 | `tool_number` spin box. 18 | 19 | `tool_change.ngc` 20 | :: 21 | 22 | ; tool change subroutine 23 | o sub 24 | 25 | # = #1 (=1); set the default to 1 26 | 27 | T# M6 G43 28 | 29 | o endsub 30 | 31 | The subroutine must be on the path specificed in the ini file and must be 32 | executable. Put the file name including the .ngc in the `FileName` variable of 33 | the `SubCallButton`. 34 | -------------------------------------------------------------------------------- /docs/source/configuration/index.rst: -------------------------------------------------------------------------------- 1 | ============= 2 | Configuration 3 | ============= 4 | 5 | Configuration for QtPyVCP and VCP's 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | :titlesonly: 10 | 11 | ini_options 12 | yml_config 13 | 14 | -------------------------------------------------------------------------------- /docs/source/configuration/yml_config.rst: -------------------------------------------------------------------------------- 1 | ================= 2 | YAML Config Files 3 | ================= 4 | 5 | At the heart of every QtPyVCP based VCP is a YAML configuration 6 | file. This file is probably more important than any other, since 7 | it defines how the .ui, .py and .qss files come together to make 8 | a complete VCP. 9 | 10 | Multiple configuration files are used from various levels, and 11 | when combined and merged determine the final configuration for 12 | the VCP. 13 | 14 | At the lowest level is the ``default_config.yml`` file. This file 15 | is not user editable and is always loaded. It defines the basic 16 | things that must exist for the most basic VCP to function. 17 | 18 | At the next level is the VCP specific configuration file. This is 19 | where individual VCPs are defined, and is generally only edited by 20 | a VCP developers. It includes basic info such as the VCP name and author, 21 | as well as what .ui, .py and .qss files to use when loading the VCP. 22 | It is also where VCP specific menus, dialogs etc. are defined. 23 | 24 | At the highest level is the machine specific configuration file. This 25 | file is usually located in the config dir along with the INI file. It 26 | is not required but can be used to tweak configurations settings for a 27 | particular machine. 28 | 29 | More information about YAML files can be found at 30 | `Wikipedia `_ 31 | -------------------------------------------------------------------------------- /docs/source/designer/plugins/clock.rst: -------------------------------------------------------------------------------- 1 | ============ 2 | Clock plugin 3 | ============ 4 | 5 | This plugin provides the Date and Time 6 | 7 | This plugin is not loaded by default, so to use it you will first 8 | need to add it to your VCPs YAML config file. 9 | 10 | YAML configuration: 11 | 12 | .. code-block:: yaml 13 | 14 | data_plugins: 15 | clock: 16 | provider: qtpyvcp.plugins.clock:Clock 17 | 18 | ------------------------ 19 | *Available datachannels* 20 | ------------------------ 21 | 22 | * :ref:`time