Add split view panes
This commit is contained in:
@@ -38,7 +38,7 @@ pub use site_permission::{
|
||||
SitePermissionEntry, SitePermissionFeature,
|
||||
};
|
||||
pub use space::{ArchivePolicy, Space};
|
||||
pub use split::{SplitAxis, SplitLayout, SplitPane};
|
||||
pub use split::{MAX_SPLIT_PANES, SplitAxis, SplitLayout, SplitPane};
|
||||
pub use sync::{
|
||||
SyncConnectionState, SyncObjectKind, SyncObjectState, SyncObjectStatus, SyncStatus,
|
||||
};
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
use crate::{SplitId, TabId};
|
||||
|
||||
pub const MAX_SPLIT_PANES: usize = 4;
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||
pub enum SplitAxis {
|
||||
Horizontal,
|
||||
@@ -57,4 +59,29 @@ impl SplitLayout {
|
||||
pub fn panes(&self) -> &[SplitPane] {
|
||||
&self.panes
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn contains_tab(&self, tab_id: &TabId) -> bool {
|
||||
self.panes.iter().any(|pane| pane.tab_id() == tab_id)
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn pane_count(&self) -> usize {
|
||||
self.panes.len()
|
||||
}
|
||||
|
||||
pub fn add_pane(&mut self, pane: SplitPane) -> bool {
|
||||
if self.panes.len() >= MAX_SPLIT_PANES || self.contains_tab(pane.tab_id()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
self.panes.push(pane);
|
||||
true
|
||||
}
|
||||
|
||||
pub fn remove_tab(&mut self, tab_id: &TabId) -> bool {
|
||||
let original_len = self.panes.len();
|
||||
self.panes.retain(|pane| pane.tab_id() != tab_id);
|
||||
self.panes.len() != original_len
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,4 +114,12 @@ impl BrowserTab {
|
||||
pub fn split_id(&self) -> Option<&SplitId> {
|
||||
self.split_id.as_ref()
|
||||
}
|
||||
|
||||
pub fn set_split_id(&mut self, split_id: SplitId) {
|
||||
self.split_id = Some(split_id);
|
||||
}
|
||||
|
||||
pub fn clear_split_id(&mut self) {
|
||||
self.split_id = None;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user