#71 new & opt.

- ssh page virt key long press
- custom ssh virt keys
This commit is contained in:
lollipopkit
2023-06-27 00:41:56 +08:00
parent dc63d902e5
commit 0022294ea4
30 changed files with 550 additions and 94 deletions

View File

@@ -1,20 +1,151 @@
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:xterm/core.dart';
class VirtualKey {
final String text;
final bool toggleable;
final TerminalKey? key;
final IconData? icon;
final VirtualKeyFunc? func;
part 'virtual_key.g.dart';
VirtualKey(
this.text, {
this.key,
this.toggleable = false,
this.icon,
this.func,
});
@HiveType(typeId: 4)
enum VirtKey {
@HiveField(0)
esc,
@HiveField(1)
alt,
@HiveField(2)
home,
@HiveField(3)
up,
@HiveField(4)
end,
@HiveField(5)
file,
@HiveField(6)
snippet,
@HiveField(7)
tab,
@HiveField(8)
ctrl,
@HiveField(9)
left,
@HiveField(10)
down,
@HiveField(11)
right,
@HiveField(12)
paste,
@HiveField(13)
ime,
@HiveField(14)
pgup,
@HiveField(15)
pgdn;
String get text {
switch (this) {
case VirtKey.pgdn:
return 'PgDn';
case VirtKey.pgup:
return 'PgUp';
default:
if (name.length > 1) {
return name.substring(0, 1).toUpperCase() + name.substring(1);
}
return name;
}
}
TerminalKey? get key {
switch (this) {
case VirtKey.esc:
return TerminalKey.escape;
case VirtKey.alt:
return TerminalKey.alt;
case VirtKey.home:
return TerminalKey.home;
case VirtKey.up:
return TerminalKey.arrowUp;
case VirtKey.end:
return TerminalKey.end;
case VirtKey.tab:
return TerminalKey.tab;
case VirtKey.ctrl:
return TerminalKey.control;
case VirtKey.left:
return TerminalKey.arrowLeft;
case VirtKey.down:
return TerminalKey.arrowDown;
case VirtKey.right:
return TerminalKey.arrowRight;
case VirtKey.pgup:
return TerminalKey.pageUp;
case VirtKey.pgdn:
return TerminalKey.pageDown;
default:
return null;
}
}
IconData? get icon {
switch (this) {
case VirtKey.up:
return Icons.arrow_upward;
case VirtKey.left:
return Icons.arrow_back;
case VirtKey.down:
return Icons.arrow_downward;
case VirtKey.right:
return Icons.arrow_forward;
case VirtKey.file:
return Icons.file_open;
case VirtKey.snippet:
return Icons.code;
case VirtKey.paste:
return Icons.paste;
case VirtKey.ime:
return Icons.keyboard_hide;
default:
return null;
}
}
// Use [VirtualKeyFunc] instead of [VirtKey]
// This can help linter to enum all [VirtualKeyFunc]
// and make sure all [VirtualKeyFunc] are handled
VirtualKeyFunc? get func {
switch (this) {
case VirtKey.file:
return VirtualKeyFunc.file;
case VirtKey.snippet:
return VirtualKeyFunc.snippet;
case VirtKey.paste:
return VirtualKeyFunc.paste;
case VirtKey.ime:
return VirtualKeyFunc.toggleIME;
default:
return null;
}
}
bool get toggleable {
switch (this) {
case VirtKey.alt:
case VirtKey.ctrl:
return true;
default:
return false;
}
}
bool get canLongPress {
switch (this) {
case VirtKey.up:
case VirtKey.left:
case VirtKey.down:
case VirtKey.right:
return true;
default:
return false;
}
}
}
enum VirtualKeyFunc { toggleIME, backspace, copy, paste, snippet, file }

View File

@@ -0,0 +1,116 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'virtual_key.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class VirtKeyAdapter extends TypeAdapter<VirtKey> {
@override
final int typeId = 4;
@override
VirtKey read(BinaryReader reader) {
switch (reader.readByte()) {
case 0:
return VirtKey.esc;
case 1:
return VirtKey.alt;
case 2:
return VirtKey.home;
case 3:
return VirtKey.up;
case 4:
return VirtKey.end;
case 5:
return VirtKey.file;
case 6:
return VirtKey.snippet;
case 7:
return VirtKey.tab;
case 8:
return VirtKey.ctrl;
case 9:
return VirtKey.left;
case 10:
return VirtKey.down;
case 11:
return VirtKey.right;
case 12:
return VirtKey.paste;
case 13:
return VirtKey.ime;
case 14:
return VirtKey.pgup;
case 15:
return VirtKey.pgdn;
default:
return VirtKey.esc;
}
}
@override
void write(BinaryWriter writer, VirtKey obj) {
switch (obj) {
case VirtKey.esc:
writer.writeByte(0);
break;
case VirtKey.alt:
writer.writeByte(1);
break;
case VirtKey.home:
writer.writeByte(2);
break;
case VirtKey.up:
writer.writeByte(3);
break;
case VirtKey.end:
writer.writeByte(4);
break;
case VirtKey.file:
writer.writeByte(5);
break;
case VirtKey.snippet:
writer.writeByte(6);
break;
case VirtKey.tab:
writer.writeByte(7);
break;
case VirtKey.ctrl:
writer.writeByte(8);
break;
case VirtKey.left:
writer.writeByte(9);
break;
case VirtKey.down:
writer.writeByte(10);
break;
case VirtKey.right:
writer.writeByte(11);
break;
case VirtKey.paste:
writer.writeByte(12);
break;
case VirtKey.ime:
writer.writeByte(13);
break;
case VirtKey.pgup:
writer.writeByte(14);
break;
case VirtKey.pgdn:
writer.writeByte(15);
break;
}
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is VirtKeyAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}