20 Commits

Author SHA1 Message Date
vesp
1c124939b6 Fix toast notifications by adding AdwToastOverlay 2026-01-05 11:14:31 +01:00
vesp
81e0aab111 Adjust panel proportions: sidebar 15%, request/response 42.5% 2026-01-04 00:53:20 +01:00
vesp
b38c1e77c7 Make result and history panels resizable with minimum size 2026-01-03 09:17:20 +01:00
vesp
5f01c1c49d Replace send button text with play icon 2025-12-30 23:32:41 +01:00
vesp
deb48e4c85 Refactor to use AdwToolbarView like Epiphany
- Replace manual GtkBox layout with AdwToolbarView
- Add AdwHeaderBar and AdwTabBar as separate top bars
- Remove all custom CSS for header bar height matching
- AdwToolbarView automatically ensures consistent bar styling

This follows the proper libadwaita pattern used by GNOME Web.
2025-12-24 03:55:13 +01:00
vesp
9f05701df8 Add style classes to distinguish header bars
- Add "sidebar-header" and "main-header" style classes
- Target each header bar specifically in CSS
- Make tab bar ultra-compact to fit within header height
- Reduce tab padding and remove all internal margins
2025-12-24 03:48:50 +01:00
vesp
67a374899b Fix header bar height matching properly
- Revert show-title=False on main header (was hiding tabs)
- Use CSS to force both header bars to exact same height (46px)
- Remove vertical padding from header bars
- Keep tab bar compact to fit within fixed height
2025-12-24 03:40:45 +01:00
vesp
054d2418b0 Fix header bar heights to match exactly
Add show-title=False to main header bar to match sidebar
header configuration and ensure both have the same height.
2025-12-24 03:35:48 +01:00
vesp
d50622700e Fix all reported issues from testing
1. Modified indicator (*) now shows:
   - Added GObject signal 'modified-changed' to RequestTabWidget
   - Connect to signal in window.py to update tab page indicator
   - Indicator shows dot-symbolic icon when modified

2. History panel now visible and populated:
   - Restored history panel in main-window.ui with vertical paned layout
   - Added _load_history() call back to __init__
   - History entries now display in bottom panel

3. Saving requests now works:
   - Fixed on_save_request_clicked to get request from widget.get_request()
   - Removed dependency on obsolete _build_request_from_ui method

4. Loading saved requests fixed:
   - Updated _on_load_request to properly update widget and tab page
   - Correctly sets widget.original_request and widget.modified
   - Updates tab page title when loading into empty tab
   - Properly handles copy vs. linked request logic

All issues from user testing are now resolved!
2025-12-24 02:20:55 +01:00
vesp
6f32a61799 Add RequestTabWidget class and simplify main UI
- Create RequestTabWidget class with complete per-tab UI
- Simplify main-window.ui to just AdwTabBar and AdwTabView
- Set autohide=False to always show tabs
- Add request_tab_widget.py to meson.build

Next step: Refactor window.py to create RequestTabWidget instances for each tab.
2025-12-24 01:51:15 +01:00
vesp
2c4e70fa23 WIP: Initial AdwTabBar/AdwTabView implementation
This is a work-in-progress implementation of AdwTabBar/AdwTabView.
Current issues:
- Tab bar height is too large
- Large gap on left side of header
- Architecture needs refactoring: AdwTabView should contain per-tab UI widgets

Next step: Properly refactor so each tab has its own complete UI widget tree.
2025-12-24 01:47:45 +01:00
vesp
98e097a7c1 Maximize header space and enable tab scrolling
Remove application title from main header bar and wrap tabs in scrollable container. This prevents window resizing when many tabs are open and follows modern GNOME app patterns.
2025-12-23 12:36:59 +01:00
vesp
16a1e0e7ca Add Tabbed interface
- Add New Request Button
   - Implement Tab Management System
   - Opening saved requests from sidebar creates new tabs
   - Response Tracking
