Epour: factorize the preference dialogs
Implemented a base class used by all the 3 preferences dialogs
This commit is contained in:
parent
5b3c328dd4
commit
a473d92f51
|
@ -68,15 +68,33 @@ EXPAND_HORIZ = 1.0, 0.0
|
|||
FILL_BOTH = -1.0, -1.0
|
||||
FILL_HORIZ = -1.0, 0.5
|
||||
|
||||
class PreferencesGeneral(InnerWindow):
|
||||
class PreferencesDialog(InnerWindow):
|
||||
""" Base class for all preferences dialogs """
|
||||
def __init__(self, parent):
|
||||
InnerWindow.__init__(self, parent)
|
||||
|
||||
self.scroller = Scroller(self)
|
||||
self.scroller.policy = ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO
|
||||
self.content = self.scroller
|
||||
|
||||
self.box = Box(self)
|
||||
self.box.size_hint_weight = 1.0, 1.0
|
||||
self.scroller.content = self.box
|
||||
|
||||
def activate(self):
|
||||
btn = Button(self, text="Close")
|
||||
btn.callback_clicked_add(lambda x: self.delete())
|
||||
self.box.pack_end(btn)
|
||||
btn.show()
|
||||
|
||||
InnerWindow.activate(self)
|
||||
|
||||
class PreferencesGeneral(PreferencesDialog):
|
||||
""" General preference dialog """
|
||||
def __init__(self, parent, session):
|
||||
self.session = session
|
||||
conf = session.conf
|
||||
InnerWindow.__init__(self, parent.win)
|
||||
|
||||
mbox = Box(self)
|
||||
mbox.size_hint_weight = 1.0, 1.0
|
||||
mbox.size_hint_align = -1.0, -1.0
|
||||
PreferencesDialog.__init__(self, parent.win)
|
||||
|
||||
limits = Limits(self, session)
|
||||
ports = ListenPorts(self, session)
|
||||
|
@ -107,20 +125,10 @@ class PreferencesGeneral(InnerWindow):
|
|||
sep2 = Separator(self)
|
||||
sep2.horizontal = True
|
||||
|
||||
xbtn = Button(self)
|
||||
xbtn.text_set("Close")
|
||||
xbtn.callback_clicked_add(lambda x: self.delete())
|
||||
|
||||
for w in ports, limits, dlsel, pe, pad, \
|
||||
sep1, chk1, chk2, sep2, xbtn:
|
||||
for w in ports, limits, dlsel, pe, pad, sep1, chk1, chk2, sep2:
|
||||
w.show()
|
||||
mbox.pack_end(w)
|
||||
self.box.pack_end(w)
|
||||
|
||||
scr = Scroller(self)
|
||||
scr.policy = ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO
|
||||
scr.content = mbox
|
||||
|
||||
self.content = scr
|
||||
self.activate()
|
||||
|
||||
class DataStorageSelector(Frame):
|
||||
|
@ -205,13 +213,10 @@ class ListenPorts(Frame):
|
|||
self.session.conf.set("Settings", "listen_low", str(low))
|
||||
self.session.conf.set("Settings", "listen_high", str(high))
|
||||
|
||||
class PreferencesProxy(InnerWindow):
|
||||
class PreferencesProxy(PreferencesDialog):
|
||||
""" Proxy preference dialog """
|
||||
def __init__(self, parent, session):
|
||||
InnerWindow.__init__(self, parent.win)
|
||||
self.session = session
|
||||
|
||||
b = Box(parent.win)
|
||||
b.size_hint_weight = 1.0, 1.0
|
||||
PreferencesDialog.__init__(self, parent.win)
|
||||
|
||||
proxies = [
|
||||
["Proxy for torrent peer connections",
|
||||
|
@ -224,25 +229,11 @@ class PreferencesProxy(InnerWindow):
|
|||
session.dht_proxy, session.set_dht_proxy],
|
||||
]
|
||||
|
||||
xbtn = Button(self)
|
||||
xbtn.text_set("Close")
|
||||
xbtn.callback_clicked_add(lambda x: self.delete())
|
||||
|
||||
for title, rfunc, wfunc in proxies:
|
||||
pg = ProxyGroup(parent.win, title, rfunc, wfunc)
|
||||
pg = ProxyGroup(self, title, rfunc, wfunc)
|
||||
pg.show()
|
||||
b.pack_end(pg)
|
||||
self.box.pack_end(pg)
|
||||
|
||||
b.pack_end(xbtn)
|
||||
xbtn.show()
|
||||
|
||||
b.show()
|
||||
|
||||
scr = Scroller(self)
|
||||
scr.policy = ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO
|
||||
scr.content = b
|
||||
|
||||
self.content = scr
|
||||
self.activate()
|
||||
|
||||
class ProxyGroup(Frame):
|
||||
|
@ -435,9 +426,10 @@ class ActSWithLabel(Box):
|
|||
def get_value(self):
|
||||
return self.vd[self.w.indicator_pos]
|
||||
|
||||
class PreferencesSession(InnerWindow):
|
||||
class PreferencesSession(PreferencesDialog):
|
||||
""" Session preference dialog """
|
||||
def __init__(self, parent, session):
|
||||
InnerWindow.__init__(self, parent.win)
|
||||
PreferencesDialog.__init__(self, parent.win)
|
||||
|
||||
# TODO: Construct and populate this with an Idler
|
||||
|
||||
|
@ -450,10 +442,9 @@ class PreferencesSession(InnerWindow):
|
|||
|
||||
s = session.settings()
|
||||
|
||||
t = Table(parent.win)
|
||||
t.padding = 5, 5
|
||||
t.size_hint_weight = 1.0, 1.0
|
||||
t.size_hint_align = -1.0, -1.0
|
||||
t = Table(self, padding=(5,5))
|
||||
self.box.pack_end(t)
|
||||
t.show()
|
||||
|
||||
i = 0
|
||||
|
||||
|
@ -465,7 +456,7 @@ class PreferencesSession(InnerWindow):
|
|||
try:
|
||||
a = getattr(s, k)
|
||||
if isinstance(a, lt.disk_cache_algo_t):
|
||||
w = Spinner(parent.win)
|
||||
w = Spinner(self)
|
||||
w.size_hint_align = 1.0, 0.0
|
||||
# XXX: lt-rb python bindings don't have all values.
|
||||
w.min_max = 0, 2 #len(lt.disk_cache_algo_t.values.keys())
|
||||
|
@ -473,16 +464,16 @@ class PreferencesSession(InnerWindow):
|
|||
w.special_value_add(val, name)
|
||||
w.value = a
|
||||
elif isinstance(a, bool):
|
||||
w = Check(parent.win)
|
||||
w = Check(self)
|
||||
w.size_hint_align = 1.0, 0.0
|
||||
w.style = "toggle"
|
||||
w.state = a
|
||||
elif isinstance(a, int):
|
||||
w = Spinner(parent.win)
|
||||
w = Spinner(self)
|
||||
w.min_max = INT_MIN, INT_MAX
|
||||
w.value = a
|
||||
elif isinstance(a, float):
|
||||
w = Slider(parent.win)
|
||||
w = Slider(self)
|
||||
w.size_hint_align = -1.0, 0.0
|
||||
w.size_hint_weight = 1.0, 0.0
|
||||
w.unit_format = "%1.2f"
|
||||
|
@ -496,19 +487,19 @@ class PreferencesSession(InnerWindow):
|
|||
# which doesn't have a python equivalent.
|
||||
continue
|
||||
elif k == "user_agent":
|
||||
w = Entry(parent.win)
|
||||
w = Entry(self)
|
||||
w.size_hint_align = 1.0, 0.0
|
||||
w.size_hint_weight = 1.0, 0.0
|
||||
w.single_line = True
|
||||
w.editable = False
|
||||
w.entry = cgi.escape(a)
|
||||
else:
|
||||
w = Entry(parent.win)
|
||||
w = Entry(self)
|
||||
w.size_hint_align = -1.0, 0.0
|
||||
w.size_hint_weight = 1.0, 0.0
|
||||
w.single_line = True
|
||||
w.entry = cgi.escape(a)
|
||||
l = Label(parent.win)
|
||||
l = Label(self)
|
||||
l.text = k.replace("_", " ").capitalize()
|
||||
l.size_hint_align = 0.0, 0.0
|
||||
l.size_hint_weight = 1.0, 0.0
|
||||
|
@ -524,28 +515,14 @@ class PreferencesSession(InnerWindow):
|
|||
except TypeError:
|
||||
pass #print("Error {}".format(k))
|
||||
|
||||
|
||||
save_btn = Button(parent.win)
|
||||
save_btn = Button(self)
|
||||
save_btn.text = "Apply session settings"
|
||||
save_btn.callback_clicked_add(self.apply_settings, widgets, session)
|
||||
save_btn.show()
|
||||
t.pack(save_btn, 0, i, 2, 1)
|
||||
i += 1
|
||||
self.box.pack_end(save_btn)
|
||||
|
||||
xbtn = Button(self)
|
||||
xbtn.text_set("Close")
|
||||
xbtn.callback_clicked_add(lambda x: self.delete())
|
||||
xbtn.show()
|
||||
t.pack(xbtn, 0, i, 2, 1)
|
||||
|
||||
scr = Scroller(self)
|
||||
scr.policy = ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO
|
||||
scr.content = t
|
||||
|
||||
self.content = scr
|
||||
self.activate()
|
||||
|
||||
|
||||
def apply_settings(self, btn, widgets, session):
|
||||
s = lt.session_settings()
|
||||
|
||||
|
|
Loading…
Reference in New Issue