Compare commits
	
		
			4 Commits
		
	
	
		
			50099ee4ef
			...
			d7f73f04d8
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d7f73f04d8 | |||
| 50b4843d76 | |||
| b978a3abb0 | |||
| 4ec5b370e9 | 
| @@ -31,13 +31,17 @@ function textMenuPrint(TextToPrint, selectedindex = -1, highlightedindex = -1) | |||||||
| 	} | 	} | ||||||
| 	//If we get here, it is already created.  Get the context | 	//If we get here, it is already created.  Get the context | ||||||
| 	var cTMCctx = cachedTextMenuCanvas.getContext('2d'); | 	var cTMCctx = cachedTextMenuCanvas.getContext('2d'); | ||||||
|  | 	var rect; | ||||||
|  |  | ||||||
| 	//Fill in the background | 	//Fill in the background | ||||||
|     cTMCctx.fillStyle = tmWindowBackground; |     cTMCctx.fillStyle = tmWindowBackground; | ||||||
|     cTMCctx.fillRect(0,0, cachedTextMenuCanvas.width, cachedTextMenuCanvas.height); |     cTMCctx.fillRect(0,0, cachedTextMenuCanvas.width, cachedTextMenuCanvas.height); | ||||||
|  |  | ||||||
| 	//Put the X there so we can click on it | 	//Put the X there so we can click on it | ||||||
| 	cTMCctx.drawImage(imageFromName("x"),cachedTextMenuCanvas.width - tmScrollBarWidth,0,tmScrollBarWidth,tmMenuBarHight); | 	rect = makeRectangle(cachedTextMenuCanvas.width - tmScrollBarWidth, 0, tmScrollBarWidth, tmMenuBarHight, tmOutsideXMargin, tmOutsideYMargin); | ||||||
|  | 	cTMCctx.drawImage(imageFromName("x"), rect.sx, rect.sy, rect.deltax, rect.deltay); | ||||||
|  | 	registerActionStruct("square", rect, null, textwindow_XClick); | ||||||
|  |  | ||||||
|  |  | ||||||
| 	//Put the DownArrow there so we can click on it | 	//Put the DownArrow there so we can click on it | ||||||
| 	cTMCctx.drawImage(imageFromName("ArrowUp"),cachedTextMenuCanvas.width - tmScrollBarWidth,tmMenuBarHight,tmScrollBarWidth,tmMenuBarHight); | 	cTMCctx.drawImage(imageFromName("ArrowUp"),cachedTextMenuCanvas.width - tmScrollBarWidth,tmMenuBarHight,tmScrollBarWidth,tmMenuBarHight); | ||||||
| @@ -165,15 +169,7 @@ function TextWindow_handleMouseUp(evt) | |||||||
|  |  | ||||||
| 			//We clicked the X | 			//We clicked the X | ||||||
| 			 | 			 | ||||||
| 			//Dispose of the text window | 			textwindow_XClick(); | ||||||
| 			uiMode=0; |  | ||||||
| 			 |  | ||||||
| 			//dispose of temp canvas; will recreate later if needed			 |  | ||||||
| 			cachedTextMenuCanvas = null; |  | ||||||
| 			cachedTextMenuTextCanvas = null; |  | ||||||
| 			 |  | ||||||
| 			//Redraw the screen |  | ||||||
| 			PrintScreen(); |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| @@ -195,6 +191,19 @@ function TextWindow_handleMouseUp(evt) | |||||||
|     mouseDidMovement=false; //reset it after we raise the button |     mouseDidMovement=false; //reset it after we raise the button | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function textwindow_XClick(point, object) { | ||||||
|  | 	//When the x is clicked, we do not care about the position or object.  There is no object | ||||||
|  | 	//Dispose of the text window | ||||||
|  | 	uiMode = 0; | ||||||
|  |  | ||||||
|  | 	//dispose of temp canvas; will recreate later if needed			 | ||||||
|  | 	cachedTextMenuCanvas = null; | ||||||
|  | 	cachedTextMenuTextCanvas = null; | ||||||
|  |  | ||||||
|  | 	//Redraw the screen | ||||||
|  | 	PrintScreen(); | ||||||
|  | } | ||||||
|  |  | ||||||
| function PrintPuzzleSelectMenu(level=0) | function PrintPuzzleSelectMenu(level=0) | ||||||
| { | { | ||||||
| 	var levellist=networkNamesMatchingText("Level"+level); | 	var levellist=networkNamesMatchingText("Level"+level); | ||||||
|   | |||||||
							
								
								
									
										274
									
								
								Web/ui.js
									
									
									
									
									
								
							
							
						
						
									
										274
									
								
								Web/ui.js
									
									
									
									
									
								
							| @@ -10,6 +10,9 @@ var mouseDidMovement=false; | |||||||
| var imageSize=40; | var imageSize=40; | ||||||
| var small_button_size = 20; | var small_button_size = 20; | ||||||
| var uiDeviceInfoLevel = 1; //What do we display when we look at the network | var uiDeviceInfoLevel = 1; //What do we display when we look at the network | ||||||
|  | var uiActions = [];//a list of things on the screen we can click on or process. | ||||||
|  | var ui_highlightRect = null; | ||||||
|  | var ui_HadHighlight = false; | ||||||
|  |  | ||||||
| //The user interface mode.  0=network, 1=network information, 2=puzzle-selection menu | //The user interface mode.  0=network, 1=network information, 2=puzzle-selection menu | ||||||
| var uiMode=1; | var uiMode=1; | ||||||
| @@ -25,7 +28,9 @@ const imageCollection = loadImages( | |||||||
| 		"shapes", "square", "switch", | 		"shapes", "square", "switch", | ||||||
| 		"tablet", "tree", "vidimage", | 		"tablet", "tree", "vidimage", | ||||||
| 		"wap", "wbridge", "wrepeater", | 		"wap", "wbridge", "wrepeater", | ||||||
| 		"wrouter", "x", "info", "menu"], | 		"wrouter", "x", "info", "menu", | ||||||
|  | 		"eye", "queryuser", | ||||||
|  | 	], | ||||||
| 	["img/ArrowUp.png", "img/ArrowDown.png", "img/Animations.png", | 	["img/ArrowUp.png", "img/ArrowDown.png", "img/Animations.png", | ||||||
| 		"img/BurnMark.png", "img/cellphone.png", "img/Circle.png", | 		"img/BurnMark.png", "img/cellphone.png", "img/Circle.png", | ||||||
| 		"img/Copier.png", "img/firewall.png", "img/fluorescent.png", | 		"img/Copier.png", "img/firewall.png", "img/fluorescent.png", | ||||||
| @@ -36,7 +41,9 @@ const imageCollection = loadImages( | |||||||
| 		"img/Switch.png", "img/tablet.png", "img/tree.png", | 		"img/Switch.png", "img/tablet.png", "img/tree.png", | ||||||
| 		"img/VidImage.png", "img/WAP.png", "img/WBridge.png", | 		"img/VidImage.png", "img/WAP.png", "img/WBridge.png", | ||||||
| 		"img/WRepeater.png", "img/WRouter.png", "img/X.png", | 		"img/WRepeater.png", "img/WRouter.png", "img/X.png", | ||||||
| 		"img/info.png", "img/menu.png"], | 		"img/info.png", "img/menu.png", "img/eye.png", | ||||||
|  | 		"img/menu.png", | ||||||
|  | 	], | ||||||
|     InitializeGameMenu  // this is called when all images have loaded. |     InitializeGameMenu  // this is called when all images have loaded. | ||||||
| ); | ); | ||||||
|  |  | ||||||
| @@ -86,7 +93,11 @@ function PrintScreen(WhatPassedIn=-1) | |||||||
|     var what=uiMode; |     var what=uiMode; | ||||||
|     if(WhatPassedIn >=0) what=WhatPassedIn; |     if(WhatPassedIn >=0) what=WhatPassedIn; | ||||||
|  |  | ||||||
|  | 	//Clear out any old ActionStructs.  They will get filled in as we print the screen. | ||||||
|  | 	clearActionStructs(); | ||||||
|  |  | ||||||
| 	console.log("PrintingScreen for mode: " + what); | 	console.log("PrintingScreen for mode: " + what); | ||||||
|  | 	var rect; | ||||||
|  |  | ||||||
|     if(what == 0) |     if(what == 0) | ||||||
|     { |     { | ||||||
| @@ -95,12 +106,45 @@ function PrintScreen(WhatPassedIn=-1) | |||||||
| 		MainCanvas_ctx.fillStyle = maincanvasBackground; | 		MainCanvas_ctx.fillStyle = maincanvasBackground; | ||||||
| 		MainCanvas_ctx.fillRect(0, 0, MainCanvas.width, MainCanvas.height); | 		MainCanvas_ctx.fillRect(0, 0, MainCanvas.width, MainCanvas.height); | ||||||
|  |  | ||||||
|  | 		//Do any highlight we need to | ||||||
|  | 		if (ui_highlightRect !== null) { | ||||||
|  | 			//console.log("trying to highlight something: " + JSON.stringify(ui_highlightRect)); | ||||||
|  | 			MainCanvas_ctx.fillStyle = "white"; | ||||||
|  | 			MainCanvas_ctx.globalAlpha = 0.3; //mostly transparent | ||||||
|  | 			if (ui_highlightRect.shapeText == "square") | ||||||
|  | 				MainCanvas_ctx.fillRect(ui_highlightRect.sx, ui_highlightRect.sy, ui_highlightRect.deltax, ui_highlightRect.deltay); | ||||||
|  | 			else if (ui_highlightRect.shapeText == "line") { | ||||||
|  | 				var oldWidth = MainCanvas_ctx.lineWidth; | ||||||
|  | 				MainCanvas_ctx.lineWidth += 4; | ||||||
|  | 				MainCanvas_ctx.strokeStyle = "white"; | ||||||
|  | 				MainCanvas_ctx.beginPath(); | ||||||
|  | 				MainCanvas_ctx.moveTo(ui_highlightRect.sx, ui_highlightRect.sy); | ||||||
|  | 				MainCanvas_ctx.lineTo(ui_highlightRect.dx, ui_highlightRect.dy); | ||||||
|  | 				MainCanvas_ctx.stroke(); | ||||||
|  | 				MainCanvas_ctx.lineWidth = oldWidth; | ||||||
|  | 				MainCanvas_ctx.strokeStyle = "black"; | ||||||
|  |             } | ||||||
|  | 			MainCanvas_ctx.globalAlpha = 1.0; //reset | ||||||
|  | 			MainCanvas_ctx.fillStyle = "black"; //reset | ||||||
|  | 			ui_HadHighlight = true; | ||||||
|  | 		} | ||||||
|  | 		else ui_HadHighlight = false; | ||||||
|  |  | ||||||
| 		//Draw the puzzle-select button | 		//Draw the puzzle-select button | ||||||
| 		//Put the X there so we can click on it | 		//Put the X there so we can click on it | ||||||
| 	MainCanvas_ctx.drawImage(imageFromName("menu"),MainCanvas.width - small_button_size,0,small_button_size,small_button_size); | 		rect = makeRectangle(MainCanvas.width - small_button_size, 0, small_button_size, small_button_size); | ||||||
|  | 		MainCanvas_ctx.drawImage(imageFromName("menu"),rect.sx,rect.sy,rect.deltax,rect.deltay); | ||||||
|  | 		registerActionStruct("square", rect, null, ui_PuzzleChoiceMenuLeftClick, null, generic_mouseoverHighlight); | ||||||
|  |  | ||||||
| 		//Draw the info button | 		//Draw the info button | ||||||
| 	MainCanvas_ctx.drawImage(imageFromName("info"),MainCanvas.width - small_button_size,small_button_size,small_button_size,small_button_size); | 		rect = makeRectangle(MainCanvas.width - small_button_size, small_button_size, small_button_size, small_button_size); | ||||||
|  | 		MainCanvas_ctx.drawImage(imageFromName("info"), rect.sx, rect.sy, rect.deltax, rect.deltay); | ||||||
|  | 		registerActionStruct("square", rect, null, ui_InfoLeftClick, null, generic_mouseoverHighlight); | ||||||
|  |  | ||||||
|  | 		//Draw the eye button | ||||||
|  | 		rect = makeRectangle(MainCanvas.width - small_button_size, small_button_size * 2, small_button_size, small_button_size); | ||||||
|  | 		MainCanvas_ctx.drawImage(imageFromName("eye"), rect.sx, rect.sy, rect.deltax, rect.deltay); | ||||||
|  | 		registerActionStruct("square", rect, null, ui_eyeLeftClick, null, generic_mouseoverHighlight); | ||||||
|  |  | ||||||
| 		drawSelectMenu(); | 		drawSelectMenu(); | ||||||
| 		PrintAllNetworkLinks(); | 		PrintAllNetworkLinks(); | ||||||
| @@ -116,7 +160,6 @@ function PrintScreen(WhatPassedIn=-1) | |||||||
| 	//TextMenuSelection | 	//TextMenuSelection | ||||||
| 	PrintPuzzleSelectMenu(0); | 	PrintPuzzleSelectMenu(0); | ||||||
| 	} | 	} | ||||||
| 	 |  | ||||||
| } | } | ||||||
|  |  | ||||||
| function handleTouchStart(evt) | function handleTouchStart(evt) | ||||||
| @@ -151,6 +194,79 @@ function handleMouseDown(evt) | |||||||
| 	if(uiMode==0) SelectMenu_handleMouseDown(mouseDownLocation); | 	if(uiMode==0) SelectMenu_handleMouseDown(mouseDownLocation); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function CheckForActions(actionPoint, action) { | ||||||
|  | 	if (uiActions.length >= 0) { | ||||||
|  | 		var checkit = false; | ||||||
|  | 		var inside = false; | ||||||
|  | 		for (var index = 0; index < uiActions.length; index++) { | ||||||
|  | 			if (action == "leftclick" && uiActions[index].funcLeftClick !== null) checkit = true; | ||||||
|  | 			if (action == "rightclick" && uiActions[index].funcRightClick !== null) checkit = true; | ||||||
|  | 			if (action == "mouseover" && uiActions[index].funcMouseover !== null) checkit = true; | ||||||
|  | 			checklocation = uiActions[index]; | ||||||
|  | 			var point = newPointFromPair(actionPoint.pageX - checklocation.shapePoints.offsetx, actionPoint.pageY - checklocation.shapePoints.offsety); | ||||||
|  | 			if (checkit) { | ||||||
|  | 				//See if the click is inside the shape | ||||||
|  | 				if (checklocation.shapeText == "square") { | ||||||
|  | 					if (pointInRect(point, checklocation.shapePoints)) | ||||||
|  | 						inside = true; | ||||||
|  | 				} | ||||||
|  | 				if (checklocation.shapeText == "line") { | ||||||
|  | 					if (pointInRect(point, checklocation.shapePoints)) { | ||||||
|  | 						//console.log("inside line square"); | ||||||
|  | 						//We are inside the box.  Now determine if we are on the line... | ||||||
|  | 						var d1 = distance(checklocation.shapePoints.sx, checklocation.shapePoints.sy, actionPoint.pageX, actionPoint.pageY); | ||||||
|  | 						d1 += distance(checklocation.shapePoints.dx, checklocation.shapePoints.dy, actionPoint.pageX, actionPoint.pageY); | ||||||
|  | 						var d2 = distance(checklocation.shapePoints.sx, checklocation.shapePoints.sy, checklocation.shapePoints.dx, checklocation.shapePoints.dy); | ||||||
|  | 						if (Math.abs(d1 - d2) < 3) { | ||||||
|  | 							inside = true; | ||||||
|  | 							//console.log("on a line!"); | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 			} | ||||||
|  | 			if (inside) { | ||||||
|  | 				//console.log("Is inside"); | ||||||
|  | 				switch (action) { | ||||||
|  | 					case "leftclick": | ||||||
|  | 						if (checklocation.funcLeftClick != null) { | ||||||
|  | 							checklocation.funcLeftClick(actionPoint, checklocation); | ||||||
|  | 							//console.log("Successfully did a UI action"); | ||||||
|  | 							return true; | ||||||
|  | 						} | ||||||
|  | 						break; | ||||||
|  | 					case "mouseover": | ||||||
|  | 						if (checklocation.funcMouseover != null) { | ||||||
|  | 							checklocation.funcMouseover(actionPoint, checklocation); | ||||||
|  | 							//console.log("Successfully did a UI action"); | ||||||
|  | 							return true; | ||||||
|  | 						} | ||||||
|  | 						break; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function pointInRect(point, rectangle) { | ||||||
|  | 	if (point.x  >= Math.min(rectangle.sx,rectangle.dx)) { | ||||||
|  | 		if (point.x <= Math.max(rectangle.sx, rectangle.dx)) { | ||||||
|  | 			if (point.y >= Math.min(rectangle.sy, rectangle.dy)) { | ||||||
|  | 				if (point.y <= Math.max(rectangle.sy, rectangle.dy)) { | ||||||
|  | 					return true; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | //return the distance between two points | ||||||
|  | function distance(x1, y1, x2, y2) { | ||||||
|  | 	return Math.hypot(x2 - x1, y2 - y1); | ||||||
|  | } | ||||||
|  |  | ||||||
| function handleMouseUp(evt) | function handleMouseUp(evt) | ||||||
| { | { | ||||||
|     //evt.preventDefault(); |     //evt.preventDefault(); | ||||||
| @@ -170,32 +286,38 @@ function handleMouseUp(evt) | |||||||
| 		} | 		} | ||||||
| 		if(!mouseDidMovement) | 		if(!mouseDidMovement) | ||||||
| 		{ //If we are not dragging, it is a click | 		{ //If we are not dragging, it is a click | ||||||
|  | 			var myevt = copyLocation(evt); | ||||||
|  | 			//console.log("evt:" + JSON.stringify(myevt)); | ||||||
|  | 			if (CheckForActions(myevt, "leftclick")) return; //If we did this, do not do anything else. | ||||||
| 			if(uiMode==1) TextWindow_handleMouseUp(evt); | 			if(uiMode==1) TextWindow_handleMouseUp(evt); | ||||||
| 			else if(uiMode==2) TextWindow_handleMouseUp(evt); | 			else if(uiMode==2) TextWindow_handleMouseUp(evt); | ||||||
| 			else if(uiMode==0 && evt.pageX >= MainCanvas.width - small_button_size) |  | ||||||
| 			{ |  | ||||||
| 					console.log("clicked far enough x wise"); |  | ||||||
| 				//We may be clicking on one of the small buttons |  | ||||||
| 				if(evt.pageY < small_button_size)  |  | ||||||
| 				{ |  | ||||||
| 					//We clicked on the puzzle-select menu |  | ||||||
| 					console.log("PuzzleSelect pressed"); |  | ||||||
| 					uiMode=2; |  | ||||||
| 					PrintScreen(); |  | ||||||
| 				} else if(evt.pageY < small_button_size *2) |  | ||||||
| 				{ |  | ||||||
| 					console.log("Selected info button"); |  | ||||||
| 					//It is the info button |  | ||||||
| 					uiMode=1; |  | ||||||
| 					PrintScreen(); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
|     } |     } | ||||||
|     mouseDidMovement=false; //reset it after we raise the button |     mouseDidMovement=false; //reset it after we raise the button | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function ui_PuzzleChoiceMenuLeftClick(evt) { | ||||||
|  | 	//We clicked on the puzzle-select menu | ||||||
|  | 	console.log("PuzzleSelect pressed in action"); | ||||||
|  | 	uiMode = 2; | ||||||
|  | 	PrintScreen(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function ui_eyeLeftClick(evt) { | ||||||
|  | 	console.log("Selected 'eye' button in action"); | ||||||
|  | 	//It is the eye button | ||||||
|  | 	uiDeviceInfoLevel++; | ||||||
|  | 	if (uiDeviceInfoLevel > 3) uiDeviceInfoLevel = 0; | ||||||
|  | 	PrintScreen(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function ui_InfoLeftClick(evt) { | ||||||
|  | 	console.log("Selected info button in action"); | ||||||
|  | 	//It is the info button | ||||||
|  | 	uiMode = 1; | ||||||
|  | 	PrintScreen(); | ||||||
|  | } | ||||||
|  |  | ||||||
| function handleMouseMove(evt) | function handleMouseMove(evt) | ||||||
| { | { | ||||||
| @@ -217,12 +339,30 @@ function handleMouseMove(evt) | |||||||
| 	} | 	} | ||||||
| 	else //Mouse is not down.  Not dragging | 	else //Mouse is not down.  Not dragging | ||||||
| 	{ | 	{ | ||||||
|  | 		var needrefresh = false; | ||||||
|  | 		var oldRect = structuredClone(ui_highlightRect); | ||||||
|  | 		if (!CheckForActions(evt, "mouseover")) { | ||||||
|  | 			//We did not find anything | ||||||
|  | 			if (JSON.stringify(ui_highlightRect) === JSON.stringify(oldRect)) { | ||||||
|  |  | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				//console.log("Rects are not equal:" + JSON.stringify(ui_highlightRect) + " - " + JSON.stringify(oldRect) ) | ||||||
|  | 				needrefresh = true; | ||||||
|  | 			} | ||||||
|  | 			ui_highlightRect = null; //nothing to highlight | ||||||
|  | 			if (ui_HadHighlight) { needrefresh = true; } | ||||||
|  | 			if (needrefresh) { | ||||||
|  | 				PrintScreen(); | ||||||
|  | 			} | ||||||
|  |         } | ||||||
| 		if(uiMode==2) | 		if(uiMode==2) | ||||||
| 		{ | 		{ | ||||||
| 			textMenu_HandleMouseMove(evt); | 			textMenu_HandleMouseMove(evt); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  | 	return; | ||||||
| } | } | ||||||
|  |  | ||||||
| function copyLocation({ pageX, pageY }) { | function copyLocation({ pageX, pageY }) { | ||||||
| @@ -245,6 +385,11 @@ function PrintNetworkLink(linkToPrint) | |||||||
| 				var spoint = convertXYPointToActual(newPointFromString(sdevice.location)); | 				var spoint = convertXYPointToActual(newPointFromString(sdevice.location)); | ||||||
| 				var dpoint = convertXYPointToActual(newPointFromString(ddevice.location)); | 				var dpoint = convertXYPointToActual(newPointFromString(ddevice.location)); | ||||||
|  |  | ||||||
|  | 				//Make an actionstruct | ||||||
|  | 				var actionLine = makeLine(spoint.x, spoint.y, dpoint.x, dpoint.y); | ||||||
|  | 				registerActionStruct("line", actionLine, linkToPrint, null, null, generic_mouseoverHighlight); | ||||||
|  |  | ||||||
|  | 				var old | ||||||
| 				//Now we draw a line between them | 				//Now we draw a line between them | ||||||
| 				MainCanvas_ctx.beginPath(); | 				MainCanvas_ctx.beginPath(); | ||||||
| 				MainCanvas_ctx.moveTo(spoint.x,spoint.y); | 				MainCanvas_ctx.moveTo(spoint.x,spoint.y); | ||||||
| @@ -253,6 +398,7 @@ function PrintNetworkLink(linkToPrint) | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| function PrintAllNetworkLinks() | function PrintAllNetworkLinks() | ||||||
| @@ -275,18 +421,22 @@ function PrintNetworkDevice(ToPrint) | |||||||
|     if(ToPrint !== null) |     if(ToPrint !== null) | ||||||
|     { |     { | ||||||
| 		var rect = deviceRectangle(ToPrint); | 		var rect = deviceRectangle(ToPrint); | ||||||
|  | 		var actionrect = makeRectangle(rect.spoint.x, rect.spoint.y, rect.width, rect.height); | ||||||
|  |  | ||||||
| 		var dname = ToPrint.mytype; | 		var dname = ToPrint.mytype; | ||||||
| 		if(dname=="net_switch") dname="switch";	 | 		if(dname=="net_switch") dname="switch";	 | ||||||
| 		if(dname=="net_hub") dname="hub";	 | 		if(dname=="net_hub") dname="hub";	 | ||||||
| 		//console.log("printing device " + dname); | 		//console.log("printing device " + dname); | ||||||
| 		MainCanvas_ctx.drawImage(imageFromName(dname), rect.spoint.x, rect.spoint.y, rect.width, rect.height); | 		MainCanvas_ctx.drawImage(imageFromName(dname), rect.spoint.x, rect.spoint.y, rect.width, rect.height); | ||||||
|  | 		registerActionStruct("square", actionrect, ToPrint, null, null, generic_mouseoverHighlight); | ||||||
|  |  | ||||||
| 		//Now, we see if we need to print the name, or a list of IPs.. | 		//Now, we see if we need to print the name, or a list of IPs.. | ||||||
| 		var xpoint = rect.center.x; | 		var xpoint = rect.center.x; | ||||||
| 		var ystart = rect.epoint.y; //the bottom-most Y point | 		var ystart = rect.epoint.y; //the bottom-most Y point | ||||||
| 		var gap = 3; | 		var gap = 3; | ||||||
| 		var delta; | 		var delta; | ||||||
| 		var ipaddresses = ipsFromDevice(ToPrint); | 		var ipaddresses = ipsFromDevice(ToPrint); | ||||||
| 		console.log("addresses: " + JSON.stringify(ipaddresses)); | 		//console.log("addresses: " + JSON.stringify(ipaddresses)); | ||||||
| 		switch (uiDeviceInfoLevel) { | 		switch (uiDeviceInfoLevel) { | ||||||
| 			case 0: | 			case 0: | ||||||
| 				//Do not print anything | 				//Do not print anything | ||||||
| @@ -297,7 +447,7 @@ function PrintNetworkDevice(ToPrint) | |||||||
| 				break; | 				break; | ||||||
| 			case 2: | 			case 2: | ||||||
| 			case 3: | 			case 3: | ||||||
| 				console.log("printing device " + ToPrint.hostname); | 				//console.log("printing device " + ToPrint.hostname); | ||||||
| 				//Print both the name and the IP addresses | 				//Print both the name and the IP addresses | ||||||
| 				if (uiDeviceInfoLevel == 2) { | 				if (uiDeviceInfoLevel == 2) { | ||||||
| 					delta = printCenteredText(MainCanvas_ctx, ToPrint.hostname, xpoint, ystart) + gap; | 					delta = printCenteredText(MainCanvas_ctx, ToPrint.hostname, xpoint, ystart) + gap; | ||||||
| @@ -306,11 +456,11 @@ function PrintNetworkDevice(ToPrint) | |||||||
| 				//print the ip addresses | 				//print the ip addresses | ||||||
| 				for (var x = 0; x < ipaddresses.length; x++) { | 				for (var x = 0; x < ipaddresses.length; x++) { | ||||||
| 					//Print the IP address if the type is correct. | 					//Print the IP address if the type is correct. | ||||||
| 					console.log(JSON.stringify(ipaddresses[x])); | 					//console.log(JSON.stringify(ipaddresses[x])); | ||||||
| 					switch (ipaddresses[x].nictype) { | 					switch (ipaddresses[x].nictype) { | ||||||
| 						case "eth": | 						case "eth": | ||||||
| 						case "management_interface": | 						case "management_interface": | ||||||
| 							console.log("Found a " + ipaddresses[x].nictype) | 							//console.log("Found a " + ipaddresses[x].nictype) | ||||||
| 							let mystring = ipaddresses[x].cidrip; | 							let mystring = ipaddresses[x].cidrip; | ||||||
| 							delta = printCenteredText(MainCanvas_ctx, mystring, xpoint, ystart); | 							delta = printCenteredText(MainCanvas_ctx, mystring, xpoint, ystart); | ||||||
| 							ystart += (delta / 2); | 							ystart += (delta / 2); | ||||||
| @@ -402,3 +552,73 @@ function deviceRectangle(theDevice) | |||||||
| 	} | 	} | ||||||
|     return rect; |     return rect; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function makeRectangle(x1, y1, deltax, deltay, offsetx = 0, offsety = 0) { | ||||||
|  | 	//The offset is for when we are drawing on a cached surface.  It adds x or y to the point we are looking at | ||||||
|  | 	var struct = { | ||||||
|  | 		sx: x1, | ||||||
|  | 		sy: y1, | ||||||
|  | 		dx: x1 + deltax, | ||||||
|  | 		dy: y1 + deltay, | ||||||
|  | 		deltay: deltay, | ||||||
|  | 		deltax: deltax, | ||||||
|  | 		offsetx: offsetx, | ||||||
|  | 		offsety: offsety, | ||||||
|  | 	} | ||||||
|  | 	return struct; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function makeLine(x1, y1, x2, y2, offsetx = 0, offsety = 0) { | ||||||
|  | 	var linestruct = makeRectangle(x1, y1, x2 - x1, y2 - y1, offsetx, offsety); | ||||||
|  | 	//console.log("Creating a line: " + JSON.stringify(linestruct)); | ||||||
|  | 	return linestruct; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | //Make a structure to hold all our data | ||||||
|  | function actionStruct(shapeText, shapePoints, theObject=null, funcLeftClick=null, funcRightClick=null, funcMouseover=null) { | ||||||
|  | 	var struct = { | ||||||
|  | 		shapeText: shapeText, | ||||||
|  | 		shapePoints: structuredClone(shapePoints), | ||||||
|  | 		theObject: theObject, | ||||||
|  | 		funcLeftClick: funcLeftClick, | ||||||
|  | 		funcRightClick: funcRightClick, | ||||||
|  | 		funcMouseover: funcMouseover, | ||||||
|  | 	} | ||||||
|  | 	shapePoints.shapeText = shapeText; | ||||||
|  | 	return struct; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function registerActionStruct(shapeText, shapePoints, theObject=null, funcLeftClick=null, funcRightClick=null, funcMouseover=null) { | ||||||
|  | 	//Make an object with all the data | ||||||
|  | 	var what = actionStruct(shapeText, shapePoints, theObject, funcLeftClick, funcRightClick, funcMouseover); | ||||||
|  | 	//console.log("Pushing an action: " + shapeText); | ||||||
|  | 	//Push it onto the uiActions list | ||||||
|  | 	uiActions.unshift(what); //Put it at the beginning of the list | ||||||
|  | 	//console.log("ActionList: " + JSON.stringify(uiActions)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function clearActionStructs() { | ||||||
|  | 	uiActions = []; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | //This takes generic information for us to highlight the background | ||||||
|  | function generic_mouseoverHighlight(point, actionrec) { | ||||||
|  | 	//console.log("Found highlight " + JSON.stringify(actionrec)); | ||||||
|  | 	//The point is the place where the mouse is, but the actionrec.shapePoints is the rectangle (or shape) we want to highlight | ||||||
|  | 	var oldrec = structuredClone(ui_highlightRect); | ||||||
|  | 	if (actionrec.shapeText == "square") { | ||||||
|  | 		ui_highlightRect = structuredClone(actionrec.shapePoints); | ||||||
|  | 		ui_highlightRect.shapeText = "square"; | ||||||
|  | 		//console.log("setting highlights to:" + JSON.stringify(ui_highlightRect)); | ||||||
|  | 	} | ||||||
|  | 	if (actionrec.shapeText == "line") { | ||||||
|  | 		ui_highlightRect = structuredClone(actionrec.shapePoints); | ||||||
|  | 		ui_highlightRect.shapeText = "line"; | ||||||
|  | 		//console.log("setting highlights to:" + JSON.stringify(ui_highlightRect)); | ||||||
|  | 	} | ||||||
|  | 	if (JSON.stringify(ui_highlightRect) === JSON.stringify(oldrec)) { | ||||||
|  | 		//they are the same.  Nothing to do | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 		PrintScreen();  //two different areas.  Need to print the screen | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user