Move enumeration in options (remembered)
authorJack Miller <jack@codezen.org>
Wed, 4 Aug 2010 23:58:27 +0000 (18:58 -0500)
committerJack Miller <jack@codezen.org>
Wed, 4 Aug 2010 23:58:27 +0000 (18:58 -0500)
Signed-off-by: Jack Miller <jack@codezen.org>
canto_curses/gui.py
canto_curses/reader.py
canto_curses/story.py
canto_curses/tag.py
canto_curses/taglist.py

index b1e5f1d..7f896b9 100644 (file)
@@ -26,8 +26,6 @@ class CantoCursesGui(CommandHandler):
 
         td = []
         self.vars = {
-            "tags_enumerated" : False,
-            "enumerated" : False,
             "selected" : None,
             "curtags" : td,
             "alltags" : td,
@@ -37,20 +35,22 @@ class CantoCursesGui(CommandHandler):
         }
 
         callbacks = {
-                "set_var" : self.set_var,
-                "get_var" : self.get_var,
-                "set_cfg" : self.set_cfg,
-                "get_cfg" : self.get_cfg,
-                "write" : self.backend.write
+            "set_var" : self.set_var,
+            "get_var" : self.get_var,
+            "set_opt" : self.set_opt,
+            "get_opt" : self.get_opt,
+            "write" : self.backend.write
         }
 
         self.keys = {
-                ":" : "command",
-                "q" : "quit"
+            ":" : "command",
+            "q" : "quit"
         }
 
         self.config = {
-                "browser" : "firefox %u"
+            "browser" : "firefox %u",
+            "tags_enumerated" : "False",
+            "enumerated" : "False",
         }
 
         self.backend.write("CONFIGS", [ "CantoCurses" ])
@@ -126,9 +126,7 @@ class CantoCursesGui(CommandHandler):
                         a = a.replace("%", "\\%")
                         a = html_entity_convert(a)
                         a = char_ref_convert(a)
-                        item.content[k] = a
-                    else:
-                        item.content[k] = a
+                    item.content[k] = a
 
     def var(self, args):
         t, r = self._first_term(args,\
@@ -160,21 +158,51 @@ class CantoCursesGui(CommandHandler):
             self.vars[tweak] = value
             changed = True
 
-        # Special actions on certain vars changed.
-        if changed:
-            if tweak in ["tags_enumerated", "enumerated"]:
-                self.screen.refresh()
+        # XXX use changed on vars needing refresh
 
     def get_var(self, tweak):
         if tweak in self.vars:
             return self.vars[tweak]
         return None
 
-    def set_cfg(self, option, value):
-        self.config[option] = value
-        self.backend.write("SETCONFIGS", { option : value })
+    def opt(self, args):
+        t, r = self._first_term(args,
+                lambda : self.screen.input_callback("opt: "))
+        if t in self.config:
+            return (True, t, r)
+        log.error("Unknown option: %s" % t)
+        return (False, None, None)
+
+    @command_format("toggle-opt", [("opt","opt")])
+    @generic_parse_error
+    def toggle_opt(self, **kwargs):
+        opt = kwargs["opt"]
+        if opt not in self.config:
+            log.error("Unknown option: %s" % opt)
+            return
+        if self.config[opt] not in ["True", "False"]:
+            log.error("Option %s isn't boolean." % opt)
+            return
+        if self.config[opt] == "True":
+            self.set_opt(opt, "False")
+        else:
+            self.set_opt(opt, "True")
+
+    def set_opt(self, option, value):
+        changed = False
+        if self.config[option] != value:
+            self.config[option] = value
+            changed = True
+
+        # Special actions on certain opt changes.
+        if changed:
+            if option in ["tags_enumerated", "enumerated"]:
+                self.screen.refresh()
+
+            self.backend.write("SETCONFIGS",\
+                    { "CantoCurses." + option : value })
 
-    def get_cfg(self, option):
+    def get_opt(self, option):
         return self.config[option]
 
     def winch(self):
@@ -257,6 +285,8 @@ class CantoCursesGui(CommandHandler):
                     self.set(args=cmd[1])
                 elif cmd[1].startswith("unset"):
                     self.unset(args=cmd[1])
+                elif cmd[1].startswith("toggle-opt"):
+                    self.toggle_opt(args=cmd[1])
                 elif cmd[1].startswith("toggle"):
                     self.toggle(args=cmd[1])
 
index 9fe2333..c46bbb3 100644 (file)
@@ -25,7 +25,6 @@ class Reader(CommandHandler):
         self.redraw()
 
     def redraw(self):
-        log.debug("Reader redraw!")
         self.pad.erase()
 
         mwidth = self.pad.getmaxyx()[1]
@@ -67,4 +66,3 @@ class Reader(CommandHandler):
 
     def get_width(self, mwidth):
         return mwidth
-
index 5e92c96..2fb2b8e 100644 (file)
@@ -53,7 +53,7 @@ class Story():
 
     def refresh(self, mwidth, idx):
         # Do we need the enumerated form?
-        enumerated = self.callbacks["get_var"]("enumerated")
+        enumerated = self.callbacks["get_opt"]("enumerated") == "True"
 
         # These are the only things that affect the drawing
         # of this item.
index f5d4f3b..6cf0361 100644 (file)
@@ -69,7 +69,7 @@ class Tag(list):
         return self.render(mwidth, WrapPad(self.pad))
 
     def render_header(self, mwidth, pad):
-        enumerated = self.callbacks["get_var"]("tags_enumerated")
+        enumerated = self.callbacks["get_opt"]("tags_enumerated") == "True"
         header = self.tag + u"\n"
         if enumerated:
             curtags = self.callbacks["get_var"]("curtags")
index eeb29cf..be1c75b 100644 (file)
@@ -37,8 +37,8 @@ class TagList(CommandHandler):
         self.keys = {
             " " : "add-window reader",
             "g" : "foritems & goto & item-state read & clearitems",
-            "E" : "toggle tags_enumerated",
-            "e" : "toggle enumerated",
+            "E" : "toggle-opt tags_enumerated",
+            "e" : "toggle-opt enumerated",
             "R" : "item-state read *",
             "U" : "item-state -read *",
             "r" : "tag-state read",
@@ -84,21 +84,21 @@ class TagList(CommandHandler):
 
     # Prompt that ensures the items are enumerated first
     def eprompt(self):
-        return self._var_set_prompt("enumerated", "items: ")
+        return self._cfg_set_prompt("enumerated", "items: ")
 
     # Will enumerate tags in the future.
     def teprompt(self):
-        return self._var_set_prompt("tags_enumerated", "tags: ")
+        return self._cfg_set_prompt("tags_enumerated", "tags: ")
 
-    def _var_set_prompt(self, var, prompt):
+    def _cfg_set_prompt(self, option, prompt):
         # Ensure the items are enumerated
-        t = self.callbacks["get_var"](var)
-        self.callbacks["set_var"](var, True)
+        t = self.callbacks["get_opt"](option)
+        self.callbacks["set_opt"](option, True)
 
         r = self.input(prompt)
 
-        # Reset var to previous value
-        self.callbacks["set_var"](var, t)
+        # Reset option to previous value
+        self.callbacks["set_opt"](option, t)
         return r
 
     def uint(self, args):
@@ -151,7 +151,7 @@ class TagList(CommandHandler):
     @command_format("goto", [("items", "listof_items")])
     @generic_parse_error
     def goto(self, **kwargs):
-        browser = self.callbacks["get_cfg"]("browser")
+        browser = self.callbacks["get_opt"]("browser")
         if not browser:
             log.error("No browser defined! Cannot goto.")
             return