Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    [HELP] How to use DueUI without a Duet using chrome

    Scheduled Pinned Locked Moved
    DueUI
    3
    73
    3.3k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • gtj0undefined
      gtj0 @Dario02
      last edited by

      @Dario02 I see what you mean. That will be hidden automatically when the you've defined your first panel. It's showing now because there's nothing else to show.

      Dario02undefined 1 Reply Last reply Reply Quote 0
      • Dario02undefined
        Dario02 @gtj0
        last edited by Dario02

        @gtj0 ok and how should I set the panel???

        class DueUIConfig {
          "dueui_content" = {
            "id": "dueui",
        	"type": "tabbed_panel",
        	"header_panel" : {
        		/*
        		 * All attributes of Element apply here
        		 */
        	
        		"type":  "panel",
        		
        		/*
        		 * A panel may have styling to control how it's children are
        		 * laid out.  This is an example of using the CSS "flex" layout.
        		 *
        		 * You don't have to specify any layout at all of course.  This
        		 * panel's children could use the "position" attribute to explicitly
        		 * position themselves.
        		 */
        		"style": {
        			
        		},
        		
        		/*
        		 * If you have a large number of elements to display, you can save some
        		 * time by defining defaults for them.  For instance, if they were all
        		 * buttons of a specific style, you could specify that here.
        		 */  
        		"element_defaults": {
        
        		},
        		
        		"element_configs": [
        			{
        				"id": "report",
        				"type": "button",
        				"enabled": true,
        				"style": {
        					"width": "96px",
        				},
        				"position": {
        					"my": "left top",
        					"at": "right+1024 top+100",
        					"of": "#report"
        				},
        				"classes": "btn btn-warning",
        				"icon": "replay",
        				"value": "Report",
        				"actions": {"type": "gcode", "gcode": "M122"}
        
        				
        			},
        			{
        				/*
        				 * All attributes of Element and Widget apply here.
        				 */
        			
        				"id": "console_log",
        				"type": "textarea",
        				"style": {
        					"width": "1024px",
        					"height": "100px"
        				},
        				
        				/*
        				 * You can certainly use styling provide layout instructions but much
        				 * of your content will probably require absolute positioning.  To achieve
        				 * that you can use "position".
        				 *
        				 * Example:
        				 * Assuming you have an element with an id of "some_element" defined previously
        				 * in your config and this widget's top left corner should be placed at a
        				 * position that's 150 pixels right and 10 pixels down from the right top
        				 * corner of "some_element".
        				 * 
        				 * - You can use "right", "left", "center", "top", and "bottom" as anchor keywords.
        				 * - The "left/right" anchors must come before the "top/bottom" anchors.
        				 * - "center center" would mean the center of the widget.
        				 * - There must be NO spaces between the keywords and any operators or offsets.
        				 *   "right + 10" will not work.
        				 * - All coordinates are based on an origin that's at the left top of
        				 *   whatever you're referencing.
        				 * - "of" could be any previously defined element that has an "id" attribute.
        				 * - The reference to the "of" widget MUST be preceeded by a "#".	 
        				 */
        				"position": {
        					"my": "left top",
        					"at": "left top-60",
        					"of": "#console_log"
        				},
        				
        				/* Don't allow any input from keyboard */
        				"read_only": true,
        				
        				/* Wrap long lines */
        				"wrap": "off",
        				
        				/* GCode commands sent are displayed */	
        				"show_gcode_sent": false,
        				
        				/* Replies from GCode commands are displayed */	
        				"show_gcode_replies": true,
        				
        				/* Replies from GCode commands will be prefixed by the command sent */	
        				"show_gcode_in_replies": false,
        				
        				/* Log messages are displayed */	
        				"show_log_messages": true,
        				
        				/* New entries are added to the top of the textarea */
        				"new_entries_at_top": true
        
        				
        			}
        			
        		]
        	}
          };
        
          "status_map" = {};
        }
        
        
        gtj0undefined 1 Reply Last reply Reply Quote 0
        • gtj0undefined
          gtj0 @Dario02
          last edited by

          @Dario02 What you have defined is the header panel at the top of the screen. You can set its id to anything you like. In the example below, I set it to "my_header_panel". Your "report" and "console_log" widget positions need to be relative to "my header_panel".

          To define the main part of the screen, your panels must go in dueui_content.element_configs, not dueui_content.header_panel.element_configs.

          Example:

          class DueUIConfig {
            "dueui_content" = {
              "id": "dueui",
          	"type": "tabbed_panel",
          	"header_panel" : {
          		
          		/*
          		 * All attributes of Element apply here
          		 */
          	
          		"type":  "panel",
          		"id": "my_header_panel",
          
          
          		/*
          		 * A panel may have styling to control how it's children are
          		 * laid out.  This is an example of using the CSS "flex" layout.
          		 *
          		 * You don't have to specify any layout at all of course.  This
          		 * panel's children could use the "position" attribute to explicitly
          		 * position themselves.
          		 */
          		"style": {
          			
          		},
          		
          		/*
          		 * If you have a large number of elements to display, you can save some
          		 * time by defining defaults for them.  For instance, if they were all
          		 * buttons of a specific style, you could specify that here.
          		 */  
          		"element_defaults": {
           
          		},
          		/* These are the elements that go in the top header panel */
          
          		"element_configs": [
          			{
          				"id": "report",
          				"type": "button",
          				"enabled": true,
          				"style": {
          					"width": "96px",
          				},
          				"position": {
          					"my": "left top",
          					"at": "right+1024 top+100",
          					"of": "#my_header_panel"
          				},
          				"classes": "btn btn-warning",
          				"icon": "replay",
          				"value": "Report",
          				"actions": {"type": "gcode", "gcode": "M122"}
           
          				
          			},
          			{
          				/*
          				 * All attributes of Element and Widget apply here.
          				 */
          			
          				"id": "console_log",
          				"type": "textarea",
          				"style": {
          					"width": "1024px",
          					"height": "100px"
          				},
          				
          				/*
          				 * You can certainly use styling provide layout instructions but much
          				 * of your content will probably require absolute positioning.  To achieve
          				 * that you can use "position".
          				 *
          				 * Example:
          				 * Assuming you have an element with an id of "some_element" defined previously
          				 * in your config and this widget's top left corner should be placed at a
          				 * position that's 150 pixels right and 10 pixels down from the right top
          				 * corner of "some_element".
          				 * 
          				 * - You can use "right", "left", "center", "top", and "bottom" as anchor keywords.
          				 * - The "left/right" anchors must come before the "top/bottom" anchors.
          				 * - "center center" would mean the center of the widget.
          				 * - There must be NO spaces between the keywords and any operators or offsets.
          				 *   "right + 10" will not work.
          				 * - All coordinates are based on an origin that's at the left top of
          				 *   whatever you're referencing.
          				 * - "of" could be any previously defined element that has an "id" attribute.
          				 * - The reference to the "of" widget MUST be preceeded by a "#".	 
          				 */
          				"position": {
          					"my": "left top",
          					"at": "left top-60",
          					"of": "#my_header_panel"
          				},
          				
          				/* Don't allow any input from keyboard */
          				"read_only": true,
          				
          				/* Wrap long lines */
          				"wrap": "off",
          				
          				/* GCode commands sent are displayed */	
          				"show_gcode_sent": false,
          				
          				/* Replies from GCode commands are displayed */	
          				"show_gcode_replies": true,
          				
          				/* Replies from GCode commands will be prefixed by the command sent */	
          				"show_gcode_in_replies": false,
          				
          				/* Log messages are displayed */	
          				"show_log_messages": true,
          				
          				/* New entries are added to the top of the textarea */
          				"new_entries_at_top": true
           
          				
          			}
          			
          		]
          	},
          	"element_configs": [
          		/* All of your main panels get defined here */
          	]
            }
          };
          
          
          Dario02undefined 1 Reply Last reply Reply Quote 0
          • Dario02undefined
            Dario02 @gtj0
            last edited by Dario02

            @gtj0 it's still showing the settings for dueui. I would like to make a main panel with movements for example... how?

            gtj0undefined 1 Reply Last reply Reply Quote 0
            • gtj0undefined
              gtj0 @Dario02
              last edited by

              @Dario02
              dueui_config_simple.json

              Dario02undefined 1 Reply Last reply Reply Quote 1
              • Dario02undefined
                Dario02 @gtj0
                last edited by

                @gtj0 i'll check it soon, thank you for the support. I know I'm making lots of questions

                1 Reply Last reply Reply Quote 0
                • Dario02undefined
                  Dario02
                  last edited by

                  @gtj0 Hi, I noticed that you must name some variables as the system would expect... for example I can't name the "header_panel" as "main_header_panel" and the first id must be "dueui". I would like to know where I could find the variables names ("header_panel", "menubar" etc... and some predefined IDs..)

                  gtj0undefined 1 Reply Last reply Reply Quote 0
                  • gtj0undefined
                    gtj0 @Dario02
                    last edited by

                    @Dario02 header_panel and menubar are fixed because that's what the class DueuiTabbedPanel in dueui_panel.js expects them to be. You can't change them and there's no reason to change them. What you put in those variables has id fields and that's how you refer to them. For instance...

                    /* This has to be "dueui_content" because that's what the code expects. */
                    dueui_content = {
                    	/*
                    	 * But the value of "id" can be anything you want.
                    	 * This is how you'd refer to the element using jQuery...  #my_top_tabbed_panel
                    	 */
                    	"id": "my_top_tabbed_panel",
                    	"type": "tabbed_panel",
                    	/* Same here.  This has to be "header_panel" because the code expects it. */
                    	"header_panel": {
                    		/* But you can set its id to anything you want and reference it as #<id>. */
                    		"id": "main_header_panel",
                    		"type": "panel",
                    	},
                    	/* Same again.  This has to be "menubar" because the code expects it. */
                    	"menubar": {
                    		/* But you can set its id to anything you want and reference it as #<id>. */
                    		"id": "main_dueui_menubar",
                    		"type": "panel",
                    		"button_defaults": {
                    			"style": {
                    				"margin-right": "5px"
                    			}
                    		}
                    	},
                    }
                    
                    Dario02undefined 1 Reply Last reply Reply Quote 0
                    • Dario02undefined
                      Dario02 @gtj0
                      last edited by

                      @gtj0 Are there others fixed defintion that I should know? If yes where can I find them?

                      gtj0undefined 1 Reply Last reply Reply Quote 0
                      • gtj0undefined
                        gtj0 @Dario02
                        last edited by

                        @Dario02

                        Anything on the left side of an "=" or ":" inside "dueui_content", including "dueui_content" itself, is fixed because that's how the Javascript code finds it.

                        Same for "status_map". Those key names are what the Duet firmware sends for statuses.

                        1 Reply Last reply Reply Quote 0
                        • Dario02undefined
                          Dario02
                          last edited by Dario02

                          @gtj0 You asked me to report you what examples don't work. For now I found:
                          https://github.com/gtjoseph/DueUI/wiki/File-List
                          https://github.com/gtjoseph/DueUI/wiki/Heater

                          gtj0undefined 1 Reply Last reply Reply Quote 0
                          • gtj0undefined
                            gtj0 @Dario02
                            last edited by

                            @Dario02 When you say "'don't work" what do you mean? Can you share the JSON you used to configure them?

                            Dario02undefined 1 Reply Last reply Reply Quote 0
                            • Dario02undefined
                              Dario02 @gtj0
                              last edited by

                              @gtj0 simply if I add one of them the code doesn't run

                              1 Reply Last reply Reply Quote 0
                              • Dario02undefined
                                Dario02
                                last edited by Dario02

                                @gtj0 try adding one of them, now I can't

                                class DueUIConfig {
                                  "dueui_content" = {
                                    "id": "dueui",
                                    "type": "tabbed_panel",
                                    "header_panel": {
                                      "id": "dueui_header_main",
                                      "type": "panel",
                                
                                      "element_configs": [
                                        {
                                          "id": "video_html",
                                          "type": "image",
                                          "src": "http://192.168.1.118/rr_download?name=/images/logo.png",
                                          "style": {
                                            "width": "128px",
                                            "height": "41px"
                                          },
                                          "position": {
                                            "my": "left top",
                                            "at": "left top",
                                            "of": "#dueui"
                                          }
                                        },
                                        {
                                          "id": "status",
                                          "type": "status",
                                          "style": {
                                            "width": "128px"
                                          },
                                          "position": {
                                            "my": "left top",
                                            "at": "right-115 top+3",
                                            "of": "#dueui"
                                          }
                                        }
                                      ]
                                    },
                                    "menubar": {
                                      "id": "dueui_menubar",
                                      "type": "panel",
                                      "button_defaults": {},
                                      "position": {
                                        "my": "left top",
                                        "at": "left+8 bottom-28",
                                        "of": "#dueui"
                                      }
                                    },
                                    "element_configs": [
                                      {
                                        "id": "dueui_panel_movement",
                                        "type": "tab_panel",
                                        "menubar_label": "HOME",
                                        "element_configs": [
                                          {
                                            "id": "video_html",
                                            "type": "image",
                                            "src": "http://duet3:8080/stream",
                                            "style": {
                                              "width": "320px",
                                              "height": "210px"
                                            },
                                            "position": {
                                              "my": "left top",
                                              "at": "left top",
                                              "of": "#dueui_panel_movement"
                                            }
                                          }
                                          
                                        ]
                                      }
                                    ]
                                  };
                                
                                  "status_map" = {
                                    "idle": { "label": "Idle", "classes": "btn-success" },
                                    "P": { "label": "Printing", "classes": "btn-success" },
                                    "S": { "label": "Stopped", "classes": "btn-warning" },
                                    "C": { "label": "Starting Up", "classes": "btn-success" },
                                    "paused": { "label": "Paused", "classes": "btn-primary" },
                                    "pausing": { "label": "Pausing", "classes": "btn-success" },
                                    "resuming": { "label": "Resuming", "classes": "btn-success" },
                                    "changingTool": { "label": "Tool<br>Change", "classes": "btn-warning" },
                                    "busy": { "label": "Busy", "classes": "btn-success" },
                                    "updating": { "label": "Updating", "classes": "btn-danger" },
                                    "halted": { "label": "Halted", "classes": "btn-danger" },
                                    "off": { "label": "Off", "classes": "btn-danger" },
                                    "processing": { "label": "Processing", "classes": "btn-warning" },
                                    "simulating": { "label": "Simulating", "classes": "btn-primary" },
                                    "connected": { "label": "Connected", "classes": "btn-success" },
                                    "connecting": { "label": "Connecting", "classes": "btn-warning" },
                                    "reconnected": { "label": "Connected", "classes": "btn-success" },
                                    "disconnected": { "label": "Disconnected", "classes": "btn-warning" },
                                    "retrying": { "label": "Retrying", "classes": "btn-warning" },
                                    "failed": { "label": "Failed", "classes": "btn-danger" },
                                    "unknown": { "label": "?", "classes": "btn-secondary" }
                                  };
                                }
                                
                                
                                gtj0undefined 1 Reply Last reply Reply Quote 0
                                • gtj0undefined
                                  gtj0 @Dario02
                                  last edited by

                                  @Dario02 I'm sorry but I don't understand. The json you posted seems to work fine but doesn't have either a file list or a heater in it to test.

                                  Dario02undefined 1 Reply Last reply Reply Quote 0
                                  • Dario02undefined
                                    Dario02 @gtj0
                                    last edited by Dario02

                                    @gtj0 Yes it works fine because I removed what didn't work... as I told you try adding one of the element/widget that I reported you and the code should not work properly. If you can't understand what I mean, please wait until I'll be free to work on this with you ^_^

                                    gtj0undefined 1 Reply Last reply Reply Quote 0
                                    • gtj0undefined
                                      gtj0 @Dario02
                                      last edited by

                                      @Dario02 OK, when you get a chance, I'll need you to send me the exact json configuration you tried that didn't work.

                                      1 Reply Last reply Reply Quote 0
                                      • Dario02undefined
                                        Dario02
                                        last edited by Dario02

                                        @gtj0 I managed one error you didn't write the "," after "standby": "G10 P0 S${value}"
                                        } <---- missing ","

                                        "set_temp_commands": {
                                        				"active": "G10 P0 R${value}",
                                        				"standby": "G10 P0 S${value}"
                                        			}
                                                                 /*
                                        			 * The two input fields for setting the active and standby can be hidden
                                        			 * if desired.  The default is to show them.
                                        			 */
                                        			 "show_set_fields": false
                                        

                                        it should be:

                                        "set_temp_commands": {
                                        				"active": "G10 P0 R${value}",
                                        				"standby": "G10 P0 S${value}"
                                        			},
                                                                 /*
                                        			 * The two input fields for setting the active and standby can be hidden
                                        			 * if desired.  The default is to show them.
                                        			 */
                                        			 "show_set_fields": false
                                        
                                        gtj0undefined 1 Reply Last reply Reply Quote 0
                                        • gtj0undefined
                                          gtj0 @Dario02
                                          last edited by

                                          @Dario02 Ah, yeah that's an issue. I'll fix that. Also I think I reversed the "R" and "S" parameters. "active" should be "S" and standby should be "R". I'll fix that as well.

                                          Dario02undefined 1 Reply Last reply Reply Quote 0
                                          • Dario02undefined
                                            Dario02 @gtj0
                                            last edited by

                                            @gtj0 ok well, I'll let you know for the other error

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA