files
This commit is contained in:
@@ -147,6 +147,11 @@ pub struct Document {
|
||||
pub id: u64,
|
||||
pub name: String,
|
||||
pub content: String,
|
||||
/// Имя иконки вкладки из каталога Lucide (см. `crate::icons`).
|
||||
///
|
||||
/// `None` — показывается иконка по умолчанию. Назначается через
|
||||
/// `AppApi::set_tab_icon`.
|
||||
pub icon: Option<String>,
|
||||
/// Язык подсветки синтаксиса.
|
||||
///
|
||||
/// `None` — подсветка выключена (поведение по умолчанию). Включается
|
||||
@@ -166,6 +171,7 @@ impl Document {
|
||||
name: name.into(),
|
||||
saved_content: content.clone(),
|
||||
content,
|
||||
icon: None,
|
||||
language: None,
|
||||
cursor: 0,
|
||||
}
|
||||
@@ -380,6 +386,43 @@ impl Workspace {
|
||||
self.active_mut().mark_saved();
|
||||
self.bump();
|
||||
}
|
||||
|
||||
/// Назначает вкладке иконку из каталога; возвращает `false`, если вкладки нет.
|
||||
pub fn set_tab_icon(&mut self, index: usize, icon: impl Into<String>) -> bool {
|
||||
let icon = icon.into();
|
||||
let changed = match self.documents.get_mut(index) {
|
||||
Some(document) => {
|
||||
let changed = document.icon.as_deref() != Some(icon.as_str());
|
||||
if changed {
|
||||
document.icon = Some(icon);
|
||||
}
|
||||
changed
|
||||
}
|
||||
None => return false,
|
||||
};
|
||||
if changed {
|
||||
self.bump();
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
/// Возвращает вкладке иконку по умолчанию; `false`, если вкладки нет.
|
||||
pub fn clear_tab_icon(&mut self, index: usize) -> bool {
|
||||
let changed = match self.documents.get_mut(index) {
|
||||
Some(document) => document.icon.take().is_some(),
|
||||
None => return false,
|
||||
};
|
||||
if changed {
|
||||
self.bump();
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
/// Имя иконки вкладки, если оно назначено.
|
||||
pub fn tab_icon(&self, index: usize) -> Option<&str> {
|
||||
self.document(index)
|
||||
.and_then(|document| document.icon.as_deref())
|
||||
}
|
||||
}
|
||||
|
||||
const SAMPLE_RUST: &str = r#"//! Демонстрационный файл.
|
||||
|
||||
Reference in New Issue
Block a user