From cacd09fafc19b323c46c4c565d0044593b677e17 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 29 Mar 2015 17:40:43 +1300 Subject: console: add a tabs widget, and use it for flowview. --- libmproxy/console/tabs.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 libmproxy/console/tabs.py (limited to 'libmproxy/console/tabs.py') diff --git a/libmproxy/console/tabs.py b/libmproxy/console/tabs.py new file mode 100644 index 00000000..3245f430 --- /dev/null +++ b/libmproxy/console/tabs.py @@ -0,0 +1,35 @@ +import urwid + +class Tabs(urwid.WidgetWrap): + def __init__(self, tabs, tab_offset=0): + urwid.WidgetWrap.__init__(self, "") + self.tab_offset = tab_offset + self.tabs = tabs + self.show() + + def _tab(self, content, attr): + p = urwid.Text(content) + p = urwid.Padding(p, align="left", width=("relative", 100)) + p = urwid.AttrWrap(p, attr) + return p + + def keypress(self, size, key): + if key == "tab": + self.tab_offset = (self.tab_offset + 1)%(len(self.tabs)) + self.show() + else: + return key + + def show(self): + headers = [] + for i in range(len(self.tabs)): + txt = self.tabs[i][0]() + if i == self.tab_offset: + headers.append(self._tab(txt, "heading")) + else: + headers.append(self._tab(txt, "heading_inactive")) + headers = urwid.Columns(headers) + self._w = urwid.Frame( + body = self.tabs[self.tab_offset][1](), + header = headers + ) -- cgit v1.2.3 From 8f5cf833d08aba685263554d0bd89f922cd6afae Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 29 Mar 2015 19:21:54 +1300 Subject: Add flow detail view as a tab in the flow view --- libmproxy/console/tabs.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'libmproxy/console/tabs.py') diff --git a/libmproxy/console/tabs.py b/libmproxy/console/tabs.py index 3245f430..b8943ad4 100644 --- a/libmproxy/console/tabs.py +++ b/libmproxy/console/tabs.py @@ -8,8 +8,8 @@ class Tabs(urwid.WidgetWrap): self.show() def _tab(self, content, attr): - p = urwid.Text(content) - p = urwid.Padding(p, align="left", width=("relative", 100)) + p = urwid.Text(content, align="center") + p = urwid.Padding(p, align="center", width=("relative", 100)) p = urwid.AttrWrap(p, attr) return p @@ -18,7 +18,7 @@ class Tabs(urwid.WidgetWrap): self.tab_offset = (self.tab_offset + 1)%(len(self.tabs)) self.show() else: - return key + return self._w.keypress(size, key) def show(self): headers = [] @@ -28,7 +28,7 @@ class Tabs(urwid.WidgetWrap): headers.append(self._tab(txt, "heading")) else: headers.append(self._tab(txt, "heading_inactive")) - headers = urwid.Columns(headers) + headers = urwid.Columns(headers, dividechars=1) self._w = urwid.Frame( body = self.tabs[self.tab_offset][1](), header = headers -- cgit v1.2.3 From 44fb42185f0e177b775c5e4f11249a55390048f6 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 31 Mar 2015 15:59:54 +1300 Subject: console: fix body scrolling --- libmproxy/console/tabs.py | 1 + 1 file changed, 1 insertion(+) (limited to 'libmproxy/console/tabs.py') diff --git a/libmproxy/console/tabs.py b/libmproxy/console/tabs.py index b8943ad4..bb188c28 100644 --- a/libmproxy/console/tabs.py +++ b/libmproxy/console/tabs.py @@ -33,3 +33,4 @@ class Tabs(urwid.WidgetWrap): body = self.tabs[self.tab_offset][1](), header = headers ) + self._w.set_focus("body") -- cgit v1.2.3 From 32ba6021b3c07efaa45a9223479151cd7e74ccbd Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Wed, 1 Apr 2015 09:25:50 +1300 Subject: console: improve handling of help contexts, fix key bindings in flow views --- libmproxy/console/tabs.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'libmproxy/console/tabs.py') diff --git a/libmproxy/console/tabs.py b/libmproxy/console/tabs.py index bb188c28..fff13890 100644 --- a/libmproxy/console/tabs.py +++ b/libmproxy/console/tabs.py @@ -17,8 +17,7 @@ class Tabs(urwid.WidgetWrap): if key == "tab": self.tab_offset = (self.tab_offset + 1)%(len(self.tabs)) self.show() - else: - return self._w.keypress(size, key) + return self._w.keypress(size, key) def show(self): headers = [] -- cgit v1.2.3 From c794d362f93df3a13ed5ac96dd6a04f766f8fbbc Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Wed, 1 Apr 2015 10:34:58 +1300 Subject: Next/previous tab keybindings --- libmproxy/console/tabs.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'libmproxy/console/tabs.py') diff --git a/libmproxy/console/tabs.py b/libmproxy/console/tabs.py index fff13890..2c46e59e 100644 --- a/libmproxy/console/tabs.py +++ b/libmproxy/console/tabs.py @@ -14,9 +14,12 @@ class Tabs(urwid.WidgetWrap): return p def keypress(self, size, key): - if key == "tab": + if key in ["tab", "l"]: self.tab_offset = (self.tab_offset + 1)%(len(self.tabs)) self.show() + elif key == "h": + self.tab_offset = (self.tab_offset - 1)%(len(self.tabs)) + self.show() return self._w.keypress(size, key) def show(self): -- cgit v1.2.3 From a05a70d8168a07c92b2a3ecbbb1958d85532efe3 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 30 May 2015 12:03:28 +1200 Subject: Add coding style check, reformat. --- libmproxy/console/tabs.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'libmproxy/console/tabs.py') diff --git a/libmproxy/console/tabs.py b/libmproxy/console/tabs.py index 2c46e59e..953f6b12 100644 --- a/libmproxy/console/tabs.py +++ b/libmproxy/console/tabs.py @@ -1,5 +1,6 @@ import urwid + class Tabs(urwid.WidgetWrap): def __init__(self, tabs, tab_offset=0): urwid.WidgetWrap.__init__(self, "") @@ -15,10 +16,10 @@ class Tabs(urwid.WidgetWrap): def keypress(self, size, key): if key in ["tab", "l"]: - self.tab_offset = (self.tab_offset + 1)%(len(self.tabs)) + self.tab_offset = (self.tab_offset + 1) % (len(self.tabs)) self.show() elif key == "h": - self.tab_offset = (self.tab_offset - 1)%(len(self.tabs)) + self.tab_offset = (self.tab_offset - 1) % (len(self.tabs)) self.show() return self._w.keypress(size, key) -- cgit v1.2.3 From 57a61ae8fd420744d616765d13ad93dec3b3aa52 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 2 Jun 2015 12:09:07 +1200 Subject: console: convert add_event to a signal. --- libmproxy/console/tabs.py | 1 + 1 file changed, 1 insertion(+) (limited to 'libmproxy/console/tabs.py') diff --git a/libmproxy/console/tabs.py b/libmproxy/console/tabs.py index 953f6b12..6e7d4d99 100644 --- a/libmproxy/console/tabs.py +++ b/libmproxy/console/tabs.py @@ -1,4 +1,5 @@ import urwid +import signals class Tabs(urwid.WidgetWrap): -- cgit v1.2.3 From 0b8cddddf5beb509aab5d03eafd61e21ae323f9e Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 2 Jun 2015 15:25:58 +1200 Subject: console: click-enable tabs --- libmproxy/console/tabs.py | 51 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 11 deletions(-) (limited to 'libmproxy/console/tabs.py') diff --git a/libmproxy/console/tabs.py b/libmproxy/console/tabs.py index 6e7d4d99..fea9bbde 100644 --- a/libmproxy/console/tabs.py +++ b/libmproxy/console/tabs.py @@ -2,6 +2,24 @@ import urwid import signals +class Tab(urwid.WidgetWrap): + def __init__(self, offset, content, attr, onclick): + """ + onclick is called on click with the tab offset as argument + """ + p = urwid.Text(content, align="center") + p = urwid.Padding(p, align="center", width=("relative", 100)) + p = urwid.AttrWrap(p, attr) + urwid.WidgetWrap.__init__(self, p) + self.offset = offset + self.onclick = onclick + + def mouse_event(self, size, event, button, col, row, focus): + if event == "mouse press" and button == 1: + self.onclick(self.offset) + return True + + class Tabs(urwid.WidgetWrap): def __init__(self, tabs, tab_offset=0): urwid.WidgetWrap.__init__(self, "") @@ -9,19 +27,16 @@ class Tabs(urwid.WidgetWrap): self.tabs = tabs self.show() - def _tab(self, content, attr): - p = urwid.Text(content, align="center") - p = urwid.Padding(p, align="center", width=("relative", 100)) - p = urwid.AttrWrap(p, attr) - return p + def change_tab(self, offset): + self.tab_offset = offset + self.show() def keypress(self, size, key): + n = len(self.tabs) if key in ["tab", "l"]: - self.tab_offset = (self.tab_offset + 1) % (len(self.tabs)) - self.show() + self.change_tab((self.tab_offset + 1) % n) elif key == "h": - self.tab_offset = (self.tab_offset - 1) % (len(self.tabs)) - self.show() + self.change_tab((self.tab_offset - 1) % n) return self._w.keypress(size, key) def show(self): @@ -29,9 +44,23 @@ class Tabs(urwid.WidgetWrap): for i in range(len(self.tabs)): txt = self.tabs[i][0]() if i == self.tab_offset: - headers.append(self._tab(txt, "heading")) + headers.append( + Tab( + i, + txt, + "heading", + self.change_tab + ) + ) else: - headers.append(self._tab(txt, "heading_inactive")) + headers.append( + Tab( + i, + txt, + "heading_inactive", + self.change_tab + ) + ) headers = urwid.Columns(headers, dividechars=1) self._w = urwid.Frame( body = self.tabs[self.tab_offset][1](), -- cgit v1.2.3