#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;
}

View File

@@ -23,8 +23,8 @@ typedef ServersMap = Map<String, Server>;
class ServerProvider extends BusyProvider {
final ServersMap _servers = {};
ServersMap get servers => _servers;
final StringOrder _serverOrder = [];
StringOrder get serverOrder => _serverOrder;
final Order<String> _serverOrder = [];
Order get serverOrder => _serverOrder;
final List<String> _tags = [];
List<String> get tags => _tags;

View File

@@ -1,5 +1,7 @@
import 'dart:ui';
import 'package:toolbox/data/model/ssh/virtual_key.dart';
// default server details page cards order
const defaultDetailCardOrder = [
'uptime',
@@ -20,6 +22,23 @@ const defaultDiskIgnorePath = [
'none',
];
const defaultSSHVirtKeys = [
VirtKey.esc,
VirtKey.alt,
VirtKey.home,
VirtKey.up,
VirtKey.end,
VirtKey.file,
VirtKey.snippet,
VirtKey.tab,
VirtKey.ctrl,
VirtKey.left,
VirtKey.down,
VirtKey.right,
VirtKey.paste,
VirtKey.ime,
];
const defaultPrimaryColor = Color.fromARGB(255, 145, 58, 31);
const defaultLaunchPageIdx = 0;

View File

@@ -1,29 +0,0 @@
import 'package:flutter/material.dart';
import 'package:xterm/core.dart';
import '../model/ssh/virtual_key.dart';
final virtualKeys = [
VirtualKey('Esc', key: TerminalKey.escape),
VirtualKey('Alt', key: TerminalKey.alt, toggleable: true),
VirtualKey('Home', key: TerminalKey.home),
VirtualKey('Up', key: TerminalKey.arrowUp, icon: Icons.arrow_upward),
VirtualKey('End', key: TerminalKey.end),
VirtualKey(
'File',
func: VirtualKeyFunc.file,
icon: Icons.file_open,
),
VirtualKey('Snippet', func: VirtualKeyFunc.snippet, icon: Icons.code),
VirtualKey('Tab', key: TerminalKey.tab),
VirtualKey('Ctrl', key: TerminalKey.control, toggleable: true),
VirtualKey('Left', key: TerminalKey.arrowLeft, icon: Icons.arrow_back),
VirtualKey('Down', key: TerminalKey.arrowDown, icon: Icons.arrow_downward),
VirtualKey('Right', key: TerminalKey.arrowRight, icon: Icons.arrow_forward),
VirtualKey('Paste', func: VirtualKeyFunc.paste, icon: Icons.paste),
VirtualKey(
'IME',
func: VirtualKeyFunc.toggleIME,
icon: Icons.keyboard_hide,
),
];

View File

@@ -1,11 +1,12 @@
import 'package:flutter/material.dart';
import 'package:toolbox/core/persistant_store.dart';
import 'package:toolbox/core/utils/platform.dart';
import 'package:toolbox/data/model/ssh/virtual_key.dart';
import '../res/default.dart';
class SettingStore extends PersistentStore {
StoreProperty<int> get primaryColor => property(
StoreProperty<int> get primaryColor => property<int>(
'primaryColor',
defaultValue: 4287106639,
);
@@ -76,4 +77,7 @@ class SettingStore extends PersistentStore {
StoreProperty<int> get keyboardType =>
property('keyboardType', defaultValue: TextInputType.text.index);
StoreProperty<List<VirtKey>> get sshVirtKeys =>
property('sshVirtKeys', defaultValue: defaultSSHVirtKeys);
}