Skip to content

Commit 95cd4d9

Browse files
author
Tomer Vaknin
committed
New Features and Improvements
1 parent a2116bf commit 95cd4d9

40 files changed

Lines changed: 6088 additions & 1516 deletions
Lines changed: 244 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
# SFTP Browser UI Polish Plan
2+
3+
**Date:** 2026-01-10
4+
**Status:** Completed
5+
**Priority:** Medium (Quality of Life)
6+
7+
## Overview
8+
9+
Modernize the SFTP browser dialog to feel more polished and aligned with contemporary design standards while maintaining functionality.
10+
11+
---
12+
13+
## Phase 1: Toolbar Refinement ✅
14+
15+
### 1.1 Connection Status Indicator
16+
- [x] Replace bright green "Connected" pill badge with subtle indicator
17+
- [x] Add small green dot icon next to hostname when connected
18+
- [x] Show red dot or disconnected icon when not connected
19+
- [ ] Consider adding connection latency indicator (optional)
20+
21+
**Files modified:**
22+
- `src/SshManager.App/Views/Controls/SftpBrowserControl.xaml`
23+
24+
### 1.2 Button Grouping & Styling
25+
- [x] Group related actions with visual separators:
26+
- Navigation group: Refresh
27+
- Transfer group: Upload, Download
28+
- File operations group: New Folder, Delete, Permissions
29+
- Connection group: Disconnect
30+
- [x] Icon-only buttons with tooltips for all actions
31+
- [x] Reduce button padding for more compact toolbar
32+
- [x] Added keyboard shortcuts (Ctrl+U Upload, Ctrl+D Download)
33+
34+
### 1.3 Transfer Queue Badge
35+
- [x] Add badge/indicator showing active transfer count
36+
- [x] Position near Download button in transfer group
37+
38+
---
39+
40+
## Phase 2: Panel Headers & Navigation ✅
41+
42+
### 2.1 Panel Labels
43+
- [x] Restyle "Local" and "Remote" headers
44+
- [x] Options:
45+
- Tab-style headers with subtle background
46+
- Icon + label combination (Desktop icon for Local, Cloud icon for Remote)
47+
- Smaller, muted typography with accent underline
48+
49+
**Files modified:**
50+
- `src/SshManager.App/Views/Controls/LocalFileBrowserControl.xaml`
51+
- `src/SshManager.App/Views/Controls/RemoteFileBrowserControl.xaml`
52+
53+
### 2.2 Breadcrumb Navigation
54+
- [x] Unify styling between Local and Remote panels
55+
- [x] Add hover states to path segments
56+
- [x] Use chevron separators (ChevronRight20 icon)
57+
- [x] Add path copy button (clipboard icon)
58+
59+
**Files modified:**
60+
- `src/SshManager.App/Views/Controls/LocalFileBrowserControl.xaml`
61+
- `src/SshManager.App/Views/Controls/RemoteFileBrowserControl.xaml`
62+
- `src/SshManager.App/Views/Controls/FileBrowserControlBase.cs`
63+
64+
### 2.3 Quick Access Buttons
65+
- [x] **Local drives (C:\, D:\, etc.):**
66+
- Styled as chip buttons with background
67+
- HardDrive20 icon with accent color
68+
- Tooltip shows drive label and free/total space in GB
69+
- [x] **Remote shortcuts (Home, Root, /tmp, etc.):**
70+
- Matching styling with local drives
71+
- Home24 icon for Home, Folder24 for other paths
72+
- Tooltip shows full path
73+
74+
**Files modified:**
75+
- `src/SshManager.App/Views/Controls/LocalFileBrowserControl.xaml`
76+
- `src/SshManager.App/Views/Controls/RemoteFileBrowserControl.xaml`
77+
- `src/SshManager.App/Converters/BytesToGigabytesConverter.cs` (new)
78+
79+
---
80+
81+
## Phase 3: File List Improvements ✅
82+
83+
### 3.1 Visual Enhancements
84+
- [x] Add subtle row hover highlight (use theme's subtle background)
85+
- [x] Improve selected row styling with accent color
86+
- [x] Add focus indicators for keyboard navigation
87+
88+
### 3.2 File Icons
89+
- [x] Add file type icons based on extension
90+
- [x] Common types: folder, document, image, code, archive, executable
91+
- [x] Use WPF-UI's `SymbolIcon` for consistency
92+
93+
### 3.3 Column Formatting
94+
- [x] **Size column:**
95+
- Consistent formatting (always KB/MB/GB with 1 decimal)
96+
- Right-align for easier scanning
97+
- Show "-" for folders instead of empty
98+
- [x] **Date column:**
99+
- Friendlier format: "Today 14:30", "Yesterday", "Mon 09:15", "Jan 10", "Jan 10, 2026"
100+
- Show full timestamp on hover tooltip
101+
- [x] **Permissions column (Remote):**
102+
- Symbolic display (rwxr-xr-x) with tooltip for octal
103+
- Monospace font for better alignment
104+
105+
### 3.4 Column Headers
106+
- [x] Add sort indicators (arrow icons)
107+
- [x] Highlight active sort column
108+
- [x] Click-to-sort functionality (toggle ascending/descending)
109+
- [ ] Persist sort preference (deferred to future phase)
110+
111+
**Files modified:**
112+
- `src/SshManager.App/Views/Controls/LocalFileBrowserControl.xaml`
113+
- `src/SshManager.App/Views/Controls/RemoteFileBrowserControl.xaml`
114+
- `src/SshManager.App/ViewModels/FileItemViewModel.cs`
115+
- `src/SshManager.App/ViewModels/FileBrowserViewModelBase.cs`
116+
- `src/SshManager.App/ViewModels/IFileBrowserViewModel.cs`
117+
- `src/SshManager.App/Converters/SortIndicatorConverter.cs` (new)
118+
119+
---
120+
121+
## Phase 4: General Polish ✅
122+
123+
### 4.1 Panel Divider
124+
- [x] Reduce border/divider weight between panels (already minimal)
125+
- [x] Consider draggable splitter for resizing panels (GridSplitter already exists)
126+
- [x] Add collapse button to hide one panel temporarily
127+
128+
**Files modified:**
129+
- `src/SshManager.App/Views/Controls/SftpBrowserControl.xaml`
130+
- `src/SshManager.App/ViewModels/SftpBrowserViewModel.cs`
131+
- `src/SshManager.App/Converters/CollapsedWidthConverter.cs` (new)
132+
133+
### 4.2 Drag & Drop Feedback
134+
- [x] Highlight valid drop zones when dragging
135+
- [x] Show transfer direction indicator (→ or ←)
136+
- [x] Ghost preview of dragged items
137+
- [x] Invalid drop zone feedback (red highlight or cursor)
138+
139+
**Files modified:**
140+
- `src/SshManager.App/Behaviors/FileDragAdorner.cs` (new)
141+
- `src/SshManager.App/Views/Controls/FileBrowserControlBase.cs`
142+
- `src/SshManager.App/Views/Controls/LocalFileBrowserControl.xaml`
143+
- `src/SshManager.App/Views/Controls/RemoteFileBrowserControl.xaml`
144+
145+
### 4.3 Transfer Progress Area
146+
- [x] Reserve space at bottom of dialog for transfers (already implemented)
147+
- [x] Show:
148+
- Current file being transferred
149+
- Progress bar with percentage
150+
- Transfer speed
151+
- Time remaining estimate
152+
- [x] Expandable to show transfer queue (already implemented)
153+
- [x] Minimize when no transfers active (already implemented)
154+
155+
### 4.4 Keyboard Shortcuts
156+
- [x] Add keyboard shortcuts for common actions (already implemented)
157+
- [x] F5 = Refresh
158+
- [x] Ctrl+U = Upload
159+
- [x] Ctrl+D = Download
160+
- [x] Del = Delete
161+
- [x] F2 = Rename
162+
- [x] Show shortcuts in button tooltips
163+
164+
**Files modified:**
165+
- `src/SshManager.App/Views/Controls/SftpBrowserControl.xaml`
166+
- `src/SshManager.App/Views/Controls/LocalFileBrowserControl.xaml`
167+
- `src/SshManager.App/Views/Controls/RemoteFileBrowserControl.xaml`
168+
169+
---
170+
171+
## Phase 5: Optional Enhancements ✅
172+
173+
### 5.1 Context Menu
174+
- [x] Right-click context menu with common actions
175+
- [x] Match styling with WPF-UI menus
176+
177+
**Files modified:**
178+
- `src/SshManager.App/Views/Controls/LocalFileBrowserControl.xaml`
179+
- `src/SshManager.App/Views/Controls/RemoteFileBrowserControl.xaml`
180+
181+
### 5.2 Search/Filter
182+
- [x] Add filter box to quickly find files by name
183+
- [x] Real-time filtering as user types
184+
185+
**Files modified:**
186+
- `src/SshManager.App/Views/Controls/LocalFileBrowserControl.xaml`
187+
- `src/SshManager.App/Views/Controls/RemoteFileBrowserControl.xaml`
188+
- `src/SshManager.App/ViewModels/FileBrowserViewModelBase.cs`
189+
- `src/SshManager.App/ViewModels/IFileBrowserViewModel.cs`
190+
191+
### 5.3 Favorites/Bookmarks
192+
- [x] Allow bookmarking frequently accessed remote paths
193+
- [x] Quick access dropdown
194+
195+
**Files modified:**
196+
- `src/SshManager.App/Views/Controls/RemoteFileBrowserControl.xaml`
197+
- `src/SshManager.App/ViewModels/RemoteFileBrowserViewModel.cs`
198+
- `src/SshManager.Core/Models/AppSettings.cs`
199+
200+
### 5.4 Dual-Pane Sync
201+
- [x] Option to sync navigation between panels
202+
- [x] "Mirror navigation" toggle
203+
204+
**Files modified:**
205+
- `src/SshManager.App/Views/Controls/SftpBrowserControl.xaml`
206+
- `src/SshManager.App/ViewModels/SftpBrowserViewModel.cs`
207+
- `src/SshManager.Core/Models/AppSettings.cs`
208+
209+
---
210+
211+
## Implementation Notes
212+
213+
### WPF-UI Components to Use
214+
- `ui:CardAction` - for grouped buttons
215+
- `ui:SymbolIcon` - for file type icons
216+
- `ui:Badge` - for transfer count indicator
217+
- `ui:InfoBadge` - for status indicators
218+
- `ui:TextBox` with icon - for filter/search
219+
220+
### Color Tokens (from theme)
221+
- Hover: `ControlFillColorSecondary`
222+
- Selected: `AccentFillColorDefaultBrush`
223+
- Subtle text: `TextFillColorSecondaryBrush`
224+
- Borders: `ControlStrokeColorDefaultBrush`
225+
226+
### Files Likely to Modify
227+
```
228+
src/SshManager.App/Views/Dialogs/SftpBrowserDialog.xaml
229+
src/SshManager.App/Views/Dialogs/SftpBrowserDialog.xaml.cs
230+
src/SshManager.App/ViewModels/SftpBrowserViewModel.cs
231+
src/SshManager.App/Converters/ (new converters as needed)
232+
src/SshManager.App/Resources/ (icons if custom needed)
233+
```
234+
235+
---
236+
237+
## Success Criteria
238+
239+
- [x] Toolbar feels organized and less cluttered
240+
- [x] Connection status is clear but not visually loud
241+
- [x] File lists are easy to scan and navigate
242+
- [x] Drag & drop provides clear visual feedback
243+
- [x] Transfer progress is visible without being intrusive
244+
- [x] Overall dialog feels modern and consistent with main app

src/SshManager.App/App.xaml.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,12 @@ private static async Task ApplySchemaMigrationsAsync(AppDbContext db, Serilog.IL
491491
["MinimumPaneSize"] = ("INTEGER", "100"),
492492
// Terminal theme settings
493493
["TerminalThemeId"] = ("TEXT", "'default'"),
494+
// Performance settings
495+
["EnableHostListAnimations"] = ("INTEGER", "1"),
496+
["TerminalBufferInMemoryLines"] = ("INTEGER", "5000"),
497+
// SFTP browser settings
498+
["SftpFavorites"] = ("TEXT", "''"),
499+
["SftpMirrorNavigation"] = ("INTEGER", "0"),
494500
};
495501

496502
foreach (var (columnName, (type, defaultValue)) in migrations)

0 commit comments

Comments
 (0)