//Make sure canvasses are in the correct position var mouseIsDown=false; var selectedMenuItemName=""; var selectedMenuYOffset=0; const selectMenuNames = ["link", "router", "firewall", "hub", "switch", "pc", "laptop", "server", "ip_phone", "printer", "copier", "microwave", "fluorescent", "wap", "wrepeater", "wbridge", "wrepeater"]; var cachedSelectMenuCanvas=null; var menuItemSize=50; function InitializeSelectMenu() { cachedSelectMenuCanvas = document.createElement('canvas'); cachedSelectMenuCanvas.width = menuItemSize; console.log("length= " + selectMenuNames.length); cachedSelectMenuCanvas.height = menuItemSize * selectMenuNames.length; var cSMCctx = cachedSelectMenuCanvas.getContext('2d'); var starty = 0; selectMenuNames.forEach((element) => { //console.log("Printing to select: "+ element); cSMCctx.drawImage(imageCollection[element], 0, starty, menuItemSize, menuItemSize); starty += menuItemSize; }); } function drawSelectMenu() { //console.log("Printing on main canvass"); MainCanvas_ctx.fillStyle = maincanvasBackground; MainCanvas_ctx.fillRect(0, 0, menuItemSize, MainCanvas.height); if (selectedMenuYOffset < 0) selectedMenuYOffset = 0; if (cachedSelectMenuCanvas == null) InitializeSelectMenu();//initialize it if not done yet if(selectedMenuYOffset + MainCanvas.height > cachedSelectMenuCanvas.height) selectedMenuYOffset = cachedSelectMenuCanvas.height -MainCanvas.height; MainCanvas_ctx.drawImage(cachedSelectMenuCanvas,0,selectedMenuYOffset,50,MainCanvas.height,0,0,50,MainCanvas.height); let index = selectMenuNames.indexOf(selectedMenuItemName); if(index > -1) { //We have a selected menu item const cachedSelectMenuCanvasOverlay = document.createElement('canvas'); let boxwidth=3; cachedSelectMenuCanvasOverlay.width = cachedSelectMenuCanvas.width; cachedSelectMenuCanvasOverlay.height = cachedSelectMenuCanvas.height; var overlay = cachedSelectMenuCanvasOverlay.getContext("2d"); let ty = index * menuItemSize; overlay.beginPath(); overlay.lineWidth = boxwidth; overlay.strokeStyle = "green"; overlay.rect(boxwidth,ty,menuItemSize-(boxwidth * 2),menuItemSize); overlay.stroke(); MainCanvas_ctx.drawImage(cachedSelectMenuCanvasOverlay,0,selectedMenuYOffset,50,MainCanvas.height,0,0,50,MainCanvas.height); //console.log("drawing select box around 0," + ty + " -> " + menuItemSize); } //Now, if we have more to the top or bottom, draw the arrows showing as much if(selectedMenuYOffset > (menuItemSize / 2)) { //We have one item above us. Draw the arrow //console.log("Drawing up arrow"); MainCanvas_ctx.drawImage(imageFromName("ArrowUp"),0,0,50,25); } //Now, if we have more to the top or bottom, draw the arrows showing as much if(selectedMenuYOffset + (MainCanvas.height + 25) < cachedSelectMenuCanvas.height) { //We have one item below us. Draw the arrow //console.log("Drawing down arrow"); MainCanvas_ctx.drawImage(imageFromName("ArrowDown"),0,MainCanvas.height - 25,50,25); } } function SelectMenu_handleMouseDown(evt) { mouseDownLocation = copyLocation(evt); mouseIsDown=true; } function SelectMenu_handleMouseUp(evt) { mouseIsDown=false; //console.log("mouseup"); //See if we have a mouse click let deltaX = Math.abs(evt.pageX - mouseDownLocation.pageX); let deltaY = Math.abs(evt.pageY - mouseDownLocation.pageY); //console.log("delta " + deltaX + "," + deltaY); if(deltaY < 3 && deltaX <3) { //We did not move much. Assume click if(evt.pageX <= menuItemSize && !mouseDidMovement) { //We are in the item select menu. let actualMenuLocation = selectedMenuYOffset + evt.pageY; let newitemindex = Math.floor( actualMenuLocation / menuItemSize); console.log("clicked on item " + selectMenuNames[newitemindex]); selectedMenuItemName = selectMenuNames[newitemindex]; drawSelectMenu(); } } mouseDidMovement=false; //reset it after we raise the button } function SelectMenu_handleMouseMove(evt) { if(mouseIsDown) { let deltaX = evt.pageX - mouseDownLocation.pageX; let deltaY = evt.pageY - mouseDownLocation.pageY; if(isNaN(deltaY)) deltaY=0; if(isNaN(deltaX)) deltaX=0; //we are dragging //console.log('mousemove ' + evt.pageX + " " + evt.pageY + " delta " + deltaY ); selectedMenuYOffset-=deltaY; mouseDownLocation = copyLocation(evt); //reset the pointer drawSelectMenu(); mouseDidMovement=true; } } function copyLocation({ pageX, pageY }) { return { pageX, pageY }; }