Show view mode in statusbar.

Also make "m" keyboard shortcut available globally.
This commit is contained in:
Aldo Cortesi 2011-06-30 14:49:11 +12:00
parent 37c8d3425d
commit 2a90ea69fd

View File

@ -223,9 +223,15 @@ class ConnectionViewHeader(WWrap):
VIEW_BODY_RAW = 0 VIEW_BODY_RAW = 0
VIEW_BODY_BINARY = 1 VIEW_BODY_HEX = 1
VIEW_BODY_PRETTY = 2 VIEW_BODY_PRETTY = 2
BODY_VIEWS = {
VIEW_BODY_RAW: "raw",
VIEW_BODY_HEX: "hex",
VIEW_BODY_PRETTY: "pretty"
}
VIEW_FLOW_REQUEST = 0 VIEW_FLOW_REQUEST = 0
VIEW_FLOW_RESPONSE = 1 VIEW_FLOW_RESPONSE = 1
@ -416,15 +422,6 @@ class ConnectionView(WWrap):
self.view_response() self.view_response()
self.master.refresh_connection(self.flow) self.master.refresh_connection(self.flow)
def _changeview(self, v):
if v == "r":
self.state.view_body_mode = VIEW_BODY_RAW
elif v == "h":
self.state.view_body_mode = VIEW_BODY_BINARY
elif v == "p":
self.state.view_body_mode = VIEW_BODY_PRETTY
self.master.refresh_connection(self.flow)
def keypress(self, size, key): def keypress(self, size, key):
if key == "tab": if key == "tab":
if self.state.view_flow_mode == VIEW_FLOW_REQUEST and self.flow.response: if self.state.view_flow_mode == VIEW_FLOW_REQUEST and self.flow.response:
@ -440,17 +437,6 @@ class ConnectionView(WWrap):
elif key == "A": elif key == "A":
self.master.accept_all() self.master.accept_all()
self.master.view_flow(self.flow) self.master.view_flow(self.flow)
elif key == "m":
self.master.prompt_onekey(
"View",
(
("raw", "r"),
("pretty", "p"),
("hex", "h"),
),
self._changeview
)
key = None
elif key == "e": elif key == "e":
if self.state.view_flow_mode == VIEW_FLOW_REQUEST: if self.state.view_flow_mode == VIEW_FLOW_REQUEST:
self.master.prompt_onekey( self.master.prompt_onekey(
@ -673,7 +659,7 @@ class StatusBar(WWrap):
if self.master.server: if self.master.server:
boundaddr = "[%s:%s]"%(self.master.server.address or "*", self.master.server.port) boundaddr = "[%s:%s]"%(self.master.server.address or "*", self.master.server.port)
else: else:
boundaddr = "[no proxy]" boundaddr = ""
status = urwid.AttrWrap(urwid.Columns([ status = urwid.AttrWrap(urwid.Columns([
urwid.Text(t), urwid.Text(t),
@ -681,6 +667,9 @@ class StatusBar(WWrap):
[ [
self.helptext, self.helptext,
" ", " ",
('statusbar_text', "["),
('statusbar_key', "m"),
('statusbar_text', (":%s]"%BODY_VIEWS[self.master.state.view_body_mode])),
('statusbar_text', boundaddr), ('statusbar_text', boundaddr),
], ],
align="right" align="right"
@ -720,7 +709,7 @@ class ConsoleState(flow.State):
flow.State.__init__(self) flow.State.__init__(self)
self.focus = None self.focus = None
self.view_body_mode = VIEW_BODY_RAW self.view_body_mode = VIEW_BODY_PRETTY
self.view_flow_mode = VIEW_FLOW_REQUEST self.view_flow_mode = VIEW_FLOW_REQUEST
self.last_script = "" self.last_script = ""
@ -961,7 +950,7 @@ class ConsoleMaster(flow.FlowMaster):
txt = [urwid.Text(hdr)] txt = [urwid.Text(hdr)]
if content: if content:
if viewmode == VIEW_BODY_BINARY: if viewmode == VIEW_BODY_HEX:
self._view_conn_binary(content, txt) self._view_conn_binary(content, txt)
elif viewmode == VIEW_BODY_PRETTY: elif viewmode == VIEW_BODY_PRETTY:
self._find_pretty_view(content, hdrItems, txt) self._find_pretty_view(content, hdrItems, txt)
@ -1345,6 +1334,15 @@ class ConsoleMaster(flow.FlowMaster):
def set_intercept(self, txt): def set_intercept(self, txt):
return self.state.set_intercept(txt) return self.state.set_intercept(txt)
def changeview(self, v):
if v == "r":
self.state.view_body_mode = VIEW_BODY_RAW
elif v == "h":
self.state.view_body_mode = VIEW_BODY_HEX
elif v == "p":
self.state.view_body_mode = VIEW_BODY_PRETTY
self.refresh_connection(self.currentflow)
def drawscreen(self): def drawscreen(self):
size = self.ui.get_cols_rows() size = self.ui.get_cols_rows()
canvas = self.view.render(size, focus=1) canvas = self.view.render(size, focus=1)
@ -1416,6 +1414,17 @@ class ConsoleMaster(flow.FlowMaster):
k = "down" k = "down"
elif k == "k": elif k == "k":
k = "up" k = "up"
elif k == "m":
self.prompt_onekey(
"View",
(
("raw", "r"),
("pretty", "p"),
("hex", "h"),
),
self.changeview
)
k = None
elif k in ("q", "Q"): elif k in ("q", "Q"):
if k == "Q": if k == "Q":
raise Stop raise Stop