Support switching keyboard mode by UI

This commit is contained in:
Asura 2022-07-23 20:51:01 +08:00
parent 25c7bbd96f
commit 1b0fb5132c
4 changed files with 136 additions and 4 deletions

View File

@ -300,5 +300,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Activate onetime password", "激活一次性访问功能"),
("Set security password", "设置安全密码"),
("Connection not allowed", "对方不允许连接"),
("Legacy mode", "传统模式"),
("Map mode", "11传输"),
].iter().cloned().collect();
}

View File

@ -155,6 +155,96 @@ var svg_send = <svg viewBox="0 0 448 448">
var svg_chat = <svg viewBox="0 0 511.07 511.07">
<path d="m74.39 480.54h-36.213l25.607-25.607c13.807-13.807 22.429-31.765 24.747-51.246-36.029-23.644-62.375-54.751-76.478-90.425-14.093-35.647-15.864-74.888-5.121-113.48 12.89-46.309 43.123-88.518 85.128-118.85 45.646-32.963 102.47-50.387 164.33-50.387 77.927 0 143.61 22.389 189.95 64.745 41.744 38.159 64.734 89.63 64.734 144.93 0 26.868-5.471 53.011-16.26 77.703-11.165 25.551-27.514 48.302-48.593 67.619-46.399 42.523-112.04 65-189.83 65-28.877 0-59.01-3.855-85.913-10.929-25.465 26.123-59.972 40.929-96.086 40.929zm182-420c-124.04 0-200.15 73.973-220.56 147.28-19.284 69.28 9.143 134.74 76.043 175.12l7.475 4.511-0.23 8.727c-0.456 17.274-4.574 33.912-11.945 48.952 17.949-6.073 34.236-17.083 46.99-32.151l6.342-7.493 9.405 2.813c26.393 7.894 57.104 12.241 86.477 12.241 154.37 0 224.68-93.473 224.68-180.32 0-46.776-19.524-90.384-54.976-122.79-40.713-37.216-99.397-56.888-169.71-56.888z"/>
</svg>;
var svg_keyboard = <svg viewBox="0 0 511.07 511.07">
<g>
<g>
<path d="M491.979,217.631H110.205c0.157-1.362,0.365-2.717,0.637-4.061c4.408-21.755,23.676-38.152,46.71-38.152h39.404h109.91
c39.306,0,71.282-32.246,71.282-71.552c0-11.28-9.145-20.56-20.426-20.56s-20.426,9.077-20.426,20.359
c0,3.419-0.575,6.941-1.619,10.01c-4.082,11.998-15.451,20.893-28.812,20.893h-17.777H157.553
c-46.995,0-85.535,36.766-88.331,83.064H20.021C8.739,217.631,0,226.296,0,237.578v170.345c0,11.28,8.739,20.773,20.021,20.773
H491.98c11.28,0,20.021-9.492,20.021-20.773V237.578C512,226.296,503.261,217.631,491.979,217.631z M471.149,387.844H40.851
V258.482h430.298V387.844z"/>
</g>
</g>
<g>
<g>
<path d="M113.021,273.461H89.872c-11.28,0-20.426,9.145-20.426,20.426s9.145,20.426,20.426,20.426h23.149
c11.28,0,20.426-9.145,20.426-20.426S124.302,273.461,113.021,273.461z"/>
</g>
</g>
<g>
<g>
<path d="M190.638,273.461h-23.149c-11.28,0-20.426,9.145-20.426,20.426s9.145,20.426,20.426,20.426h23.149
c11.28,0,20.426-9.145,20.426-20.426S201.919,273.461,190.638,273.461z"/>
</g>
</g>
<g>
<g>
<path d="M268.255,273.461h-23.149c-11.28,0-20.426,9.145-20.426,20.426s9.145,20.426,20.426,20.426h23.149
c11.28,0,20.426-9.145,20.426-20.426S279.536,273.461,268.255,273.461z"/>
</g>
</g>
<g>
<g>
<path d="M345.872,273.461h-23.149c-11.28,0-20.426,9.145-20.426,20.426s9.145,20.426,20.426,20.426h23.149
c11.28,0,20.426-9.145,20.426-20.426S357.153,273.461,345.872,273.461z"/>
</g>
</g>
<g>
<g>
<path d="M423.489,273.461H400.34c-11.28,0-20.426,9.145-20.426,20.426s9.145,20.426,20.426,20.426h23.149
c11.28,0,20.426-9.145,20.426-20.426S434.77,273.461,423.489,273.461z"/>
</g>
</g>
<g>
<g>
<path d="M113.021,325.206H89.872c-11.28,0-20.426,9.145-20.426,20.426s9.145,20.425,20.426,20.425h23.149
c11.28,0,20.426-9.145,20.426-20.425S124.302,325.206,113.021,325.206z"/>
</g>
</g>
<g>
<g>
<path d="M423.489,325.206H400.34c-11.28,0-20.426,9.145-20.426,20.426s9.145,20.425,20.426,20.425h23.149
c11.28,0,20.426-9.145,20.426-20.425S434.77,325.206,423.489,325.206z"/>
</g>
</g>
<g>
<g>
<path d="M345.872,329.291H167.489c-11.28,0-20.426,9.145-20.426,20.426s9.145,20.426,20.426,20.426h178.383
c11.28,0,20.426-9.145,20.426-20.426S357.153,329.291,345.872,329.291z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>;
function scrollToBottom(el) {
var y = el.box(#height, #content) - el.box(#height, #client);

View File

@ -139,11 +139,22 @@ class Header: Reactor.Component {
<span #chat>{svg_chat}</span>
<span #action>{svg_action}</span>
<span #display>{svg_display}</span>
<span #keyboard>{svg_keyboard}</span>
{this.renderKeyboardPop()}
{this.renderDisplayPop()}
{this.renderActionPop()}
</div>;
}
function renderKeyboardPop(){
return <popup>
<menu.context #keyboard-options>
<li #legacy><span>{svg_checkmark}</span>{translate('Legacy mode')}</li>
<li #map><span>{svg_checkmark}</span>{translate('Map mode')}</li>
</menu>
</popup>;
}
function renderDisplayPop() {
return <popup>
<menu.context #display-options>
@ -252,6 +263,11 @@ class Header: Reactor.Component {
me.popup(menu);
}
event click $(#keyboard) (_, me) {
var menu = $(menu#keyboard-options);
me.popup(menu);
}
event click $(#screen) (_, me) {
if (pi.current_display == me.index) return;
handler.switch_display(me.index);
@ -332,6 +348,16 @@ class Header: Reactor.Component {
toggleMenuState();
}
}
event click $(menu#keyboard-options>li) (_, me) {
stdout.println(me.id);
if (me.id == "legacy") {
handler.save_keyboard_mode("legacy");
} else if (me.id == "map") {
handler.save_keyboard_mode("map");
}
toggleMenuState()
}
}
function handle_custom_image_quality() {
@ -355,9 +381,14 @@ function toggleMenuState() {
var s = handler.get_view_style();
if (!s) s = "original";
values.push(s);
var k = handler.get_keyboard_mode();
values.push(k);
for (var el in $$(menu#display-options>li)) {
el.attributes.toggleClass("selected", values.indexOf(el.id) >= 0);
}
for (var el in $$(menu#keyboard-options>li)) {
el.attributes.toggleClass("selected", values.indexOf(el.id) >= 0);
}
for (var id in ["show-remote-cursor", "show-quality-monitor", "disable-audio", "enable-file-transfer", "disable-clipboard", "lock-after-session-end"]) {
var el = self.select('#' + id);
if (el) {

View File

@ -233,6 +233,8 @@ impl sciter::EventHandler for Handler {
fn get_remember();
fn peer_platform();
fn set_write_override(i32, i32, bool, bool, bool);
fn get_keyboard_mode();
fn save_keyboard_mode(String);
}
}
@ -347,6 +349,16 @@ impl Handler {
return self.lc.read().unwrap().image_quality.clone();
}
fn get_keyboard_mode(&mut self) -> String {
return std::env::var("KEYBOARD_MODE")
.unwrap_or(String::from("legacy"))
.to_lowercase();
}
fn save_keyboard_mode(&mut self, value: String) {
std::env::set_var("KEYBOARD_MODE", value);
}
fn get_custom_image_quality(&mut self) -> Value {
let mut v = Value::array(0);
for x in self.lc.read().unwrap().custom_image_quality.iter() {
@ -1273,10 +1285,7 @@ impl Handler {
fn key_down_or_up(&mut self, down_or_up: bool, key: RdevKey, evt: Event) {
// Call different functions according to keyboard mode.
let mode = match std::env::var("KEYBOARD_MODE")
.unwrap_or(String::from("legacy")).to_lowercase()
.as_str()
{
let mode = match self.get_keyboard_mode().as_str() {
"map" => KeyboardMode::Map,
"legacy" => KeyboardMode::Legacy,
_ => KeyboardMode::Legacy,