Fix history expander button functionality - set both min and max content heights
This commit is contained in:
parent
deb48e4c85
commit
897b5c07ba
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<!-- Summary (always visible) -->
|
<!-- Summary (always visible) -->
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkBox" id="summary_box">
|
||||||
<property name="orientation">horizontal</property>
|
<property name="orientation">horizontal</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<property name="margin-start">12</property>
|
<property name="margin-start">12</property>
|
||||||
@ -61,6 +61,13 @@
|
|||||||
</style>
|
</style>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
|
<!-- Click gesture for toggling expansion (only on summary) -->
|
||||||
|
<child>
|
||||||
|
<object class="GtkGestureClick" id="click_gesture">
|
||||||
|
<signal name="released" handler="on_clicked" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
@ -104,15 +111,63 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
|
<!-- Request Body (scrollable, initially collapsed) -->
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="request_body_label">
|
<object class="GtkScrolledWindow" id="request_body_scroll">
|
||||||
<property name="label">Body...</property>
|
<property name="margin-top">6</property>
|
||||||
<property name="xalign">0</property>
|
<property name="min-content-height">60</property>
|
||||||
<property name="selectable">True</property>
|
<property name="max-content-height">60</property>
|
||||||
<property name="wrap">True</property>
|
<property name="propagate-natural-height">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTextView" id="request_body_text">
|
||||||
|
<property name="editable">False</property>
|
||||||
|
<property name="monospace">True</property>
|
||||||
|
<property name="left-margin">6</property>
|
||||||
|
<property name="right-margin">6</property>
|
||||||
|
<property name="top-margin">6</property>
|
||||||
|
<property name="bottom-margin">6</property>
|
||||||
<property name="wrap-mode">word-char</property>
|
<property name="wrap-mode">word-char</property>
|
||||||
<style>
|
<style>
|
||||||
<class name="monospace"/>
|
<class name="view"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<!-- Request Expander Separator -->
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="request_expander">
|
||||||
|
<property name="halign">fill</property>
|
||||||
|
<property name="margin-top">3</property>
|
||||||
|
<signal name="clicked" handler="on_request_expander_clicked" swapped="no"/>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="orientation">horizontal</property>
|
||||||
|
<property name="spacing">6</property>
|
||||||
|
<property name="halign">center</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparator">
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="request_expander_label">
|
||||||
|
<property name="label">Show full request</property>
|
||||||
|
<style>
|
||||||
|
<class name="dim-label"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparator">
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<style>
|
||||||
|
<class name="flat"/>
|
||||||
</style>
|
</style>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@ -143,15 +198,63 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
|
<!-- Response Body (scrollable, initially collapsed) -->
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="response_body_label">
|
<object class="GtkScrolledWindow" id="response_body_scroll">
|
||||||
<property name="label">Body...</property>
|
<property name="margin-top">6</property>
|
||||||
<property name="xalign">0</property>
|
<property name="min-content-height">60</property>
|
||||||
<property name="selectable">True</property>
|
<property name="max-content-height">60</property>
|
||||||
<property name="wrap">True</property>
|
<property name="propagate-natural-height">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTextView" id="response_body_text">
|
||||||
|
<property name="editable">False</property>
|
||||||
|
<property name="monospace">True</property>
|
||||||
|
<property name="left-margin">6</property>
|
||||||
|
<property name="right-margin">6</property>
|
||||||
|
<property name="top-margin">6</property>
|
||||||
|
<property name="bottom-margin">6</property>
|
||||||
<property name="wrap-mode">word-char</property>
|
<property name="wrap-mode">word-char</property>
|
||||||
<style>
|
<style>
|
||||||
<class name="monospace"/>
|
<class name="view"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<!-- Response Expander Separator -->
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="response_expander">
|
||||||
|
<property name="halign">fill</property>
|
||||||
|
<property name="margin-top">3</property>
|
||||||
|
<signal name="clicked" handler="on_response_expander_clicked" swapped="no"/>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="orientation">horizontal</property>
|
||||||
|
<property name="spacing">6</property>
|
||||||
|
<property name="halign">center</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparator">
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="response_expander_label">
|
||||||
|
<property name="label">Show full response</property>
|
||||||
|
<style>
|
||||||
|
<class name="dim-label"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparator">
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<style>
|
||||||
|
<class name="flat"/>
|
||||||
</style>
|
</style>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@ -172,12 +275,5 @@
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
<!-- Click gesture for toggling expansion -->
|
|
||||||
<child>
|
|
||||||
<object class="GtkGestureClick" id="click_gesture">
|
|
||||||
<signal name="released" handler="on_clicked" swapped="no"/>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</template>
|
</template>
|
||||||
</interface>
|
</interface>
|
||||||
|
|||||||
@ -34,9 +34,15 @@ class HistoryItem(Gtk.Box):
|
|||||||
timestamp_label = Gtk.Template.Child()
|
timestamp_label = Gtk.Template.Child()
|
||||||
status_label = Gtk.Template.Child()
|
status_label = Gtk.Template.Child()
|
||||||
request_headers_label = Gtk.Template.Child()
|
request_headers_label = Gtk.Template.Child()
|
||||||
request_body_label = Gtk.Template.Child()
|
request_body_scroll = Gtk.Template.Child()
|
||||||
|
request_body_text = Gtk.Template.Child()
|
||||||
|
request_expander = Gtk.Template.Child()
|
||||||
|
request_expander_label = Gtk.Template.Child()
|
||||||
response_headers_label = Gtk.Template.Child()
|
response_headers_label = Gtk.Template.Child()
|
||||||
response_body_label = Gtk.Template.Child()
|
response_body_scroll = Gtk.Template.Child()
|
||||||
|
response_body_text = Gtk.Template.Child()
|
||||||
|
response_expander = Gtk.Template.Child()
|
||||||
|
response_expander_label = Gtk.Template.Child()
|
||||||
load_button = Gtk.Template.Child()
|
load_button = Gtk.Template.Child()
|
||||||
|
|
||||||
__gsignals__ = {
|
__gsignals__ = {
|
||||||
@ -47,6 +53,8 @@ class HistoryItem(Gtk.Box):
|
|||||||
super().__init__()
|
super().__init__()
|
||||||
self.entry = entry
|
self.entry = entry
|
||||||
self.expanded = False
|
self.expanded = False
|
||||||
|
self.request_expanded = False
|
||||||
|
self.response_expanded = False
|
||||||
self._populate_ui()
|
self._populate_ui()
|
||||||
|
|
||||||
def _populate_ui(self):
|
def _populate_ui(self):
|
||||||
@ -79,23 +87,34 @@ class HistoryItem(Gtk.Box):
|
|||||||
|
|
||||||
# Details - Request body
|
# Details - Request body
|
||||||
body_str = self.entry.request.body if self.entry.request.body else "(empty)"
|
body_str = self.entry.request.body if self.entry.request.body else "(empty)"
|
||||||
# Truncate long bodies
|
self.request_body_text.get_buffer().set_text(body_str)
|
||||||
if len(body_str) > 200:
|
|
||||||
body_str = body_str[:200] + "..."
|
# Count lines to determine if we need the expander
|
||||||
self.request_body_label.set_text(body_str)
|
num_lines = body_str.count('\n') + 1
|
||||||
|
# Show expander if content is longer than ~3 lines (60px)
|
||||||
|
needs_expander = num_lines > 3 or len(body_str) > 150
|
||||||
|
self.request_expander.set_visible(needs_expander)
|
||||||
|
|
||||||
# Details - Response
|
# Details - Response
|
||||||
if self.entry.response:
|
if self.entry.response:
|
||||||
self.response_headers_label.set_text(self.entry.response.headers)
|
self.response_headers_label.set_text(self.entry.response.headers)
|
||||||
|
|
||||||
response_body = self.entry.response.body if self.entry.response.body else "(empty)"
|
response_body = self.entry.response.body if self.entry.response.body else "(empty)"
|
||||||
# Truncate long bodies
|
self.response_body_text.get_buffer().set_text(response_body)
|
||||||
if len(response_body) > 200:
|
|
||||||
response_body = response_body[:200] + "..."
|
# Count lines to determine if we need the expander
|
||||||
self.response_body_label.set_text(response_body)
|
num_lines = response_body.count('\n') + 1
|
||||||
|
needs_expander = num_lines > 3 or len(response_body) > 150
|
||||||
|
self.response_expander.set_visible(needs_expander)
|
||||||
elif self.entry.error:
|
elif self.entry.error:
|
||||||
self.response_headers_label.set_text("(error)")
|
self.response_headers_label.set_text("(error)")
|
||||||
self.response_body_label.set_text(self.entry.error)
|
error_text = self.entry.error
|
||||||
|
self.response_body_text.get_buffer().set_text(error_text)
|
||||||
|
|
||||||
|
# Show expander for long errors
|
||||||
|
num_lines = error_text.count('\n') + 1
|
||||||
|
needs_expander = num_lines > 3 or len(error_text) > 150
|
||||||
|
self.response_expander.set_visible(needs_expander)
|
||||||
|
|
||||||
@Gtk.Template.Callback()
|
@Gtk.Template.Callback()
|
||||||
def on_clicked(self, gesture, n_press, x, y):
|
def on_clicked(self, gesture, n_press, x, y):
|
||||||
@ -107,6 +126,48 @@ class HistoryItem(Gtk.Box):
|
|||||||
"""Emit load signal when load button clicked."""
|
"""Emit load signal when load button clicked."""
|
||||||
self.emit('load-requested')
|
self.emit('load-requested')
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def on_request_expander_clicked(self, button):
|
||||||
|
"""Toggle request body expansion."""
|
||||||
|
print(f"DEBUG: Request expander clicked! Current state: {self.request_expanded}")
|
||||||
|
self.request_expanded = not self.request_expanded
|
||||||
|
|
||||||
|
if self.request_expanded:
|
||||||
|
# Expand to show full scrollable content
|
||||||
|
self.request_body_scroll.set_min_content_height(300)
|
||||||
|
self.request_body_scroll.set_max_content_height(300)
|
||||||
|
self.request_expander_label.set_text("Collapse request")
|
||||||
|
print("DEBUG: Expanded request to 300px")
|
||||||
|
else:
|
||||||
|
# Collapse to show only few lines
|
||||||
|
self.request_body_scroll.set_min_content_height(60)
|
||||||
|
self.request_body_scroll.set_max_content_height(60)
|
||||||
|
self.request_expander_label.set_text("Show full request")
|
||||||
|
print("DEBUG: Collapsed request to 60px")
|
||||||
|
|
||||||
|
return True # Consume the event
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def on_response_expander_clicked(self, button):
|
||||||
|
"""Toggle response body expansion."""
|
||||||
|
print(f"DEBUG: Response expander clicked! Current state: {self.response_expanded}")
|
||||||
|
self.response_expanded = not self.response_expanded
|
||||||
|
|
||||||
|
if self.response_expanded:
|
||||||
|
# Expand to show full scrollable content
|
||||||
|
self.response_body_scroll.set_min_content_height(300)
|
||||||
|
self.response_body_scroll.set_max_content_height(300)
|
||||||
|
self.response_expander_label.set_text("Collapse response")
|
||||||
|
print("DEBUG: Expanded response to 300px")
|
||||||
|
else:
|
||||||
|
# Collapse to show only few lines
|
||||||
|
self.response_body_scroll.set_min_content_height(60)
|
||||||
|
self.response_body_scroll.set_max_content_height(60)
|
||||||
|
self.response_expander_label.set_text("Show full response")
|
||||||
|
print("DEBUG: Collapsed response to 60px")
|
||||||
|
|
||||||
|
return True # Consume the event
|
||||||
|
|
||||||
def toggle_expanded(self):
|
def toggle_expanded(self):
|
||||||
"""Toggle between collapsed and expanded view."""
|
"""Toggle between collapsed and expanded view."""
|
||||||
self.expanded = not self.expanded
|
self.expanded = not self.expanded
|
||||||
|
|||||||
@ -417,6 +417,9 @@ class RosterWindow(Adw.ApplicationWindow):
|
|||||||
)
|
)
|
||||||
self.history_manager.add_entry(entry)
|
self.history_manager.add_entry(entry)
|
||||||
|
|
||||||
|
# Refresh history panel to show new entry
|
||||||
|
self._load_history()
|
||||||
|
|
||||||
self.http_client.execute_request_async(request, callback, None)
|
self.http_client.execute_request_async(request, callback, None)
|
||||||
|
|
||||||
# History and Project Management
|
# History and Project Management
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user