diff options
author | Chris Morley <chrisinnanaimo@hotmail.com> | 2013-09-05 21:00:25 -0700 |
---|---|---|
committer | Chris Morley <chrisinnanaimo@hotmail.com> | 2013-09-05 21:00:25 -0700 |
commit | 7b327b9d749913acfbf982cb72d9bfdd9af0f6fb (patch) | |
tree | 9686aed42ca235d4d41959bea86569462da42a59 | |
parent | 6f4b1dfb54ccb9f073ada7b88d4a836d69b5f03b (diff) | |
download | linuxcnc-7b327b9d749913acfbf982cb72d9bfdd9af0f6fb.tar.gz linuxcnc-7b327b9d749913acfbf982cb72d9bfdd9af0f6fb.zip |
gscreen config -add skin folder and files, remove skin files from sample configs
We now have 'built-in' skins so we don't want them in sample configs folder.
I have tempararily left Gmoccapy in the sample configs so as to let Norbert prepare for the change.
88 files changed, 9815 insertions, 322 deletions
diff --git a/configs/sim/gscreen_custom/gscreen_custom.ini b/configs/sim/gscreen_custom/gscreen_custom.ini deleted file mode 100644 index ac5a60c16..000000000 --- a/configs/sim/gscreen_custom/gscreen_custom.ini +++ /dev/null @@ -1,322 +0,0 @@ -# EMC controller parameters for a simulated machine. - -# General note: Comments can either be preceded with a # or ; - either is -# acceptable, although # is in keeping with most linux config files. - -# General section ------------------------------------------------------------- -[EMC] - -# Version of this INI file -VERSION = $Revision$ - -# Name of machine, for use with display, etc. -MACHINE = LinuxCNC-HAL-SIM-GSCREEN - -# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others -# DEBUG = 0x7FFFFFFF -DEBUG = 0 - -# Sections for display options ------------------------------------------------ -[DISPLAY] - -; -c sets the glade and handler file to load -d is to display extra debug messages -; In this case the glade and handler file are named gscreen so we don't need -c -DISPLAY = gscreen -d -v - -# Cycle time, in milliseconds, that display will sleep between polls -CYCLE_TIME = 100 - -# Highest / lowest value that will be allowed for overrides, 1.0 = 100% -MAX_SPINDLE_OVERRIDE = 2.0 -MIN_SPINDLE_OVERRIDE = .5 -MAX_FEED_OVERRIDE = 2.0 - -# Max and default jog speeds in units per second -MAX_LINEAR_VELOCITY = 1.2 -DEFAULT_LINEAR_VELOCITY = .5 -DEFAULT_ANGULAR_VELOCITY = 30 - -# list of selectable jog increments -INCREMENTS = 1 in, 0.1 in, 10 mil, 1 mil, 1mm, .1mm, 1/8000 in -ANGULAR_INCREMENTS = 1,10,15,45,90,180 - -# This is used by Gscreen to display the machine anglular joints movements properly -GEOMETRY = XYZBCUVW - -# Prefix to be used -PROGRAM_PREFIX = ../../../nc_files/ - -# Introductory graphic -INTRO_GRAPHIC = linuxcnc.gif -INTRO_TIME = 5 - -[FILTER] -PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image -PROGRAM_EXTENSION = .py Python Script - -png = image-to-gcode -gif = image-to-gcode -jpg = image-to-gcode -py = python - -# Task controller section ----------------------------------------------------- -[TASK] - -# Name of task controller program, e.g., milltask -TASK = milltask - -# Cycle time, in seconds, that task controller will sleep between polls -CYCLE_TIME = 0.001 - -# Part program interpreter section -------------------------------------------- -[RS274NGC] - -# File containing interpreter variables -PARAMETER_FILE = sim-9gscreen.var - -# Motion control section ------------------------------------------------------ -[EMCMOT] - -EMCMOT = motmod - -# Timeout for comm to emcmot, in seconds -COMM_TIMEOUT = 1.0 - -# Interval between tries to emcmot, in seconds -COMM_WAIT = 0.010 - -# Servo task period, in nano-seconds -SERVO_PERIOD = 1000000 - -# Hardware Abstraction Layer section -------------------------------------------------- -[HAL] - -# The run script first uses halcmd to execute any HALFILE -# files, and then to execute any individual HALCMD commands. -# - -# list of hal config files to run through halcmd -# files are executed in the order in which they appear -HALFILE = core_sim9.hal -HALFILE = sim_spindle_encoder.hal -HALFILE = axis_manualtoolchange.hal -HALFILE = simulated_home.hal -HALFILE = locking_indexer.hal - -# list of halcmd commands to execute -# commands are executed in the order in which they appear -#HALCMD = save neta - -# Single file that is executed after the GUI has started. -#POSTGUI_HALFILE = test_postgui.hal - -HALUI = halui - -# Trajectory planner section -------------------------------------------------- -[TRAJ] - -AXES = 9 -COORDINATES = X Y Z A B C U V W -HOME = 0 0 0 0 0 0 0 0 0 -LINEAR_UNITS = inch -ANGULAR_UNITS = degree -CYCLE_TIME = 0.010 -DEFAULT_VELOCITY = 1.0 -POSITION_FILE = position9.txt -MAX_VELOCITY = 1.2 - -# Axes sections --------------------------------------------------------------- - -[AXIS_0] - -TYPE = LINEAR -HOME = 0.000 -MAX_VELOCITY = 1.2 -MAX_ACCELERATION = 20.0 -BACKLASH = 0.000 -INPUT_SCALE = 4000 -OUTPUT_SCALE = 1.000 -MIN_LIMIT = -10.0 -MAX_LIMIT = 10.0 -FERROR = 0.050 -MIN_FERROR = 0.010 -HOME_OFFSET = 0.0 -HOME_SEARCH_VEL = 5.0 -HOME_LATCH_VEL = 1.0 -HOME_USE_INDEX = NO -HOME_IGNORE_LIMITS = NO -HOME_SEQUENCE = 1 -HOME_IS_SHARED = 1 - -[AXIS_1] - -TYPE = LINEAR -HOME = 0.000 -MAX_VELOCITY = 1.2 -MAX_ACCELERATION = 20.0 -BACKLASH = 0.000 -INPUT_SCALE = 4000 -OUTPUT_SCALE = 1.000 -MIN_LIMIT = -10.0 -MAX_LIMIT = 10.0 -FERROR = 0.050 -MIN_FERROR = 0.010 -HOME_OFFSET = 0.0 -HOME_SEARCH_VEL = 5.0 -HOME_LATCH_VEL = 1.0 -HOME_USE_INDEX = NO -HOME_IGNORE_LIMITS = NO -HOME_SEQUENCE = 1 - -[AXIS_2] - -TYPE = LINEAR -HOME = 0.0 -MAX_VELOCITY = 1.2 -MAX_ACCELERATION = 20.0 -BACKLASH = 0.000 -INPUT_SCALE = 4000 -OUTPUT_SCALE = 1.000 -MIN_LIMIT = -2.0 -MAX_LIMIT = 4.0 -FERROR = 0.050 -MIN_FERROR = 0.010 -HOME_OFFSET = 1.0 -HOME_SEARCH_VEL = 5.0 -HOME_LATCH_VEL = 1.0 -HOME_USE_INDEX = NO -HOME_IGNORE_LIMITS = NO -HOME_SEQUENCE = 0 -HOME_IS_SHARED = 1 - -[AXIS_3] - -TYPE = ANGULAR -HOME = 0.0 -MAX_VELOCITY = 90.0 -MAX_ACCELERATION = 1200.0 -BACKLASH = 0.000 -INPUT_SCALE = 40 -OUTPUT_SCALE = 1.000 -FERROR = 5.0 -MIN_FERROR = 1.0 -HOME_OFFSET = 0.0 -HOME_SEARCH_VEL = 0.0 -HOME_LATCH_VEL = 0.0 -HOME_USE_INDEX = NO -HOME_IGNORE_LIMITS = NO -HOME_SEQUENCE = 1 - -[AXIS_4] - -TYPE = ANGULAR -HOME = 0.0 -MAX_VELOCITY = 90.0 -MAX_ACCELERATION = 1200.0 -BACKLASH = 0.000 -INPUT_SCALE = 40 -OUTPUT_SCALE = 1.000 -FERROR = 5.0 -MIN_FERROR = 1.0 -HOME_OFFSET = 45.0 -HOME_SEARCH_VEL = 0.0 -HOME_LATCH_VEL = 0.0 -HOME_USE_INDEX = NO -HOME_IGNORE_LIMITS = NO -HOME_SEQUENCE = 1 -LOCKING_INDEXER = 1 - -[AXIS_5] - -TYPE = ANGULAR -HOME = 0.0 -MAX_VELOCITY = 90.0 -MAX_ACCELERATION = 1200.0 -BACKLASH = 0.000 -INPUT_SCALE = 40 -OUTPUT_SCALE = 1.000 -FERROR = 5.0 -MIN_FERROR = 1.0 -HOME_OFFSET = 0.0 -HOME_SEARCH_VEL = 0.0 -HOME_LATCH_VEL = 0.0 -HOME_USE_INDEX = NO -HOME_IGNORE_LIMITS = NO -HOME_SEQUENCE = 1 - -[AXIS_6] - -TYPE = LINEAR -HOME = 0.000 -MAX_VELOCITY = 1.2 -MAX_ACCELERATION = 20.0 -BACKLASH = 0.000 -INPUT_SCALE = 4000 -OUTPUT_SCALE = 1.000 -MIN_LIMIT = -10.0 -MAX_LIMIT = 10.0 -FERROR = 0.050 -MIN_FERROR = 0.010 -HOME_OFFSET = 0.0 -HOME_SEARCH_VEL = 0.0 -HOME_LATCH_VEL = 0.0 -HOME_USE_INDEX = NO -HOME_IGNORE_LIMITS = NO -HOME_SEQUENCE = 0 -HOME_IS_SHARED = 0 - -[AXIS_7] - -TYPE = LINEAR -HOME = 0.000 -MAX_VELOCITY = 1.2 -MAX_ACCELERATION = 20.0 -BACKLASH = 0.000 -INPUT_SCALE = 4000 -OUTPUT_SCALE = 1.000 -MIN_LIMIT = -10.0 -MAX_LIMIT = 10.0 -FERROR = 0.050 -MIN_FERROR = 0.010 -HOME_OFFSET = 0.0 -HOME_SEARCH_VEL = 0.0 -HOME_LATCH_VEL = 0.0 -HOME_USE_INDEX = NO -HOME_IGNORE_LIMITS = NO -HOME_SEQUENCE = 0 -HOME_IS_SHARED = 0 - -[AXIS_8] - -TYPE = LINEAR -HOME = 0.0 -MAX_VELOCITY = 1.2 -MAX_ACCELERATION = 20.0 -BACKLASH = 0.000 -INPUT_SCALE = 4000 -OUTPUT_SCALE = 1.000 -MIN_LIMIT = -2.0 -MAX_LIMIT = 4.0 -FERROR = 0.050 -MIN_FERROR = 0.010 -HOME_OFFSET = 0.0 -HOME_SEARCH_VEL = 0.0 -HOME_LATCH_VEL = 0.0 -HOME_USE_INDEX = NO -HOME_IGNORE_LIMITS = NO -HOME_SEQUENCE = 0 -HOME_IS_SHARED = 0 - - -# section for main IO controller parameters ----------------------------------- -[EMCIO] - -# Name of IO controller program, e.g., io -EMCIO = io - -# cycle time, in seconds -CYCLE_TIME = 0.100 - -# tool table file -TOOL_TABLE = sim.tbl -TOOL_CHANGE_POSITION = 0 0 2 diff --git a/configs/sim/gscreen_custom/gscreen.glade b/share/gscreen/skins/9_axis/9_axis.glade index be6d6a873..be6d6a873 100644 --- a/configs/sim/gscreen_custom/gscreen.glade +++ b/share/gscreen/skins/9_axis/9_axis.glade diff --git a/configs/sim/gscreen_custom/gscreen_handler.py b/share/gscreen/skins/9_axis/9_axis_handler.py index f675b821d..f675b821d 100755 --- a/configs/sim/gscreen_custom/gscreen_handler.py +++ b/share/gscreen/skins/9_axis/9_axis_handler.py diff --git a/configs/sim/gscreen_custom/gaxis.glade b/share/gscreen/skins/gaxis/gaxis.glade index 0ff29bd51..0ff29bd51 100644 --- a/configs/sim/gscreen_custom/gaxis.glade +++ b/share/gscreen/skins/gaxis/gaxis.glade diff --git a/configs/sim/gscreen_custom/gaxis_handler.py b/share/gscreen/skins/gaxis/gaxis_handler.py index a3a7f9b78..a3a7f9b78 100644 --- a/configs/sim/gscreen_custom/gaxis_handler.py +++ b/share/gscreen/skins/gaxis/gaxis_handler.py diff --git a/share/gscreen/skins/gmoccapy/dro.glade b/share/gscreen/skins/gmoccapy/dro.glade new file mode 100644 index 000000000..06d54598e --- /dev/null +++ b/share/gscreen/skins/gmoccapy/dro.glade @@ -0,0 +1,278 @@ +<?xml version="1.0"?> +<interface> + <!-- interface-requires gladevcp 0.0 --> + <requires lib="gtk+" version="2.16"/> + <!-- interface-naming-policy project-wide --> + <object class="GtkWindow" id="window1"> + <property name="width_request">200</property> + <property name="height_request">712</property> + <property name="resizable">False</property> + <property name="default_width">712</property> + <property name="default_height">200</property> + <property name="icon">icon/Logo.png</property> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="n_rows">4</property> + <property name="n_columns">4</property> + <child> + <object class="HAL_DRO" id="hal_dro4"> + <property name="visible">True</property> + <property name="label" translatable="yes">label</property> + <property name="joint_number">1</property> + <property name="display_units_mm">True</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + <child> + <object class="HAL_DRO" id="hal_dro5"> + <property name="visible">True</property> + <property name="label" translatable="yes">label</property> + <property name="display_units_mm">True</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="HAL_DRO" id="hal_dro7"> + <property name="visible">True</property> + <property name="label" translatable="yes">label</property> + <property name="joint_number">1</property> + <property name="display_units_mm">True</property> + <property name="reference_type">2</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + <child> + <object class="HAL_DRO" id="hal_dro8"> + <property name="visible">True</property> + <property name="label" translatable="yes">label</property> + <property name="display_units_mm">True</property> + <property name="reference_type">2</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="HAL_DRO" id="hal_dro3"> + <property name="visible">True</property> + <property name="label" translatable="yes">label</property> + <property name="joint_number">1</property> + <property name="display_units_mm">True</property> + <property name="reference_type">1</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + <child> + <object class="HAL_DRO" id="hal_dro2"> + <property name="visible">True</property> + <property name="label" translatable="yes">label</property> + <property name="display_units_mm">True</property> + <property name="reference_type">1</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="HAL_DRO" id="hal_dro6"> + <property name="visible">True</property> + <property name="label" translatable="yes">label</property> + <property name="joint_number">2</property> + <property name="display_units_mm">True</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + </packing> + </child> + <child> + <object class="HAL_DRO" id="hal_dro1"> + <property name="visible">True</property> + <property name="label" translatable="yes">label</property> + <property name="joint_number">2</property> + <property name="display_units_mm">True</property> + <property name="reference_type">1</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + </packing> + </child> + <child> + <object class="HAL_DRO" id="hal_dro9"> + <property name="visible">True</property> + <property name="label" translatable="yes">label</property> + <property name="joint_number">2</property> + <property name="display_units_mm">True</property> + <property name="reference_type">2</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + </object> + </child> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="label" translatable="yes">ABS</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="label" translatable="yes">REL</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="label" translatable="yes">DTG</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="label" translatable="yes">X</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="label" translatable="yes">Y</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="label" translatable="yes">Z</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + </packing> + </child> + </object> + </child> + </object> +</interface> diff --git a/share/gscreen/skins/gmoccapy/gmoccapy.glade b/share/gscreen/skins/gmoccapy/gmoccapy.glade new file mode 100755 index 000000000..10d535f0b --- /dev/null +++ b/share/gscreen/skins/gmoccapy/gmoccapy.glade @@ -0,0 +1,6103 @@ +<?xml version="1.0"?> +<interface> + <requires lib="gtk+" version="2.16"/> + <!-- interface-requires gladevcp 0.0 --> + <!-- interface-naming-policy project-wide --> + <object class="GtkWindow" id="window1"> + <property name="width_request">979</property> + <property name="height_request">750</property> + <property name="title">gmoccapy</property> + <property name="icon">icon/Logo.png</property> + <signal name="show" handler="on_window1_show"/> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <child> + <object class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <child> + <object class="GtkHBox" id="box_left"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkNotebook" id="ntb_main"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="show_tabs">False</property> + <child> + <object class="GtkVBox" id="vbox2"> + <property name="visible">True</property> + <child> + <object class="GtkHBox" id="hbox2"> + <property name="visible">True</property> + <child> + <object class="GtkVBox" id="vbox14"> + <property name="visible">True</property> + <child> + <object class="GtkNotebook" id="ntb_preview"> + <property name="visible">True</property> + <property name="show_tabs">False</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkVBox" id="vbox15"> + <property name="visible">True</property> + <child> + <object class="GtkEventBox" id="eventbox_gremlin"> + <property name="visible">True</property> + <child> + <object class="HAL_Gremlin" id="gremlin"> + <property name="visible">True</property> + <property name="double_buffered">False</property> + <property name="show_dtg">False</property> + <property name="enable_dro">False</property> + <property name="use_commanded">False</property> + </object> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkTable" id="tbl_gremlin_button"> + <property name="visible">True</property> + <property name="n_columns">13</property> + <property name="column_spacing">5</property> + <child> + <object class="GtkButton" id="btn_delete_view"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">clear plot</property> + <signal name="clicked" handler="on_btn_delete_view_clicked"/> + <child> + <object class="GtkImage" id="img_tool_clear"> + <property name="visible">True</property> + <property name="pixbuf">icon/clear.png</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">12</property> + <property name="right_attach">13</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_zoom_in"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Zoom in</property> + <property name="image">img_zoom_in</property> + <signal name="clicked" handler="on_btn_zoom_in_clicked"/> + </object> + <packing> + <property name="left_attach">8</property> + <property name="right_attach">9</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_zoom_out"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Zoom out</property> + <property name="image">img_zoom_out</property> + <signal name="clicked" handler="on_btn_zoom_out_clicked"/> + </object> + <packing> + <property name="left_attach">9</property> + <property name="right_attach">10</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_view_p"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">view perspective</property> + <property name="active">True</property> + <property name="draw_indicator">False</property> + <signal name="toggled" handler="on_rbt_view_p_toggled"/> + <child> + <object class="GtkImage" id="img_view_p"> + <property name="visible">True</property> + <property name="pixbuf">icon/toolaxisp.png</property> + </object> + </child> + </object> + <packing> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_view_x"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">view along the x axis from positive to negative</property> + <property name="draw_indicator">False</property> + <property name="group">rbt_view_p</property> + <signal name="toggled" handler="on_rbt_view_x_toggled"/> + <child> + <object class="GtkImage" id="img_view_x"> + <property name="visible">True</property> + <property name="pixbuf">icon/toolaxisx.png</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_view_y"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">view along the y axis from positive to negative</property> + <property name="draw_indicator">False</property> + <property name="group">rbt_view_p</property> + <signal name="toggled" handler="on_rbt_view_y_toggled"/> + <child> + <object class="GtkImage" id="img_view_y"> + <property name="visible">True</property> + <property name="pixbuf">icon/toolaxisy.png</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_view_z"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">view along the z axis from positive to negative</property> + <property name="xalign">0.44999998807907104</property> + <property name="draw_indicator">False</property> + <property name="group">rbt_view_p</property> + <signal name="toggled" handler="on_rbt_view_z_toggled"/> + <child> + <object class="GtkImage" id="img_view_z"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/toolaxisz.png</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_view_tool_path"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Show or hide tool path</property> + <signal name="toggled" handler="on_tbtn_view_tool_path_toggled"/> + <child> + <object class="GtkImage" id="imimg_toll_path"> + <property name="visible">True</property> + <property name="tooltip_markup">Show or hide tool path</property> + <property name="pixbuf">icon/toolpath.png</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">11</property> + <property name="right_attach">12</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_view_dimension"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Show or hide dimensions</property> + <signal name="toggled" handler="on_tbtn_view_dimension_toggled"/> + <child> + <object class="GtkImage" id="img_dimensions"> + <property name="visible">True</property> + <property name="pixbuf">icon/dimensions.png</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">10</property> + <property name="right_attach">11</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_view_y2"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">view along the y axis from positive to negative as viewn for a back tool lathe</property> + <property name="draw_indicator">False</property> + <property name="group">rbt_view_p</property> + <signal name="toggled" handler="on_rbt_view_y2_toggled"/> + <child> + <object class="GtkImage" id="img_view_y2"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/toolaxisy2.png</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">4</property> + <property name="right_attach">5</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_preview"> + <property name="visible">True</property> + <property name="label" translatable="yes">Preview</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="OffsetPage" id="offsetpage1"> + <property name="visible">True</property> + <property name="foreground_color">#ffff00000000</property> + <property name="highlight_color">#adadd8d8e6e6</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_frm_preview_offset_page"> + <property name="visible">True</property> + <property name="label" translatable="yes">Offset Page</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="ToolEdit" id="tooledit1"> + <property name="visible">True</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_frm_preview_tooledit"> + <property name="visible">True</property> + <property name="label" translatable="yes">Tooledit</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="IconFileSelection" id="IconFileSelection1"> + <property name="visible">True</property> + <property name="filetypes">ngc,py,bmp</property> + <signal name="selected" handler="on_IconFileSelection1_selected"/> + <signal name="exit" handler="on_IconFileSelection1_exit"/> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_preview_file_sel"> + <property name="visible">True</property> + <property name="label" translatable="yes">File Selection</property> + </object> + <packing> + <property name="position">3</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbx_jog"> + <property name="width_request">360</property> + <property name="visible">True</property> + <child> + <object class="GtkNotebook" id="ntb_jog"> + <property name="visible">True</property> + <property name="show_tabs">False</property> + <child> + <object class="GtkVBox" id="vbox4"> + <property name="visible">True</property> + <child> + <object class="GtkHBox" id="hbox3"> + <property name="height_request">50</property> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="lbl_jog_vel"> + <property name="width_request">85</property> + <property name="visible">True</property> + <property name="label" translatable="yes">Jog. Vel.</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="HAL_HScale" id="hal_scl_jog_vel"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip_text" translatable="yes">adjust the jogging speed</property> + <property name="adjustment">adj_jog_vel</property> + <property name="digits">0</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox_jog"> + <property name="visible">True</property> + <child> + <object class="GtkVBox" id="vbox_jog_button"> + <property name="width_request">240</property> + <property name="visible">True</property> + <child> + <object class="GtkFrame" id="frm_jog_button"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">buttons to jog the different axis</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_jog_button"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="tbl_jog_btn"> + <property name="visible">True</property> + <property name="border_width">5</property> + <property name="n_rows">3</property> + <property name="n_columns">4</property> + <property name="column_spacing">3</property> + <property name="row_spacing">3</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkButton" id="btn_y_plus"> + <property name="label">Y+</property> + <property name="width_request">50</property> + <property name="height_request">50</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="pressed" handler="on_btn_jog_pressed"/> + <signal name="released" handler="on_btn_jog_released"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_y_minus"> + <property name="label">Y-</property> + <property name="width_request">50</property> + <property name="height_request">50</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="pressed" handler="on_btn_jog_pressed"/> + <signal name="released" handler="on_btn_jog_released"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_x_minus"> + <property name="label">X-</property> + <property name="width_request">50</property> + <property name="height_request">50</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="pressed" handler="on_btn_jog_pressed"/> + <signal name="released" handler="on_btn_jog_released"/> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_x_plus"> + <property name="label">X+</property> + <property name="width_request">50</property> + <property name="height_request">50</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="pressed" handler="on_btn_jog_pressed"/> + <signal name="released" handler="on_btn_jog_released"/> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_z_plus"> + <property name="label">Z+</property> + <property name="width_request">50</property> + <property name="height_request">50</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="pressed" handler="on_btn_jog_pressed"/> + <signal name="released" handler="on_btn_jog_released"/> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_4_plus"> + <property name="label">4+</property> + <property name="width_request">50</property> + <property name="height_request">50</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="pressed" handler="on_btn_jog_pressed"/> + <signal name="released" handler="on_btn_jog_released"/> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_z_minus"> + <property name="label">Z-</property> + <property name="width_request">50</property> + <property name="height_request">50</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="pressed" handler="on_btn_jog_pressed"/> + <signal name="released" handler="on_btn_jog_released"/> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_4_minus"> + <property name="label">4-</property> + <property name="width_request">50</property> + <property name="height_request">50</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="xalign">0.47999998927116394</property> + <signal name="pressed" handler="on_btn_jog_pressed"/> + <signal name="released" handler="on_btn_jog_released"/> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_jogging"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Jogging</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="chk_ignore_limits"> + <property name="label" translatable="yes">Ignore limits</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">ignore limits / turn on this if you need to move an axis which is in contact with the end switch</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_ignore_limits_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_jog_rates"> + <property name="width_request">120</property> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">select jog distance</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_jog_rates"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVButtonBox" id="vbuttonbox2"> + <property name="width_request">50</property> + <property name="visible">True</property> + <property name="spacing">3</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_steps"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Jog Rates</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">2</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="label">Manuell</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="EMC_MDIHistory" id="hal_mdihistory"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">Shows the MDI command history</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="label">MDI</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <object class="EMC_SourceView" id="gcode_view"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip_text" translatable="yes">shows the source of the loaded program</property> + <property name="left_margin">2</property> + <property name="right_margin">2</property> + <property name="show_line_numbers">True</property> + <property name="show_line_marks">True</property> + <property name="tab_width">3</property> + <property name="auto_indent">True</property> + <property name="insert_spaces_instead_of_tabs">True</property> + <property name="right_margin_position">81</property> + <property name="highlight_current_line">True</property> + </object> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="label">Auto</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbx_dro"> + <property name="visible">True</property> + <child> + <object class="GtkTable" id="tbl_dro_button"> + <property name="visible">True</property> + <property name="border_width">5</property> + <property name="n_rows">3</property> + <child> + <object class="GtkToggleButton" id="tbtn_rel"> + <property name="label" translatable="yes">Rel.</property> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="toggled" handler="on_tbtn_rel_toggled"/> + </object> + <packing> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_dtg"> + <property name="label">DTG</property> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="toggled" handler="on_tbtn_dtg_toggled"/> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_units"> + <property name="label" translatable="yes">mm</property> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="toggled" handler="on_tbtn_units_toggled"/> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkTable" id="tbl_dro"> + <property name="visible">True</property> + <property name="border_width">5</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <child> + <object class="GtkEventBox" id="eventbox_x"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="lbl_x"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="label">X</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="foreground" value="#ffff00000000"/> + <attribute name="background" value="#000000000000"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="x_options"></property> + </packing> + </child> + <child> + <object class="GtkEventBox" id="eventbox_dro_x"> + <property name="visible">True</property> + <child> + <object class="HAL_DRO" id="hal_dro_x"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label">label</property> + <property name="actual">False</property> + <property name="reference_type">2</property> + <property name="display_units_mm">True</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="foreground" value="#ffff00000000"/> + <attribute name="background" value="#000000000000"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkEventBox" id="eventbox_dro_y"> + <property name="visible">True</property> + <child> + <object class="HAL_DRO" id="hal_dro_y"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label">label</property> + <property name="actual">False</property> + <property name="reference_type">1</property> + <property name="joint_number">1</property> + <property name="display_units_mm">True</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="foreground" value="#ffff00000000"/> + <attribute name="background" value="#000000000000"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkEventBox" id="eventbox_dro_z"> + <property name="visible">True</property> + <child> + <object class="HAL_DRO" id="hal_dro_z"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label">label</property> + <property name="actual">False</property> + <property name="reference_type">1</property> + <property name="joint_number">2</property> + <property name="display_units_mm">True</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="foreground" value="#ffff00000000"/> + <attribute name="background" value="#000000000000"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + <child> + <object class="GtkEventBox" id="eventbox_4"> + <child> + <object class="GtkLabel" id="lbl_4"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="label">4</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="foreground" value="#ffff00000000"/> + <attribute name="background" value="#000000000000"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEventBox" id="eventbox_dro_4"> + <child> + <object class="HAL_DRO" id="hal_dro_4"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label">label</property> + <property name="actual">False</property> + <property name="reference_type">1</property> + <property name="joint_number">3</property> + <property name="display_units_mm">True</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="foreground" value="#ffff00000000"/> + <attribute name="background" value="#000000000000"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + </packing> + </child> + <child> + <object class="GtkEventBox" id="eventbox_y"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="lbl_y"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="label">Y</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="foreground" value="#ffff00000000"/> + <attribute name="background" value="#000000000000"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEventBox" id="eventbox_z"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="lbl_z"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="label">Z</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="foreground" value="#ffff00000000"/> + <attribute name="background" value="#000000000000"/> + <attribute name="scale" value="3.000000"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + </object> + <packing> + <property name="padding">5</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="box_info"> + <property name="height_request">250</property> + <property name="visible">True</property> + <child> + <object class="GtkNotebook" id="ntb_info"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="show_tabs">False</property> + <signal name="switch_page" handler="on_ntb_info_switch_page"/> + <child> + <object class="GtkHBox" id="hbox7"> + <property name="height_request">200</property> + <property name="visible">True</property> + <child> + <object class="GtkVBox" id="vbox11"> + <property name="visible">True</property> + <child> + <object class="GtkFrame" id="frm_tool_info"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">Information over the tool in spindle</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_tool_info"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="table2tbl_tool_info"> + <property name="visible">True</property> + <property name="n_rows">3</property> + <property name="n_columns">4</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkLabel" id="lbl_tool"> + <property name="visible">True</property> + <property name="label" translatable="yes">Tool no.</property> + <property name="width_chars">8</property> + <attributes> + <attribute name="style" value="normal"/> + </attributes> + </object> + </child> + <child> + <object class="GtkLabel" id="lbl_tool_no"> + <property name="visible">True</property> + <property name="label">0</property> + <property name="justify">center</property> + <property name="width_chars">8</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_diameter"> + <property name="visible">True</property> + <property name="label" translatable="yes">Diameter</property> + <property name="width_chars">8</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_tool_dia"> + <property name="visible">True</property> + <property name="label">0</property> + <property name="justify">center</property> + <property name="width_chars">8</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_offset_z"> + <property name="visible">True</property> + <property name="label" translatable="yes">offset z</property> + <property name="width_chars">8</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_tool_offset_z"> + <property name="visible">True</property> + <property name="label">0</property> + <property name="justify">center</property> + <property name="width_chars">8</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_offset_x"> + <property name="visible">True</property> + <property name="label" translatable="yes">offset x</property> + <property name="width_chars">8</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_tool_offset_x"> + <property name="visible">True</property> + <property name="label">0</property> + <property name="justify">center</property> + <property name="width_chars">8</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_tool_name"> + <property name="visible">True</property> + <property name="label" translatable="yes">No tool description available</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="right_attach">4</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_tool_info"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Tool information</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_gcode"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">G and M code information as well as speed and feed</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="alignment9"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox13"> + <property name="visible">True</property> + <child> + <object class="GtkHBox" id="hbox5"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="active_mcodes_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">active_mcodes_label</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_feed"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label">F </property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_active_feed"> + <property name="width_request">50</property> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label">10000</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox10"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="active_gcodes_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">active_gcodes_label</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_speed"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="ypad">3</property> + <property name="label">S </property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="active_speed_label"> + <property name="width_request">50</property> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="ypad">3</property> + <property name="label">10000</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frame_code"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>G-Code</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_program"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">The name and location of the loaded program</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="alignment10"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkLabel" id="lbl_program"> + <property name="visible">True</property> + <property name="label" translatable="yes">No Program loaded</property> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frame_program"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Program</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox7"> + <property name="width_request">200</property> + <property name="visible">True</property> + <child> + <object class="GtkFrame" id="frm_max_vel"> + <property name="visible">True</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="alignment6"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox10"> + <property name="visible">True</property> + <child> + <object class="GtkHBox" id="hbox9"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="lbl_vel"> + <property name="visible">True</property> + <property name="label" translatable="yes">Vel.</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="1.500000"/> + </attributes> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_current_vel"> + <property name="visible">True</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + <property name="label">10000</property> + <property name="justify">center</property> + <attributes> + <attribute name="style" value="normal"/> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="1.500000"/> + </attributes> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHScale" id="scl_max_vel"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip_text" translatable="yes">adjust max vel of machine</property> + <property name="adjustment">adj_max_vel</property> + <property name="show_fill_level">True</property> + <property name="digits">0</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frame_max_speed"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Max. Velocity</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="pack_type">end</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_feed_override"> + <property name="width_request">200</property> + <property name="visible">True</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="alignment5"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox9"> + <property name="visible">True</property> + <child> + <object class="GtkHBox" id="hbox8"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="lbl_feed_act"> + <property name="visible">True</property> + <property name="label">F 275</property> + <attributes> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="1.500000"/> + </attributes> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_feed_100"> + <property name="label">100%</property> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">reset feed override to 100 %</property> + <signal name="clicked" handler="on_btn_feed_100_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHScale" id="scl_feed"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip_text" translatable="yes">adjust feed override</property> + <property name="adjustment">adj_feed</property> + <property name="lower_stepper_sensitivity">on</property> + <property name="upper_stepper_sensitivity">on</property> + <property name="show_fill_level">True</property> + <property name="restrict_to_fill_level">False</property> + <property name="digits">0</property> + <signal name="value_changed" handler="on_scl_feed_value_changed"/> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_feed_override"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Feed Override [%]</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="pack_type">end</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_cooling"> + <property name="width_request">125</property> + <property name="visible">True</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="alignment3"> + <property name="visible">True</property> + <property name="xscale">0.5</property> + <property name="yscale">0</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="tbl_cooling"> + <property name="visible">True</property> + <property name="n_rows">2</property> + <property name="column_spacing">10</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkToggleButton" id="tbtn_flood"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">switch flood coolant</property> + <property name="image">img_coolant_off</property> + <signal name="toggled" handler="on_tbtn_flood_toggled"/> + </object> + <packing> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + <property name="y_padding">5</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_mist"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">switch mist coolant</property> + <property name="image">img_mist_off</property> + <signal name="toggled" handler="on_tbtn_mist_toggled"/> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + <property name="y_padding">5</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frame_coolant"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Cooling</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="pack_type">end</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_spindle"> + <property name="width_request">200</property> + <property name="visible">True</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="alignment4"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox8"> + <property name="visible">True</property> + <child> + <object class="GtkVBox" id="vbox16"> + <property name="visible">True</property> + <child> + <object class="GtkHBox" id="hbox6"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="lbl_spindle_act"> + <property name="visible">True</property> + <property name="label">S 3500</property> + <attributes> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="1.500000"/> + </attributes> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_actual_spindle_speed"> + <property name="visible">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_spindle_100"> + <property name="label">100%</property> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">reset spindle override to 100 %</property> + <signal name="clicked" handler="on_btn_spindle_100_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHScale" id="scl_spindle"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip_text" translatable="yes">adjust spindle override</property> + <property name="adjustment">adj_spindle</property> + <property name="digits">0</property> + <signal name="value_changed" handler="on_scl_spindle_value_changed"/> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox6"> + <property name="visible">True</property> + <child> + <object class="GtkTable" id="table5"> + <property name="visible">True</property> + <property name="n_columns">3</property> + <child> + <object class="GtkRadioButton" id="rbt_reverse"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">turn on spindle counterclockwise</property> + <property name="draw_indicator">False</property> + <property name="group">rbt_stop</property> + <signal name="clicked" handler="on_rbt_reverse_clicked"/> + <child> + <object class="GtkImage" id="img_reverse"> + <property name="visible">True</property> + <property name="pixbuf">icon/reverse.png</property> + </object> + </child> + </object> + </child> + <child> + <object class="GtkRadioButton" id="rbt_forward"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">turn on spindle clockwise</property> + <property name="draw_indicator">False</property> + <property name="group">rbt_stop</property> + <signal name="clicked" handler="on_rbt_forward_clicked"/> + <child> + <object class="GtkImage" id="img_spindle_forward"> + <property name="visible">True</property> + <property name="pixbuf">icon/forward.png</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_stop"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">stop spindle</property> + <property name="active">True</property> + <property name="draw_indicator">False</property> + <signal name="clicked" handler="on_rbt_stop_clicked"/> + <child> + <object class="GtkImage" id="img_spindle_stop"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/stop.gif</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox13"> + <property name="visible">True</property> + <child> + <object class="HAL_HBar" id="hal_hbar_spindle_feedback"> + <property name="visible">True</property> + <property name="z1_color">#0000ffff0000</property> + <property name="bg_color">#bebebebebebe</property> + <property name="z1_border">0.80000001192092896</property> + <property name="text_template">%i</property> + <property name="z0_border">0.40000000596046448</property> + <property name="z2_color">#0000ffff0000</property> + <property name="target_color">#0000ffff0000</property> + <property name="max">6000</property> + <property name="target_value">-0.039999999105930328</property> + <property name="z0_color">#0000ffff0000</property> + <signal name="hal_pin_changed" handler="on_hal_hbar_spindle_feedback_hal_pin_changed"/> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="HAL_LED" id="hal_led_spindle_at_speed"> + <property name="visible">True</property> + <property name="on_color">green</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label17"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Spindle [rpm]</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_info_info"> + <property name="visible">True</property> + <property name="label" translatable="yes">Info</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="key_box"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_frm_info_emb_keyb"> + <property name="visible">True</property> + <property name="label" translatable="yes">Embeded keyboard</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkNotebook" id="ntb_message"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="show_tabs">False</property> + <property name="show_border">False</property> + <property name="tab_border">0</property> + <property name="tab_hborder">0</property> + <property name="tab_vborder">0</property> + <child> + <object class="GtkFrame" id="frm_message"> + <property name="height_request">50</property> + <property name="visible">True</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkVBox" id="vbox12"> + <property name="visible">True</property> + <child> + <object class="GtkHBox" id="hbox15"> + <property name="visible">True</property> + <child> + <object class="GtkStatusbar" id="statusbar1"> + <property name="visible">True</property> + <property name="spacing">2</property> + <property name="has_resize_grip">False</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_clear_statusbar"> + <property name="width_request">32</property> + <property name="height_request">32</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_clear_statusbar_clicked"/> + <child> + <object class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="stock">gtk-delete</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">5</property> + <property name="pack_type">end</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frame_information"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Messages</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_message_frm_message"> + <property name="visible">True</property> + <property name="label">message</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkTable" id="table3"> + <property name="visible">True</property> + <property name="n_columns">7</property> + <child> + <object class="GtkEntry" id="search_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_undo"> + <property name="label" translatable="yes">undo</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_undo_clicked"/> + </object> + <packing> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_search_back"> + <property name="label" translatable="yes">search + back</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_search_back_clicked"/> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_search_forward"> + <property name="label" translatable="yes">search + fwd</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_search_forward_clicked"/> + </object> + <packing> + <property name="left_attach">4</property> + <property name="right_attach">5</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_redo"> + <property name="label" translatable="yes">redo</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_redo_clicked"/> + </object> + <packing> + <property name="left_attach">6</property> + <property name="right_attach">7</property> + <property name="x_options">GTK_SHRINK</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space"> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_spac"> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">5</property> + <property name="right_attach">6</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_message_frm_search"> + <property name="visible">True</property> + <property name="label">search</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_main_main"> + <property name="visible">True</property> + <property name="label" translatable="yes">Main</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkNotebook" id="ntb_setup"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <object class="GtkScrolledWindow" id="terminal_window"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="shadow_type">out</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_setup_debug"> + <property name="visible">True</property> + <property name="label" translatable="yes">Debug</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox_settings"> + <property name="visible">True</property> + <child> + <object class="GtkFrame" id="frm_apearance"> + <property name="visible">True</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_apearance"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkHBox" id="hbox17"> + <property name="visible">True</property> + <child> + <object class="GtkVBox" id="vbox18"> + <property name="visible">True</property> + <child> + <object class="GtkFrame" id="frm_main_window"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">select how to start gmoccapy</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_main_window"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox_main_window"> + <property name="visible">True</property> + <child> + <object class="GtkRadioButton" id="rbtn_fullscreen"> + <property name="label" translatable="yes">Start as fullscreen</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_rbtn_fullscreen_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbtn_maximized"> + <property name="label" translatable="yes">Start maximized</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <property name="group">rbtn_fullscreen</property> + <signal name="toggled" handler="on_rbtn_maximized_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbtn_window"> + <property name="label" translatable="yes">Start as window</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <property name="group">rbtn_fullscreen</property> + <signal name="toggled" handler="on_rbtn_window_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkTable" id="tbl_main_window"> + <property name="visible">True</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <child> + <object class="GtkLabel" id="lbl_x_pos"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + <property name="label" translatable="yes">X Pos.</property> + </object> + <packing> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_y_pos"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + <property name="label" translatable="yes">Y Pos.</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_width"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + <property name="label" translatable="yes">Width</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_height"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + <property name="label" translatable="yes">Height</property> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spbtn_x_pos"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="xalign">1</property> + <property name="adjustment">adj_x_pos</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spbtn_y_pos"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="xalign">1</property> + <property name="adjustment">adj_y_pos</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spbtn_width"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="xalign">1</property> + <property name="adjustment">adj_width</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spbtn_height"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="xalign">1</property> + <property name="adjustment">adj_height</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + <property name="y_padding">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="chk_hide_cursor"> + <property name="label" translatable="yes">hide cursor</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_hide_cursor_toggled"/> + </object> + <packing> + <property name="padding">10</property> + <property name="position">4</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_main_window"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Main Window</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_keyboard"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">select virtual keyboard behavior</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_keyboard"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox_keyboard"> + <property name="visible">True</property> + <child> + <object class="GtkCheckButton" id="chk_use_kb_on_offset"> + <property name="label" translatable="yes">Show keyboard on offset</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_use_kb_on_offset_toggled"/> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="chk_use_kb_on_tooledit"> + <property name="label" translatable="yes">Show keyboard on tooledit</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_use_kb_on_tooledit_toggled"/> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="chk_use_kb_on_mdi"> + <property name="label" translatable="yes">Show keyboard on MDI</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_use_kb_on_mdi_toggled"/> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="chk_use_kb_on_edit"> + <property name="label" translatable="yes">Show keyboard on EDIT</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_use_kb_on_edit_toggled"/> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="chk_use_kb_on_file_selection"> + <property name="label" translatable="yes">Show keyboard on load file</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_use_kb_on_file_selection_toggled"/> + </object> + <packing> + <property name="position">4</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_keyboard"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Keyboard</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_ntb_preview"> + <property name="visible">True</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_keyboard1"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox_keyboard1"> + <property name="visible">True</property> + <child> + <object class="GtkRadioButton" id="rbtn_show_preview"> + <property name="label" translatable="yes">show preview</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_rbtn_show_preview_toggled"/> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbtn_show_offsets"> + <property name="label" translatable="yes">show offsets</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <property name="group">rbtn_show_preview</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_ntb_preview"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>On Touch off</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_use_screen2"> + <property name="label" translatable="yes"> Display +Aux Screen</property> + <property name="width_request">100</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="toggled" handler="on_tbtn_use_screen2_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + </object> + <packing> + <property name="fill">False</property> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox3"> + <property name="visible">True</property> + <child> + <object class="GtkFrame" id="frm_dro"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">DRO settings</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_dro"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="tbl_frm_dro"> + <property name="visible">True</property> + <property name="n_rows">6</property> + <property name="n_columns">2</property> + <property name="row_spacing">3</property> + <child> + <object class="GtkLabel" id="lbl_rel_text_color"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Relative Text Color</property> + </object> + <packing> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + <child> + <object class="GtkColorButton" id="rel_colorbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="color">#000000000000</property> + <signal name="color_set" handler="on_rel_colorbutton_color_set"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options">GTK_SHRINK</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_abs_text_color"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Absolute Text Color</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + <child> + <object class="GtkColorButton" id="abs_colorbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="color">#000000000000</property> + <signal name="color_set" handler="on_abs_colorbutton_color_set"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_SHRINK</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_dtg_color"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">DTG Text Color</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + <child> + <object class="GtkColorButton" id="dtg_colorbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="color">#000000000000</property> + <signal name="color_set" handler="on_dtg_colorbutton_color_set"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options">GTK_SHRINK</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="chk_show_dro"> + <property name="label" translatable="yes">Show DRO in preview</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_show_dro_toggled"/> + </object> + <packing> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="chk_show_offsets"> + <property name="label" translatable="yes">Show offsets in preview</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_show_offsets_toggled"/> + </object> + <packing> + <property name="right_attach">2</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="chk_show_dtg"> + <property name="label" translatable="yes">Show DTG in preview</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">1</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_show_dtg_toggled"/> + </object> + <packing> + <property name="right_attach">2</property> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_dro"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>DRO</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_desktop_notify"> + <property name="visible">True</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="alali_desktop_notify"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkCheckButton" id="chk_use_desktop_notify"> + <property name="label" translatable="yes">Use desktop notify</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="relief">none</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_use_desktop_notify_toggled"/> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_desktop_notify"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Desktop notify</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_spindl"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">spindle relevant settings</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_spindle"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="tbl_spindle"> + <property name="visible">True</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <child> + <object class="GtkLabel" id="lbl_start_rpm"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Starting RPM</property> + </object> + <packing> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="sbtn_spindle_start_rpm"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="activates_default">True</property> + <property name="xalign">1</property> + <property name="shadow_type">etched-in</property> + <property name="adjustment">adj_start_spindle_RPM</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options">GTK_SHRINK</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="sbtn_spindle_bar_min"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="activates_default">True</property> + <property name="xalign">1</property> + <property name="shadow_type">etched-in</property> + <property name="adjustment">adj_spindle_bar_min</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_SHRINK</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="sbtn_spindle_bar_max"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="activates_default">True</property> + <property name="xalign">1</property> + <property name="shadow_type">etched-in</property> + <property name="adjustment">adj_spindle_bar_max</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options">GTK_SHRINK</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_spindle_min_rpm"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Spindle bar min</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_spindle_max_rpm"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Spindle bar max</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_spindle"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Spindle</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_themes"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">themes and sounds to be used</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_themes"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <child> + <object class="GtkLabel" id="lbl_themes"> + <property name="visible">True</property> + <property name="label" translatable="yes">Themes</property> + </object> + <packing> + <property name="right_attach">2</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="theme_choice"> + <property name="visible">True</property> + <property name="model">lstst_themes</property> + <signal name="changed" handler="on_theme_choice_changed"/> + <child> + <object class="GtkCellRendererText" id="cellrenderertext1"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_SHRINK</property> + <property name="x_padding">5</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label25"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Warning Audio</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label27"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Alert Audio</property> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkFileChooserButton" id="audio_error_chooser"> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + <child> + <object class="GtkFileChooserButton" id="audio_alert_chooser"> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_SHRINK | GTK_FILL</property> + <property name="y_options">GTK_SHRINK</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_themes"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Themes and sound</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_gremlin_gridsize"> + <property name="visible">True</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_gremlin_gridsize"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkHBox" id="hbox16"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Grid size</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="grid_size"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="xalign">1</property> + <property name="adjustment">adj_grid_size</property> + <property name="digits">3</property> + <signal name="value_changed" handler="on_grid_size_value_changed"/> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_gremlin_grid_size"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Preview</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + </object> + <packing> + <property name="position">5</property> + </packing> + </child> + </object> + <packing> + <property name="fill">False</property> + <property name="padding">5</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_apearance"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Appearance</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_hardware"> + <property name="visible">True</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_hardware"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox21"> + <property name="visible">True</property> + <child> + <object class="GtkFrame" id="frm_mpg_scale"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">here you can set the scales to apply to the hardware MPG to avoid to fast or to slow moving of the sliders, default is (max-min)/100</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_mpg_scale"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkTable" id="tbl_mpg_scale"> + <property name="visible">True</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <child> + <object class="GtkLabel" id="lbl_scale_max_vel"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + <property name="label" translatable="yes">Scale max velocity</property> + </object> + </child> + <child> + <object class="GtkLabel" id="lbl_scale_jog_vel"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + <property name="label" translatable="yes">Scale jog velocity</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_feed_overid"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + <property name="label" translatable="yes">Scale feed override</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_spindle_override"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + <property name="label" translatable="yes">Scale spindle override</property> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spbtn_scale_max_vel"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="xalign">1</property> + <property name="adjustment">adj_scale_max_vel</property> + <property name="digits">1</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_padding">5</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spbtn_scale_jog_vel"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="xalign">1</property> + <property name="adjustment">adj_scale_jog_vel</property> + <property name="digits">1</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_padding">5</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spbtn_scale_feed_override"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="xalign">1</property> + <property name="adjustment">adj_scale_feed_override</property> + <property name="digits">1</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_padding">5</property> + <property name="y_padding">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spbtn_scale_spindle_override"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="xalign">1</property> + <property name="adjustment">adj_scale_spindle_override</property> + <property name="digits">1</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_padding">5</property> + <property name="y_padding">2</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_mpg_scale"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Hardware MPG Scale</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_kb_shortcuts"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">If you select this, you will be able to use several keyboard buttons to operate your machine</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_kb_shortcuts"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkCheckButton" id="chk_use_kb_shortcuts"> + <property name="label" translatable="yes">Use keyboard shortcuts</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_chk_use_kb_shortcuts_toggled"/> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_kb_shortcuts"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Keyboard shortcuts</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_unlock"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">Here you can select the unlock mode to enter the settings page</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_unlock_settings"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox_unlock_settings"> + <property name="visible">True</property> + <child> + <object class="GtkRadioButton" id="rbt_use_unlock"> + <property name="label" translatable="yes">Use unlock code</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_rbt_unlock_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_no_unlock"> + <property name="label" translatable="yes">Do not use unlock code</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <property name="group">rbt_use_unlock</property> + <signal name="toggled" handler="on_rbt_unlock_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_hal_unlock"> + <property name="label" translatable="yes">Use hal pin to unlock</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <property name="group">rbt_use_unlock</property> + <signal name="toggled" handler="on_rbt_unlock_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_unlock"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Unlock settings</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_run_from_line"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">Do you want to use run from line, it is not very save to use this option, because linuxcnc will ignore all information previous of the start line</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_run_from_line"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox_run_from_line"> + <property name="visible">True</property> + <child> + <object class="GtkRadioButton" id="rbtn_no_run_from_line"> + <property name="label" translatable="yes">Do not use run from line</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_rbtn_run_from_line_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbtn_run_from_line"> + <property name="label" translatable="yes">Use run from line</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <property name="group">rbtn_no_run_from_line</property> + <signal name="toggled" handler="on_rbtn_run_from_line_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_run_from_line"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Run from line</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frm_file_to_load"> + <property name="visible">True</property> + <property name="tooltip_text" translatable="yes">Select the file you want to be loaded on start of gmoccapy</property> + <property name="label_xalign">0.5</property> + <child> + <object class="GtkAlignment" id="ali_file_to_load"> + <property name="visible">True</property> + <property name="top_padding">5</property> + <property name="bottom_padding">5</property> + <property name="left_padding">5</property> + <property name="right_padding">5</property> + <child> + <object class="GtkVBox" id="vbox_file_to_load"> + <property name="visible">True</property> + <child> + <object class="GtkFileChooserButton" id="file_to_load_chooser"> + <property name="visible">True</property> + <property name="filter">ff_file_to_load</property> + <signal name="file_set" handler="on_file_to_load_chooser_file_set"/> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHButtonBox" id="hbtb_file_to_load"> + <property name="visible">True</property> + <child> + <object class="GtkButton" id="btn_use_current"> + <property name="label" translatable="yes">current + file</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_use_current_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_none"> + <property name="label" translatable="yes">none</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_none_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">5</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">5</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_file_to_load"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>File to load on start</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label8"> + <property name="visible">True</property> + </object> + <packing> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_log_actions"> + <property name="label" translatable="yes">Log actions</property> + <property name="width_request">100</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Log all actions in the alarm history</property> + <signal name="toggled" handler="on_tbtn_log_actions_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_shut_down"> + <property name="label">gtk-quit</property> + <property name="width_request">100</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Close gmoccapy</property> + <property name="use_stock">True</property> + <signal name="clicked" handler="on_btn_exit_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">7</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lbl_frm_hardware"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Hardware and security</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="pack_type">end</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_setup_settings"> + <property name="visible">True</property> + <property name="label" translatable="yes">Settings</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scw_alarm_history"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <object class="GtkTextView" id="alarm_history"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="cursor_visible">False</property> + <property name="buffer">alarm_buffer</property> + </object> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_setup_alarm_history"> + <property name="visible">True</property> + <property name="label" translatable="yes">Alarm History</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_main_settings"> + <property name="visible">True</property> + <property name="label" translatable="yes">Settings</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkNotebook" id="ntb_user_tabs"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <object class="GtkEventBox" id="eventbox1"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_user_tab"> + <property name="visible">True</property> + <property name="label" translatable="yes">User tab 1</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_user_tabs"> + <property name="visible">True</property> + <property name="label" translatable="yes">User tabs</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="box_right"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkVButtonBox" id="vbtb_main"> + <property name="width_request">100</property> + <property name="visible">True</property> + <property name="spacing">3</property> + <property name="homogeneous">True</property> + <property name="layout_style">spread</property> + <child> + <object class="GtkToggleButton" id="tbtn_estop"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Estop the machine</property> + <signal name="toggled" handler="on_tbtn_estop_toggled"/> + <child> + <object class="GtkImage" id="img_emergency"> + <property name="visible">True</property> + <property name="pixbuf">icon/estopred.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_on"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Turn the machine on/off</property> + <signal name="toggled" handler="on_tbtn_on_toggled"/> + <child> + <object class="GtkImage" id="img_machine_off"> + <property name="visible">True</property> + <property name="pixbuf">icon/machineonoff.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_manual"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_default">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">enter manual mode to jog axis by hand or touch off</property> + <property name="use_action_appearance">True</property> + <property name="image">img_manual</property> + <property name="active">True</property> + <property name="draw_indicator">False</property> + <property name="group">rbt_auto</property> + <signal name="clicked" handler="on_rbt_manual_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_mdi"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">enter MDI mode to launch g-code commands</property> + <property name="image">img_mdi</property> + <property name="draw_indicator">False</property> + <property name="group">rbt_auto</property> + <signal name="clicked" handler="on_rbt_mdi_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_auto"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">enter auto mode to run programs</property> + <property name="image">img_auto</property> + <property name="active">True</property> + <property name="draw_indicator">False</property> + <signal name="clicked" handler="on_rbt_auto_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="rbt_setup"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">Enter the setup page to adjust program options</property> + <property name="draw_indicator">False</property> + <property name="group">rbt_auto</property> + <signal name="clicked" handler="on_rbt_setup_clicked"/> + <child> + <object class="GtkImage" id="img_settings"> + <property name="visible">True</property> + <property name="pixbuf">icon/configure-2.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_user_tabs"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">show user tabs</property> + <property name="image">img_user_tabs</property> + <signal name="toggled" handler="on_tbtn_user_tabs_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkNotebook" id="ntb_button"> + <property name="visible">True</property> + <property name="show_tabs">False</property> + <property name="show_border">False</property> + <signal name="switch_page" handler="on_ntb_button_switch_page"/> + <child> + <object class="GtkHButtonBox" id="hbtb_main"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkButton" id="btn_homing"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">open homing button list</property> + <property name="image">img_ref_al</property> + <signal name="clicked" handler="on_btn_homing_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_touch"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">open touch off button list</property> + <property name="image">img_touch_off</property> + <signal name="clicked" handler="on_btn_touch_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_2"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_tool"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Open the tooleditor page</property> + <property name="image_position">top</property> + <signal name="clicked" handler="on_btn_tool_clicked"/> + <child> + <object class="GtkImage" id="img_tools"> + <property name="visible">True</property> + <property name="pixbuf">icon/tools.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_21"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_7"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_9"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_fullsize_preview"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">make the preview as large as possible</property> + <property name="image">img_fullsize_preview</property> + <signal name="toggled" handler="on_tbtn_fullsize_preview_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_3"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_exit"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Close moccapy / leave the program</property> + <property name="image">img_close</property> + <signal name="clicked" handler="on_btn_exit_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">9</property> + </packing> + </child> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_button_manuel"> + <property name="visible">True</property> + <property name="label">manuel button list</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHButtonBox" id="hbtb_MDI"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <object class="GtkButton" id="btn_show_kbd"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">This button will show or hide the Keyboard</property> + <signal name="clicked" handler="on_btn_show_kbd_clicked"/> + <child> + <object class="GtkImage" id="img_keyboard"> + <property name="visible">True</property> + <property name="pixbuf">icon/keyboard.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">9</property> + <property name="secondary">True</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_button_mdi"> + <property name="visible">True</property> + <property name="label">MDI button list</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHButtonBox" id="hbtb_auto"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkButton" id="btn_run"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">run the loaded program</property> + <property name="related_action">hal_toggleaction_run</property> + <property name="image">img_run</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_stop"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">stop the running program</property> + <property name="related_action">hal_action_stop</property> + <property name="image">img_stop</property> + <signal name="clicked" handler="on_btn_stop_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_step"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">run the program step by step</property> + <property name="related_action">hal_action_step</property> + <property name="image">img_step</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_pause"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Pause a running program</property> + <property name="related_action">hal_toggleaction_pause</property> + <signal name="toggled" handler="on_tbtn_pause_toggled"/> + <child> + <object class="GtkImage" id="img_pause"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="tooltip_markup">pause the running program</property> + <property name="pixbuf">icon/pause.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_from_line"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">run from line</property> + <property name="image">img_run_from</property> + <signal name="clicked" handler="on_btn_from_line_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_optional_stops"> + <property name="label">M1</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Ignore or not the optional stops. A pushed button will result in ignoring all M1 commands. The button will indicate a yellow background.</property> + <signal name="toggled" handler="on_tbtn_optional_stops_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="tbtn_optional_blocks"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Machine or not the optional blocks of the program. If the button is pressed, the optional blocks will not be machined. The button will indicate this by a yellow background.</property> + <signal name="toggled" handler="on_tbtn_optional_blocks_toggled"/> + <child> + <object class="GtkImage" id="img_optional_blocks"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/tool_blockdelete.gif</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_reload"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">reload the program, you need to do that after editing</property> + <property name="related_action">hal_action_reload</property> + <property name="image">img_reload</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_load"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">load a program</property> + <property name="image">img_open</property> + <signal name="clicked" handler="on_btn_load_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_edit"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">edit the program</property> + <property name="image">img_editor</property> + <signal name="clicked" handler="on_btn_edit_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">9</property> + </packing> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_button_auto"> + <property name="visible">True</property> + <property name="label">Auto button list</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHButtonBox" id="hbtb_ref"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkLabel" id="lbl_space_8"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_home_all"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">home all axis</property> + <signal name="clicked" handler="on_btn_home_all_clicked"/> + <child> + <object class="GtkImage" id="img_home_all"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/refall.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_4"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_home_x"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">home x axis</property> + <signal name="clicked" handler="on_btn_home_selected_clicked"/> + <child> + <object class="GtkImage" id="img_home_x"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/refx.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_home_y"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">home y axis</property> + <signal name="clicked" handler="on_btn_home_selected_clicked"/> + <child> + <object class="GtkImage" id="img_home_y"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/refy.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_replace_y"/> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_home_z"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">home z axis</property> + <signal name="clicked" handler="on_btn_home_selected_clicked"/> + <child> + <object class="GtkImage" id="img_home_z"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/refz.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_home_4"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_home_selected_clicked"/> + <child> + <object class="GtkImage" id="img_home_a"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/refa.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_replace_4"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_unhome_all"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_unhome_all_clicked"/> + <child> + <object class="GtkImage" id="img_unhome_all"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/unhome.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">9</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_6"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">10</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_back_ref"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">go back to main button list</property> + <property name="image">img_back_ref</property> + <signal name="clicked" handler="on_btn_back_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">11</property> + </packing> + </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_btn_homing"> + <property name="label">homing button</property> + </object> + <packing> + <property name="position">3</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHButtonBox" id="hbtb_touch_off"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkToggleButton" id="tbtn_edit_offsets"> + <property name="label" translatable="yes"> edit +offsets</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="toggled" handler="on_tbtn_edit_offsets_toggled"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_zero_x"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">touch off x / set x to 0</property> + <signal name="clicked" handler="on_btn_zero_x_clicked"/> + <child> + <object class="GtkImage" id="img_zero_x"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/touchoffx.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_zero_y"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">touch off y / set y to 0</property> + <signal name="clicked" handler="on_btn_zero_y_clicked"/> + <child> + <object class="GtkImage" id="img_zero_y"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/touchoffy.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_replace_zero_y"> + <property name="width_request">56</property> + <property name="height_request">56</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_zero_z"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">touch off z / set to 0</property> + <signal name="clicked" handler="on_btn_zero_z_clicked"/> + <child> + <object class="GtkImage" id="img_zero_z"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="tooltip_markup">touch off z / set z to 0</property> + <property name="pixbuf">icon/touchoffz.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_zero_g92"> + <property name="label" translatable="yes">zero +G92</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_zero_g92_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_set_value_x"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">touch off x / set x to an desired value</property> + <signal name="clicked" handler="on_btn_set_value_clicked"/> + <child> + <object class="GtkImage" id="img_set_value_x"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/touchoffx_value.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_set_value_y"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">touch off y / set y to an desired value</property> + <signal name="clicked" handler="on_btn_set_value_clicked"/> + <child> + <object class="GtkImage" id="img_set_value_y"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/touchoffy_value.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_replace_set_value_y"> + <property name="width_request">56</property> + <property name="height_request">56</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_set_value_z"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">touch off z / set z to an desired value</property> + <signal name="clicked" handler="on_btn_set_value_clicked"/> + <child> + <object class="GtkImage" id="img_set_value_z"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/touchoffz_value.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">9</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_set_selected"> + <property name="label" translatable="yes"> set +selected</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_markup">set the selected coordinate system to be the active one</property> + <signal name="clicked" handler="on_btn_set_selected_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">10</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_back_zero"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="image">img_back_zero</property> + <signal name="clicked" handler="on_btn_back_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">11</property> + </packing> + </child> + </object> + <packing> + <property name="position">4</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_btn_touch_off"> + <property name="visible">True</property> + <property name="label">touch_off button</property> + </object> + <packing> + <property name="position">4</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHButtonBox" id="hbtb_setup"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkButton" id="btn_delete"> + <property name="label" translatable="yes">delete MDI</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">delete MDI history</property> + <signal name="clicked" handler="on_btn_delete_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_17"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_1"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_15"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_classicladder"> + <property name="label" translatable="yes">Cl.-ladder</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Open classicladder</property> + <signal name="clicked" handler="on_btn_classicladder_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_hal_scope"> + <property name="label" translatable="yes">Hal-Scope</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">launch hal scope</property> + <signal name="clicked" handler="on_btn_hal_scope_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_status"> + <property name="label" translatable="yes">Status</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">launch linuxcnc status</property> + <signal name="clicked" handler="on_btn_status_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_hal_meter"> + <property name="label" translatable="yes">Hal Meter</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">launch hal meter</property> + <property name="xalign">0.51999998092651367</property> + <signal name="clicked" handler="on_btn_hal_meter_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_calibration"> + <property name="label" translatable="yes">Calibration</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">launch calibration</property> + <signal name="clicked" handler="on_btn_calibration_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_show_hal"> + <property name="label" translatable="yes">Halshow</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">opens the show hal tool</property> + <signal name="clicked" handler="on_btn_show_hal_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">9</property> + </packing> + </child> + </object> + <packing> + <property name="position">5</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_button_setup"> + <property name="visible">True</property> + <property name="label">setup button list</property> + </object> + <packing> + <property name="position">5</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHButtonBox" id="hbtb_edit"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkLabel" id="lbl_space_19"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_save"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">save the file with the original name</property> + <property name="related_action">hal_action_save</property> + <property name="image_position">right</property> + <child> + <object class="GtkImage" id="img_save"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="stock">gtk-save</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_save_as"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">save the file with a new name</property> + <property name="related_action">hal_action_saveas</property> + <child> + <object class="GtkImage" id="img_save_as"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="stock">gtk-save-as</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_save_and_run"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">save the program reload it and run it</property> + <signal name="clicked" handler="on_btn_save_and_run_clicked"/> + <child> + <object class="GtkImage" id="img_save_and_run"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="stock">gtk-media-play</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_23"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_new"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">clear the edit field and make a new file</property> + <signal name="clicked" handler="on_btn_new_clicked"/> + <child> + <object class="GtkImage" id="img_new"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="stock">gtk-new</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_open"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">open a file to edit</property> + <property name="related_action">hal_action_open</property> + <child> + <object class="GtkImage" id="img_open_edit"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="stock">gtk-open</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_close"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">close the editor without saving any changes</property> + <signal name="clicked" handler="on_btn_close_clicked"/> + <child> + <object class="GtkImage" id="img_clos"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="stock">gtk-close</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_keyb"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Show or hide the virtual keyboard</property> + <signal name="clicked" handler="on_btn_show_kbd_clicked"/> + <child> + <object class="GtkImage" id="img_keyboard2"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/keyboard.png</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_back_edit"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Go back to main button list</property> + <signal name="clicked" handler="on_btn_back_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">9</property> + </packing> + </child> + </object> + <packing> + <property name="position">6</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_button_edit"> + <property name="visible">True</property> + <property name="label">edit buttons</property> + </object> + <packing> + <property name="position">6</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHButtonBox" id="hbtb_tool"> + <property name="visible">True</property> + <child> + <object class="GtkButton" id="btn_delete_tool"> + <property name="label" translatable="yes">Delete</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">delete selected tool or tools</property> + <signal name="clicked" handler="on_btn_delete_tool_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_add_tool"> + <property name="label" translatable="yes">Add</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">add a new tool to tool table</property> + <signal name="clicked" handler="on_btn_add_tool_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_reload_tooltable"> + <property name="label" translatable="yes">Reload</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">reload tool table from file</property> + <signal name="clicked" handler="on_btn_reload_tooltable_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_apply_tool_changes"> + <property name="label" translatable="yes">Apply</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">apply the changes you made, G43 will be excecuted only if it is active g-code</property> + <signal name="clicked" handler="on_btn_apply_tool_changes_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_select_tool_by_no"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_btn_select_tool_by_no_clicked"/> + <child> + <object class="GtkImage" id="img_tool_by_no"> + <property name="visible">True</property> + <property name="pixbuf">icon/tool_by_no.svg</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_index_tool"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">change tool with the command M61 Q?, no machine move will be done</property> + <signal name="clicked" handler="on_btn_selected_tool_clicked"/> + <child> + <object class="GtkImage" id="img_index_tool"> + <property name="visible">True</property> + <property name="pixbuf">icon/index_tool.svg</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_change_tool"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">change tool to the selected one</property> + <property name="image">img_toolchange</property> + <signal name="clicked" handler="on_btn_selected_tool_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_tool_touchoff_x"> + <property name="label" translatable="yes">touchoff + tool x</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">touch off the tool and set the value to the tool table</property> + <signal name="clicked" handler="on_btn_tool_touchoff_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_hide_tto_x"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_tool_touchoff_z"> + <property name="label" translatable="yes">touchoff + tool z</property> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">touch off the tool and set the value to the tool table</property> + <signal name="clicked" handler="on_btn_tool_touchoff_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">9</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_back_tool"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Go back to main button list</property> + <property name="image">img_back_tool</property> + <signal name="clicked" handler="on_btn_back_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">10</property> + </packing> + </child> + </object> + <packing> + <property name="position">7</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_button_tool"> + <property name="visible">True</property> + <property name="label">tool</property> + </object> + <packing> + <property name="position">7</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkHButtonBox" id="hbtb_load_file"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkButton" id="btn_home"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Move to your home directory</property> + <property name="image">img_home</property> + <signal name="clicked" handler="on_btn_home_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_dir_up"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Move to parrent directory</property> + <property name="image">img_dir_up</property> + <signal name="clicked" handler="on_btn_dir_up_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_5"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_sel_prev"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Select the previos file</property> + <property name="image">img_sel_prev</property> + <property name="image_position">top</property> + <signal name="clicked" handler="on_btn_sel_prev_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_sel_next"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Select the next file</property> + <property name="image">img_sel_next</property> + <property name="image_position">top</property> + <signal name="clicked" handler="on_btn_sel_next_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_jump_to"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Jump to user defined directory</property> + <property name="image">img_jump_to</property> + <property name="image_position">top</property> + <signal name="clicked" handler="on_btn_jump_to_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_12"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_select"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">select the highlighted file and return the path</property> + <property name="image">img_select</property> + <property name="image_position">top</property> + <signal name="clicked" handler="on_btn_select_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lbl_space_13"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_back_file_load"> + <property name="width_request">56</property> + <property name="height_request">56</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Close without returning a file path</property> + <property name="image">img_back_zero1</property> + <signal name="clicked" handler="on_btn_back_clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">9</property> + </packing> + </child> + </object> + <packing> + <property name="position">8</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="lbl_ntb_button_load_file"> + <property name="visible">True</property> + <property name="label" translatable="yes">Load File</property> + </object> + <packing> + <property name="position">8</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <object class="GtkAdjustment" id="adj_jog_vel"> + <property name="value">1500</property> + <property name="upper">10500</property> + <property name="step_increment">50</property> + <property name="page_increment">500</property> + <property name="page_size">500</property> + <signal name="value_changed" handler="on_adj_jog_vel_value_changed"/> + </object> + <object class="GtkActionGroup" id="actiongroup1"/> + <object class="GtkImage" id="img_emergency_off"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/E-Stop.gif</property> + </object> + <object class="GtkAdjustment" id="adj_spindle"> + <property name="value">100</property> + <property name="upper">6000</property> + <property name="step_increment">1</property> + <property name="page_increment">1</property> + <property name="page_size">1</property> + </object> + <object class="GtkAdjustment" id="adj_feed"> + <property name="value">100</property> + <property name="lower">10</property> + <property name="upper">160</property> + <property name="step_increment">10</property> + <property name="page_increment">10</property> + <property name="page_size">10</property> + </object> + <object class="GtkAdjustment" id="adj_max_vel"> + <property name="value">1800</property> + <property name="lower">100</property> + <property name="upper">8500</property> + <property name="step_increment">100</property> + <property name="page_increment">50</property> + <property name="page_size">50</property> + <signal name="value_changed" handler="on_adj_max_vel_value_changed"/> + </object> + <object class="GtkImage" id="img_machine_on"> + <property name="visible">True</property> + <property name="pixbuf">icon/machineonoff.png</property> + </object> + <object class="GtkImage" id="img_ref_al"> + <property name="visible">True</property> + <property name="pixbuf">icon/refall.png</property> + </object> + <object class="EMC_Action_Run" id="hal_action_run"/> + <object class="EMC_Action_Step" id="hal_action_step"/> + <object class="EMC_Action_Stop" id="hal_action_stop"/> + <object class="EMC_ToggleAction_Pause" id="hal_toggleaction_pause"/> + <object class="EMC_Action_Open" id="hal_action_open"/> + <object class="EMC_Action_Reload" id="hal_action_reload"/> + <object class="GtkImage" id="img_unhome"> + <property name="visible">True</property> + <property name="pixbuf">icon/unhome.png</property> + </object> + <object class="GtkImage" id="img_forward"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/forward.png</property> + </object> + <object class="GtkImage" id="img_forward_on"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/forward_on.gif</property> + </object> + <object class="GtkImage" id="img_reverse_on"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/reverse_on.gif</property> + </object> + <object class="GtkImage" id="img_sstop"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/stop_on.gif</property> + </object> + <object class="GtkImage" id="img_stop_on"> + <property name="width_request">48</property> + <property name="height_request">48</property> + <property name="visible">True</property> + <property name="pixbuf">icon/stop.gif</property> + </object> + <object class="GtkImage" id="img_close"> + <property name="visible">True</property> + <property name="pixbuf">icon/exit_application.png</property> + </object> + <object class="GtkImage" id="img_run"> + <property name="visible">True</property> + <property name="pixbuf">icon/start.png</property> + </object> + <object class="GtkImage" id="img_stop"> + <property name="visible">True</property> + <property name="pixbuf">icon/stop.png</property> + </object> + <object class="GtkImage" id="img_step"> + <property name="visible">True</property> + <property name="pixbuf">icon/step.png</property> + </object> + <object class="GtkImage" id="img_run_from"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="pixbuf">icon/runfrom.png</property> + </object> + <object class="GtkImage" id="img_reload"> + <property name="visible">True</property> + <property name="pixbuf">icon/reload.png</property> + </object> + <object class="GtkImage" id="img_open"> + <property name="visible">True</property> + <property name="stock">gtk-open</property> + </object> + <object class="GtkImage" id="img_editor"> + <property name="visible">True</property> + <property name="pixbuf">icon/editor.png</property> + </object> + <object class="GtkTextBuffer" id="alarm_buffer"/> + <object class="GtkImage" id="img_touch_off"> + <property name="visible">True</property> + <property name="pixbuf">icon/touchoffwz.png</property> + </object> + <object class="GtkListStore" id="lstst_themes"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0">test</col> + </row> + <row> + <col id="0">test2</col> + </row> + </data> + </object> + <object class="GtkAdjustment" id="adj_grid_size"> + <property name="upper">100</property> + <property name="step_increment">0.10000000000000001</property> + </object> + <object class="GtkAdjustment" id="adj_start_spindle_RPM"> + <property name="value">300</property> + <property name="lower">50</property> + <property name="upper">10000</property> + <property name="step_increment">25</property> + <signal name="value_changed" handler="on_adj_start_spindle_RPM_value_changed"/> + </object> + <object class="EMC_Action_Unhome" id="hal_action_unhome_all"> + <property name="tooltip">This will unhome all axis</property> + </object> + <object class="EMC_Stat" id="hal_status"> + <signal name="state_off" handler="on_hal_status_state_off"/> + <signal name="interp_run" handler="on_hal_status_interp_run"/> + <signal name="state_estop_reset" handler="on_hal_status_state_estop_reset"/> + <signal name="not_all_homed" handler="on_hal_status_not_all_homed"/> + <signal name="homed" handler="on_hal_status_homed"/> + <signal name="state_on" handler="on_hal_status_state_on"/> + <signal name="file_loaded" handler="on_hal_status_file_loaded"/> + <signal name="all_homed" handler="on_hal_status_all_homed"/> + <signal name="interp_idle" handler="on_hal_status_interp_idle"/> + <signal name="state_estop" handler="on_hal_status_state_estop"/> + <signal name="tool_in_spindle_changed" handler="on_hal_status_tool_in_spindle_changed"/> + </object> + <object class="GtkImage" id="img_back_zero1"> + <property name="visible">True</property> + <property name="ypad">3</property> + <property name="icon_name">edit-undo</property> + </object> + <object class="EMC_Action_Save" id="hal_action_save"> + <property name="stock_id">gtk-save</property> + <property name="textview">gcode_view</property> + </object> + <object class="EMC_Action_SaveAs" id="hal_action_saveas"> + <property name="stock_id">gtk-save-as</property> + <property name="icon_name">document-save</property> + <property name="textview">gcode_view</property> + </object> + <object class="GtkImage" id="img_coolant_on"> + <property name="visible">True</property> + <property name="pixbuf">icon/coolant_on.gif</property> + </object> + <object class="GtkImage" id="img_mist_on"> + <property name="visible">True</property> + <property name="pixbuf">icon/mist_on.gif</property> + </object> + <object class="GtkImage" id="img_toolchange"> + <property name="visible">True</property> + <property name="pixbuf">icon/toolchange.png</property> + </object> + <object class="GtkImage" id="img_coolant_off"> + <property name="visible">True</property> + <property name="pixbuf">icon/coolant_off.png</property> + </object> + <object class="GtkImage" id="img_mist_off"> + <property name="visible">True</property> + <property name="pixbuf">icon/mist_off.png</property> + </object> + <object class="GtkImage" id="img_brake_macro"> + <property name="visible">True</property> + <property name="pixbuf">icon/stop.png</property> + </object> + <object class="GtkImage" id="img_manual"> + <property name="visible">True</property> + <property name="pixbuf">icon/jog.png</property> + </object> + <object class="GtkImage" id="img_mdi"> + <property name="visible">True</property> + <property name="pixbuf">icon/mdi.png</property> + </object> + <object class="GtkImage" id="img_auto"> + <property name="visible">True</property> + <property name="pixbuf">icon/run.png</property> + </object> + <object class="GtkImage" id="img_home_b"> + <property name="visible">True</property> + <property name="pixbuf">icon/refb.png</property> + </object> + <object class="GtkImage" id="img_zoom_in"> + <property name="visible">True</property> + <property name="pixbuf">icon/zoom-in.png</property> + </object> + <object class="GtkImage" id="img_zoom_out"> + <property name="visible">True</property> + <property name="pixbuf">icon/zoom-out.png</property> + </object> + <object class="GtkImage" id="img_fullsize_preview"> + <property name="visible">True</property> + <property name="pixbuf">icon/fullscreen_preview.png</property> + </object> + <object class="GtkImage" id="img_user_tabs"> + <property name="visible">True</property> + <property name="pixbuf">icon/user_tabs.png</property> + </object> + <object class="GtkFileFilter" id="ff_file_to_load"/> + <object class="GtkAdjustment" id="adj_spindle_bar_min"> + <property name="upper">10000</property> + <property name="step_increment">50</property> + <property name="page_increment">10</property> + <property name="page_size">10</property> + <signal name="value_changed" handler="on_adj_spindle_bar_min_value_changed"/> + </object> + <object class="GtkAdjustment" id="adj_spindle_bar_max"> + <property name="value">6000</property> + <property name="upper">100000</property> + <property name="step_increment">50</property> + <property name="page_increment">10</property> + <property name="page_size">10</property> + <signal name="value_changed" handler="on_adj_spindle_bar_max_value_changed"/> + </object> + <object class="GtkAdjustment" id="adj_scale_max_vel"> + <property name="value">1</property> + <property name="lower">0.10000000022351742</property> + <property name="upper">1000</property> + <property name="step_increment">0.10000000000000001</property> + <property name="page_increment">10</property> + <property name="page_size">10</property> + <signal name="value_changed" handler="on_adj_scale_max_vel_value_changed"/> + </object> + <object class="GtkAdjustment" id="adj_scale_jog_vel"> + <property name="value">1</property> + <property name="lower">0.10000000000000001</property> + <property name="upper">1000</property> + <property name="step_increment">0.10000000000000001</property> + <property name="page_increment">10</property> + <property name="page_size">10</property> + <signal name="value_changed" handler="on_adj_scale_jog_vel_value_changed"/> + </object> + <object class="GtkAdjustment" id="adj_scale_feed_override"> + <property name="value">1</property> + <property name="lower">0.10000000000000001</property> + <property name="upper">10</property> + <property name="step_increment">0.10000000000000001</property> + <property name="page_increment">1</property> + <property name="page_size">1</property> + <signal name="value_changed" handler="on_adj_scale_feed_override_value_changed"/> + </object> + <object class="GtkAdjustment" id="adj_scale_spindle_override"> + <property name="value">1</property> + <property name="lower">0.10000000000000001</property> + <property name="upper">10</property> + <property name="step_increment">0.10000000000000001</property> + <property name="page_increment">1</property> + <property name="page_size">1</property> + <signal name="value_changed" handler="on_adj_scale_spindle_override_value_changed"/> + </object> + <object class="GtkAdjustment" id="adj_x_pos"> + <property name="value">10</property> + <property name="upper">1024</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + <property name="page_size">10</property> + <signal name="value_changed" handler="on_adj_x_pos_value_changed"/> + </object> + <object class="GtkAdjustment" id="adj_y_pos"> + <property name="value">10</property> + <property name="upper">768</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + <property name="page_size">10</property> + <signal name="value_changed" handler="on_adj_y_pos_value_changed"/> + </object> + <object class="GtkAdjustment" id="adj_width"> + <property name="value">979</property> + <property name="lower">979</property> + <property name="upper">1280</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + <property name="page_size">10</property> + <signal name="value_changed" handler="on_adj_width_value_changed"/> + </object> + <object class="GtkAdjustment" id="adj_height"> + <property name="value">750</property> + <property name="lower">750</property> + <property name="upper">2000</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + <property name="page_size">10</property> + <signal name="value_changed" handler="on_adj_height_value_changed"/> + </object> + <object class="GtkImage" id="img_back_ref"> + <property name="visible">True</property> + <property name="icon_name">edit-undo</property> + </object> + <object class="GtkImage" id="img_toolchange1"> + <property name="visible">True</property> + <property name="pixbuf">icon/toolchange.png</property> + </object> + <object class="GtkTextBuffer" id="log_buffer"/> + <object class="GtkImage" id="img_back_tool"> + <property name="visible">True</property> + <property name="icon_name">edit-undo</property> + </object> + <object class="GtkImage" id="img_back_zero"> + <property name="visible">True</property> + <property name="icon_name">edit-undo</property> + </object> + <object class="EMC_ToggleAction_Run" id="hal_toggleaction_run"/> + <object class="GtkImage" id="img_hom_all"> + <property name="visible">True</property> + <property name="pixbuf">icon/refall.png</property> + </object> + <object class="GtkImage" id="img_touch_off_z"> + <property name="visible">True</property> + <property name="pixbuf">icon/touchoffwz.png</property> + </object> + <object class="GtkImage" id="img_close1"> + <property name="visible">True</property> + <property name="pixbuf">icon/exit_application.png</property> + </object> + <object class="GtkImage" id="img_home"> + <property name="visible">True</property> + <property name="stock">gtk-home</property> + </object> + <object class="GtkImage" id="img_dir_up"> + <property name="visible">True</property> + <property name="stock">gtk-sort-ascending</property> + </object> + <object class="GtkImage" id="img_sel_prev"> + <property name="visible">True</property> + <property name="stock">gtk-go-back</property> + </object> + <object class="GtkImage" id="img_sel_next"> + <property name="visible">True</property> + <property name="stock">gtk-go-forward</property> + </object> + <object class="GtkImage" id="img_jump_to"> + <property name="visible">True</property> + <property name="stock">gtk-jump-to</property> + </object> + <object class="GtkImage" id="img_select"> + <property name="visible">True</property> + <property name="stock">gtk-ok</property> + </object> + <object class="GtkImage" id="img_home_c"> + <property name="visible">True</property> + <property name="pixbuf">icon/refc.png</property> + </object> + <object class="GtkImage" id="img_home_u"> + <property name="visible">True</property> + <property name="pixbuf">icon/refu.png</property> + </object> + <object class="GtkImage" id="img_home_v"> + <property name="visible">True</property> + <property name="pixbuf">icon/refv.png</property> + </object> + <object class="GtkImage" id="img_home_w"> + <property name="visible">True</property> + <property name="pixbuf">icon/refw.png</property> + </object> +</interface> diff --git a/share/gscreen/skins/gmoccapy/gmoccapy_handler.py b/share/gscreen/skins/gmoccapy/gmoccapy_handler.py new file mode 100755 index 000000000..ad77519ef --- /dev/null +++ b/share/gscreen/skins/gmoccapy/gmoccapy_handler.py @@ -0,0 +1,2864 @@ +#!/usr/bin/env python +# -*- coding:UTF-8 -*- +""" + A try of a new GUI for LinuxCNC based on gladevcp and Python + Based on the design of moccagui from Tom + and based on gscreen from Chris Morley + and with the help from Michael Haberler + and Chris Morley + + Copyright 2012 Norbert Schechner + nieson@web.de + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +""" +import hal # base hal class to react to hal signals +import hal_glib # needed to make our own hal pins +import gtk # base for pygtk widgets and constants +import os # needed to get the paths and directorys +import pango # needed for font settings and changing +import gladevcp.makepins # needed for the dialog"s calulator widget +import locale # for translations +import subprocess # to launch onboard and other proceses + +# standard handler call +def get_handlers(halcomp,builder,useropts,gscreen): + return [HandlerClass(halcomp,builder,useropts,gscreen)] + +# this is for hiding the pointer when using a touch screen +pixmap = gtk.gdk.Pixmap(None, 1, 1, 1) +color = gtk.gdk.Color() +INVISABLE = gtk.gdk.Cursor(pixmap, pixmap, color, color, 0, 0) + +# constants +_RELEASE = "0.9.7" +_MM = 1 # Metric units are used +_IMPERIAL = 0 # Imperial Units are used +_MANUAL = 1 # Check for the mode Manual +_AUTO = 2 # Check for the mode Auto +_MDI = 3 # Check for the mode MDI +_RUN = 1 # needed to check if the interpreter is running +_IDLE = 0 # needed to check if the interpreter is idle + +# # This is a class that do allow you to show messages in popup windows +# # it will be used later on to display the error messages like known from axis +# import gtk +# import gobject +# import pango +# +# class Notification(gtk.Window): +# +# __gtype_name__ = 'Notification' +# __gproperties__ = { +# 'icon_size' : ( gobject.TYPE_INT, 'Icon Size', 'Sets the size of the displayed button icon', +# 12,96,48, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT), +# 'frame_width' : ( gobject.TYPE_INT, 'Frame Width', 'Sets the frame width in pixel', +# 12,96,48, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT), +# 'font' : ( gobject.TYPE_STRING, 'Pango Font', 'Display font to use', +# "sans 10", gobject.PARAM_READWRITE|gobject.PARAM_CONSTRUCT), +# } +# __gproperties = __gproperties__ +# +# # build the main gui +# def __init__(self): +# gtk.Window.__init__(self) +# self.connect("destroy",lambda*w:gtk.main_quit()) +# self.messages=[] +# self.popup=gtk.Window(gtk.WINDOW_POPUP) +# self.vbox = gtk.VBox() +# self.popup.add(self.vbox) +# self.icon_size = 24 +# self.frame_width = 400 +# self.font = "sans 22" +# +# # this will fill the main gui with the frames, containing the messages or errors +# def _show_message(self,message): +# number = message[0] +# text = message[1] +# frame = gtk.Frame() +# frame.set_label("") +# hbox = gtk.HBox() +# frame.add(hbox) +# labelnumber = gtk.Label(number) +# hbox.pack_start(labelnumber) +# label=gtk.Label() +# label.set_line_wrap(True) +# label.set_text(text) +# label.set_size_request(self.frame_width,-1) +# font_desc = pango.FontDescription(self.font) +# label.modify_font(font_desc) +# hbox.pack_start(label) +# btn_close = gtk.Button() +# image = gtk.Image() +# image.set_from_stock(gtk.STOCK_CANCEL,self.icon_size) +# btn_close.set_image(image) +# btn_close.connect("clicked", self._on_btn_close_clicked,labelnumber.get_text()) +# hbox.pack_start(btn_close) +# self.vbox.pack_end(frame) +# frame.show() +# label.show() +# btn_close.show() +# hbox.show() +# # labelnumber.show() +# self.vbox.show() +# self.popup.show() +# self.popup.move(0,0) +# +# # add a message, the message is a string, it will be line wraped +# # if to long for the frame +# def add_message(self, message): +# number_of_messages = len(self.messages) +# self.messages.append([number_of_messages,message]) +# self._show_message(self.messages[number_of_messages]) +# +# def del_first(self): +# if len(self.messages) != 0: +# del self.messages[0] +# self._refill_messages() +# +# def del_last(self): +# if len(self.messages) != 0: +# del self.messages[len(self.messages)-1] +# self._refill_messages() +# +# # this will delete a message, if the user gives a valid number it will be deleted, +# # but the user must take care to use the correct number +# # if you give a value of "-1" all messages will be deletet +# def del_message(self,messagenumber): +# if messagenumber == -1: +# self.messages = [] +# self._refill_messages() +# return True +# elif messagenumber > len(self.messages) or messagenumber < 0: +# self.add_message(_("Error trying to delet the message with number %s"%messagenumber)) +# return False +# try: +# del self.messages[int(messagenumber)] +# except: +# return False +# self._refill_messages() +# return True +# +# # this is the recomendet way to delete a message, by clicking the +# # close button of the coresponding frame +# def _on_btn_close_clicked(self,widget,labelnumber): +# del self.messages[int(labelnumber)] +# self._refill_messages() +# +# def _refill_messages(self): +# # first we have to hide all messages, otherwise the popup window will mantain +# # all the old messages +# self.popup.hide_all() +# # then we rezise the popup window to a very smal size, otherwise the dimensions +# # of the window will be mantained +# self.popup.resize(10,10) +# # if it was the laste message, than we can hide the popup window +# if len(self.messages) == 0: +# self.popup.hide() +# else: # or we do refill the popup window +# index = 0 +# for message in self.messages: +# self.messages[index][0] = index +# self._show_message(message) +# index += 1 +# +# def do_get_property(self, property): +# name = property.name.replace('-', '_') +# if name in self.__gproperties.keys(): +# return getattr(self, name) +# else: +# raise AttributeError('unknown iconview get_property %s' % property.name) +# +# def do_set_property(self, property, value): +# try: +# name = property.name.replace('-', '_') +# if name in self.__gproperties.keys(): +# setattr(self, name, value) +# self.queue_draw() +# if name == 'icon_size': +# self.icon_size(value) +# if name == 'frame_width': +# self.frame_width = value +# if name == 'font': +# self.font(value) +# else: +# raise AttributeError('unknown iconview set_property %s' % property.name) +# except: +# pass + + +# This is a handler file for using Gscreen"s infrastructure +# to load a completely custom glade screen +# The only things that really matters is that it"s saved as a GTK builder project, +# the toplevel window is caller window1 (The default name) and you connect a destroy +# window signal else you can"t close down linuxcnc +class HandlerClass: + + # This will be pretty standard to gain access to everything + # emc is for control and status of linuxcnc + # data is important data from gscreen and linuxcnc + # widgets is all the widgets from the glade files + # gscreen is for access to gscreens methods + def __init__(self, halcomp,builder,useropts,gscreen): + self.emc = gscreen.emc + self.data = gscreen.data + self.widgets = gscreen.widgets + self.gscreen = gscreen + self.distance = 0 # This global will hold the jog distance + self.interpreter = _IDLE # This hold the interpreter state, so we could check if actions are allowed + self.wait_tool_change = False # this is needed to get back to manual mode after a tool change + self.macrobuttons =[] # The list of all macrios defined in the INI file + self.log = False # decide if the actions should be loged + self.fo_counts = 0 # need to calculate diference in counts to change the feed override slider + self.so_counts = 0 # need to calculate diference in counts to change the spindle override slider + self.jv_counts = 0 # need to calculate diference in counts to change the jog_vel slider + self.mv_counts = 0 # need to calculate diference in counts to change the max_speed slider + self.incr_rbt_list= [] # we use this list to add hal pin to the button later + self.no_increments = 0 # number of increments from INI File, because of space we allow a max of 10 + self.unlock = False # this value will be set using the hal pin unlock settings + self.system_list = (0,"G54","G55","G56","G57","G58","G59","G59.1","G59.2","G59.3") # needed to display the labels + self.axisnumber_four = "" # we use this to get the number of the 4-th axis + self.axisletter_four = None# we use this to get the letter of the 4-th axis +# self.notification = Notification() + + def initialize_preferences(self): + self.data.theme_name = self.gscreen.prefs.getpref("gtk_theme", "Follow System Theme", str) + self.gscreen.init_general_pref() + self._init_axis_four() + + def _init_axis_four(self): + if len(self.data.axis_list) < 4: + return + axis_four = list(set(self.data.axis_list)-set(("x","y","z"))) + if len(axis_four) > 1: + message = _("gmoccapy can only handle 4 axis,\nbut you have given %d through your INI file\n"%len(self.data.axis_list)) + message += _("gmoccapy will not start\n\n") + print(message) + self.widgets.window1.destroy() + self.axisletter_four = axis_four[0] + self.axisnumber_four = "xyzabcuvw".index(self.axisletter_four) + image = self.widgets["img_home_%s"%self.axisletter_four] + self.widgets.btn_home_4.set_image(image) + + # We don"t want Gscreen to initialize it"s regular widgets because this custom + # screen doesn"t have most of them. So we add this function call. + # Since this custom screen uses gladeVCP magic for its interaction with linuxcnc + # We don"t add much to this function, but we do want to be able to change the theme so: + # We change the GTK theme to what"s in gscreen"s preference file. + # gscreen.change_theme() is a method in gscreen that changes the GTK theme of window1 + # gscreen.data.theme_name is the name of the theme from the preference file + # To truely be friendly, we should add a way to change the theme directly in the custom screen. + # we also set up the statusbar and add a ready-to-home message + def initialize_widgets(self): + # These are gscreen widgets included in this screen + self.gscreen.init_statusbar() + self.gscreen.init_tooleditor() + self.gscreen.init_embeded_terminal() + self.gscreen.init_themes() # load all avaiable themes in the combo box + self.gscreen.init_audio() + + # and now our own ones + self.init_gremlin() + self.init_hide_cursor() + self.init_keyboard() + self.init_offsetpage() + self.init_IconFileSelection() + + # now we initialize the file to load widget + self.init_file_to_load() + + self._show_offset_tab(False) + self._show_tooledit_tab(False) + self._show_iconview_tab(False) + + # and we want to set the default path + default_path = self.gscreen.inifile.find("DISPLAY", "PROGRAM_PREFIX") + if not os.path.exists(os.path.expanduser(default_path)): + print(_("Path %s from DISPLAY , PROGRAM_PREFIX does not exist")%default_path) + print(_("Trying default path...")) + default_path = "~/linuxcnc/nc_files/" + if not os.path.exists(os.path.expanduser(default_path)): + print(_("Default path to ~/linuxcnc/nc_files does not exist")) + print(_("setting now home as path")) + default_path = os.path.expanduser("~/") + self.widgets.hal_action_open.currentfolder = os.path.expanduser(default_path) + self.widgets.IconFileSelection1.set_property("start_dir",default_path) + + # set the slider limmits + self.widgets.adj_max_vel.configure(self.data._maxvelocity*60, self.data._maxvelocity * 0.1, + self.data._maxvelocity * 60 + 1, 1, 1, 1) + self.widgets.adj_jog_vel.configure(self.data.jog_rate, 0, + self.gscreen.data.jog_rate_max + 1, 1, 1, 1) + self.widgets.adj_spindle.configure(100, self.data.spindle_override_min * 100, + self.data.spindle_override_max * 100 + 1, 1, 1, 1) + self.widgets.adj_feed.configure(100, 0, self.data.feed_override_max * 100 + 1, 1, 1, 1) + + # the scale to apply to the count of the hardware mpg wheel, to avoid to much turning + default = (self.data._maxvelocity * 60 - self.data._maxvelocity * 0.1)/100 + self.scale_max_vel = self.gscreen.prefs.getpref("scale_max_vel", default, float) + self.widgets.adj_scale_max_vel.set_value(self.scale_max_vel) + default = (self.data.jog_rate_max / 100) + self.scale_jog_vel = self.gscreen.prefs.getpref("scale_jog_vel", default, float) + self.widgets.adj_scale_jog_vel.set_value(self.scale_jog_vel) + self.scale_spindle_override = self.gscreen.prefs.getpref("scale_spindle_override", 1, float) + self.widgets.adj_scale_spindle_override.set_value(self.scale_spindle_override) + self.scale_feed_override = self.gscreen.prefs.getpref("scale_feed_override", 1, float) + self.widgets.adj_scale_feed_override.set_value(self.scale_feed_override) + + # set the title of the window, to show the release + self.widgets.window1.set_title("gmoccapy for linuxcnc %s"%_RELEASE) + + # the velocity settings + self.min_spindle_rev = self.gscreen.prefs.getpref("spindle_bar_min", 0.0, float) + self.max_spindle_rev = self.gscreen.prefs.getpref("spindle_bar_max", 6000.0, float) + self.widgets.adj_spindle_bar_min.set_value((self.min_spindle_rev)) + self.widgets.adj_spindle_bar_max.set_value((self.max_spindle_rev)) + self.widgets.hal_hbar_spindle_feedback.set_property("min",float(self.min_spindle_rev)) + self.widgets.hal_hbar_spindle_feedback.set_property("max",float(self.max_spindle_rev)) + + # Window position and size + self.widgets.adj_x_pos.set_value(self.gscreen.prefs.getpref("x_pos", 10, float)) + self.widgets.adj_y_pos.set_value(self.gscreen.prefs.getpref("y_pos", 10, float)) + self.widgets.adj_width.set_value(self.gscreen.prefs.getpref("width", 979, float)) + self.widgets.adj_height.set_value(self.gscreen.prefs.getpref("height", 750, float)) + + # this sets the background colors of several buttons + # the colors are different for the states of the button + self.widgets.tbtn_on.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#FF0000")) + self.widgets.tbtn_on.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#00FF00")) + self.widgets.tbtn_estop.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FF0000")) + self.widgets.tbtn_estop.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#00FF00")) + self.widgets.rbt_manual.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.rbt_mdi.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.rbt_auto.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.rbt_setup.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.rbt_forward.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#00FF00")) + self.widgets.rbt_reverse.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#00FF00")) + self.widgets.rbt_stop.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.rbt_view_p.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.rbt_view_x.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.rbt_view_y.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.rbt_view_y2.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.rbt_view_z.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.tbtn_dtg.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.tbtn_flood.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#00FF00")) + self.widgets.tbtn_fullsize_preview.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.tbtn_log_actions.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.tbtn_mist.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#00FF00")) + self.widgets.tbtn_optional_blocks.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.tbtn_optional_stops.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.tbtn_rel.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.tbtn_units.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.tbtn_user_tabs.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.tbtn_view_dimension.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + self.widgets.tbtn_view_tool_path.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.color_parse("#FFFF00")) + + # Now we will build the option buttons to select the Jog-rates + # We do this dynamicly, because users are able to set them in INI File + # because of space on the screen only 10 items are allowed + # jogging increments + + # We get the increments from INI File with self._check_len_increments + + # The first radio button is created to get a radio button group + # The group is called according the name off the first button + # We use the pressed signal, not the toggled, otherwise two signals will be emitted + # One from the released button and one from the pressed button + # we make a list of the buttons to later add the hardware pins to them + + rbt0 = gtk.RadioButton(None, "Continuous") + rbt0.connect("pressed", self.on_increment_changed,"Continuous") + self.widgets.vbuttonbox2.pack_start(rbt0,True,True,0) + rbt0.set_property("draw_indicator",False) + rbt0.show() + self.incr_rbt_list.append(rbt0) + # the rest of the buttons are now added to the group + # self.no_increments is set while setting the hal pins with self._check_len_increments + for increment in range(1,self.no_increments): + rbt = "rbt%d"%(increment) + rbt = gtk.RadioButton(rbt0, self.data.jog_increments[increment]) + rbt.connect("pressed", self.on_increment_changed,self.data.jog_increments[increment]) + self.widgets.vbuttonbox2.pack_start(rbt,True,True,0) + rbt.set_property("draw_indicator",False) + rbt.show() + self.incr_rbt_list.append(rbt) + + self.set_property_dro("reference_type", 1) + self.set_property_dro("display_units_mm", True) + + # This is needed only because we connect all the horizontal button + # to hal pins, so the user can conect them to hardware buttons + self.h_tabs = [] + tab_main = [(0,"btn_homing"), (1,"btn_touch"),(3,"btn_tool"), + (7,"tbtn_fullsize_preview"), (9,"btn_exit") + ] + self.h_tabs.append(tab_main) + + tab_mdi = [(9,"btn_show_kbd")] + self.h_tabs.append(tab_mdi) + + tab_auto = [(0,"btn_run"),(1,"btn_stop"),(2,"btn_step"),(3,"tbtn_pause"), + (4,"btn_from_line"),(5,"tbtn_optional_stops"),(6,"tbtn_optional_blocks"), + (7,"btn_reload"),(8,"btn_load"),(9,"btn_edit") + ] + self.h_tabs.append(tab_auto) + + tab_ref = [(1,"btn_home_all"),(3,"btn_home_x"), + (5,"btn_home_z"),(7,"btn_unhome_all"),(9,"btn_back_ref") + ] + if not self.data.lathe_mode: + tab_ref.append((4,"btn_home_y")) + if len(self.data.axis_list) == 4: + tab_ref.append((6,"btn_home_4")) + self.h_tabs.append(tab_ref) + + tab_touch = [(0,"tbtn_edit_offsets"),(1,"btn_zero_x"),(3,"btn_zero_z"),(4,"btn_zero_g92"), + (5,"btn_set_value_x"),(7,"btn_set_value_z"),(8,"btn_set_selected"),(9,"btn_back_zero") + ] + if not self.data.lathe_mode: + tab_touch.append((2,"btn_zero_y")) + tab_touch.append((6,"btn_set_value_y")) + self.h_tabs.append(tab_touch) + + tab_setup = [(0,"btn_delete"),(4,"btn_classicladder"),(5,"btn_hal_scope"),(6,"btn_status"), + (7,"btn_hal_meter"),(8,"btn_calibration"),(9,"btn_show_hal") + ] + self.h_tabs.append(tab_setup) + + tab_edit = [(1,"btn_save"),(2,"btn_save_as"),(3,"btn_save_and_run"),(5,"btn_new"), + (6,"btn_open_edit"),(7,"btn_close"),(8,"btn_keyb"),(9,"btn_back_edit") + ] + self.h_tabs.append(tab_edit) + + tab_tool = [(0,"btn_delete_tool"),(1,"btn_add_tool"),(2,"btn_reload_tooltable"), + (3,"btn_apply_tool_changes"),(4,"btn_select_tool_by_no"),(5,"btn_index_tool"), + (6,"btn_change_tool"),(8,"btn_tool_touchoff_z"),(9,"btn_back_tool") + ] + if self.data.lathe_mode: + tab_tool.append((7,"btn_tool_touchoff_x")) + self.h_tabs.append(tab_tool) + + tab_file = [(0,"btn_home"),(1,"btn_dir_up"),(3,"btn_sel_prev"),(4,"btn_sel_next"), + (5,"btn_jump_to"),(7,"btn_select"),(9,"btn_back_file_load") + ] + self.h_tabs.append(tab_file) + + self.v_tabs = [(0,"tbtn_estop"),(1,"tbtn_on"),(2,"rbt_manual"),(3,"rbt_mdi"), + (4,"rbt_auto"),(5,"rbt_setup"),(6,"tbtn_user_tabs") + ] + + self.widgets.rbt_manual.set_active(True) + self.widgets.ntb_jog.set_current_page(0) + self.widgets.tbtn_optional_blocks.set_active(self.gscreen.prefs.getpref("blockdel", False)) + self.emc.blockdel(self.widgets.tbtn_optional_blocks.get_active()) + self.widgets.tbtn_optional_stops.set_active(not self.gscreen.prefs.getpref("opstop", False)) + self.emc.opstop(self.widgets.tbtn_optional_stops.get_active()) + self.log = self.gscreen.prefs.getpref("log_actions", False, bool) + self.widgets.tbtn_log_actions.set_active(self.log) + self.widgets.chk_show_dro.set_active(self.gscreen.prefs.getpref("enable_dro", False)) + self.widgets.chk_show_offsets.set_active(self.gscreen.prefs.getpref("show_offsets", False)) + self.widgets.chk_show_dtg.set_active(self.gscreen.prefs.getpref("show_dtg", False)) + self.widgets.chk_show_offsets.set_sensitive(self.widgets.chk_show_dro.get_active()) + self.widgets.chk_show_dtg.set_sensitive(self.widgets.chk_show_dro.get_active()) + if "ntb_preview" in self.gscreen.inifile.findall("DISPLAY", "EMBED_TAB_LOCATION"): + self.widgets.ntb_preview.set_property("show-tabs", True) +# page_offset = self.widgets.ntb_preview.get_nth_page(1) +# page_offset.hide() + if self.gscreen.machine_units_mm == 1: # is needed to show vel in machine units + self.gscreen.set_dro_units(_MM,True) + + self.data.desktop_notify = self.gscreen.prefs.getpref("desktop_notify", False, bool) + + # get if run from line should be used + rfl = self.gscreen.prefs.getpref("run_from_line", "no_run", str) + # and set the corresponding button active + self.widgets["rbtn_%s_from_line"%rfl].set_active(True) + if rfl == "no_run": + self.widgets.btn_from_line.set_sensitive(False) + else: + self.widgets.btn_from_line.set_sensitive(True) + + # get the way to unlock the settings + unlock = self.gscreen.prefs.getpref("unlock_way", "use", str) + # and set the corresponding button active + self.widgets["rbt_%s_unlock"%unlock].set_active(True) + # if Hal pin should be used, only set the button active, if the pin is high + if unlock == "hal" and not self.gscreen.halcomp["unlock-settings"]: + self.widgets.rbt_setup.set_sensitive(False) + self.unlock_code = self.gscreen.prefs.getpref("unlock_code", "123", str) # get unlock code + + # get when the keyboard should be shown + # and set the corresponding button active + self.widgets.chk_use_kb_on_offset.set_active(self.gscreen.prefs.getpref("show_keyboard_on_offset", + True, bool)) + self.widgets.chk_use_kb_on_tooledit.set_active(self.gscreen.prefs.getpref("show_keyboard_on_tooledit", + False, bool)) + self.widgets.chk_use_kb_on_edit.set_active(self.gscreen.prefs.getpref("show_keyboard_on_edit", + True, bool)) + self.widgets.chk_use_kb_on_mdi.set_active(self.gscreen.prefs.getpref("show_keyboard_on_mdi", + True, bool)) + self.widgets.chk_use_kb_on_file_selection.set_active(self.gscreen.prefs.getpref("show_keyboard_on_file_selection", + False, bool)) + + # check if the user want to display preview window insteadt of offsetpage widget + state = self.gscreen.prefs.getpref("show_preview_on_offset", False, bool) + if state: + self.widgets.rbtn_show_preview.set_active(True) + else: + self.widgets.rbtn_show_offsets.set_active(True) + + # check if keyboard shortcuts should be used and set the chkbox widget + self.widgets.chk_use_kb_shortcuts.set_active(self.gscreen.prefs.getpref("use_keyboard_shortcuts", + False, bool)) + +# ToDo: check in settings if the user like the highlighting or not +# self.widgets.gcode_view.buf.set_language(None) +# ToDo: End + + # This is only needed, because otherwise gmoccapy will use the standard DRO colors from + # gscreen, witch will not fit well the design from gmoccapy. You could get red text on red background + # we set everything default to black background, after the first change of colors the colors are stored + # correctly, because then self.use_standard_dro_colors has been set to true. + self.use_standard_dro_colors = self.gscreen.prefs.getpref("use_standard_dro_colors", "True", bool) + if self.use_standard_dro_colors: + self.data.abs_textcolor = "#000000000000" + self.data.rel_textcolor = "#000000000000" + self.data.dtg_textcolor = "#000000000000" + self.widgets.abs_colorbutton.set_color(gtk.gdk.color_parse(self.data.abs_textcolor)) + self.gscreen.set_abs_color() + self.widgets.rel_colorbutton.set_color(gtk.gdk.color_parse(self.data.rel_textcolor)) + self.gscreen.set_rel_color() + self.widgets.dtg_colorbutton.set_color(gtk.gdk.color_parse(self.data.dtg_textcolor)) + self.gscreen.set_dtg_color() + self.gscreen.prefs.putpref("use_standard_dro_colors", False, bool) + else: + self.data.abs_textcolor = self.gscreen.prefs.getpref("abs_textcolor", "#000000000000", str) + self.data.rel_textcolor = self.gscreen.prefs.getpref("rel_textcolor", "#000000000000", str) + self.data.dtg_textcolor = self.gscreen.prefs.getpref("dtg_textcolor", "#000000000000", str) + self.gscreen.init_dro_colors() + self.widgets.adj_start_spindle_RPM.set_value(self.data.spindle_start_rpm) + self.widgets.gcode_view.set_sensitive(False) + self.tooledit_btn_delete_tool = self.widgets.tooledit1.wTree.get_object("delete") + self.tooledit_btn_add_tool = self.widgets.tooledit1.wTree.get_object("add") + self.tooledit_btn_reload_tool = self.widgets.tooledit1.wTree.get_object("reload") + self.tooledit_btn_apply_tool = self.widgets.tooledit1.wTree.get_object("apply") + self.widgets.tooledit1.hide_buttonbox(True) + for axis in self.data.axis_list: + self._update_homed(axis) + self.widgets.ntb_user_tabs.remove_page(0) + self.add_macro_button() + self.units = self.gscreen.inifile.find("TRAJ", "LINEAR_UNITS") + if self.units == "inch": + self.widgets.tbtn_units.set_active(True) + if not self.gscreen.inifile.find("DISPLAY", "EMBED_TAB_COMMAND"): + self.widgets.tbtn_user_tabs.set_sensitive(False) + + # we click the clear button from statusbar, because else ready for homing will be displayed. + # but this is not true, because the machine is not in On state + self.widgets.btn_clear_statusbar.emit("clicked") + + # call the function to change the button status + # so every thing is ready to start + widgetlist = ["rbt_manual", "rbt_mdi", "rbt_auto", "btn_homing", "btn_touch", "btn_tool", + "ntb_jog", "scl_feed", "btn_feed_100", "rbt_forward", "btn_index_tool", + "rbt_reverse", "rbt_stop", "tbtn_flood", "tbtn_mist", "btn_change_tool","btn_select_tool_by_no", + "btn_spindle_100", "scl_max_vel", "scl_spindle", "rbt_manual", + "btn_tool_touchoff_x", "btn_tool_touchoff_z" + ] + self.gscreen.sensitize_widgets(widgetlist,False) + + # Do we control a lathe? + if self.data.lathe_mode: + # is this a backtool lathe? + temp = self.gscreen.inifile.find("DISPLAY", "BACK_TOOL_LATHE") + self.backtool_lathe = bool(temp == "1" or temp == "True" or temp == "true") + print("backtool = ",self.backtool_lathe) + + # we first hide the Y button to home and touch off + self.widgets.btn_home_y.hide() + self.widgets.btn_zero_y.hide() + self.widgets.btn_set_value_y.hide() + self.widgets.lbl_replace_y.show() + self.widgets.lbl_replace_zero_y.show() + self.widgets.lbl_replace_set_value_y.show() + self.widgets.btn_tool_touchoff_x.show() + self.widgets.lbl_hide_tto_x.hide() + + # we have to re-arrange the jog buttons, so first remove all button + self.widgets.tbl_jog_btn.remove(self.widgets.btn_y_minus) + self.widgets.tbl_jog_btn.remove(self.widgets.btn_y_plus) + self.widgets.tbl_jog_btn.remove(self.widgets.btn_x_minus) + self.widgets.tbl_jog_btn.remove(self.widgets.btn_x_plus) + self.widgets.tbl_jog_btn.remove(self.widgets.btn_z_minus) + self.widgets.tbl_jog_btn.remove(self.widgets.btn_z_plus) + + # now we place them in a different order + if self.backtool_lathe: + self.widgets.tbl_jog_btn.attach(self.widgets.btn_x_plus,1,2,0,1,gtk.SHRINK, gtk.SHRINK) + self.widgets.tbl_jog_btn.attach(self.widgets.btn_x_minus,1,2,2,3,gtk.SHRINK, gtk.SHRINK) + else: + self.widgets.tbl_jog_btn.attach(self.widgets.btn_x_plus,1,2,2,3,gtk.SHRINK, gtk.SHRINK) + self.widgets.tbl_jog_btn.attach(self.widgets.btn_x_minus,1,2,0,1,gtk.SHRINK, gtk.SHRINK) + self.widgets.tbl_jog_btn.attach(self.widgets.btn_z_plus,2,3,1,2,gtk.SHRINK, gtk.SHRINK) + self.widgets.tbl_jog_btn.attach(self.widgets.btn_z_minus,0,1,1,2,gtk.SHRINK, gtk.SHRINK) + + # and the Y DRO we make to a second X DRO then indicate the diameter + self.widgets.hal_dro_y.set_property("joint_number",0) + self.widgets.hal_dro_y.set_property("diameter",True) + + # we change the label text of the DRO + self.widgets.lbl_y.set_label("D") + self.widgets.lbl_x.set_label("R") + + # For gremlin we don"t need the following button + if self.backtool_lathe: + self.widgets.rbt_view_y2.set_active(True) + else: + self.widgets.rbt_view_y.set_active(True) + self.widgets.rbt_view_p.hide() + self.widgets.rbt_view_x.hide() + self.widgets.rbt_view_z.hide() + + # check if G7 or G8 is active + # this is set on purpose wrong, because we want the periodic + # to update the state correctly + if "G7" in self.data.active_gcodes: + self.data.diameter_mode = False + else: + self.data.diameter_mode = True + + else: + # the Y2 view is not needed on a mill + self.widgets.rbt_view_y2.hide() + # X Offset is not necesary on a mill + self.widgets.lbl_tool_offset_x.hide() + self.widgets.lbl_offset_x.hide() + self.widgets.btn_tool_touchoff_x.hide() + self.widgets.lbl_hide_tto_x.show() + # is there a 4_th axis? + # We need to show the corresponding widgets + # and change some sizes + if len(self.data.axis_list) > 3: + #let us find out wich axis is the 4-th one + # and set things accordingly + + self.widgets.btn_4_plus.set_label("%s+"%self.axisletter_four.upper()) + self.widgets.btn_4_minus.set_label("%s-"%self.axisletter_four.upper()) + self.widgets.lbl_4.set_label(self.axisletter_four.upper()) + self.widgets.hal_dro_4.set_property("joint_number",self.axisnumber_four) + + # is axis 4 a rotary axis ? If so, the DRO should not change + # in case of metric or imperial changes, that"s why we set the + # text template for both units to be the same + if self.axisletter_four in "abc": + self.widgets.hal_dro_4.set_property("mm_text_template","%11.2f") + self.widgets.hal_dro_4.set_property("imperial_text_template","%11.2f") + + self.widgets.eventbox_dro_4.show() + self.widgets.eventbox_4.show() + self.widgets.btn_4_plus.show() + self.widgets.btn_4_minus.show() + self.widgets.lbl_x.set_size_request(-1,-1) + self.widgets.lbl_y.set_size_request(-1,-1) + self.widgets.lbl_z.set_size_request(-1,-1) + self.widgets.lbl_4.set_size_request(-1,-1) + self.widgets.lbl_replace_4.hide() + self.widgets.btn_home_4.show() + + # we have to re-arrange the jog buttons, so first remove all button + self.widgets.tbl_jog_btn.remove(self.widgets.btn_z_minus) + self.widgets.tbl_jog_btn.remove(self.widgets.btn_z_plus) + self.widgets.tbl_jog_btn.remove(self.widgets.btn_4_minus) + self.widgets.tbl_jog_btn.remove(self.widgets.btn_4_plus) + + # now we place them in a different order + self.widgets.tbl_jog_btn.attach(self.widgets.btn_z_plus,2,3,0,1,gtk.SHRINK, gtk.SHRINK) + self.widgets.tbl_jog_btn.attach(self.widgets.btn_z_minus,2,3,2,3,gtk.SHRINK, gtk.SHRINK) + self.widgets.tbl_jog_btn.attach(self.widgets.btn_4_plus,3,4,0,1,gtk.SHRINK, gtk.SHRINK) + self.widgets.tbl_jog_btn.attach(self.widgets.btn_4_minus,3,4,2,3,gtk.SHRINK, gtk.SHRINK) + + # shows "Onboard" virtual keyboard if available + # else error message + def init_keyboard(self,args="",x="",y=""): + print args,x,y +# result = subprocess.call("setxkbmap -layout de",shell=True) +# if result<> 0: +# print("error",result) + try: + self.data.ob = subprocess.Popen(["onboard","--xid",args,x,y], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + close_fds=True) + sid = self.data.ob.stdout.readline() + print"keyboard", sid # skip header line + socket = gtk.Socket() + socket.show() + self.widgets.key_box.add(socket) + socket.add_id(long(sid)) + except: + print _("Error with launching 'Onboard' on-screen keyboard program, is onboard installed?") + + def kill_keyboard(self): + try: + self.widgets.key_box.hide() + self.data.ob.kill() + self.data.ob.terminate() + self.data.ob = None + except: + try: + self.data.ob.kill() + self.data.ob.terminate() + self.data.ob = None + except: + pass + + def init_offsetpage(self): + temp = "xyzabcuvw" + self.widgets.offsetpage1.set_col_visible(temp,False) + temp ="" + for axis in self.data.axis_list: + temp=temp+axis + self.widgets.offsetpage1.set_col_visible(temp,True) + CONFIGPATH = os.environ["CONFIG_DIR"] + path = os.path.join(CONFIGPATH,self.data.varfile) + self.widgets.offsetpage1.set_filename(path) + self.widgets.offsetpage1.hide_buttonbox(True) + self.widgets.offsetpage1.set_row_visible("1",False) + self.widgets.offsetpage1.set_font("sans 12") + self.widgets.offsetpage1.set_foreground_color("#28D0D9") + self.widgets.offsetpage1.selection_mask = ("Tool","G5x","Rot") + systemlist = ["Tool", "G5x", "Rot", "G92", "G54", "G55", "G56", "G57", "G58", "G59", "G59.1", + "G59.2", "G59.3"] + names = [] + for system in systemlist: + system_name = "system_name_%s"%system + name = self.gscreen.prefs.getpref(system_name, system, str) + names.append([system,name]) + self.widgets.offsetpage1.set_names(names) + + def init_IconFileSelection(self): + iconsize= 48 + filetypes = "ngc,py" + self.widgets.IconFileSelection1.set_property("icon_size",iconsize) + # self.widgets.IconFileSelection1.set_property("start_dir",startdir) + # is set in init with the selection of the NC_FILES path from INI + self.widgets.IconFileSelection1.set_property("user_dir",os.path.expanduser("~")) + self.widgets.IconFileSelection1.set_property("filetypes",filetypes) + self.widgets.IconFileSelection1.show_buttonbox(False) + self.widgets.IconFileSelection1.show_filelabel(False) + + # init the preview + def init_gremlin(self): + self.widgets.grid_size.set_value(self.data.grid_size) + self.widgets.gremlin.grid_size = self.data.grid_size + self.widgets.gremlin.set_property("view",self.data.plot_view[0]) + self.widgets.gremlin.set_property("metric_units",(self.data.dro_units == _MM)) + + # init the function to hide the cursor + def init_hide_cursor(self): + self.widgets.chk_hide_cursor.set_active(self.data.hide_cursor) + # if hide cursor requested + # we set the graphics to use touchscreen controls + if self.data.hide_cursor: + self.widgets.window1.window.set_cursor(INVISABLE) + self.widgets.gremlin.set_property("use_default_controls",False) + else: + self.widgets.window1.window.set_cursor(None) + self.widgets.gremlin.set_property("use_default_controls",True) + + # init the keyboard shortcut bindings + def initialize_keybindings(self): + try: + accel_group = gtk.AccelGroup() + self.widgets.window1.add_accel_group(accel_group) + self.widgets.button_estop.add_accelerator("clicked", accel_group, 65307,0, gtk.ACCEL_LOCKED) + except: + pass + self.widgets.window1.connect("key_press_event", self.on_key_event,1) + self.widgets.window1.connect("key_release_event", self.on_key_event,0) + + def on_key_event(self, widget, event, signal): + + #get the keyname + keyname = gtk.gdk.keyval_name(event.keyval) + + # estop with F1 shold work every time + # so should also escape aboart actions + if keyname == "F1": # will estop the machine, but not reset estop! + self.emc.estop(1) + return True + if keyname == "Escape": + self.emc.abort() + return True + + # This will avoid excecuting the key press event several times caused by keyboard auto repeat + if self.data.key_event_last[0] == keyname and self.data.key_event_last[1] == signal: + return True + + try: + if keyname =="F2" and signal: + # only turn on if no estop! + if self.widgets.tbtn_estop.get_active(): + return True + self.widgets.tbtn_on.emit("clicked") + return True + except: + pass + +# if keyname =="F5": +# self.notification.add_message("Dies ist die erste Nachricht") +# self.widgets.window1.grab_focus() +# return True +# if keyname =="F6": +# self.notification.add_message("Dies ist die zweite Nachricht") +# self.widgets.window1.grab_focus() +# return True +# if keyname =="F7": +# self.notification.add_message("Dies ist die dritte Nachricht") +# self.widgets.window1.grab_focus() +# return True +# if keyname =="F8": +# self.notification.del_message(-1) +# self.widgets.window1.grab_focus() +# return True +# if keyname =="F9": +# self.notification.del_message(5) +# self.widgets.window1.grab_focus() +# return True +# if keyname =="F10": +# self.notification.del_first() +# self.widgets.window1.grab_focus() +# return True + + # if the user do not want to use keyboard shortcuts, we leave here + # in this case we do not return true, otherwise entering code in MDI history + # and the integrated editor will not work + if not self.widgets.chk_use_kb_shortcuts.get_active(): + print("Settings say: do not use keyboard shortcuts, aboart") + return + + # Only in manual mode jogging with keyboard is allowed + # in this case we do not return true, otherwise entering code in MDI history + # and the integrated editor will not work + # we also check if we are in settings or terminal or alarm page + if self.gscreen.emcstat.task_mode <> _MANUAL or not self.widgets.ntb_main.get_current_page() == 0: + return + + # offset page is active, so keys must go through + if self.widgets.ntb_preview.get_current_page() == 1: + return + + # tooledit page is active, so keys must go through + if self.widgets.ntb_preview.get_current_page() == 2: + return + + # take care of differnt key handling for lathe operation + if self.data.lathe_mode: + if keyname == "Page_Up" or keyname == "Page_Down": + return + + if keyname == "Up": + if self.data.lathe_mode: + if self.backtool_lathe: + widget = self.widgets.btn_x_plus + else: + widget = self.widgets.btn_x_minus + else: + widget = self.widgets.btn_y_plus + if signal: + self.on_btn_jog_pressed(widget) + else: + self.on_btn_jog_released(widget) + elif keyname == "Down": + if self.data.lathe_mode: + if self.backtool_lathe: + widget = self.widgets.btn_x_minus + else: + widget = self.widgets.btn_x_plus + else: + widget = self.widgets.btn_y_minus + if signal: + self.on_btn_jog_pressed(widget) + else: + self.on_btn_jog_released(widget) + elif keyname == "Left": + if self.data.lathe_mode: + widget = self.widgets.btn_z_minus + else: + widget = self.widgets.btn_x_minus + if signal: + self.on_btn_jog_pressed(widget) + else: + self.on_btn_jog_released(widget) + elif keyname == "Right": + if self.data.lathe_mode: + widget = self.widgets.btn_z_plus + else: + widget = self.widgets.btn_x_plus + if signal: + self.on_btn_jog_pressed(widget) + else: + self.on_btn_jog_released(widget) + elif keyname == "Page_Up": + widget = self.widgets.btn_z_plus + if signal: + self.on_btn_jog_pressed(widget) + else: + self.on_btn_jog_released(widget) + elif keyname == "Page_Down": + widget = self.widgets.btn_z_minus + if signal: + self.on_btn_jog_pressed(widget) + else: + self.on_btn_jog_released(widget) + else: + print("This key has not been implemented yet") + print "Key %s (%d) was pressed" % (keyname, event.keyval),signal, self.data.key_event_last + self.data.key_event_last = keyname,signal + return True + + # check if macros are in the INI file and add them to MDI Button List + def add_macro_button(self): + macros = self.gscreen.inifile.findall("MACROS", "MACRO") + num_macros = len(macros) + if num_macros > 9: + message = _("no more than 9 macros are allowed, only the first 9 will be used") + self.gscreen.add_alarm_entry(message) + print(message) + num_macros = 9 + for increment in range(0,num_macros): + name = macros[increment] + # shorten the name if it is to long + if len(name) > 11: + lbl = name[0:10] + else: + lbl = macros[increment] + btn = gtk.Button(lbl,None,False) + btn.connect("pressed", self.on_btn_macro_pressed,name) + btn.position = increment + # we add the button to a list to be able later to see what makro to excecute + self.macrobuttons.append(btn) + self.widgets.hbtb_MDI.pack_start(btn,True,True,0) + btn.show() + # if there is still place, we fill it with empty labels, to be sure the button will not be on differnt + # places if the amount of macros change. + if num_macros < 9: + for label_space in range(num_macros,9): + lbl = "lbl_sp_%s"%label_space + lbl = gtk.Label(lbl) + lbl.position = label_space + lbl.set_text("") + self.widgets.hbtb_MDI.pack_start(lbl,True,True,0) + lbl.show() + self.widgets.hbtb_MDI.non_homogeneous = False + + # What to do if a macro button has been pushed + def on_btn_macro_pressed(self, widget = None, data = None): + o_codes = data.split() + subroutines_folder = self.gscreen.inifile.find("RS274NGC", "SUBROUTINE_PATH") + if not subroutines_folder: + subroutines_folder = self.gscreen.inifile.find("DISPLAY", "PROGRAM_PREFIX") + if not subroutines_folder: + message = _("No subroutine folder or program prefix is given in the ini file \n") + message += _("so the corresponding file could not be found") + self.gscreen.warning_dialog(_("Important Warning"), True, message) + self.gscreen.add_alarm_entry( message) + self.widgets.statusbar1.push(1, message) + return + file = subroutines_folder + "/" + o_codes[0] + ".ngc" + if not os.path.isfile(file): + message = _("File %s of the macro could not be found\n"%[o_codes[0] + ".ngc"]) + message += _("we searched in subdirectory %s"%[subroutines_folder]) + self.gscreen.warning_dialog(_("Important Warning"), True, message) + self.gscreen.add_alarm_entry( message) + self.widgets.statusbar1.push(1, message) + return + command = str("O<" + o_codes[0] + "> call") + for code in o_codes[1:]: + parameter = self.entry_dialog(data = None, header = _("Enter value:"), + label=_("Set parameter %s to:")%code, integer=False ) + if parameter == "ERROR": + print(_("conversion error")) + self.gscreen.add_alarm_entry(_("Conversion error because off wrong entry for macro %s") + %o_codes[0]) + self.gscreen.warning_dialog(_("Conversion error !"), True, + _("Please enter only numerical values\nValues have not been applied")) + return + elif parameter == "CANCEL": + self.gscreen.add_alarm_entry(_("entry for macro %s has been canceled")%o_codes[0]) + return + else: + self.gscreen.add_alarm_entry(_("macro {0} , parameter {1} set to {2:f}".format(o_codes[0],code,parameter))) + command = command + " [" + str(parameter) + "] " +# ToDo: Should not only clear the plot, but also the loaded programm? + #self.emc.emccommand.program_open("") + #self.emc.emccommand.reset_interpreter() + self.widgets.gremlin.clear_live_plotter() +# ToDo: End + self.gscreen.mdi_control.user_command(command) + for btn in self.macrobuttons: + btn.set_sensitive(False) + # we change the widget_image and use the button to interupt running macros + self.widgets.btn_show_kbd.set_image(self.widgets.img_brake_macro) + self.widgets.btn_show_kbd.set_property("tooltip-text",_("interrupt running macro")) + self.widgets.ntb_info.set_current_page(0) + + # There are some settings we can only do if the window is on the screen allready + def on_window1_show(self, widget, data=None): + # it is time to get the correct estop state and set the button status + self.gscreen.status.emcstat.poll() + estop = self.gscreen.status.emcstat.task_state == self.gscreen.status.emc.STATE_ESTOP + if estop: + self.widgets.tbtn_estop.set_active(True) + self.widgets.tbtn_estop.set_image(self.widgets.img_emergency) + self.widgets.tbtn_on.set_image(self.widgets.img_machine_off) + else: + self.widgets.tbtn_estop.set_active(False) + self.widgets.tbtn_estop.set_image(self.widgets.img_emergency_off) + self.widgets.tbtn_on.set_sensitive(True) + + # if a file should be loaded, we will do so + file = self.gscreen.prefs.getpref("open_file", " ", str) + if file: + self.widgets.file_to_load_chooser.set_filename(file) + self.widgets.hal_action_open.load_file(file) + + # check how to start the GUI + start_as = "rbtn_" + self.gscreen.prefs.getpref("screen1", "window",str) + self.widgets[start_as].set_active(True) + if start_as == "rbtn_fullscreen": + self.widgets.window1.fullscreen() + elif start_as == "rbtn_maximized": + self.widgets.window1.maximize() + else: + self.widgets.window1.move(int(self.widgets.adj_x_pos.get_value()), + int(self.widgets.adj_y_pos.get_value())) + self.widgets.window1.resize(int(self.widgets.adj_width.get_value()), + int(self.widgets.adj_height.get_value())) + + # does the user want to show screen2 + self.widgets.tbtn_use_screen2.set_active(self.gscreen.prefs.getpref("use_screen2", False, bool)) + + # kill keyboard and estop machine before closing + def on_window1_destroy(self, widget, data=None): + self.kill_keyboard() + print "estopping / killing gscreen" + self.emc.machine_off(1) + self.emc.estop(1) + time.sleep(2) + gtk.main_quit() + + # use the current loaded file to be loaded on start up + def on_btn_use_current_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("use_current_clicked %s"%self.data.file) + if self.data.file: + self.widgets.file_to_load_chooser.set_filename(self.data.file) + self.gscreen.prefs.putpref("open_file", self.data.file, str) + + # Clear the status to load a file on start up, so ther will not be loaded a programm + # on the next start of the GUI + def on_btn_none_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("button none clicked %s") + self.widgets.file_to_load_chooser.set_filename(" ") + self.gscreen.prefs.putpref("open_file", " ", str) + + # toggle emergency button + def on_tbtn_estop_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("tbtn_estop_clicked") + if self.widgets.tbtn_estop.get_active(): # estop is active, open circuit + self.widgets.tbtn_estop.set_image(self.widgets.img_emergency) + self.widgets.tbtn_on.set_image(self.widgets.img_machine_off) + self.emc.estop(1) + self.widgets.tbtn_on.set_sensitive(False) + self.widgets.tbtn_on.set_active(False) + else: # estop circuit is fine + self.widgets.tbtn_estop.set_image(self.widgets.img_emergency_off) + self.widgets.tbtn_on.set_image(self.widgets.img_machine_on) + self.emc.estop_reset(1) + self.widgets.tbtn_on.set_sensitive(True) + +# ToDo: find out why the values are modified by 1 on startup +# and correct this to avoid the need of this clicks + # will need to click, otherwise we get 101 % after startup + self.widgets.btn_feed_100.emit("clicked") + self.widgets.btn_spindle_100.emit("clicked") +# ToDo: End + + # toggle machine on / off button + def on_tbtn_on_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("hal_tgbt_on_clicked") + if self.widgets.tbtn_on.get_active(): + self.widgets.tbtn_on.set_image(self.widgets.img_machine_on) + self.emc.machine_on(1) + self._update_widgets(True) + else: + self.widgets.tbtn_on.set_image(self.widgets.img_machine_off) + self.emc.machine_off(1) + self._update_widgets(False) + + def _update_widgets(self,state): + widgetlist = ["rbt_manual", "btn_homing", "btn_touch", "btn_tool", + "ntb_jog", "scl_feed", "btn_feed_100", "rbt_forward", "btn_index_tool", + "rbt_reverse", "rbt_stop", "tbtn_flood", "tbtn_mist", "btn_change_tool","btn_select_tool_by_no", + "btn_spindle_100", "scl_max_vel", "scl_spindle", + "btn_tool_touchoff_x", "btn_tool_touchoff_z" + ] + self.gscreen.sensitize_widgets(widgetlist,state) + + # The mode buttons + def on_rbt_manual_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_manual_clicked") + self.emc.set_manual_mode() + self.widgets.ntb_main.set_current_page(0) + self.widgets.ntb_button.set_current_page(0) + self.widgets.ntb_info.set_current_page(0) + self.widgets.ntb_jog.set_current_page(0) + + def on_rbt_mdi_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_mdi_clicked") + self.emc.set_mdi_mode() + if self.widgets.chk_use_kb_on_mdi.get_active(): + self.widgets.ntb_info.set_current_page(1) + else: + self.widgets.ntb_info.set_current_page(0) + self.widgets.ntb_main.set_current_page(0) + self.widgets.ntb_button.set_current_page(1) + self.widgets.ntb_jog.set_current_page(1) + self.widgets.hal_mdihistory.entry.grab_focus() + + def on_rbt_auto_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_auto_clicked") + self.emc.set_auto_mode() + self.widgets.ntb_main.set_current_page(0) + self.widgets.ntb_button.set_current_page(2) + self.widgets.ntb_info.set_current_page(0) + self.widgets.ntb_jog.set_current_page(2) + + def on_rbt_setup_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_setup_clicked") + code = False + # here the user don"t want an unlock code + if self.widgets.rbt_no_unlock.get_active(): + code = True + # if hal pin is true, we are allowed to enter settings, this may be + # realized using a key switch + if self.widgets.rbt_hal_unlock.get_active() and self.gscreen.halcomp["unlock-settings"]: + code = True + # else we ask for the code using the system.dialog + if self.widgets.rbt_use_unlock.get_active(): + if self.system_dialog(): + code = True + else: + code = False + # Lets see if the user has the right to enter settings + if code: + self.widgets.ntb_main.set_current_page(1) + self.widgets.ntb_setup.set_current_page(1) + self.widgets.ntb_button.set_current_page(5) + else: + if self.widgets.rbt_hal_unlock.get_active(): + message = _("Hal Pin is low, Access denied") + else: + message = _("wrong code entered, Access denied") + self.gscreen.warning_dialog(_("Just to warn you"), True, message) + self.gscreen.add_alarm_entry( message) + self.widgets.statusbar1.push(1, message) + self.widgets.rbt_manual.emit("clicked") + + # This dialog is for unlocking the system tab + # The unlock code number is defined at the top of the page + def system_dialog(self): + dialog = gtk.Dialog(_("Enter System Unlock Code"), + self.widgets.window1, + gtk.DIALOG_DESTROY_WITH_PARENT, + (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, + gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) + label = gtk.Label(_("Enter System Unlock Code")) + label.modify_font(pango.FontDescription("sans 20")) + calc = gladevcp.Calculator() + dialog.vbox.pack_start(label) + dialog.vbox.add(calc) + calc.set_value("") + calc.set_property("font","sans 20") + calc.set_editable(True) + calc.entry.connect("activate", lambda w : dialog.emit("response",gtk.RESPONSE_ACCEPT)) + dialog.parse_geometry("400x400") + dialog.set_decorated(True) + dialog.show_all() + response = dialog.run() + code = calc.get_value() + dialog.destroy() + if response == gtk.RESPONSE_ACCEPT: + if code == int(self.unlock_code): + return True + return False + + # Show or hide the user tabs + def on_tbtn_user_tabs_toggled(self, widget, data=None): + if widget.get_active(): + self.widgets.ntb_main.set_current_page(2) + self.widgets.tbtn_fullsize_preview.set_sensitive(False) + else: + self.widgets.ntb_main.set_current_page(0) + self.widgets.tbtn_fullsize_preview.set_sensitive(True) + + # The homing functions + def on_btn_homing_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_homing_clicked") + self.widgets.ntb_button.set_current_page(3) + + def _dro_label_color_change(self, widget, bgcolor, fgcolor): + attr = pango.AttrList() + color = bgcolor + bg_color = pango.AttrBackground(color[0],color[1],color[2], 0, -1) + attr.insert(bg_color) + if len(self.data.axis_list) > 3: + size = pango.AttrSize(22500, 0, -1) + else: + size = pango.AttrSize(30000, 0, -1) + attr.insert(size) + weight = pango.AttrWeight(600, 0, -1) + attr.insert(weight) + color = fgcolor + fg_color = pango.AttrForeground(color[0],color[1],color[2], 0, 11) + attr.insert(fg_color) + self.widgets[widget].set_attributes(attr) + + def _update_homed(self, axis): + if self.widgets.tbtn_rel.get_active(): # abs dro requested + bg_color = self.data.abs_textcolor # not RGB + bgcolor = self.data.abs_color # is RGB + else: # rel dro requested + bg_color = self.data.rel_textcolor + bgcolor = self.data.rel_color + if self.widgets.tbtn_dtg.get_active(): # dtg dro requested + bg_color = self.data.dtg_textcolor + bgcolor = self.data.dtg_color + if self.data["%s_is_homed"%axis]: + fg_color = "#00FF00" + fgcolor = (0,65535,0) + else: + fg_color = "#FF0000" + fgcolor = (65000,0,0) + self.gscreen.add_alarm_entry("%s_homed"%axis + " = " + str(self.data["%s_is_homed"%axis])) + if axis == self.axisletter_four: + axis = "4" + self._dro_label_color_change("hal_dro_%s"%axis,bgcolor,fgcolor) + self._dro_label_color_change("lbl_%s"%axis,bgcolor,fgcolor) + + widgetname = "eventbox_" + axis + self.widgets[widgetname].modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(bg_color)) + widgetname ="eventbox_dro_" + axis + self.widgets[widgetname].modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(bg_color)) + + + if self.data.lathe_mode: + if "G8" in self.data.active_gcodes: + self.widgets.eventbox_y.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#F2F1F0")) + self.widgets.eventbox_dro_y.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#F2F1F0")) + self.widgets.eventbox_x.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000000")) + self.widgets.eventbox_dro_x.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000000")) + fgcolor = self.gscreen.convert_to_rgb(gtk.gdk.color_parse(fg_color)) + bgcolor = self.gscreen.convert_to_rgb(gtk.gdk.color_parse("#F2F1F0")) + self._dro_label_color_change("lbl_y", bgcolor, fgcolor) + self._dro_label_color_change("hal_dro_y", bgcolor, fgcolor) + else: + self.widgets.eventbox_x.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#F2F1F0")) + self.widgets.eventbox_dro_x.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#F2F1F0")) + self.widgets.eventbox_y.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000000")) + self.widgets.eventbox_dro_y.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000000")) + fgcolor = self.gscreen.convert_to_rgb(gtk.gdk.color_parse(fg_color)) + bgcolor = self.gscreen.convert_to_rgb(gtk.gdk.color_parse("#F2F1F0")) + self._dro_label_color_change("lbl_x", bgcolor, fgcolor) + self._dro_label_color_change("hal_dro_x", bgcolor, fgcolor) + + def on_btn_home_all_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("button ref all clicked") + self.emc.home_all(1) + + def on_btn_unhome_all_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("button unhome all clicked") + self.data.all_homed = False + self.emc.unhome_all(1) + for axis in self.data.axis_list: + self.data["%s_is_homed"%axis] = False + self._update_homed(axis) + if self.data.lathe_mode: + self.data.y_is_homed = False + self._update_homed("y") + + def on_btn_home_selected_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("button home selected clicked") + if widget == self.widgets.btn_home_x: + axis = 0 + elif widget == self.widgets.btn_home_y: + axis = 1 + elif widget == self.widgets.btn_home_z: + axis = 2 + elif widget == self.widgets.btn_home_4: + axis = "xyzabcuvw".index(self.axisletter_four) + self.emc.home_selected(axis) + + def on_chk_ignore_limits_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("chk_ignore_limits_toggled %s"%widget.get_active()) + self.emc.override_limits(self.widgets.chk_ignore_limits.get_active()) + + def on_tbtn_fullsize_preview_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("Fullsize Preview set to %s"%widget.get_active()) + if widget.get_active(): + self.widgets.box_info.hide() + self.widgets.vbx_jog.hide() + self.widgets.gremlin.set_property("metric_units",not self.widgets.tbtn_units.get_active()) + self.widgets.gremlin.set_property("enable_dro",True) + else: + self.widgets.box_info.show() + self.widgets.vbx_jog.show() + if not self.widgets.chk_show_dro.get_active(): + self.widgets.gremlin.set_property("enable_dro",False) + + # If button exit is klickt, press emergency button bevor closing the application + def on_btn_exit_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_exit_clicked") + self.widgets.tbtn_estop.set_active(1) + self.widgets.window1.destroy() + + # this are hal-tools through gsreen function + def on_btn_show_hal_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_show_hal_clicked") + self.gscreen.on_halshow(None) + + def on_btn_calibration_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_calibration_clicked") + self.gscreen.on_calibration(None) + + def on_btn_hal_meter_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_hal_meter_clicked") + self.gscreen.on_halmeter(None) + + def on_btn_status_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("hal_btn_status_clicked") + self.gscreen.on_status(None) + + def on_btn_hal_scope_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("hal_btn_hal_scope_clicked") + self.gscreen.on_halscope(None) + + def on_btn_classicladder_clicked(self, widget, data=None): + if hal.component_exists("classicladder_rt"): + p = os.popen("classicladder &","w") + else: + self.gscreen.warning_dialog(_("INFO:"), True, + _("Classicladder real-time component not detected")) + self.gscreen.add_alarm_entry(_("ladder not available - is the real-time component loaded?")) + + def _check_spindle_max(self,rpm): + spindle_override = self.widgets.scl_spindle.get_value() / 100 + real_spindle_speed = rpm * spindle_override + if real_spindle_speed > self.widgets.adj_spindle_bar_max.get_value(): + try: + value_to_set = self.widgets.scl_spindle.get_value()/(real_spindle_speed/self.widgets.adj_spindle_bar_max.get_value()) + self.widgets.scl_spindle.set_value(value_to_set) + except: + pass + + # spindle stuff + def _set_spindle(self, widget, data=None): + rpm = abs(float(self.data.active_spindle_command)) + if rpm == 0: + rpm = self.data.spindle_start_rpm + + self._check_spindle_max(rpm) + + if widget == self.widgets.rbt_forward: + self.emc.emccommand.spindle(1,rpm) + elif widget == self.widgets.rbt_reverse: + self.emc.emccommand.spindle(-1,rpm) + elif widget == self.widgets.rbt_stop: + self.emc.emccommand.spindle(0) + else: + self.gscreen.add_alarm_entry(_("Something went wrong, we have an unknown widget")) + + if self.log: self.gscreen.add_alarm_entry("Spindle set to %i rpm, mode is %s"%(rpm,self.emc.get_mode())) + self.widgets.lbl_spindle_act.set_label("S %s"%rpm) + self.on_scl_spindle_value_changed(self.widgets.scl_spindle) + + def on_rbt_forward_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_forward_clicked") + if self.widgets.rbt_forward.get_active(): + self.widgets.rbt_forward.set_image(self.widgets.img_forward_on) + self._set_spindle(widget) + else: + self.widgets.rbt_forward.set_image(self.widgets.img_forward) + + def on_rbt_reverse_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_reverse_clicked") + if self.widgets.rbt_reverse.get_active(): + self.widgets.rbt_reverse.set_image(self.widgets.img_reverse_on) + self.widgets.hal_hbar_spindle_feedback.set_property("max",float(self.min_spindle_rev)*-1) + self.widgets.hal_hbar_spindle_feedback.set_property("min",float(self.max_spindle_rev)*-1) + self._set_spindle(widget) + else: + self.widgets.rbt_reverse.set_image(self.widgets.img_reverse) + self.widgets.hal_hbar_spindle_feedback.set_property("min",float(self.min_spindle_rev)) + self.widgets.hal_hbar_spindle_feedback.set_property("max",float(self.max_spindle_rev)) + + def on_rbt_stop_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_stop_clicked") + if self.widgets.rbt_stop.get_active(): + self.widgets.rbt_stop.set_image(self.widgets.img_stop_on) + self._set_spindle(widget) + else: + self.widgets.rbt_stop.set_image(self.widgets.img_sstop) + + def on_hal_hbar_spindle_feedback_hal_pin_changed(self, widget, data=None): + self.widgets.lbl_spindle_act.set_text("S %s"%int(self.widgets.hal_hbar_spindle_feedback.value)) + + def on_btn_spindle_100_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_spindle_100_clicked") + self.widgets.adj_spindle.set_value(100) + + def on_scl_spindle_value_changed(self, widget, data = None): + if not self.data.active_spindle_command: + return + spindle_override = self.widgets.scl_spindle.get_value() / 100 + real_spindle_speed = float(self.data.active_spindle_command) * spindle_override + if real_spindle_speed > self.widgets.adj_spindle_bar_max.get_value(): + try: + value_to_set = widget.get_value()/(real_spindle_speed/self.widgets.adj_spindle_bar_max.get_value()) + widget.set_value(value_to_set) + except: + pass + self.widgets.lbl_spindle_act.set_text("S %d" %real_spindle_speed) + self.emc.spindle_override(spindle_override) + + def on_adj_start_spindle_RPM_value_changed(self, widget, data = None): + if self.log: self.gscreen.add_alarm_entry("sbtn_spindle_start_rpm_clicked") + self.data.spindle_start_rpm = widget.get_value() + self.gscreen.prefs.putpref("spindle_start_rpm", widget.get_value(),float) + + def on_adj_spindle_bar_min_value_changed(self, widget, data = None): + if self.log: self.gscreen.add_alarm_entry("Spindle bar min has been set to %s"%widget.get_value()) + self.gscreen.prefs.putpref("spindle_bar_min", widget.get_value(),float) + + def on_adj_spindle_bar_max_value_changed(self, widget, data = None): + if self.log: self.gscreen.add_alarm_entry("Spindle bar max has been set to %s"%widget.get_value()) + self.gscreen.prefs.putpref("spindle_bar_max", widget.get_value(),float) + + def _update_spindle_btn(self): + if self.gscreen.emcstat.task_mode == _AUTO and self.interpreter == _RUN: + return + if not self.data.spindle_speed: + self.widgets.rbt_stop.set_active(True) + return + if self.data.spindle_dir > 0: + self.widgets.rbt_forward.set_active(True) + elif self.data.spindle_dir < 0: + self.widgets.rbt_reverse.set_active(True) + elif not self.widgets.rbt_stop.get_active(): + self.widgets.rbt_stop.set_active(True) + + # Coolant an mist coolant button + def on_tbtn_flood_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("tbtn_flood_clicked") + if self.data.flood and self.widgets.tbtn_flood.get_active(): + return + elif not self.data.flood and not self.widgets.tbtn_flood.get_active(): + return + elif self.widgets.tbtn_flood.get_active(): + self.widgets.tbtn_flood.set_image(self.widgets.img_coolant_on) + self.emc.flood_on(1) + else: + self.widgets.tbtn_flood.set_image(self.widgets.img_coolant_off) + self.emc.flood_off(1) + + def on_tbtn_mist_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("tbtn_mist_clicked") + if self.data.mist and self.widgets.tbtn_mist.get_active(): + return + elif not self.data.mist and not self.widgets.tbtn_mist.get_active(): + return + elif self.widgets.tbtn_mist.get_active(): + self.widgets.tbtn_mist.set_image(self.widgets.img_mist_on) + self.emc.mist_on(1) + else: + self.widgets.tbtn_mist.set_image(self.widgets.img_mist_off) + self.emc.mist_off(1) + + def _update_coolant(self): + if self.data.flood: + if not self.widgets.tbtn_flood.get_active(): + self.widgets.tbtn_flood.set_active(True) + self.widgets.tbtn_flood.set_image(self.widgets.img_coolant_on) + else: + if self.widgets.tbtn_flood.get_active(): + self.widgets.tbtn_flood.set_active(False) + self.widgets.tbtn_flood.set_image(self.widgets.img_coolant_off) + if self.data.mist: + if not self.widgets.tbtn_mist.get_active(): + self.widgets.tbtn_mist.set_active(True) + self.widgets.tbtn_mist.set_image(self.widgets.img_mist_on) + else: + if self.widgets.tbtn_mist.get_active(): + self.widgets.tbtn_mist.set_active(False) + self.widgets.tbtn_mist.set_image(self.widgets.img_mist_off) + + # feed stuff + def on_scl_feed_value_changed(self, widget, data=None): + self.emc.feed_override(self.widgets.scl_feed.get_value() / 100) + + def on_btn_feed_100_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_feed_100_clicked") + self.widgets.adj_feed.set_value(100) + + # Update the velocity labels + def _update_vel(self): + self.widgets.lbl_current_vel.set_text("%d" %self.data.velocity) + feed_override = self.widgets.scl_feed.get_value() / 100 + real_feed = float(self.widgets.lbl_active_feed.get_text()) * feed_override + if "G95" in self.data.active_gcodes: + self.widgets.lbl_feed_act.set_text("F %.2f" %real_feed) + self.widgets.lbl_active_feed.set_label("%.2f"%float(self.data.active_feed_command)) + else: + self.widgets.lbl_feed_act.set_text("F %d" %real_feed) + self.widgets.lbl_active_feed.set_label(self.data.active_feed_command) + + # This is the jogging part + def on_increment_changed(self, widget = None, data = None): + if self.log: self.gscreen.add_alarm_entry("increment_changed %s"%data) + if data != "Continuous": + self.distance = self.gscreen.parse_increment(data) + else: + self.distance = 0 + self.gscreen.halcomp["jog-increment"] = self.distance + + def on_adj_jog_vel_value_changed(self, widget, data = None): + if widget.get_value() > self.widgets.adj_max_vel.get_value(): + widget.set_value(self.widgets.adj_max_vel.get_value()) + self.emc.continuous_jog_velocity(widget.get_value()) + + def on_adj_max_vel_value_changed(self, widget, data = None): + if widget.get_value() < self.widgets.adj_jog_vel.get_value(): + self.widgets.adj_jog_vel.set_value(widget.get_value()) + self.emc.max_velocity(widget.get_value() / 60) + + def on_btn_jog_pressed(self, widget, data = None): + # only in manual mode we will allow jogging the axis at this development state + if not self.gscreen.emcstat.task_mode == _MANUAL: + return + + axisletter = widget.get_label()[0] + if not axisletter.lower() in "xyzabcuvw": + print ("unknown axis %s"%axisletter) + return + + dir = widget.get_label()[1] + if dir == "+": + direction = 1 + else: + direction = -1 + + axis = "xyzabcuvw".index(axisletter.lower()) + + self.gscreen.add_alarm_entry("btn_jog_%i_%i"%(axis,direction)) + + if self.distance <> 0: # incremental jogging + # DOKU : emc.incremental_jog(<axis number>,<direction>,<distance to jog>) + self.emc.incremental_jog(axis, direction, self.distance) + else: # continuous jogging + self.emc.continuous_jog(axis,direction) + + def on_btn_jog_released(self, widget, data = None): + axisletter = widget.get_label()[0] + if not axisletter.lower() in "xyzabcuvw": + print ("unknown axis %s"%axisletter) + return + + axis = "xyzabcuvw".index(axisletter.lower()) + + if self.distance <>0: + pass + else: + self.emc.continuous_jog(axis,0) + + # this are the MDI thinks we need + def on_btn_delete_clicked(self, widget, data=None): + message = _("Do you really want to delete the MDI history?\n") + message += _("this will not delete the MDI History file, but will\n") + message += _("delete the listbox entries for this session") + result = self.yesno_dialog(header=_("Attention!!"), label = message) + if result: + self.widgets.hal_mdihistory.model.clear() + if self.log: self.gscreen.add_alarm_entry("delete_MDI with result %s"%result) + + def yesno_dialog(self, header=_("Question") ,label=_("Please decide:")): + dialog = gtk.MessageDialog(self.widgets.window1, + gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO,header) + label = gtk.Label(label) + dialog.vbox.pack_start(label) + dialog.set_decorated(True) + dialog.show_all() + response = dialog.run() + dialog.destroy() + if response == gtk.RESPONSE_YES: + return True + return False + + def on_tbtn_use_screen2_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("show window 2 set to %s"%widget.get_active()) + self.gscreen.prefs.putpref("use_screen2", widget.get_active(), bool) + if widget.get_active(): + self.widgets.window2.show() + if self.widgets.rbtn_window.get_active(): + try: + pos = self.widgets.window1.get_position() + size = self.widgets.window1.get_size() + left = pos[0] +size[0] + self.widgets.window2.move(left,pos[1]) + except: + pass + else: + self.widgets.window2.hide() + + def on_btn_show_kbd_clicked(self, widget, data=None): + # if the image is img_brake macro, we want to interupt the running macro + if self.widgets.btn_show_kbd.get_image() == self.widgets.img_brake_macro: + if self.log: self.gscreen.add_alarm_entry("btn_brake macro_clicked") + self.emc.abort() + for btn in self.macrobuttons: + btn.set_sensitive(True) + self.widgets.btn_show_kbd.set_image(self.widgets.img_keyboard) + self.widgets.btn_show_kbd.set_property("tooltip-text",_("This button will show or hide the keyboard")) + elif self.widgets.ntb_info.get_current_page() == 1: + if self.log: self.gscreen.add_alarm_entry("btn_keyboard_clicked") + self.widgets.ntb_info.set_current_page(0) + else: + self.widgets.ntb_info.set_current_page(1) + + def on_ntb_info_switch_page(self, page, page_num, data=None): + if self.emc.get_mode() == _MDI: + self.widgets.hal_mdihistory.entry.grab_focus() + elif self.emc.get_mode() == _AUTO: + self.widgets.gcode_view.grab_focus() + + # Three back buttons to be able to leave notebook pages + # All use the same callback offset + def on_btn_back_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_back_clicked") + if self.widgets.ntb_button.get_current_page() == 6: # edit mode, go back to auto_buttons + self.widgets.ntb_button.set_current_page(2) + elif self.widgets.ntb_button.get_current_page() == 8: # File selection mode + self.widgets.ntb_button.set_current_page(2) + else: # else we go to main button on manual + self.widgets.ntb_button.set_current_page(0) + self.widgets.ntb_main.set_current_page(0) + self.widgets.ntb_preview.set_current_page(0) + + def on_btn_clear_statusbar_clicked(self, widget, data=None): + self.widgets.statusbar1.pop(self.gscreen.statusbar_id) + + # The offset settings, set to zero + def on_btn_touch_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_touch_clicked") + self.widgets.ntb_button.set_current_page(4) + self._show_offset_tab(True) + if self.widgets.rbtn_show_preview.get_active(): + self.widgets.ntb_preview.set_current_page(0) + + def on_tbtn_edit_offsets_toggled(self, widget, data=None): + state = widget.get_active() + self.widgets.offsetpage1.edit_button.set_active(state) + widgetlist = ["btn_zero_x","btn_zero_y","btn_zero_z","btn_set_value_x","btn_set_value_y", + "btn_set_value_z","btn_set_selected","ntb_jog","btn_zero_g92" + ] + self.gscreen.sensitize_widgets(widgetlist,not state) + + if not state: # we must switch back to manual mode, otherwise jogging is not possible + self.emc.set_manual_mode() + + # show virtual keyboard + if state: + self.widgets.ntb_info.set_current_page(1) + else: + self.widgets.ntb_info.set_current_page(0) + + def on_btn_zero_g92_clicked(self, widget, data=None): + self.widgets.offsetpage1.zero_g92(self) + + def _show_offset_tab(self,state): + page = self.widgets.ntb_preview.get_nth_page(1) + print("offset",state,page.get_visible()) + if page.get_visible()and state or not page.get_visible()and not state: + return + if state: + page.show() + self.widgets.ntb_preview.set_property("show-tabs",state) + self.widgets.ntb_preview.set_current_page(1) + self.widgets.offsetpage1.mark_active((self.system_list[self.data.system]).lower()) + if self.widgets.chk_use_kb_on_offset.get_active(): + self.widgets.ntb_info.set_current_page(1) + else: + names = self.widgets.offsetpage1.get_names() + for system,name in names: + system_name = "system_name_%s"%system + self.gscreen.prefs.putpref(system_name, name, str) + page.hide() + self.widgets.tbtn_edit_offsets.set_active(False) + self.widgets.ntb_preview.set_current_page(0) + self.widgets.ntb_info.set_current_page(0) + if self.widgets.ntb_preview.get_n_pages() <= 4: # else user tabs are availible + self.widgets.ntb_preview.set_property("show-tabs",state) + +#ToDo: what to do when there are more axis? + def on_btn_zero_x_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_zero_X_clicked") + self.emc.set_mdi_mode() + self.gscreen.mdi_control.set_axis("X",0) + self.widgets.btn_reload.emit("clicked") + self.emc.set_manual_mode() + + def on_btn_zero_y_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_zero_Y_clicked") + self.emc.set_mdi_mode() + self.gscreen.mdi_control.set_axis("Y",0) + self.widgets.btn_reload.emit("clicked") + self.emc.set_manual_mode() + + def on_btn_zero_z_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_zero_Z_clicked") + self.emc.set_mdi_mode() + self.gscreen.mdi_control.set_axis("Z",0) + self.widgets.btn_reload.emit("clicked") + self.emc.set_manual_mode() + + def on_btn_set_value_clicked(self, widget, data=None): + if widget == self.widgets.btn_set_value_x: + axis = "x" + elif widget == self.widgets.btn_set_value_y: + axis = "y" + elif widget == self.widgets.btn_set_value_z: + axis = "z" + else: + axis = "Unknown" + self.gscreen.add_alarm_entry(_("Offset %s could not be set, because off unknown axis")%axis) + return + self.gscreen.add_alarm_entry("btn_set_value_%s_clicked"%axis) + preset = self.gscreen.prefs.getpref("offset_axis_%s"%axis, 0, float) + offset = self.entry_dialog(data = preset, header = _("Enter value for axis %s")%axis, + label=_("Set axis %s to:")%axis, integer = False ) + if offset == "CANCEL" or offset == "ERROR": + return + if offset != False or offset == 0: + self.gscreen.add_alarm_entry(_("offset {0} set to {1:f}".format(axis,offset))) + self.emc.set_mdi_mode() + self.gscreen.mdi_control.set_axis(axis,offset) + self.widgets.btn_reload.emit("clicked") + self.emc.set_manual_mode() + self.gscreen.prefs.putpref("offset_axis_%s"%axis, offset, float) + else: + print(_("Conversion error in btn_set_value")) + self.gscreen.add_alarm_entry(_("Offset conversion error because off wrong entry")) + self.gscreen.warning_dialog(_("Conversion error in btn_set_value!"), True, + _("Please enter only numerical values\nValues have not been applied")) +#ToDo:End + + def on_btn_set_selected_clicked(self, widget, data=None): + system , name = self.widgets.offsetpage1.get_selected() + if not system: + message = _("you did not selected a system to be changed to, so nothing will be changed") + self.gscreen.warning_dialog(_("Important Warning!"), True, message) + self.gscreen.add_alarm_entry(message) + return + if system == self.system_list[self.data.system]: + return + else: + self.emc.set_mdi_mode() + self.gscreen.mdi_control.user_command(system) + self.emc.set_manual_mode() + + def entry_dialog(self, data=None, header=_("Enter value") ,label=_("Enter the value to set"), integer = False): + dialog = gtk.Dialog(header, + self.widgets.window1, + gtk.DIALOG_DESTROY_WITH_PARENT, + (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, + gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) + label = gtk.Label(label) + label.modify_font(pango.FontDescription("sans 20")) + calc = gladevcp.Calculator() + dialog.vbox.pack_start(label) + dialog.vbox.add(calc) + if data != None: + calc.set_value(data) + else: + calc.set_value("") + calc.set_property("font","sans 20") + calc.set_editable(True) + calc.entry.connect("activate", lambda w : dialog.emit("response",gtk.RESPONSE_ACCEPT)) + dialog.parse_geometry("400x400") + dialog.set_decorated(True) + dialog.show_all() + if integer: # The user is only allowed to enter integer values, we hide some button + calc.num_pad_only(True) + temp = calc.wTree.get_object("Dot") + temp.hide() + response = dialog.run() + value = calc.get_value() + dialog.destroy() + if response == gtk.RESPONSE_ACCEPT: + if value!= None: + print("Value = ",value) + return float(value) + else: + return "ERROR" + return "CANCEL" + + # DRO changes and related thinks + def on_tbtn_rel_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_rel_toggled to %s"%widget.get_active()) + if widget.get_active(): + widget.set_label("Abs.") + self.widgets.gremlin.set_property("use_relative",False) + self.set_property_dro("reference_type", 0) + else: + widget.set_label(self.system_list[self.data.system]) + self.widgets.gremlin.set_property("use_relative",True) + self.set_property_dro("reference_type", 1) + for axis in self.data.axis_list: + self._update_homed(axis) + + def on_tbtn_dtg_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("tbtn_dtg_toggled to %s"%widget.get_active()) + if widget.get_active(): + widget.set_label("GTD.") + self.widgets.gremlin.set_property("show_dtg",True) + self.set_property_dro("reference_type", 2) + else: + widget.set_label("DTG.") + self.widgets.gremlin.set_property("show_dtg",False) + if self.widgets.tbtn_rel.get_active(): + self.set_property_dro("reference_type", 0) + else: + self.set_property_dro("reference_type", 1) + for axis in self.data.axis_list: + self._update_homed(axis) + + def on_tbtn_units_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("tbtn_units_toggled to %s"%widget.get_active()) + if widget.get_active(): + widget.set_label("Inch") + self.data.dro_units = _IMPERIAL # 0 = _IMPERIAL ; 1 = _MM + else: + widget.set_label("mm") + self.data.dro_units = _MM # 0 = _IMPERIAL ; 1 = _MM + self.set_property_dro("display_units_mm", not widget.get_active()) + self.widgets.gremlin.set_property("metric_units", not widget.get_active()) + + def set_property_dro(self, property, status): + for axis in self.data.axis_list: + if axis not in "xyz": + axis = "4" + self.widgets["hal_dro_%s"%axis].set_property(property,status) + + # choose a theme to aply + def on_theme_choice_changed(self, widget): + if self.log: self.gscreen.add_alarm_entry("theme changed to %s"%widget.get_active_text()) + self.gscreen.change_theme(widget.get_active_text()) + + def on_rbt_unlock_toggled(self, widget, data = None): + if widget.get_active(): + if widget == self.widgets.rbt_use_unlock: + self.gscreen.prefs.putpref("unlock_way", "use", str) + elif widget == self.widgets.rbt_no_unlock: + self.gscreen.prefs.putpref("unlock_way", "no", str) + else: + self.gscreen.prefs.putpref("unlock_way", "hal", str) + + def on_rbtn_run_from_line_toggled(self, widget, data = None): + if widget.get_active(): + if widget == self.widgets.rbtn_no_run_from_line: + self.gscreen.prefs.putpref("run_from_line", "no_run", str) + self.widgets.btn_from_line.set_sensitive(False) + else: #widget == self.widgets.rbtn_run_from_line: + self.gscreen.prefs.putpref("run_from_line", "run", str) + self.widgets.btn_from_line.set_sensitive(True) + + def on_chk_use_kb_on_offset_toggled(self, widget, data = None): + self.gscreen.prefs.putpref("show_keyboard_on_offset", widget.get_active(), bool) + + def on_chk_use_kb_on_tooledit_toggled(self, widget, data = None): + self.gscreen.prefs.putpref("show_keyboard_on_tooledit", widget.get_active(), bool) + + def on_chk_use_kb_on_edit_toggled(self, widget, data = None): + self.gscreen.prefs.putpref("show_keyboard_on_edit", widget.get_active(), bool) + + def on_chk_use_kb_on_mdi_toggled(self, widget, data = None): + self.gscreen.prefs.putpref("show_keyboard_on_mdi", widget.get_active(), bool) + + def on_chk_use_kb_on_file_selection_toggled(self, widget, data = None): + self.gscreen.prefs.putpref("show_keyboard_on_file_selection", widget.get_active(), bool) + + def on_chk_use_desktop_notify_toggled(self, widget, data = None): + self.gscreen.prefs.putpref("desktop_notify", widget.get_active(), bool) + self.data.desktop_notify = widget.get_active() + + def on_chk_use_kb_shortcuts_toggled(self, widget, data = None): + self.gscreen.prefs.putpref("use_keyboard_shortcuts", widget.get_active(), bool) + + def on_rbtn_show_preview_toggled(self, widget, data = None): + self.gscreen.prefs.putpref("show_preview_on_offset", widget.get_active(), bool) + + def on_adj_scale_max_vel_value_changed(self, widget, data = None): + self.gscreen.prefs.putpref("scale_max_vel", widget.get_value(), float) + self.scale_max_vel = widget.get_value() + + def on_adj_scale_jog_vel_value_changed(self, widget, data = None): + self.gscreen.prefs.putpref("scale_jog_vel", widget.get_value(), float) + self.scale_jog_vel = widget.get_value() + + def on_adj_scale_feed_override_value_changed(self, widget, data = None): + self.gscreen.prefs.putpref("scale_feed_override", widget.get_value(), float) + self.scale_feed_override = widget.get_value() + + def on_adj_scale_spindle_override_value_changed(self, widget, data = None): + self.gscreen.prefs.putpref("scale_spindle_override", widget.get_value(), float) + self.scale_spindle_override = widget.get_value() + + def on_rbtn_fullscreen_toggled(self, widget): + if self.log: self.gscreen.add_alarm_entry("rbtn_fullscreen_toggled to %s"%widget.get_active()) + if widget.get_active(): + self.widgets.window1.fullscreen() + self.gscreen.prefs.putpref("screen1", "fullscreen", str) + else: + self.widgets.window1.unfullscreen() + + def on_rbtn_maximized_toggled(self, widget): + if self.log: self.gscreen.add_alarm_entry("rbtn_maximized_toggled to %s"%widget.get_active()) + if widget.get_active(): + self.widgets.window1.maximize() + self.gscreen.prefs.putpref("screen1", "maximized", str) + else: + self.widgets.window1.unmaximize() + + def on_rbtn_window_toggled(self, widget): + if self.log: self.gscreen.add_alarm_entry("rbtn_window_toggled to %s"%widget.get_active()) + self.widgets.spbtn_x_pos.set_sensitive(widget.get_active()) + self.widgets.spbtn_y_pos.set_sensitive(widget.get_active()) + self.widgets.spbtn_width.set_sensitive(widget.get_active()) + self.widgets.spbtn_height.set_sensitive(widget.get_active()) + # we have to check also if the window is active, because the button is toggled the first time + # before the window is shown + if widget.get_active() and self.widgets.window1.is_active(): + self.widgets.window1.move(int(self.widgets.adj_x_pos.get_value()), + int(self.widgets.adj_y_pos.get_value())) + self.widgets.window1.resize(int(self.widgets.adj_width.get_value()), + int(self.widgets.adj_height.get_value())) + self.gscreen.prefs.putpref("screen1", "window", str) + + def on_adj_x_pos_value_changed(self, widget, data = None): + self.gscreen.prefs.putpref("x_pos", widget.get_value(),float) + position = self.widgets.window1.get_position() + self.widgets.window1.move(int(widget.get_value()),position[1]) + + def on_adj_y_pos_value_changed(self, widget, data = None): + self.gscreen.prefs.putpref("y_pos", widget.get_value(),float) + position = self.widgets.window1.get_position() + self.widgets.window1.move(position[0],int(widget.get_value())) + + def on_adj_width_value_changed(self, widget, data = None): + self.gscreen.prefs.putpref("width", widget.get_value(),float) + size = self.widgets.window1.get_size() + self.widgets.window1.resize(int(widget.get_value()),size[1]) + + def on_adj_height_value_changed(self, widget, data = None): + self.gscreen.prefs.putpref("height", widget.get_value(),float) + size = self.widgets.window1.get_size() + self.widgets.window1.resize(size[0],int(widget.get_value())) + + def on_chk_hide_cursor_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("hide_cursor_toggled to %s"%widget.get_active()) + self.gscreen.prefs.putpref("hide_cursor", widget.get_active()) + self.data.hide_cursor = widget.get_active() + if widget.get_active(): + self.widgets.window1.window.set_cursor(INVISABLE) + else: + self.widgets.window1.window.set_cursor(None) + + def on_rel_colorbutton_color_set(self, widget): + if self.log: self.gscreen.add_alarm_entry("on_rel_colorbutton_color_set") + self.gscreen.set_rel_color() + for axis in self.data.axis_list: + self._update_homed(axis) + + def on_abs_colorbutton_color_set(self, widget): + if self.log: self.gscreen.add_alarm_entry("on_abs_colorbutton_color_set") + self.gscreen.set_abs_color() + for axis in self.data.axis_list: + self._update_homed(axis) + + def on_dtg_colorbutton_color_set(self, widget): + if self.log: self.gscreen.add_alarm_entry("on_dtg_colorbutton_color_set") + self.gscreen.set_dtg_color() + for axis in self.data.axis_list: + self._update_homed(axis) + + def on_file_to_load_chooser_file_set(self, widget): + if self.log: self.gscreen.add_alarm_entry("file to load on startup set to : %s"%widget.get_filename()) + print("file to load on startup set to : %s "%widget.get_filename()) + self.gscreen.prefs.putpref("open_file", widget.get_filename(), str) + + def on_grid_size_value_changed(self, widget, data=None): + self.gscreen.set_grid_size(widget) + + def on_tbtn_log_actions_toggled(self, widget, data=None): + self.log = widget.get_active() + self.gscreen.prefs.putpref("log_actions", widget.get_active(), bool) + + def on_chk_show_dro_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("show_gremlin_DRO = %s"%widget.get_active()) + self.widgets.gremlin.set_property("metric_units",not self.widgets.tbtn_units.get_active()) + self.widgets.gremlin.set_property("enable_dro",widget.get_active()) + self.gscreen.prefs.putpref("enable_dro", widget.get_active(), bool) + self.widgets.chk_show_offsets.set_sensitive(widget.get_active()) + self.widgets.chk_show_dtg.set_sensitive(widget.get_active()) + + def on_chk_show_dtg_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("show_gremlin_DTG = %s"%widget.get_active()) + self.widgets.gremlin.set_property("show_dtg", widget.get_active()) + self.gscreen.prefs.putpref("show_dtg", widget.get_active(), bool) + + def on_chk_show_offsets_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("show_offset_button_toggled to %s"%widget.get_active()) + self.widgets.gremlin.show_offsets = widget.get_active() + self.gscreen.prefs.putpref("show_offsets", widget.get_active(), bool) + + # tool stuff + def on_btn_tool_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_tool_clicked") + self.widgets.ntb_button.set_current_page(7) + self._show_tooledit_tab(True) + + def _show_tooledit_tab(self,state): + page = self.widgets.ntb_preview.get_nth_page(2) + print("tooledit",state,page.get_visible()) + if page.get_visible()and state or not page.get_visible()and not state: + return + if state: + page.show() + self.widgets.ntb_preview.set_property("show-tabs",not state) + self.widgets.vbx_jog.hide() + self.widgets.ntb_preview.set_current_page(2) + self.widgets.tooledit1.set_selected_tool(self.data.tool_in_spindle) + if self.widgets.chk_use_kb_on_tooledit.get_active(): + self.widgets.ntb_info.set_current_page(1) + else: + page.hide() + if self.widgets.ntb_preview.get_n_pages() > 4: # user tabs are availible + self.widgets.ntb_preview.set_property("show-tabs",not state) + self.widgets.vbx_jog.show() + self.widgets.ntb_preview.set_current_page(0) + self.widgets.ntb_info.set_current_page(0) + + def _update_toolinfo(self, tool): + toolinfo = self.widgets.tooledit1.get_toolinfo(tool) + if toolinfo: + # Doku + # toolinfo[0] = cell toggle + # toolinfo[1] = tool number + # toolinfo[2] = pocket number + # toolinfo[3] = X offset + # toolinfo[4] = Y offset + # toolinfo[5] = Z offset + # toolinfo[6] = A offset + # toolinfo[7] = B offset + # toolinfo[8] = C offset + # toolinfo[9] = U offset + # toolinfo[10] = V offset + # toolinfo[11] = W offset + # toolinfo[12] = tool diameter + # toolinfo[13] = frontangle + # toolinfo[14] = backangle + # toolinfo[15] = tool orientation + # toolinfo[16] = tool info + self.widgets.lbl_tool_no.set_text(str(toolinfo[1])) + self.widgets.lbl_tool_dia.set_text(toolinfo[12]) + self.widgets.lbl_tool_name.set_text(toolinfo[16]) + if tool == 0: + self.widgets.lbl_tool_no.set_text("0") + self.widgets.lbl_tool_dia.set_text("0") + self.widgets.lbl_tool_name.set_text(_("No tool description available")) + if "G43" in self.data.active_gcodes: + mode = self.emc.get_mode() + if mode != _AUTO: + self.emc.set_mdi_mode() + self.gscreen.mdi_control.user_command("G43") + if mode == _MANUAL: + self.wait_tool_change = True + self.on_hal_status_interp_idle(self) + + def on_btn_delete_tool_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("on_btn_delete_tool_clicked") + self.tooledit_btn_delete_tool.emit("clicked") + + def on_btn_add_tool_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("on_btn_add_tool_clicked") + self.tooledit_btn_add_tool.emit("clicked") + + def on_btn_reload_tooltable_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("on_btn_reload_tooltable_clicked") + self.tooledit_btn_reload_tool.emit("clicked") + + def on_btn_apply_tool_changes_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("on_btn_apply_tool_changes_clicked") + self.tooledit_btn_apply_tool.emit("clicked") + tool = self.widgets.tooledit1.get_selected_tool() + #self._update_toolinfo(tool) + + def on_btn_tool_touchoff_clicked(self, widget, data=None): + if not self.widgets.tooledit1.get_selected_tool(): + return + if widget == self.widgets.btn_tool_touchoff_x: + axis = "x" + elif widget == self.widgets.btn_tool_touchoff_z: + axis = "z" + else: + self.gscreen.warning_dialog(_("Real big error!"), True, + _("You managed to come to a place that is not possible in on_btn_tool_touchoff")) + return + + if "G41" in self.data.active_gcodes or "G42" in self.data.active_gcodes: + message = _("Tool touch off is not possible with cutter radius compensation switched on!\n") + message += _("Please emit an G40 before tool touch off") + print(message) + self.gscreen.add_alarm_entry(message) + self.gscreen.warning_dialog(_("Warning Tool Touch off not possible!"), True, message) + return + + value = self.entry_dialog(data = None, header = _("Enter value for axis %s to set:")%axis, + label=_("Set parameter of tool {0:d} and axis {1} to:".format(self.data.tool_in_spindle,axis)), + integer = False) + if value == "ERROR": + message = _("Conversion error because of wrong entry for touch off axis %s")%axis + print(message) + self.gscreen.add_alarm_entry(message) + self.gscreen.warning_dialog(_("Conversion error !"), True, message) + return + elif value == "CANCEL": + self.gscreen.add_alarm_entry(_("entry for axis %s has been canceled")%axis) + return + else: + self.gscreen.add_alarm_entry(_("axis {0} , has been set to {1:f}".format(axis,value))) + self.gscreen.mdi_control.touchoff(self.widgets.tooledit1.get_selected_tool(),axis,value) + #self._update_toolinfo(self.data.tool_in_spindle) + # will set the label, but the tool do not need to be in the spindle, + # so information may be no homogeniuos + #self._update_toolinfo(self._get_selected_tool()) + self.widgets.rbt_manual.emit("clicked") + + # select a tool entering a number + def on_btn_select_tool_by_no_clicked(self, widget, data=None): + value = self.entry_dialog(data = None, header = _("Enter the tool number as integer "), + label=_("Select the tool to change"),integer=True) + if value == "ERROR": + message = _("Conversion error because of wrong entry for tool number\n") + message += _("enter only integer nummbers") + print(message) + self.gscreen.add_alarm_entry(message) + self.gscreen.warning_dialog(_("Conversion error !"), True, message) + return + elif value == "CANCEL": + self.gscreen.add_alarm_entry(_("entry for selection of tool number has been canceled")) + return + else: + if int(value) == self.gscreen.data.tool_in_spindle: + message = _("Selected tool is already in spindle, no change needed.") + self.gscreen.warning_dialog(_("Important Warning!"), True, message) + self.gscreen.add_alarm_entry(message) + return + self.wait_tool_change = True + self.emc.set_mdi_mode() + command = "T%s M6"%int(value) + self.gscreen.mdi_control.user_command(command) + self.wait_tool_change = True + + # set tool with M61 Q? or with T? M6 + def on_btn_selected_tool_clicked(self, widget, data=None): + tool = self.widgets.tooledit1.get_selected_tool() + if tool == None: + message = _("you selected no or more than one tool, the tool selection must be unique") + self.gscreen.warning_dialog(_("Important Warning!"), True, message) + self.gscreen.add_alarm_entry(message) + return + if tool == self.gscreen.data.tool_in_spindle: + message = _("Selected tool is already in spindle, no change needed.") + self.gscreen.warning_dialog(_("Important Warning!"), True, message) + self.gscreen.add_alarm_entry(message) + return + if tool or tool == 0: + tool = int(tool) + self.wait_tool_change = True + self.emc.set_mdi_mode() + + if widget == self.widgets.btn_change_tool: + command = "T%s M6"%tool + else: + command = "M61 Q%s"%tool + #self.on_hal_status_interp_idle(self) + self.gscreen.mdi_control.user_command(command) + if self.log: self.gscreen.add_alarm_entry("set_tool_with %s"%command) + else: + message = _("Could not understand the entered tool number. Will not change anything") + self.gscreen.warning_dialog(_("Important Warning!"), True, message) + self.widgets.statusbar1.push(1,message) + + # gremlin relevant calls + def on_rbt_view_p_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_view_p_toggled") + if self.widgets.rbt_view_p.get_active(): + self.widgets.gremlin.set_property("view","p") + + def on_rbt_view_x_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_view_x_toggled") + if self.widgets.rbt_view_x.get_active(): + self.widgets.gremlin.set_property("view","x") + + def on_rbt_view_y_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_view_y_toggled") + if self.widgets.rbt_view_y.get_active(): + self.widgets.gremlin.set_property("view","y") + + def on_rbt_view_z_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_view_z_toggled") + if self.widgets.rbt_view_z.get_active(): + self.widgets.gremlin.set_property("view","z") + + def on_rbt_view_y2_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("rbt_view_y2_toggled") + if self.widgets.rbt_view_y2.get_active(): + self.widgets.gremlin.set_property("view","y2") + + def on_btn_zoom_in_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_zoom_in_clicked") + self.widgets.gremlin.zoom_in() + + def on_btn_zoom_out_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_zoom_out_clicked") + self.widgets.gremlin.zoom_out() + + def on_btn_delete_view_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_delete_view_clicked") + self.widgets.gremlin.clear_live_plotter() + + def on_tbtn_view_dimension_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_view_dimensions_clicked") + self.widgets.gremlin.set_property("show_extents_option", widget.get_active()) + + def on_tbtn_view_tool_path_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_view_tool_path_clicked") + self.widgets.gremlin.set_property("show_live_plot", widget.get_active()) + + def _show_iconview_tab(self,state): + page = self.widgets.ntb_preview.get_nth_page(3) + if page.get_visible()and state or not page.get_visible()and not state: + return + if state: + page.show() + self.widgets.ntb_preview.set_property("show-tabs", not state) + self.widgets.ntb_preview.set_current_page(3) + if self.widgets.chk_use_kb_on_file_selection.get_active(): + self.widgets.box_info.show() + self.widgets.ntb_info.set_current_page(1) + else: + page.hide() + if self.widgets.ntb_preview.get_n_pages() > 4: # user tabs are availible + self.widgets.ntb_preview.set_property("show-tabs",not state) + self.widgets.ntb_preview.set_current_page(0) + self.widgets.ntb_info.set_current_page(0) + + def on_btn_load_clicked(self, widget, data=None): + self.widgets.ntb_button.set_current_page(8) + self.widgets.ntb_preview.set_current_page(3) + self.widgets.tbtn_fullsize_preview.set_active(True) + self._show_iconview_tab(True) + self.widgets.IconFileSelection1.iconView.grab_focus() + + def on_btn_sel_next_clicked(self, widget, data=None): + self.widgets.IconFileSelection1.btn_sel_next.emit("clicked") + + def on_btn_sel_prev_clicked(self, widget, data=None): + self.widgets.IconFileSelection1.btn_sel_prev.emit("clicked") + + def on_btn_home_clicked(self, widget, data=None): + self.widgets.IconFileSelection1.btn_home.emit("clicked") + + def on_btn_jump_to_clicked(self, widget, data=None): + self.widgets.IconFileSelection1.btn_jump_to.emit("clicked") + + def on_btn_dir_up_clicked(self, widget, data=None): + self.widgets.IconFileSelection1.btn_dir_up.emit("clicked") + + def on_btn_select_clicked(self, widget, data=None): + self.widgets.IconFileSelection1.btn_select.emit("clicked") + + def on_IconFileSelection1_selected(self,widget,path=None): + print(path) + if path: + try: + self.widgets.hal_action_open.load_file(path) + self.widgets.ntb_preview.set_current_page(0) + self.widgets.tbtn_fullsize_preview.set_active(False) + self.widgets.ntb_button.set_current_page(2) + except: + print(_("error trying opening file %s"%path)) + self._show_iconview_tab(False) + + def on_IconFileSelection1_exit(self,widget): + self.widgets.ntb_preview.set_current_page(0) + self.widgets.tbtn_fullsize_preview.set_active(False) + self._show_iconview_tab(False) + + # edit a program or make a new one + def on_btn_edit_clicked(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("btn_edit_clicked") + self.widgets.ntb_button.set_current_page(6) + self.widgets.ntb_preview.hide() + self.widgets.hbx_dro.hide() + w1 , h1 = self.widgets.window1.get_size_request() + w2 , h2 = self.widgets.vbtb_main.get_size_request() + self.widgets.vbx_jog.set_size_request(w1 - w2 , -1) + self.widgets.gcode_view.set_sensitive(True) + self.widgets.gcode_view.grab_focus() + if self.widgets.chk_use_kb_on_edit.get_active(): + self.widgets.ntb_info.set_current_page(1) + else: + self.widgets.ntb_info.set_current_page(0) + self.widgets.ntb_message.set_current_page(1) + + # search forward while in edit mode + def on_btn_search_forward_clicked(self, widget, data=None): + self.widgets.gcode_view.text_search(direction=True,text=self.widgets.search_entry.get_text()) + + # search backward while in edit mode + def on_btn_search_back_clicked(self, widget, data=None): + self.widgets.gcode_view.text_search(direction=False,text=self.widgets.search_entry.get_text()) + + # undo changes while in edit mode + def on_btn_undo_clicked(self, widget, data=None): + self.widgets.gcode_view.undo() + + # redo changes while in edit mode + def on_btn_redo_clicked(self, widget, data=None): + self.widgets.gcode_view.redo() + + # if we leave the edit mode, we will have to show all widgets again + def on_ntb_button_switch_page(self, *args): + message = "ntb_button_page changed to %s"%self.widgets.ntb_button.get_current_page() + if self.log: self.gscreen.add_alarm_entry(message) + + if self.widgets.ntb_preview.get_current_page() == 0: # preview tab is active, + # check if offset tab is visible, if so we have to hide it + page = self.widgets.ntb_preview.get_nth_page(1) + if page.get_visible(): + self._show_offset_tab(False) + elif self.widgets.ntb_preview.get_current_page() == 1: + self._show_offset_tab(False) + elif self.widgets.ntb_preview.get_current_page() == 2: + self._show_tooledit_tab(False) + elif self.widgets.ntb_preview.get_current_page() == 3: + self._show_iconview_tab(False) + + if self.widgets.tbtn_fullsize_preview.get_active(): + self.widgets.tbtn_fullsize_preview.set_active(False) + if self.widgets.ntb_button.get_current_page() == 6 or self.widgets.ntb_preview.get_current_page() == 3: + self.widgets.ntb_preview.show() + self.widgets.hbx_dro.show() + self.widgets.vbx_jog.set_size_request(360 , -1) + self.widgets.gcode_view.set_sensitive(0) + self.widgets.btn_save.set_sensitive(True) + self.widgets.btn_reload.emit("clicked") + self.widgets.ntb_info.set_current_page(0) + self.widgets.ntb_message.set_current_page(0) + + # Save all changes and run the program + def on_btn_save_and_run_clicked(self, widget, data=None): + if self.widgets.lbl_program.get_label() == "": + self.widgets.btn_save_as.emit("clicked") + else: + self.widgets.btn_save.emit("clicked") + self.widgets.btn_reload.emit("clicked") + self.widgets.ntb_button.set_current_page(2) + self.widgets.btn_run.emit("clicked") + +# ToDo find out how to unload the loaded file + # make a new file + def on_btn_new_clicked(self, widget, data=None): + self.widgets.btn_save.set_sensitive(False) + self.widgets.gcode_view.buf.set_text("") + self.widgets.lbl_program.set_label("") +# ToDo end + + # just go back to auto button and discharge all changes made + def on_btn_close_clicked(self, widget, data=None): + self.on_ntb_button_switch_page() + self.widgets.ntb_button.set_current_page(2) + self.widgets.btn_reload.emit("clicked") + + def on_tbtn_optional_blocks_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("on_tbtn_optional_blocks_toggled to %s"%widget.get_active()) + self.emc.blockdel(widget.get_active()) + self.gscreen.prefs.putpref("blockdel", widget.get_active()) + self.widgets.btn_reload.emit("clicked") + + def on_tbtn_optional_stops_toggled(self, widget, data=None): + if self.log: self.gscreen.add_alarm_entry("on_tbtn_optional_stops_toggled to %s"%widget.get_active()) + self.emc.opstop(not widget.get_active()) + self.gscreen.prefs.putpref("opstop", not widget.get_active()) + + # use the hal_status widget to control buttons and + # actions allowed by the user and sensitive widgets + def on_hal_status_all_homed(self,widget): + self.data.all_homed = True + self.gscreen.add_alarm_entry("all_homed") + self.widgets.statusbar1.push(1,"") + self.widgets.ntb_button.set_current_page(0) + widgetlist = ["rbt_mdi", "rbt_auto", "btn_index_tool", "btn_change_tool","btn_select_tool_by_no", + "btn_tool_touchoff_x", "btn_tool_touchoff_z", "btn_touch" + ] + self.gscreen.sensitize_widgets(widgetlist,True) + + def on_hal_status_not_all_homed(self,*args): + self.gscreen.add_alarm_entry("not_all_homed") + widgetlist = ["rbt_mdi", "rbt_auto", "btn_index_tool", "btn_touch", "btn_change_tool","btn_select_tool_by_no", + "btn_tool_touchoff_x", "btn_tool_touchoff_z", "btn_touch" + ] + self.gscreen.sensitize_widgets(widgetlist,False) + + def on_hal_status_homed(self,widget,data): + for letter in(self.data.axis_list): + count = "xyzabcuvws".index(letter) + if str(count) in data: + if letter == "x" and self.data.lathe_mode: + self.data.y_is_homed = True + self._update_homed("y") + self.data["%s_is_homed"%letter] = True + self._update_homed(letter) + if self.log:self.gscreen.add_alarm_entry(_("Axes %s are homed"%letter)) + + def on_hal_status_file_loaded(self, widget, filename): + self.gscreen.add_alarm_entry("file_loaded_%s"%filename) + if len(filename) > 50: + filename = filename[0:10] + "..." + filename[len(filename)-39:len(filename)] + self.widgets.lbl_program.set_text(filename) + self.widgets.btn_use_current.set_sensitive(True) + + def on_hal_status_interp_idle(self,widget): + self.gscreen.add_alarm_entry("idle") + widgetlist = ["rbt_manual", "btn_step", "ntb_jog", "btn_from_line", "btn_reload", + "tbtn_flood", "tbtn_mist", "rbt_forward", "rbt_reverse", "rbt_stop", + "btn_load", "btn_edit","tbtn_optional_blocks" + ] + if not self.widgets.rbt_hal_unlock.get_active(): + widgetlist.append("rbt_setup") + if self.data.all_homed: + widgetlist.append("rbt_mdi") + widgetlist.append("rbt_auto") + widgetlist.append("btn_index_tool") + widgetlist.append("btn_change_tool") + widgetlist.append("btn_select_tool_by_no") + widgetlist.append("btn_tool_touchoff_x") + widgetlist.append("btn_tool_touchoff_z") + widgetlist.append("btn_touch") + self.gscreen.sensitize_widgets(widgetlist,True) + for btn in self.macrobuttons: + btn.set_sensitive(True) + self.widgets.btn_show_kbd.set_image(self.widgets.img_keyboard) + self.widgets.btn_run.set_sensitive(True) + if self.wait_tool_change == True: + self.widgets.rbt_manual.emit("clicked") + self.wait_tool_change = False + self.interpreter = _IDLE + self.data.restart_dialog = None + + # this can not be done with the status widget, + # because it will not emit a RESUME signal + def on_tbtn_pause_toggled(self, widget, data=None): + self.gscreen.add_alarm_entry("pause_toggled") + widgetlist = ["btn_step", "rbt_forward", "rbt_reverse", "rbt_stop"] + self.gscreen.sensitize_widgets(widgetlist,widget.get_active()) + + def on_btn_stop_clicked(self, widget, data=None): + self.gscreen.update_restart_line(0,0) + + def on_hal_status_interp_run(self,widget): + self.gscreen.add_alarm_entry("run") + widgetlist = ["rbt_manual", "rbt_mdi", "rbt_auto", "rbt_setup", "btn_step","btn_index_tool", + "btn_from_line", "btn_reload", "btn_change_tool","btn_select_tool_by_no", + "btn_load", "btn_edit", "tbtn_optional_blocks", + "btn_tool_touchoff_x", "btn_tool_touchoff_z", "btn_touch" + ] + # in MDI it should be possible to add more commands, even if the interpreter is running + if self.gscreen.emcstat.task_mode <> _MDI: + widgetlist.append("ntb_jog") + + self.gscreen.sensitize_widgets(widgetlist,False) + self.widgets.btn_run.set_sensitive(False) + self.interpreter = _RUN + if self.data.restart_dialog: + self.data.restart_dialog.destroy() + self.data.restart_dialog = None + + def on_btn_from_line_clicked(self, widget, data=None): + self.gscreen.add_alarm_entry("Restart the program from line clicked") + self.gscreen.launch_restart_dialog(self) + + def on_hal_status_tool_in_spindle_changed(self, object, new_tool_no): + self.gscreen.add_alarm_entry(_("tool_in_spindle has changed to %s"%new_tool_no)) + print("hal_status tool changed emitted") + self._update_toolinfo(new_tool_no) + + def on_hal_status_state_estop(self,widget=None): + self.gscreen.add_alarm_entry("estop") + self.widgets.tbtn_estop.set_active(True) + self.widgets.tbtn_on.set_active(False) + self.widgets.tbtn_on.set_sensitive(False) + + def on_hal_status_state_estop_reset(self,widget=None): + self.gscreen.add_alarm_entry("estop_reset") + self.widgets.tbtn_estop.set_active(False) + self.widgets.tbtn_on.set_sensitive(True) + + def on_hal_status_state_off(self,widget): + self.gscreen.add_alarm_entry("state_off") + widgetlist = ["rbt_manual", "rbt_mdi", "rbt_auto", "btn_homing", "btn_touch", "btn_tool", + "ntb_jog", "scl_feed", "btn_feed_100", "rbt_forward", "btn_index_tool", + "rbt_reverse", "rbt_stop", "tbtn_flood", "tbtn_mist", "btn_change_tool","btn_select_tool_by_no", + "btn_spindle_100", "scl_max_vel", "scl_spindle", + "btn_tool_touchoff_x", "btn_tool_touchoff_z" + ] + self.gscreen.sensitize_widgets(widgetlist,False) + self.widgets.rbt_manual.set_active(True) + if self.widgets.tbtn_on.get_active(): + self.widgets.tbtn_on.set_active(False) + + def on_hal_status_state_on(self,widget): + self.gscreen.add_alarm_entry("state_on") + widgetlist = ["rbt_manual", "btn_homing", "btn_touch", "btn_tool", + "ntb_jog", "scl_feed", "btn_feed_100", "rbt_forward", + "rbt_reverse", "rbt_stop", "tbtn_flood", "tbtn_mist", + "btn_spindle_100", "scl_max_vel", "scl_spindle" + ] + self.gscreen.sensitize_widgets(widgetlist,True) + self.widgets.rbt_manual.set_active(True) + if not self.widgets.tbtn_on.get_active(): + self.widgets.tbtn_on.set_active(True) + + def change_sound(self,widget,sound): + file = widget.get_filename() + if file: + self.data[sound+"_sound"] = file + temp = "audio_"+ sound + self.gscreen.prefs.putpref(temp, file, str) + + # This connects signals without using glade"s autoconnect method + # in this case to destroy the window + # it calls the method in gscreen: gscreen.on_window_destroy() + # and run-at-line dialog + def connect_signals(self,handlers): + signal_list = [ ["window1","destroy", "on_window1_destroy"], + ["audio_error_chooser","selection_changed","change_sound","error"], + ["audio_alert_chooser","selection_changed","change_sound","alert"], + ] + for i in signal_list: + if len(i) == 3: + self.gscreen.widgets[i[0]].connect(i[1], self.gscreen[i[2]]) + elif len(i) == 4: + self.gscreen.widgets[i[0]].connect(i[1], self.gscreen[i[2]],i[3]) + + + # every 100 milli seconds this gets called + # add pass so gscreen doesn"t try to update it"s regular widgets or + # add the individual function names that you would like to call. + # In this case we wish to call Gscreen"s default function for units button update + def periodic(self): + self.gscreen.update_active_gcodes() + self.gscreen.update_active_mcodes() + if "G8" in self.data.active_gcodes and self.data.lathe_mode and self.data.diameter_mode: + self._update_homed("x") + self.data.diameter_mode = False + elif "G7" in self.data.active_gcodes and self.data.lathe_mode and not self.data.diameter_mode: + self._update_homed("y") + self.data.diameter_mode = True + self._update_vel() + self._update_coolant() + self._update_spindle_btn() + self.widgets.active_speed_label.set_label(self.data.active_spindle_command) + + # check if the coordinate system has changed to display the correct label on the button + if self.system_list[self.data.system] <> self.widgets.tbtn_rel.get_label(): + if not self.widgets.tbtn_rel.get_active(): + message = "coordinate system has changed from %s"%self.widgets.tbtn_rel.get_label() + message += " to %s"%self.system_list[self.data.system] + if self.log: self.gscreen.add_alarm_entry(message) + self.widgets.tbtn_rel.set_label(self.system_list[self.data.system]) + + if self.system_list[self.data.system] <> "G54": + self.widgets.tbtn_rel.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#28D0D9")) + else: + self.widgets.tbtn_rel.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#DCDCDC")) + + # Initialize the file to load dialog, setting an title and the correct + # folder as well as a file filter + def init_file_to_load(self): + file_dir = self.gscreen.inifile.find("DISPLAY", "PROGRAM_PREFIX") + self.widgets.file_to_load_chooser.set_current_folder(file_dir) + title = _("Select the file you want to be loaded at program start") + self.widgets.file_to_load_chooser.set_title(title) + self.widgets.ff_file_to_load.set_name("linuxcnc files") + self.widgets.ff_file_to_load.add_pattern("*.ngc") + file_ext = self.gscreen.inifile.findall("FILTER", "PROGRAM_EXTENSION") + for ext in file_ext: + if ".py" in ext: + self.widgets.ff_file_to_load.add_pattern("*.py") + if ".png" in ext: + self.widgets.ff_file_to_load.add_pattern("*.png") + if ".gif" in ext: + self.widgets.ff_file_to_load.add_pattern("*.gif") + if ".jpg" in ext: + self.widgets.ff_file_to_load.add_pattern("*.jpg") + + # If we need extra HAL pins here is where we do it. + # Note you must import hal at the top of this script to do it. + # For gaxis there is no extra pins but since we don"t want gscreen to + # add it"s default pins we added this function + # we make pins for the hardware buttons witch can be placed around the + # screen to activate the coresponding buttons on the GUI + def initialize_pins(self): + # generate the horizontal button pins + for h_button in range(0,10): + self.signal = hal_glib.GPin(self.gscreen.halcomp.newpin("h-button-%s"%h_button, + hal.HAL_BIT, hal.HAL_IN)) + self.signal.connect("value_changed", self._on_h_button_changed) + + # generate the vertical button pins + for v_button in range(0,7): + self.signal = hal_glib.GPin(self.gscreen.halcomp.newpin("v-button-%s"%v_button, + hal.HAL_BIT, hal.HAL_IN)) + self.signal.connect("value_changed", self._on_v_button_changed) + + # buttons for jogging the axis + for jog_button in self.data.axis_list: + if jog_button not in "xyz": + jog_button = self.axisletter_four + self.signal = hal_glib.GPin(self.gscreen.halcomp.newpin("jog-%s-plus"%jog_button, + hal.HAL_BIT, hal.HAL_IN)) + self.signal.connect("value_changed", self._on_pin_jog_changed, jog_button,1) + self.signal = hal_glib.GPin(self.gscreen.halcomp.newpin("jog-%s-minus"%jog_button, + hal.HAL_BIT, hal.HAL_IN)) + self.signal.connect("value_changed", self._on_pin_jog_changed, jog_button,-1) + + # jog_increment out pin + self.jog_increment = hal_glib.GPin(self.gscreen.halcomp.newpin("jog-increment", + hal.HAL_FLOAT, hal.HAL_OUT)) + + # generate the pins to set the increments + self._check_len_increments() + for buttonnumber in range(0,self.no_increments): + self.signal = hal_glib.GPin(self.gscreen.halcomp.newpin("jog-inc-%s"%buttonnumber, + hal.HAL_BIT, hal.HAL_IN)) + self.signal.connect("value_changed", self._on_pin_incr_changed, buttonnumber) + + self.signal = hal_glib.GPin(self.gscreen.halcomp.newpin("unlock-settings", hal.HAL_BIT, hal.HAL_IN)) + self.signal.connect("value_changed", self._on_unlock_settings_changed) + + # generate the pins to connect encoders to the sliders + self.feed_override_counts = hal_glib.GPin(self.gscreen.halcomp.newpin("feed-override-counts", + hal.HAL_S32, hal.HAL_IN)) + self.feed_override_counts.connect("value_changed", self._on_fo_counts_changed, "scl_feed") + self.spindle_override_counts = hal_glib.GPin(self.gscreen.halcomp.newpin("spindle-override-counts", + hal.HAL_S32, hal.HAL_IN)) + self.spindle_override_counts.connect("value_changed", self._on_so_counts_changed, "scl_spindle") + self.jog_speed_counts = hal_glib.GPin(self.gscreen.halcomp.newpin("jog-speed-counts", hal.HAL_S32, + hal.HAL_IN)) + self.jog_speed_counts.connect("value_changed", self._on_jv_counts_changed, "hal_scl_jog_vel") + self.max_vel_counts = hal_glib.GPin(self.gscreen.halcomp.newpin("max-vel-counts", hal.HAL_S32, + hal.HAL_IN)) + self.max_vel_counts.connect("value_changed", self._on_mv_counts_changed, "scl_max_vel") + + # This is only necessary, because after connecting the Encoder the value will be increased by one + self.widgets.btn_feed_100.emit("clicked") + + # make pins to react to tool_offset changes + self.pin_offset_x = hal_glib.GPin(self.gscreen.halcomp.newpin("tooloffset_x", hal.HAL_FLOAT, hal.HAL_IN)) + self.pin_offset_x.connect("value_changed", self._offset_changed,"tooloffset_x") + self.pin_offset_z = hal_glib.GPin(self.gscreen.halcomp.newpin("tooloffset_z", hal.HAL_FLOAT, hal.HAL_IN)) + self.pin_offset_z.connect("value_changed", self._offset_changed,"tooloffset_z") + + def _offset_changed(self,pin,tooloffset): + self.widgets.lbl_tool_offset_z.set_text("%.3f"%self.gscreen.halcomp["tooloffset_z"]) + self.widgets.lbl_tool_offset_x.set_text("%.3f"%self.gscreen.halcomp["tooloffset_x"]) + + def _on_pin_incr_changed(self, pin, buttonnumber): + if not pin.get(): + return + data = self.data.jog_increments[int(buttonnumber)] + self.on_increment_changed(self.incr_rbt_list[int(buttonnumber)], data) + self.incr_rbt_list[int(buttonnumber)].set_active(True) + + def _on_pin_jog_changed(self, pin, axis,direction): + if axis not in "xyz": + axis = "4" + if direction == 1: + widget = self.widgets["btn_%s_plus"%axis] + else: + widget = self.widgets["btn_%s_minus"%axis] + if pin.get(): + self.on_btn_jog_pressed(widget) + else: + self.on_btn_jog_released(widget) + + def _on_unlock_settings_changed(self, pin): + if not self.widgets.rbt_hal_unlock.get_active(): + return + self.widgets.rbt_setup.set_sensitive(pin.get()) + + def _on_fo_counts_changed(self, pin, widget): + counts = pin.get() + difference = (counts - self.fo_counts) * self.scale_feed_override + self.fo_counts = counts + val = self.widgets[widget].get_value() + difference + if val < 0: + val = 0 + if difference != 0: + self.widgets[widget].set_value(val) + + def _on_so_counts_changed(self, pin, widget): + counts = pin.get() + difference = (counts - self.so_counts) * self.scale_spindle_override + self.so_counts = counts + val = self.widgets[widget].get_value() + difference + if val < 0: + val = 0 + if difference != 0: + self.widgets[widget].set_value(val) + + def _on_jv_counts_changed(self, pin, widget): + counts = pin.get() + difference = (counts - self.jv_counts) * self.scale_jog_vel + self.jv_counts = counts + val = self.widgets[widget].get_value() + difference + if val < 0: + val = 0 + if difference != 0: + self.widgets[widget].set_value(val) + + def _on_mv_counts_changed(self, pin, widget): + counts = pin.get() + difference = (counts - self.mv_counts) * self.scale_max_vel + self.mv_counts = counts + val = self.widgets[widget].get_value() + difference + if val < 0: + val = 0 + if difference != 0: + self.widgets[widget].set_value(val) + + # The actions of the buttons + def _on_h_button_changed(self,pin): + self.gscreen.add_alarm_entry("got h_button_signal %s"%pin.name) + # we check if the button is pressed ore release, + # otehrwise a signal will be emitted, wenn the button is released and + # the signal drob down to zero + if not pin.get(): + return + # lets see on witch button_box we are + page = self.widgets.ntb_button.get_current_page() + # witch button has been pressed + btn = str(pin.name) + # from the list we declared under __init__ we get the button number + nr = int(btn[-1]) + tab = self.h_tabs[page] # see in the __init__ section for the declaration of self.tabs + button = None + # we check if there is a buuton or the user pressed a hardware button under + # a non existing software button + for index in tab: + if int(index[0]) == nr: + # this is the name of the button + button = index[1] + if button: + # only emit a signal if the button is sensitive, otherwise + # running actions may be interupted + if self.widgets[button].get_sensitive() == False: + print("%s not_sensitive"%button) + self.gscreen.add_alarm_entry("%s not_sensitive"%button) + return + self.widgets[button].emit("clicked") + else: + # as we are generating the macro buttons dynamecely, we can"t use the same + # method as above, here is how we do it + if page == 1: # macro page + # does the user press a valid hardware button? + if nr < len(self.macrobuttons): + button = self.macrobuttons[nr] # This list is generated in add_macros_buttons(self) + # is the button sensitive? + if button.get_sensitive() == False: + print("%s not_sensitive"%button) + return + button.emit("pressed") + else: + print("No function on this button") + self.gscreen.add_alarm_entry("%s not_sensitive"%button) + else: + print("No function on this button") + + def _on_v_button_changed(self,pin): + self.gscreen.add_alarm_entry("got v_button_signal %s"%pin.name) + if not pin.get(): + return + btn = str(pin.name) + nr = int(btn[-1]) + tab = self.v_tabs # see in the __init__ section for the declaration of self.tabs + button = None + for index in tab: + if int(index[0]) == nr: + # this is the name of the button + button = index[1] + if button: + # only emit a signal if the button is sensitive, otherwise + # running actions may be interupted + if self.widgets[button].get_sensitive() == False: + print("%s not_sensitive"%button) + self.gscreen.add_alarm_entry("%s not_sensitive"%button) + return + self.widgets[button].emit("clicked") + else: + print("No button found in v_tabs from %s"%pin.name) + self.gscreen.add_alarm_entry("No button found in v_tabs from %s"%pin.name) + + def _check_len_increments(self): + increments = self.gscreen.inifile.find("DISPLAY", "INCREMENTS") + if increments: + if "," in increments: + self.data.jog_increments = [i.strip() for i in increments.split(",")] + else: + self.data.jog_increments = increments.split() + self.data.jog_increments.insert(0,_("Continuous")) + else: + self.data.jog_increments = [_("Continuous"),"1,000","0,100","0,010","0,001"] + self.add_alarm_entry(_("No default jog increments entry found in [DISPLAY] of INI file")) + self.no_increments = len(self.data.jog_increments) + if self.no_increments > 10: + print(_("To many increments given in INI File for this screen")) + print(_("Only the first 10 will be reachable through this screen")) + self.no_increments = 10 + diff --git a/share/gscreen/skins/gmoccapy/icon/Auto.gif b/share/gscreen/skins/gmoccapy/icon/Auto.gif Binary files differnew file mode 100644 index 000000000..30c64ba4e --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/Auto.gif diff --git a/share/gscreen/skins/gmoccapy/icon/E-Stop.gif b/share/gscreen/skins/gmoccapy/icon/E-Stop.gif Binary files differnew file mode 100644 index 000000000..b4b6d7835 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/E-Stop.gif diff --git a/share/gscreen/skins/gmoccapy/icon/Logo.png b/share/gscreen/skins/gmoccapy/icon/Logo.png Binary files differnew file mode 100755 index 000000000..a26f0c730 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/Logo.png diff --git a/share/gscreen/skins/gmoccapy/icon/clear.png b/share/gscreen/skins/gmoccapy/icon/clear.png Binary files differnew file mode 100755 index 000000000..59255ad54 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/clear.png diff --git a/share/gscreen/skins/gmoccapy/icon/configure-2.png b/share/gscreen/skins/gmoccapy/icon/configure-2.png Binary files differnew file mode 100755 index 000000000..87fbb4bb6 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/configure-2.png diff --git a/share/gscreen/skins/gmoccapy/icon/coolant_off.png b/share/gscreen/skins/gmoccapy/icon/coolant_off.png Binary files differnew file mode 100644 index 000000000..219fca165 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/coolant_off.png diff --git a/share/gscreen/skins/gmoccapy/icon/coolant_on.gif b/share/gscreen/skins/gmoccapy/icon/coolant_on.gif Binary files differnew file mode 100644 index 000000000..8262f344c --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/coolant_on.gif diff --git a/share/gscreen/skins/gmoccapy/icon/dimensions.png b/share/gscreen/skins/gmoccapy/icon/dimensions.png Binary files differnew file mode 100755 index 000000000..025648dda --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/dimensions.png diff --git a/share/gscreen/skins/gmoccapy/icon/editor.png b/share/gscreen/skins/gmoccapy/icon/editor.png Binary files differnew file mode 100644 index 000000000..0c114054d --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/editor.png diff --git a/share/gscreen/skins/gmoccapy/icon/enter.png b/share/gscreen/skins/gmoccapy/icon/enter.png Binary files differnew file mode 100755 index 000000000..b1c72d0aa --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/enter.png diff --git a/share/gscreen/skins/gmoccapy/icon/estopred.png b/share/gscreen/skins/gmoccapy/icon/estopred.png Binary files differnew file mode 100644 index 000000000..15741143b --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/estopred.png diff --git a/share/gscreen/skins/gmoccapy/icon/exit.png b/share/gscreen/skins/gmoccapy/icon/exit.png Binary files differnew file mode 100644 index 000000000..f23e43c0f --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/exit.png diff --git a/share/gscreen/skins/gmoccapy/icon/exit_application.png b/share/gscreen/skins/gmoccapy/icon/exit_application.png Binary files differnew file mode 100755 index 000000000..805ddfc67 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/exit_application.png diff --git a/share/gscreen/skins/gmoccapy/icon/forward.png b/share/gscreen/skins/gmoccapy/icon/forward.png Binary files differnew file mode 100644 index 000000000..ae1aa4bef --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/forward.png diff --git a/share/gscreen/skins/gmoccapy/icon/forward_on.gif b/share/gscreen/skins/gmoccapy/icon/forward_on.gif Binary files differnew file mode 100644 index 000000000..f0ec9bf96 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/forward_on.gif diff --git a/share/gscreen/skins/gmoccapy/icon/from where are the icons.txt b/share/gscreen/skins/gmoccapy/icon/from where are the icons.txt new file mode 100644 index 000000000..79b750a71 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/from where are the icons.txt @@ -0,0 +1,75 @@ +This is just a list showing the origin from the icons + +the following icons are from moccagui projekt: +http://code.google.com/p/moccagui/ +with the friendly permission from the owner +info@jetsport.de + +auto.gif +coolant_off.png +coolant_on.png (modified by nieson@web.de) +editor.png +E-Stop.gif +estopred.png +forward.png +forward_on.png (modified by nieson@web.de) +jog.png +machineoff.png +mdi.png +mist_off.png +mist_on.png (modified by nieson@web.de) +pause.png +refall.png +refx.png +refy.png +refz.png +reverse.png +reverse_on.png (modified by nieson@web.de) +run.png +runfrom.png +start.png +step.png +stop.gif +stop.png +stop_on.png +toolchange.png +tools.png +touchoffwz.png +touchoffx.png +touchoffy.png +touchoffz.png +touchoffx_value.png (modified by nieson@web.de) +touchoffy_value.png (modified by nieson@web.de) +touchoffz_value.png (modified by nieson@web.de) +unhome.png + +the following icons are created by nieson@web.de under free license +Logo.png +index_tool.png +tool_by_no.svg +user_tabs.png (modified two icon from openiconlibrary) + +the following Icons are from linuxcnc +toolaxisp.png +toolaxisx.png +toolaxisy.png +toolaxisz.png +tool_blockdelete.gif +tool_rotate.gif + +and this icons are from openiconlibrary.sourceforge.net +clear.png +configure-2.png +dimensions.png +enter.png +exit.png +exit_application.png +keyboard.png +reload.png +save.png +saveas.png +toolpath.png +zoom-in.png +zoom-out.png +fullscreen_preview.png + diff --git a/share/gscreen/skins/gmoccapy/icon/fullscreen_preview.png b/share/gscreen/skins/gmoccapy/icon/fullscreen_preview.png Binary files differnew file mode 100755 index 000000000..82ac19592 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/fullscreen_preview.png diff --git a/share/gscreen/skins/gmoccapy/icon/index_tool.svg b/share/gscreen/skins/gmoccapy/icon/index_tool.svg new file mode 100644 index 000000000..7c1c2cd92 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/index_tool.svg @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="svg2" + version="1.1" + inkscape:version="0.47 r22583" + width="46" + height="48" + sodipodi:docname="tools.png"> + <metadata + id="metadata8"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs6"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + id="perspective10" /> + </defs> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="845" + inkscape:window-height="661" + id="namedview4" + showgrid="false" + inkscape:zoom="4.9166667" + inkscape:cx="23" + inkscape:cy="24" + inkscape:window-x="0" + inkscape:window-y="25" + inkscape:window-maximized="0" + inkscape:current-layer="svg2" /> + <image + xlink:href="file:///home/emcmesa/linuxcnc-dev/configs/sim/gscreen_mocca/tools.png" + width="46" + height="48" + id="image12" + x="0" + y="0" /> + <text + xml:space="preserve" + style="font-size:18px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Bold" + x="22.983051" + y="18.305086" + id="text2826" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan2828" + x="22.983051" + y="18.305086">M61</tspan><tspan + sodipodi:role="line" + x="22.983051" + y="40.805088" + id="tspan2830">Q ?</tspan></text> +</svg> diff --git a/share/gscreen/skins/gmoccapy/icon/jog.png b/share/gscreen/skins/gmoccapy/icon/jog.png Binary files differnew file mode 100644 index 000000000..989d79c8f --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/jog.png diff --git a/share/gscreen/skins/gmoccapy/icon/keyboard.png b/share/gscreen/skins/gmoccapy/icon/keyboard.png Binary files differnew file mode 100755 index 000000000..796a2aa92 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/keyboard.png diff --git a/share/gscreen/skins/gmoccapy/icon/machineonoff.png b/share/gscreen/skins/gmoccapy/icon/machineonoff.png Binary files differnew file mode 100644 index 000000000..99117cb26 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/machineonoff.png diff --git a/share/gscreen/skins/gmoccapy/icon/mdi.png b/share/gscreen/skins/gmoccapy/icon/mdi.png Binary files differnew file mode 100644 index 000000000..175c80a21 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/mdi.png diff --git a/share/gscreen/skins/gmoccapy/icon/mist_off.png b/share/gscreen/skins/gmoccapy/icon/mist_off.png Binary files differnew file mode 100644 index 000000000..d6f68c01b --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/mist_off.png diff --git a/share/gscreen/skins/gmoccapy/icon/mist_on.gif b/share/gscreen/skins/gmoccapy/icon/mist_on.gif Binary files differnew file mode 100644 index 000000000..0055c0a76 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/mist_on.gif diff --git a/share/gscreen/skins/gmoccapy/icon/pause.png b/share/gscreen/skins/gmoccapy/icon/pause.png Binary files differnew file mode 100644 index 000000000..5544c6f24 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/pause.png diff --git a/share/gscreen/skins/gmoccapy/icon/refa.png b/share/gscreen/skins/gmoccapy/icon/refa.png Binary files differnew file mode 100755 index 000000000..2346c9df4 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/refa.png diff --git a/share/gscreen/skins/gmoccapy/icon/refall.png b/share/gscreen/skins/gmoccapy/icon/refall.png Binary files differnew file mode 100644 index 000000000..48d5295fe --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/refall.png diff --git a/share/gscreen/skins/gmoccapy/icon/refb.png b/share/gscreen/skins/gmoccapy/icon/refb.png Binary files differnew file mode 100755 index 000000000..f7d3b6029 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/refb.png diff --git a/share/gscreen/skins/gmoccapy/icon/refc.png b/share/gscreen/skins/gmoccapy/icon/refc.png Binary files differnew file mode 100755 index 000000000..eaf20f165 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/refc.png diff --git a/share/gscreen/skins/gmoccapy/icon/refu.png b/share/gscreen/skins/gmoccapy/icon/refu.png Binary files differnew file mode 100755 index 000000000..966576c47 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/refu.png diff --git a/share/gscreen/skins/gmoccapy/icon/refv.png b/share/gscreen/skins/gmoccapy/icon/refv.png Binary files differnew file mode 100755 index 000000000..b88791784 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/refv.png diff --git a/share/gscreen/skins/gmoccapy/icon/refw.png b/share/gscreen/skins/gmoccapy/icon/refw.png Binary files differnew file mode 100755 index 000000000..69888ecee --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/refw.png diff --git a/share/gscreen/skins/gmoccapy/icon/refx.png b/share/gscreen/skins/gmoccapy/icon/refx.png Binary files differnew file mode 100644 index 000000000..1d5f24ce2 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/refx.png diff --git a/share/gscreen/skins/gmoccapy/icon/refy.png b/share/gscreen/skins/gmoccapy/icon/refy.png Binary files differnew file mode 100644 index 000000000..790da9d3d --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/refy.png diff --git a/share/gscreen/skins/gmoccapy/icon/refz.png b/share/gscreen/skins/gmoccapy/icon/refz.png Binary files differnew file mode 100644 index 000000000..8316bebd9 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/refz.png diff --git a/share/gscreen/skins/gmoccapy/icon/reload.png b/share/gscreen/skins/gmoccapy/icon/reload.png Binary files differnew file mode 100755 index 000000000..fb6768e72 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/reload.png diff --git a/share/gscreen/skins/gmoccapy/icon/reverse.png b/share/gscreen/skins/gmoccapy/icon/reverse.png Binary files differnew file mode 100644 index 000000000..e2618c1f3 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/reverse.png diff --git a/share/gscreen/skins/gmoccapy/icon/reverse_on.gif b/share/gscreen/skins/gmoccapy/icon/reverse_on.gif Binary files differnew file mode 100644 index 000000000..0d8fa98f4 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/reverse_on.gif diff --git a/share/gscreen/skins/gmoccapy/icon/run.png b/share/gscreen/skins/gmoccapy/icon/run.png Binary files differnew file mode 100644 index 000000000..e78ff6e4f --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/run.png diff --git a/share/gscreen/skins/gmoccapy/icon/runfrom.png b/share/gscreen/skins/gmoccapy/icon/runfrom.png Binary files differnew file mode 100644 index 000000000..171e63fe8 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/runfrom.png diff --git a/share/gscreen/skins/gmoccapy/icon/save-as.png b/share/gscreen/skins/gmoccapy/icon/save-as.png Binary files differnew file mode 100755 index 000000000..1e034410a --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/save-as.png diff --git a/share/gscreen/skins/gmoccapy/icon/save.png b/share/gscreen/skins/gmoccapy/icon/save.png Binary files differnew file mode 100755 index 000000000..1f13724ea --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/save.png diff --git a/share/gscreen/skins/gmoccapy/icon/start.png b/share/gscreen/skins/gmoccapy/icon/start.png Binary files differnew file mode 100644 index 000000000..4883c73d8 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/start.png diff --git a/share/gscreen/skins/gmoccapy/icon/step.png b/share/gscreen/skins/gmoccapy/icon/step.png Binary files differnew file mode 100644 index 000000000..9278ec3e5 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/step.png diff --git a/share/gscreen/skins/gmoccapy/icon/stop.gif b/share/gscreen/skins/gmoccapy/icon/stop.gif Binary files differnew file mode 100644 index 000000000..dcd0fd0c3 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/stop.gif diff --git a/share/gscreen/skins/gmoccapy/icon/stop.png b/share/gscreen/skins/gmoccapy/icon/stop.png Binary files differnew file mode 100644 index 000000000..ce73ad864 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/stop.png diff --git a/share/gscreen/skins/gmoccapy/icon/stop_on.gif b/share/gscreen/skins/gmoccapy/icon/stop_on.gif Binary files differnew file mode 100644 index 000000000..15fc71b00 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/stop_on.gif diff --git a/share/gscreen/skins/gmoccapy/icon/tool_blockdelete.gif b/share/gscreen/skins/gmoccapy/icon/tool_blockdelete.gif Binary files differnew file mode 100644 index 000000000..3253e8a0d --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/tool_blockdelete.gif diff --git a/share/gscreen/skins/gmoccapy/icon/tool_by_no.svg b/share/gscreen/skins/gmoccapy/icon/tool_by_no.svg new file mode 100644 index 000000000..81d2dd352 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/tool_by_no.svg @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + version="1.1" + width="46" + height="48" + id="svg2"> + <defs + id="defs6" /> + <image + xlink:href="file:///home/emcmesa/linuxcnc-dev/configs/sim/gscreen_mocca/tools.png" + x="0" + y="0" + width="46" + height="48" + id="image12" /> + <text + x="22.983051" + y="18.305086" + id="text2815" + xml:space="preserve" + style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#800000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Bold"><tspan + x="22.983051" + y="18.305086" + id="tspan2817">T ?</tspan><tspan + x="22.983051" + y="43.305084" + id="tspan2819">M6</tspan></text> +</svg> diff --git a/share/gscreen/skins/gmoccapy/icon/tool_rotate.gif b/share/gscreen/skins/gmoccapy/icon/tool_rotate.gif Binary files differnew file mode 100644 index 000000000..329d902a4 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/tool_rotate.gif diff --git a/share/gscreen/skins/gmoccapy/icon/toolaxisp.png b/share/gscreen/skins/gmoccapy/icon/toolaxisp.png Binary files differnew file mode 100644 index 000000000..ce0fc982b --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/toolaxisp.png diff --git a/share/gscreen/skins/gmoccapy/icon/toolaxisx.png b/share/gscreen/skins/gmoccapy/icon/toolaxisx.png Binary files differnew file mode 100644 index 000000000..57c4bdcec --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/toolaxisx.png diff --git a/share/gscreen/skins/gmoccapy/icon/toolaxisy.png b/share/gscreen/skins/gmoccapy/icon/toolaxisy.png Binary files differnew file mode 100644 index 000000000..33768e339 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/toolaxisy.png diff --git a/share/gscreen/skins/gmoccapy/icon/toolaxisy2.png b/share/gscreen/skins/gmoccapy/icon/toolaxisy2.png Binary files differnew file mode 100755 index 000000000..c8cd41292 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/toolaxisy2.png diff --git a/share/gscreen/skins/gmoccapy/icon/toolaxisz.png b/share/gscreen/skins/gmoccapy/icon/toolaxisz.png Binary files differnew file mode 100644 index 000000000..3cf539813 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/toolaxisz.png diff --git a/share/gscreen/skins/gmoccapy/icon/toolchange.png b/share/gscreen/skins/gmoccapy/icon/toolchange.png Binary files differnew file mode 100755 index 000000000..da18dc405 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/toolchange.png diff --git a/share/gscreen/skins/gmoccapy/icon/toolpath.png b/share/gscreen/skins/gmoccapy/icon/toolpath.png Binary files differnew file mode 100644 index 000000000..a94bad73d --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/toolpath.png diff --git a/share/gscreen/skins/gmoccapy/icon/tools.png b/share/gscreen/skins/gmoccapy/icon/tools.png Binary files differnew file mode 100644 index 000000000..d0d4f16f6 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/tools.png diff --git a/share/gscreen/skins/gmoccapy/icon/touchoffwz.png b/share/gscreen/skins/gmoccapy/icon/touchoffwz.png Binary files differnew file mode 100644 index 000000000..14baa38eb --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/touchoffwz.png diff --git a/share/gscreen/skins/gmoccapy/icon/touchoffx.png b/share/gscreen/skins/gmoccapy/icon/touchoffx.png Binary files differnew file mode 100644 index 000000000..27647f1a3 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/touchoffx.png diff --git a/share/gscreen/skins/gmoccapy/icon/touchoffx_value.png b/share/gscreen/skins/gmoccapy/icon/touchoffx_value.png Binary files differnew file mode 100644 index 000000000..1dec2ada4 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/touchoffx_value.png diff --git a/share/gscreen/skins/gmoccapy/icon/touchoffy.png b/share/gscreen/skins/gmoccapy/icon/touchoffy.png Binary files differnew file mode 100644 index 000000000..0938878bb --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/touchoffy.png diff --git a/share/gscreen/skins/gmoccapy/icon/touchoffy_value.png b/share/gscreen/skins/gmoccapy/icon/touchoffy_value.png Binary files differnew file mode 100644 index 000000000..c0ac95984 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/touchoffy_value.png diff --git a/share/gscreen/skins/gmoccapy/icon/touchoffz.png b/share/gscreen/skins/gmoccapy/icon/touchoffz.png Binary files differnew file mode 100644 index 000000000..9290cb28c --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/touchoffz.png diff --git a/share/gscreen/skins/gmoccapy/icon/touchoffz_value.png b/share/gscreen/skins/gmoccapy/icon/touchoffz_value.png Binary files differnew file mode 100644 index 000000000..e9de41374 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/touchoffz_value.png diff --git a/share/gscreen/skins/gmoccapy/icon/unhome.png b/share/gscreen/skins/gmoccapy/icon/unhome.png Binary files differnew file mode 100644 index 000000000..cec72ebaa --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/unhome.png diff --git a/share/gscreen/skins/gmoccapy/icon/user_tabs.png b/share/gscreen/skins/gmoccapy/icon/user_tabs.png Binary files differnew file mode 100755 index 000000000..227dda91b --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/user_tabs.png diff --git a/share/gscreen/skins/gmoccapy/icon/zoom-in.png b/share/gscreen/skins/gmoccapy/icon/zoom-in.png Binary files differnew file mode 100755 index 000000000..714f1f606 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/zoom-in.png diff --git a/share/gscreen/skins/gmoccapy/icon/zoom-out.png b/share/gscreen/skins/gmoccapy/icon/zoom-out.png Binary files differnew file mode 100755 index 000000000..05ddf0f51 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/icon/zoom-out.png diff --git a/share/gscreen/skins/gmoccapy/nc_files/Gmoccapy_2_tools_with_compensation.ngc b/share/gscreen/skins/gmoccapy/nc_files/Gmoccapy_2_tools_with_compensation.ngc new file mode 100644 index 000000000..a63b0ecf7 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/nc_files/Gmoccapy_2_tools_with_compensation.ngc @@ -0,0 +1,93 @@ +; Gmoccapy_2_tools_with_compensation.ngc +; testprogram to mill two circles with cutter radius compansation +; and two different tools + +; set the basic settings, this should be +; on every program the beginning +G17 +G21 +G54 +G61 +G40 +G49 +G80 +G90 + +; get the first tool +T3 M6 +G43 + +; go to center of the workpiece +G0 X50 Y50 +G0 Z30 + +; turn on spindle clockwise +S3000 +M3 + +; coolant on +M8 + +G0 Z10 +F250 +G1 Z0 + +; tool radius compansation +; go in circle with lower feed rate +G41 +G3 X70 Y50 Z-1 I10 J0 + +; make first circle with normal feed +F2000 +G3 I -20 + +; out of the workpiece +G3 X50 Y50 Z1 I-10 J0 +G0 Z30 + +; coolant off +M9 + +; turn off cutter radius compensation, otherwise no tool change is possible +G40 +T1 M6 +G43 + +; optional stop for testing +(MSG, optional stop, i.e. for cleaning the workpiece, or other thinks) +M1 + +; go again to the center of the workpiece +G0 X50 Y50 +G0 Z10 + +; turn on spindle clockwise +S6000 +M3 + +; mist on +M7 + +G0 Z10 +F400 +G1 Z1 + +; Werkzeugradienkompensation ein +; Anfahrradius mit Eintauchgeschwindigkeit +G41 +G3 X65 Y50 Z-1 I7.5 J0 + +; 2. Kreis mit Vorschubgeschwindigkeit fräsen +F1000 +G3 I-15 + +; Aus dem Werkstück +G3 X50 Y50 Z1 I-7.5 J0 +G0 Z30 + +G0 Z30 +G0 X50 Y50 + +M9 ; coolant off +M5 ; spindle off +M2 ; program end diff --git a/share/gscreen/skins/gmoccapy/nc_files/diferent speeds.ngc b/share/gscreen/skins/gmoccapy/nc_files/diferent speeds.ngc new file mode 100644 index 000000000..4e19b4c5c --- /dev/null +++ b/share/gscreen/skins/gmoccapy/nc_files/diferent speeds.ngc @@ -0,0 +1,36 @@ +; different_speeds.ngc +; basic settings + +G17 +G21 +G54 +G61 +G40 +G49 +G80 +G90 + +; get tool +T3 M6 +G43 +S2500 +M3 + +G42 +F5000 +G01 X-10 Y-10 Z30 + +G00 X0 Y0 Z0 +G01 X100 F500 +G01 Y100 F400 +/G01 X0 F300 +/G01 Y0 F250 + +G0 Z 30 +G0 Y 50 +G0 X 50 + +G40 +G49 +M5 +M2 diff --git a/share/gscreen/skins/gmoccapy/nc_files/subroutines/go_to_position.ngc b/share/gscreen/skins/gmoccapy/nc_files/subroutines/go_to_position.ngc new file mode 100644 index 000000000..d5ed9637c --- /dev/null +++ b/share/gscreen/skins/gmoccapy/nc_files/subroutines/go_to_position.ngc @@ -0,0 +1,24 @@ +; Testfile go to position +; will jog the machine to a position to give + +O<go_to_position> sub + +G17 +G21 +G54 +G61 +G40 +G49 +G80 +G90 + +;#1 = <X-Pos> +;#2 = <Y-Pos> +;#3 = <Z-Pos> + +(DBG, Will now move machine to X = #1 , Y = #2 , Z = #3) +G0 X #1 Y #2 Z #3 + +O<go_to_position> endsub + +M2 diff --git a/share/gscreen/skins/gmoccapy/nc_files/subroutines/halo_world.ngc b/share/gscreen/skins/gmoccapy/nc_files/subroutines/halo_world.ngc new file mode 100644 index 000000000..f93f36dde --- /dev/null +++ b/share/gscreen/skins/gmoccapy/nc_files/subroutines/halo_world.ngc @@ -0,0 +1,26 @@ +; Testfile I am Lost +; will just give messages + +O<halo_world> sub + +G17 +G21 +G54 +G61 +G40 +G49 +G80 +G90 + +G0 X10 + +(MSG, Hallo Welt) +(MSG, halo world) +(MSG, why does this apeera as an error?) + +G0X-10 + +O<halo_world> endsub + +M2 + diff --git a/share/gscreen/skins/gmoccapy/nc_files/subroutines/i_am_lost.ngc b/share/gscreen/skins/gmoccapy/nc_files/subroutines/i_am_lost.ngc new file mode 100644 index 000000000..cd971d425 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/nc_files/subroutines/i_am_lost.ngc @@ -0,0 +1,24 @@ +; Testfile I am Lost +; will jog to machine cero and set all axis to cero + +O<i_am_lost> sub + +G17 +G21 +G54 +G61 +G40 +G49 +G80 +G90 + +(MSG, Will now move to machine cero) +G53 G0 X0 Y0 Z0 +(MSG, will now set all axis to cero) +G10 L20 P0 X0 Y0 Z0 +(MSG, all done) + + +O<i_am_lost> endsub + +M2 diff --git a/share/gscreen/skins/gmoccapy/nc_files/subroutines/increment.ngc b/share/gscreen/skins/gmoccapy/nc_files/subroutines/increment.ngc new file mode 100644 index 000000000..870e5f200 --- /dev/null +++ b/share/gscreen/skins/gmoccapy/nc_files/subroutines/increment.ngc @@ -0,0 +1,22 @@ +; Testfile I am Lost +; will jog to machine cero and set all axis to cero + +O<increment> sub + +G17 +G21 +G54 +G61 +G40 +G49 +G80 +G90 + +G91 G0 X#1 Y#2 +G90 + +(DEBUG, X was [#1] and Y was [#2]) + +O<increment> endsub + +M2 diff --git a/share/gscreen/skins/gmoccapy/nc_files/subroutines/jog_around.ngc b/share/gscreen/skins/gmoccapy/nc_files/subroutines/jog_around.ngc new file mode 100644 index 000000000..070dd65af --- /dev/null +++ b/share/gscreen/skins/gmoccapy/nc_files/subroutines/jog_around.ngc @@ -0,0 +1,29 @@ +; Testfile I am Lost +; will just jog a litle bit around + +O<jog_around> sub + +G17 +G21 +G54 +G61 +G40 +G49 +G80 +G90 + +G91 G0 X 25 +Y-25 +Z-25 +Y25 +X-25 +Z25 +F250 +G2 I 25 + +(MSG, It is done!) + +O<jog_around> endsub + +M2 + diff --git a/share/gscreen/skins/gmoccapy/nc_files/subroutines/macro_Instructions.txt b/share/gscreen/skins/gmoccapy/nc_files/subroutines/macro_Instructions.txt new file mode 100644 index 000000000..d751c87ed --- /dev/null +++ b/share/gscreen/skins/gmoccapy/nc_files/subroutines/macro_Instructions.txt @@ -0,0 +1,44 @@ +This is a smal instruction to include macros in gmoccapy. + +In your INI File you need to introduce a section called [MACROS] +and for every macro you wan't to include one line like so: + +MACRO = jog_around +or +MACRO = increment xinc yinc + +where xinc and yinc are place holders + +During excecution of the macro, you will be asked to enter the values. + +You are allowed to introduce 9 macros! +If you enter more macros, only the first 9 will apear with button in gmoccapy. + +In the [RS274NGC] section you may want to give a path to your macros like so: + +[RS274NGC] +SUBROUTINE_PATH = nc_files/subroutines + +or you place your macros in the nc_files folder. + +Each macro mus have its own file in one of the mentioned folders and are normal subroutines, so the must begin with: + +O<jog_around> sub + +and end with + +O<jog_around> endsub +M2 + +The name of the file must be jog_around.ngc. +And an macro must contain at least one movement of one axis. + +macro name in INI file have to be the same as the file name and the sub must have also the same name! + +BE CARFULL: +At this development step, the macros can only be interupted by pressing the machine off button or the emergency exit button! I will check how to make this more secure! + +Hope this helps. + +Norbert + diff --git a/configs/sim/gscreen_custom/industrial.glade b/share/gscreen/skins/industrial/industrial.glade index d00822c95..d00822c95 100644 --- a/configs/sim/gscreen_custom/industrial.glade +++ b/share/gscreen/skins/industrial/industrial.glade diff --git a/share/gscreen/skins/industrial/industrial2.glade b/share/gscreen/skins/industrial/industrial2.glade new file mode 100644 index 000000000..8ccaa92f5 --- /dev/null +++ b/share/gscreen/skins/industrial/industrial2.glade @@ -0,0 +1,81 @@ +<?xml version="1.0"?> +<interface> + <!-- interface-requires gladevcp 0.0 --> + <requires lib="gtk+" version="2.16"/> + <!-- interface-naming-policy project-wide --> + <object class="GtkWindow" id="window2"> + <property name="height_request">600</property> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="n_rows">3</property> + <property name="n_columns">3</property> + <child> + <object class="HAL_Meter" id="s_display2"> + <property name="width_request">200</property> + <property name="height_request">200</property> + <property name="visible">True</property> + <property name="label">Spindle</property> + <property name="bg_color">#ffffffffffff</property> + <property name="z0_color">#0000ffff0000</property> + <property name="max">2000</property> + <property name="majorscale">200</property> + <property name="z1_color">#ffffffff0000</property> + <property name="z2_color">#ffff00000000</property> + <property name="sublabel">RPM</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="label" translatable="yes">screen 2</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <object class="GtkButton" id="button1"> + <property name="label" translatable="yes">Custom +Button</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_button_press"/> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + </object> + </child> + </object> +</interface> diff --git a/configs/sim/gscreen_custom/industrial_handler.py b/share/gscreen/skins/industrial/industrial_handler.py index 040fc959b..040fc959b 100644 --- a/configs/sim/gscreen_custom/industrial_handler.py +++ b/share/gscreen/skins/industrial/industrial_handler.py |