From 8aa228a2908aaf0c379dac8f9ec17068c4a0447b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 19 Nov 2011 22:16:05 -0800 Subject: [PATCH] Connection icons, initial autohiding menu implementation. --- guacamole/src/main/webapp/client.xhtml | 74 ++++++++++++++++-- .../images/protocol-icons/tango/terminal.png | Bin 0 -> 1164 bytes .../protocol-icons/tango/video-display.png | Bin 0 -> 1080 bytes guacamole/src/main/webapp/index.xhtml | 6 +- guacamole/src/main/webapp/styles/client.css | 13 ++- guacamole/src/main/webapp/styles/login.css | 11 +++ 6 files changed, 88 insertions(+), 16 deletions(-) create mode 100644 guacamole/src/main/webapp/images/protocol-icons/tango/terminal.png create mode 100644 guacamole/src/main/webapp/images/protocol-icons/tango/video-display.png diff --git a/guacamole/src/main/webapp/client.xhtml b/guacamole/src/main/webapp/client.xhtml index 7dcd85c58..ad4defca5 100644 --- a/guacamole/src/main/webapp/client.xhtml +++ b/guacamole/src/main/webapp/client.xhtml @@ -97,13 +97,6 @@ var errorDialog = document.getElementById("errorDialog"); var errorDialogText = document.getElementById("errorText"); - // Position display correctly - window.onresize = function() { - display.style.top = menu.offsetHeight + "px"; - }; - - window.onresize(); - var state = document.getElementById("state"); guac.onstatechange = function(clientState) { @@ -184,6 +177,10 @@ var mouse = new Guacamole.Mouse(display); mouse.onmousedown = mouse.onmouseup = mouse.onmousemove = function(mouseState) { + + if (mouseState.y <= 5) + showMenu(); + guac.sendMouseState(mouseState); }; @@ -335,6 +332,69 @@ // TODO: Handle exception ... } + var menu_shaded = false; + + var hide_interval = null; + var show_interval = null; + + function hideMenu() { + + if (!menu_shaded) { + + var step = Math.floor(menu.offsetHeight / 5) + 1; + var offset = 0; + menu_shaded = true; + + window.clearInterval(show_interval); + hide_interval = window.setInterval(function() { + + offset -= step; + menu.style.top = offset + "px"; + + if (offset <= -menu.offsetHeight) { + window.clearInterval(hide_interval); + menu.style.visiblity = "hidden"; + } + + }, 30); + } + + } + + function showMenu() { + + if (menu_shaded) { + + var step = Math.floor(menu.offsetHeight / 5) + 1; + var offset = -menu.offsetHeight; + menu_shaded = false; + menu.style.visiblity = ""; + + window.clearInterval(hide_interval); + show_interval = window.setInterval(function() { + + offset += step; + + if (offset >= 0) { + offset = 0; + window.clearInterval(show_interval); + } + + menu.style.top = offset + "px"; + + }, 30); + } + + } + + display.onmouseout = function() { + showMenu(); + }; + + display.onmouseover = function() { + hideMenu(); + }; + /* ]]> */ diff --git a/guacamole/src/main/webapp/images/protocol-icons/tango/terminal.png b/guacamole/src/main/webapp/images/protocol-icons/tango/terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..9370a2cefda5ae70ec70ad138a031e34ed3a8443 GIT binary patch literal 1164 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE z!*#Jj*VI)O7sUmmyF9KcE#eo;5&Z42|QL;-{2kXQalfU?C{t#gQa@6X<6(Q>j zD!$xdlR~n7Pr8$~V`uuE?4JeaY{_7I!SzUGHoKsss&w|PMX$JfL}ETpefaR<1*R`w!`s=|@~R3? zJ4dgcnpIjVwX3XbRa4gL(2%Li-iPo1`|fpY^5kUR2c_Hs?jPs1%ijsIHLUCT__1@E zfsMZK%f{(vV^`JxZo7Ts-;v2vFD_oZySPcC%+_|R)a2!U#SgmAf3V>X37-_sY9hX9 zmF%TU3zc5o*!;2T4AG8?HTIuZ!bY*`zWxc}?oSM@sH|{!eBu zm$MFWIN8w5cKV;tqa~rt3?|c+dN%&3Grm8+N8y}~(UjGyZTIdSKX~8mNAZtncV>&ELpy>H#TXa9TIW#{KA za?H+DvP=-SyAad2VcXILy$XHFbA;Czig>s6f8XD})s=02eY3y4<$-Oo--A|*G$ysH zzGddun8tHVO6Yk}wJ|Ga;iOIadL}o1eo^Spxp(fOaQls4Kh)A*i)UH~$u4+1xlum3 zSM}VfeTNrWbQxYt%4uwr&U^UOJpRF#c=eABQTa3`FAy|EFo7?{_V`|w+k~m_GJ4s;pyIf|Lwc7zaE_^BlvEg_l+GN&%I$QIZ}A! z z2evxoyS>`D%R+xA>&?jw-43!dvKyx~BuQI@dtS&AR$yDCePqX{AN(u}B0M;iMRx&n zvucTJL`iZ{YGO&MZVHfKFfuT()HN{EH8Kb>G_o=_wlXx*HZZU(emvzQ@|HU%$@0P`_|h;3SnjU%x%~F)w+d zF6$e}+RXRu=gf!Q=kF=<=q8FJ^?b~n)po%0pu#e)c`@@2@f?xtd3jp?JgS1dQNi~T$Qj*Xj~W|e7l6-`m_y?iev+I_mByevy!ea|V;jta5$_P#RiDUp3! z%cdxt|139ebB4v){hV7x?{O=MCU|U~vMSnFi{bE{DUY8luw@iF-e*ztWak9&=gDae zE>jGc1P@A_*gU6fx9!RU5;dn|GbYy}uT*dHvtp^=SFv8=OhS_zht|rj zXNAUolUUN#{Woi|z7S-0G+C5jG3%_FYhXlnuH~n?+}yX#t5(^GO!SVw9w>76-mP0z z-xsm*7_h2%PCB#q-?O!QXPd`!hKGk2o?EDqk^gRQmE6B?6W+ef{aKg({OaEM-@i5R zcr-TMdwSppgW3TdgYeL+Z~k2U`Cv)uC#TO(ZfvoZO*VKEd2aph-*4XByLk7mb<^6sC{;*lFoNMsgyRG4qQq#YK$4yW22=qQ>oWLI$c;(uht6OUfc>5J!TyLMh zuO#~Uynn2Bm@hB9RWDu7eDzOPDp%YBP*zkeag8WRE=o--N!3jO5)4KL29~-8X1YcO zA%;d)#>Q5LrrHJuRt5$o>n@&wX~@k_$xN#xpg~)HIVhJ)f@}!RPb(=;EJ|f4FE7{2 f%*!rLPAo{(%P&fw{mw=TsEEPS)z4*}Q$iB}wI$lH literal 0 HcmV?d00001 diff --git a/guacamole/src/main/webapp/index.xhtml b/guacamole/src/main/webapp/index.xhtml index f3b066172..35c399adc 100644 --- a/guacamole/src/main/webapp/index.xhtml +++ b/guacamole/src/main/webapp/index.xhtml @@ -131,6 +131,9 @@ var protocol = document.createElement("td"); var id = document.createElement("td"); + var protocolIcon = document.createElement("div"); + protocolIcon.className = "protocol icon " + configs[i].protocol; + // Set CSS protocol.className = "protocol"; id.className = "name"; @@ -141,7 +144,8 @@ "client.xhtml?" + encodeURIComponent(configs[i].id)); // Set cell contents - protocol.textContent = configs[i].protocol; + protocol.appendChild(protocolIcon); + //protocol.textContent = configs[i].protocol; clientLink.textContent = configs[i].id; id.appendChild(clientLink); diff --git a/guacamole/src/main/webapp/styles/client.css b/guacamole/src/main/webapp/styles/client.css index 99a09ae38..7d99735e6 100644 --- a/guacamole/src/main/webapp/styles/client.css +++ b/guacamole/src/main/webapp/styles/client.css @@ -86,14 +86,6 @@ div.errorDialog p { z-index: 1; } -#menu.connected { - opacity: 0.5; -} - -#menu.connected:hover { - opacity: 1; -} - #menu.error { background: #D44; } @@ -139,6 +131,11 @@ div#clipboardDiv { border-radius: 0.5em; width: 50em; + opacity: 0.5; +} + +#menu:hover div#clipboardDiv { + opacity: 1; } div#clipboardDiv h2 { diff --git a/guacamole/src/main/webapp/styles/login.css b/guacamole/src/main/webapp/styles/login.css index d073c1de7..f8e5ca0a6 100644 --- a/guacamole/src/main/webapp/styles/login.css +++ b/guacamole/src/main/webapp/styles/login.css @@ -219,3 +219,14 @@ div#connection-list-ui a[href] { div#connection-list-ui a[href]:hover { text-decoration: underline; } + +.protocol.icon { + width: 24px; + height: 24px; + background-image: url('../images/protocol-icons/tango/video-display.png'); +} + +.protocol.icon.ssh { + background-image: url('../images/protocol-icons/tango/terminal.png'); +} +