f 0.1.2

A lightweight dual-pane file manager with GUI built using iced, inspired by Total Commander.
use std::path::PathBuf;

use crate::i18n::Language;
use crate::model::{Side, SortColumn};
use crate::types::{FileHashes, FsResult};
use f::Entry;
use iced::keyboard::{Key, Modifiers};

#[derive(Debug, Clone)]
pub enum Message {
    PanelLoaded {
        side: Side,
        path: PathBuf,
        entries: Vec<Entry>,
    },
    PanelLoadFailed {
        side: Side,
        path: PathBuf,
        error: String,
    },
    SearchChanged(Side, String),
    PathChanged(Side, String),
    PathSubmitted(Side),
    SelectEntry(Side, usize),
    SelectParent(Side),
    ToggleSort(Side, SortColumn),
    Refresh(Side),
    RefreshAll,
    NavigateUp(Side),
    Copy(Side),
    Move(Side),
    Delete(Side),
    NewFolderNameChanged(Side, String),
    CreateFolder(Side),
    QuickCreateFolder(Side),
    OperationFinished {
        kind: OperationKind,
        result: FsResult<()>,
    },
    StartRename(Side),
    RenameInputChanged(Side, String),
    SubmitRename(Side),
    CancelRename(Side),
    ViewFile(Side),
    ViewerLoaded {
        path: PathBuf,
        result: FsResult<String>,
    },
    CloseViewer,
    EditFile(Side),
    Compress(Side),
    SwapPanels,
    FocusPanel(Side),
    ComputeHashes(Side),
    HashesComputed {
        side: Side,
        path: PathBuf,
        result: FsResult<FileHashes>,
    },
    ToggleTheme,
    ToggleConfigPanel,
    ToggleAboutPanel,
    IncreaseFontSize,
    DecreaseFontSize,
    MoveSelection {
        side: Side,
        delta: i32,
    },
    LanguageSelected(Language),
    RegistrationCodeChanged(String),
    ApplyRegistration,
    ClearRegistration,
    KeyboardShortcut {
        key: Key,
        modifiers: Modifiers,
    },
}

#[derive(Debug, Clone)]
pub enum OperationKind {
    Copy { from: Side, to: Side },
    Move { from: Side, to: Side },
    Delete { side: Side },
    CreateFolder { side: Side },
    Rename { side: Side },
    Compress { side: Side, dest: PathBuf },
}