pub struct GitKraft {Show 17 fields
pub tabs: Vec<RepoTab>,
pub active_tab: usize,
pub sidebar_expanded: bool,
pub sidebar_width: f32,
pub commit_log_width: f32,
pub staging_height: f32,
pub diff_file_list_width: f32,
pub ui_scale: f32,
pub dragging: Option<DragTarget>,
pub dragging_h: Option<DragTargetH>,
pub drag_start_x: f32,
pub drag_start_y: f32,
pub drag_initialized: bool,
pub drag_initialized_h: bool,
pub cursor_pos: Point,
pub current_theme_index: usize,
pub recent_repos: Vec<RepoHistoryEntry>,
}Expand description
Top-level application state for the GitKraft GUI.
Fields§
§tabs: Vec<RepoTab>All open repository tabs.
active_tab: usizeIndex of the currently active/visible tab.
Whether the left sidebar is expanded.
Width of the left sidebar in pixels.
commit_log_width: f32Width of the commit-log panel in pixels.
staging_height: f32Height of the staging area in pixels.
diff_file_list_width: f32Width of the diff file-list sidebar in pixels.
ui_scale: f32UI scale factor (1.0 = default). Adjusted with Ctrl+/Ctrl- keyboard shortcuts.
dragging: Option<DragTarget>Which vertical divider is being dragged (if any).
dragging_h: Option<DragTargetH>Which horizontal divider is being dragged (if any).
drag_start_x: f32Last known mouse X position during a drag (absolute window coords).
drag_start_y: f32Last known mouse Y position during a drag (absolute window coords).
drag_initialized: boolWhether the first move event has been received for the current vertical drag.
false right after PaneDragStart — the first PaneDragMove sets the
real start position instead of computing a bogus delta from 0.0.
drag_initialized_h: boolSame as drag_initialized but for horizontal drags.
cursor_pos: PointLast known cursor position in window coordinates. Updated on every mouse-move event so context menus open at the exact spot the user right-clicked.
current_theme_index: usizeIndex into gitkraft_core::THEME_NAMES for the currently active theme.
recent_repos: Vec<RepoHistoryEntry>Recently opened repositories (loaded from settings on startup).
Implementations§
Source§impl GitKraft
impl GitKraft
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a fresh application state with sensible defaults.
Loads persisted settings (theme, recent repos) from disk when available.
Always starts with one empty tab — use Self::new_with_session_paths to
restore the full multi-tab session.
Sourcepub fn new_with_session_paths() -> (Self, Vec<PathBuf>)
pub fn new_with_session_paths() -> (Self, Vec<PathBuf>)
Create state and also return the saved tab paths for startup restore.
Call this from main.rs instead of Self::new; it sets up loading tabs
for every path in the persisted session and returns those paths so the
caller can spawn parallel load_repo_at tasks.
Sourcepub fn open_tab_paths(&self) -> Vec<PathBuf>
pub fn open_tab_paths(&self) -> Vec<PathBuf>
Paths of all tabs where a repository has been fully loaded
(repo_info is populated). Used to persist the multi-tab session.
Sourcepub fn active_tab(&self) -> &RepoTab
pub fn active_tab(&self) -> &RepoTab
Get a reference to the currently active tab.
Sourcepub fn active_tab_mut(&mut self) -> &mut RepoTab
pub fn active_tab_mut(&mut self) -> &mut RepoTab
Get a mutable reference to the currently active tab.
Sourcepub fn repo_display_name(&self) -> &str
pub fn repo_display_name(&self) -> &str
Helper: the display name for the active tab’s repo.
Sourcepub fn colors(&self) -> ThemeColors
pub fn colors(&self) -> ThemeColors
Derive the full ThemeColors from the currently active core theme.
Call this at the top of view functions:
let c = state.colors();Sourcepub fn iced_theme(&self) -> Theme
pub fn iced_theme(&self) -> Theme
Return a custom iced::Theme whose Palette is derived from the
active core theme.
This is the key to making every built-in Iced widget (text inputs,
pick-lists, scrollbars, buttons without explicit .style(), etc.)
inherit the correct background, text, accent, success and danger
colours. Without this, Iced falls back to its generic Dark/Light
palette and the UI looks wrong for every non-default theme.
Sourcepub fn current_theme_name(&self) -> &'static str
pub fn current_theme_name(&self) -> &'static str
The display name of the currently active theme.
Sourcepub fn refresh_active_tab(&mut self) -> Task<Message>
pub fn refresh_active_tab(&mut self) -> Task<Message>
Refresh all data for the currently active tab’s repository.
Returns Task::none() if no repository is open in the active tab.
Sourcepub fn on_ok_refresh(
&mut self,
result: Result<(), String>,
ok_msg: &str,
err_prefix: &str,
) -> Task<Message>
pub fn on_ok_refresh( &mut self, result: Result<(), String>, ok_msg: &str, err_prefix: &str, ) -> Task<Message>
Handle a Result<(), String> from a git operation that should trigger
a full repository refresh on success.
Ok(())— clearsis_loading, setsstatus_message, refreshes.Err(e)— clearsis_loading, setserror_message, returnsTask::none().
Sourcepub fn current_layout(&self) -> LayoutSettings
pub fn current_layout(&self) -> LayoutSettings
Build a LayoutSettings snapshot from the current pane dimensions.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for GitKraft
impl RefUnwindSafe for GitKraft
impl Send for GitKraft
impl Sync for GitKraft
impl Unpin for GitKraft
impl UnsafeUnpin for GitKraft
impl UnwindSafe for GitKraft
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more