2025-12-20 18:56:11 +01:00
vesp
8e8b1321f0 Add independent resizable sidebar panel with separate header bar
Restructure the UI to use GtkPaned instead of nested panes, giving the sidebar its own independent header bar aligned horizontally with the main content header. The sidebar is now clearly resizable with a draggable divider and has window control buttons disabled to avoid duplicate close buttons.
2025-12-20 02:39:52 +01:00
vesp
f2b35b79d6 Replace collapsible history panel with resizable vertical pane 2025-12-18 16:58:43 +01:00
vesp
df100319f4 Remove foldable sidebar functionality
Simplify left sidebar by removing fold/unfold functionality while
keeping all project icon selection features:
- Remove GtkStack-based sidebar switching
- Remove fold/unfold buttons
- Delete SlimProjectItem widget
- Keep IconPickerDialog and project icons
- Keep Edit Project dialog with icon selection

The sidebar is now a static pane that cannot be folded or hidden.
2025-12-18 16:19:30 +01:00
vesp
6418aa0695 Add foldable sidebar with custom project icons
Implement a collapsible sidebar that can be folded to show just project
icons in a slim strip, or expanded to show full project details. Projects
can now have custom icons selected from a 6x6 grid of 36 symbolic icons.

Features:
- Foldable sidebar with toggle button (fold/unfold)
- Slim sidebar view showing only project icons when folded
- Custom project icons with 36 symbolic icon choices
- Icon picker dialog with 6x6 grid layout
- Edit Project dialog (renamed from Rename) with name and icon selection
- Project icons displayed in both full and slim sidebar views
- Smooth transitions between folded/unfolded states
- Click on slim project icon to unfold sidebar

Technical changes:
- Add icon field to Project model with default "folder-symbolic"
- Create constants.py with PROJECT_ICONS list (36 symbolic icons)
- Implement IconPickerDialog with grid layout and selection
- Create SlimProjectItem widget for folded sidebar view
- Update ProjectManager.update_project() to handle icon changes
- Restructure sidebar using GtkStack for full/slim view switching
- Update project-item.ui to display project icon
- Change "Rename" menu to "Edit Project" with icon picker
- Add fold/unfold buttons with sidebar-show icons
- Update build system with new files and resources
2025-12-18 15:37:29 +01:00
vesp
a73b838c7f Add left sidebar for managing saved requests in projects
Implement a 3-column layout with a collapsible sidebar for organizing
and managing HTTP requests within projects. Requests are stored in
~/.roster/requests.json for easy git versioning.

Features:
- Create, rename, and delete projects
- Save current request to a project with custom name
- Load saved requests with direct click (no confirmation dialog)
- Delete saved requests with confirmation
- Expandable/collapsible project folders
- Context menu for project actions

Technical changes:
- Add SavedRequest and Project data models with JSON serialization
- Implement ProjectManager for persistence to ~/.roster/requests.json
- Create RequestItem and ProjectItem widgets with GTK templates
- Restructure main window UI to nested GtkPaned (3-column layout)
- Add project management dialogs using AdwAlertDialog
- Update build system with new source files and UI resources
2025-12-18 15:16:21 +01:00
vesp
2943298a6e Make Request and Response sections equal width
Replaces AdwOverlaySplitView with GtkPaned to allow both sections to have equal width by default. The divider automatically centers at 50/50 split when the window is first shown, while still allowing users to adjust it as needed.
2025-12-18 12:38:07 +01:00
vesp
95d5197e26 Initial commit: Roster HTTP client for GNOME
Roster is a modern HTTP client application for GNOME, similar to Postman,
built with GTK 4 and libadwaita.

Features:
- Send HTTP requests (GET, POST, PUT, DELETE)
- Configure custom headers with add/remove functionality
- Request body editor for POST/PUT/DELETE requests
- View response headers and bodies in separate tabs
- Track request history with JSON persistence
- Load previous requests from history with confirmation dialog
- Beautiful GNOME-native UI with libadwaita components
- HTTPie backend for reliable HTTP communication

Technical implementation:
- Python 3 with GTK 4 and libadwaita 1
- Meson build system with Flatpak support
- Custom widgets (HeaderRow, HistoryItem) with GObject signals
- Background threading for non-blocking HTTP requests
- AdwTabView for modern tabbed interface
- History persistence to ~/.config/roster/history.json
- Comprehensive error handling and user feedback
2025-12-18 11:05:33 +01:00