Merge pull request #1053 from bugadani/settingsnames

Clean up settings update
This commit is contained in:
Dongdong Zhou 2022-09-06 21:57:13 +01:00 committed by GitHub
commit b126772877
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 41 additions and 58 deletions

View File

@ -27,6 +27,7 @@
keypress::KeyPressFocus, keypress::KeyPressFocus,
settings::{LapceSettingsFocusData, SettingsValueKind}, settings::{LapceSettingsFocusData, SettingsValueKind},
}; };
use serde::Serialize;
use xi_rope::Rope; use xi_rope::Rope;
use crate::{ use crate::{
@ -378,74 +379,56 @@ pub fn new_split(kind: LapceSettingsKind, data: &LapceTabData) -> LapceSplit {
} }
fn update_children(&mut self, ctx: &mut EventCtx, data: &mut LapceTabData) { fn update_children(&mut self, ctx: &mut EventCtx, data: &mut LapceTabData) {
fn into_settings_map(
data: &impl Serialize,
) -> HashMap<String, serde_json::Value> {
serde_json::to_value(data)
.and_then(serde_json::from_value)
.unwrap()
}
self.children.clear(); self.children.clear();
let (kind, fields, descs, settings) = match self.kind { let (kind, fields, descs, mut settings) = match self.kind {
LapceSettingsKind::Core => { LapceSettingsKind::Core => (
let settings: HashMap<String, serde_json::Value> = "lapce",
serde_json::from_value( &LapceConfig::FIELDS[..],
serde_json::to_value(&data.config.lapce).unwrap(), &LapceConfig::DESCS[..],
) into_settings_map(&data.config.lapce),
.unwrap(); ),
( LapceSettingsKind::UI => (
"lapce".to_string(), "ui",
LapceConfig::FIELDS.to_vec(), &UIConfig::FIELDS[..],
LapceConfig::DESCS.to_vec(), &UIConfig::DESCS[..],
settings, into_settings_map(&data.config.ui),
) ),
} LapceSettingsKind::Editor => (
LapceSettingsKind::UI => { "editor",
let settings: HashMap<String, serde_json::Value> = &EditorConfig::FIELDS[..],
serde_json::from_value( &EditorConfig::DESCS[..],
serde_json::to_value(&data.config.ui).unwrap(), into_settings_map(&data.config.editor),
) ),
.unwrap(); LapceSettingsKind::Terminal => (
( "terminal",
"ui".to_string(), &TerminalConfig::FIELDS[..],
UIConfig::FIELDS.to_vec(), &TerminalConfig::DESCS[..],
UIConfig::DESCS.to_vec(), into_settings_map(&data.config.terminal),
settings, ),
)
}
LapceSettingsKind::Editor => {
let settings: HashMap<String, serde_json::Value> =
serde_json::from_value(
serde_json::to_value(&data.config.editor).unwrap(),
)
.unwrap();
(
"editor".to_string(),
EditorConfig::FIELDS.to_vec(),
EditorConfig::DESCS.to_vec(),
settings,
)
}
LapceSettingsKind::Terminal => {
let settings: HashMap<String, serde_json::Value> =
serde_json::from_value(
serde_json::to_value(&data.config.terminal).unwrap(),
)
.unwrap();
(
"terminal".to_string(),
TerminalConfig::FIELDS.to_vec(),
TerminalConfig::DESCS.to_vec(),
settings,
)
}
}; };
for (i, field) in fields.into_iter().enumerate() { for (field, desc) in fields.iter().zip(descs.iter()) {
// TODO(dbuga): we should generate kebab-case field names
let field = field.replace('_', "-"); let field = field.replace('_', "-");
let value = settings.remove(&field).unwrap();
self.children.push(WidgetPod::new( self.children.push(WidgetPod::new(
LapcePadding::new( LapcePadding::new(
(10.0, 10.0), (10.0, 10.0),
LapceSettingsItem::new( LapceSettingsItem::new(
data, data,
kind.clone(), kind.to_string(),
field.clone(), field,
descs[i].to_string(), desc.to_string(),
settings.get(&field).unwrap().clone(), value,
ctx.get_external_handle(), ctx.get_external_handle(),
), ),
) )