33 Commits

Author SHA1 Message Date
2c432a1a37 Add hamburger menu to sidebar header, move Add Project and Import buttons into it 2026-05-21 19:26:08 +02:00
28c06463cf Set minimum window width to 470px to prevent layout overflow 2026-05-21 00:04:18 +02:00
946e726859 Fix header bar clipping: separate window controls as rightmost end child, add min width 400px 2026-05-20 23:46:30 +02:00
b620016397 Replace GtkPaned sidebar with AdwOverlaySplitView for responsive layout 2026-05-20 23:10:05 +02:00
a6c389edd7 Improve sidebar layout: center Projects title, fix padding, add method chips
- Center "Projects" label in sidebar headerbar via title-widget property
- Fix asymmetric request list margins (margin-start 12→6, add margin-end 6)
- Replace dim method labels with colored chips (GET/POST/PUT/PATCH/DELETE)
2026-05-20 00:07:59 +02:00
728697711c Add .http file import support
Parse and import IntelliJ HTTP Client (.http/.rest) files into projects.
2026-05-19 23:37:29 +02:00
12c37db7a9 Fix window controls disappearing when moved to left side 2026-05-19 15:10:15 +02:00
45100d3d44 Merge import buttons into single popover menu, add PyYAML to Flatpak 2026-05-12 23:17:58 +02:00
fef8dec193 Add OpenAPI/Swagger import (2.0 + 3.x, JSON body templates) 2026-05-12 15:04:42 +02:00
cc6d812df2 Change WSDL import button icon to papyrus-vertical-symbolic 2026-05-12 13:22:41 +02:00
0827e3637a Add custom W-in-box icon for WSDL import sidebar button 2026-05-12 13:07:56 +02:00
da0f2e02f8 Add WSDL import: parse SOAP services and create requests from operations 2026-05-12 12:15:24 +02:00
05d6f0c15d Add cURL export functionality with custom icon and extensible architecture 2026-01-12 22:27:38 +01:00
5f8a3857ae Fix toast notifications by adding AdwToastOverlay 2026-01-05 11:14:31 +01:00
0287c20bd8 Adjust panel proportions: sidebar 15%, request/response 42.5% 2026-01-04 00:53:20 +01:00
973230976a Make result and history panels resizable with minimum size 2026-01-03 09:17:20 +01:00
7db4a399ba Replace send button text with play icon 2025-12-30 23:32:41 +01:00
0dffca5dc5 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
392b2e7494 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
313068df6c 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
5579cb4a55 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
02b22ac466 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
ee2d1bd391 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
50795dba0f 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
bd00998c81 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
717c22a722 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
d710b3c629 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
d6ec8cbeb2 Replace collapsible history panel with resizable vertical pane 2025-12-18 16:58:43 +01:00
fb99425150 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
0b54642420 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
a0e82b4c77 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
a5db86b127 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
b19af25569 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