mirror of https://github.com/lapce/lapce.git
Merge pull request #1053 from bugadani/settingsnames
Clean up settings update
This commit is contained in:
commit
b126772877
|
@ -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(),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue