231 lines
5.4 KiB
Rust
231 lines
5.4 KiB
Rust
pub use gpui2::{
|
|
div, Element, ElementId, Component, ParentElement, SharedString, StatefulInteractive,
|
|
StatelessInteractive, Styled, ViewContext, WindowContext,
|
|
};
|
|
|
|
pub use crate::elevation::*;
|
|
use crate::settings::user_settings;
|
|
pub use crate::{old_theme, theme, ButtonVariant, ElementExt, Theme};
|
|
|
|
use gpui2::{rems, Hsla, Rems};
|
|
use strum::EnumIter;
|
|
|
|
pub fn ui_size(cx: &mut WindowContext, size: f32) -> Rems {
|
|
const UI_SCALE_RATIO: f32 = 0.875;
|
|
|
|
let settings = user_settings(cx);
|
|
|
|
rems(*settings.ui_scale * UI_SCALE_RATIO * size)
|
|
}
|
|
|
|
#[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)]
|
|
pub enum FileSystemStatus {
|
|
#[default]
|
|
None,
|
|
Conflict,
|
|
Deleted,
|
|
}
|
|
|
|
impl std::fmt::Display for FileSystemStatus {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
write!(
|
|
f,
|
|
"{}",
|
|
match self {
|
|
Self::None => "None",
|
|
Self::Conflict => "Conflict",
|
|
Self::Deleted => "Deleted",
|
|
}
|
|
)
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)]
|
|
pub enum GitStatus {
|
|
#[default]
|
|
None,
|
|
Created,
|
|
Modified,
|
|
Deleted,
|
|
Conflict,
|
|
Renamed,
|
|
}
|
|
|
|
impl GitStatus {
|
|
pub fn hsla(&self, cx: &WindowContext) -> Hsla {
|
|
let theme = theme(cx);
|
|
|
|
match self {
|
|
Self::None => theme.transparent,
|
|
Self::Created => theme.git_created,
|
|
Self::Modified => theme.git_modified,
|
|
Self::Deleted => theme.git_deleted,
|
|
Self::Conflict => theme.git_conflict,
|
|
Self::Renamed => theme.git_renamed,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl std::fmt::Display for GitStatus {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
write!(
|
|
f,
|
|
"{}",
|
|
match self {
|
|
Self::None => "None",
|
|
Self::Created => "Created",
|
|
Self::Modified => "Modified",
|
|
Self::Deleted => "Deleted",
|
|
Self::Conflict => "Conflict",
|
|
Self::Renamed => "Renamed",
|
|
}
|
|
)
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)]
|
|
pub enum DiagnosticStatus {
|
|
#[default]
|
|
None,
|
|
Error,
|
|
Warning,
|
|
Info,
|
|
}
|
|
|
|
#[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)]
|
|
pub enum IconSide {
|
|
#[default]
|
|
Left,
|
|
Right,
|
|
}
|
|
|
|
#[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)]
|
|
pub enum OrderMethod {
|
|
#[default]
|
|
Ascending,
|
|
Descending,
|
|
MostRecent,
|
|
}
|
|
|
|
#[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)]
|
|
pub enum Shape {
|
|
#[default]
|
|
Circle,
|
|
RoundedRectangle,
|
|
}
|
|
|
|
#[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)]
|
|
pub enum DisclosureControlVisibility {
|
|
#[default]
|
|
OnHover,
|
|
Always,
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)]
|
|
pub enum DisclosureControlStyle {
|
|
/// Shows the disclosure control only when hovered where possible.
|
|
///
|
|
/// More compact, but not available everywhere.
|
|
ChevronOnHover,
|
|
/// Shows an icon where possible, otherwise shows a chevron.
|
|
///
|
|
/// For example, in a file tree a folder or file icon is shown
|
|
/// instead of a chevron
|
|
Icon,
|
|
/// Always shows a chevron.
|
|
Chevron,
|
|
/// Completely hides the disclosure control where possible.
|
|
None,
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Eq, Clone, Copy, EnumIter)]
|
|
pub enum OverflowStyle {
|
|
Hidden,
|
|
Wrap,
|
|
}
|
|
|
|
#[derive(Default, PartialEq, Copy, Clone, EnumIter, strum::Display)]
|
|
pub enum InteractionState {
|
|
#[default]
|
|
Enabled,
|
|
Hovered,
|
|
Active,
|
|
Focused,
|
|
Disabled,
|
|
}
|
|
|
|
impl InteractionState {
|
|
pub fn if_enabled(&self, enabled: bool) -> Self {
|
|
if enabled {
|
|
*self
|
|
} else {
|
|
InteractionState::Disabled
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Default, PartialEq)]
|
|
pub enum SelectedState {
|
|
#[default]
|
|
Unselected,
|
|
PartiallySelected,
|
|
Selected,
|
|
}
|
|
|
|
#[derive(Default, Debug, Copy, Clone, PartialEq, Eq)]
|
|
pub enum Toggleable {
|
|
Toggleable(ToggleState),
|
|
#[default]
|
|
NotToggleable,
|
|
}
|
|
|
|
impl Toggleable {
|
|
pub fn is_toggled(&self) -> bool {
|
|
match self {
|
|
Self::Toggleable(ToggleState::Toggled) => true,
|
|
_ => false,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<ToggleState> for Toggleable {
|
|
fn from(state: ToggleState) -> Self {
|
|
Self::Toggleable(state)
|
|
}
|
|
}
|
|
|
|
#[derive(Default, Debug, Copy, Clone, PartialEq, Eq)]
|
|
pub enum ToggleState {
|
|
/// The "on" state of a toggleable element.
|
|
///
|
|
/// Example:
|
|
/// - A collasable list that is currently expanded
|
|
/// - A toggle button that is currently on.
|
|
Toggled,
|
|
/// The "off" state of a toggleable element.
|
|
///
|
|
/// Example:
|
|
/// - A collasable list that is currently collapsed
|
|
/// - A toggle button that is currently off.
|
|
#[default]
|
|
NotToggled,
|
|
}
|
|
|
|
impl From<Toggleable> for ToggleState {
|
|
fn from(toggleable: Toggleable) -> Self {
|
|
match toggleable {
|
|
Toggleable::Toggleable(state) => state,
|
|
Toggleable::NotToggleable => ToggleState::NotToggled,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<bool> for ToggleState {
|
|
fn from(toggled: bool) -> Self {
|
|
if toggled {
|
|
ToggleState::Toggled
|
|
} else {
|
|
ToggleState::NotToggled
|
|
}
|
|
}
|
|
}
|