diff pyink/consistency.py @ 1253:07e0cb1e051d

Add class consistency_checker for domview_ui. - consistency_checker is to check consistency of the DOM-tree associated with a domview_ui. - It is so closed to domview_ui, so it may access private variables. - But, it uses public interface of domview_ui if possible. - consistency_checker is not integrated to domview_ui for separating functions of consistency checking from the domview_ui. It collects relative logic into a place and setups a boundary from others.
author Thinker K.F. Li <thinker@codemud.net>
date Tue, 11 Jan 2011 11:43:32 +0800
parents
children 027cd060d9ba
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyink/consistency.py	Tue Jan 11 11:43:32 2011 +0800
@@ -0,0 +1,62 @@
+import dom_event
+from data_monitor import data_monitor
+
+## \brief Check consistency of a DOM-tree associated with a domview_ui.
+#
+# This is a co-worker of \ref domview_ui to check DOM-tree and make
+# sure consistency of scenes, scene groups in the DOM-tree.  It also
+# updates layer list of \ref domview_ui to reflect last changes of the
+# DOM-tree.
+#
+# Since it is a consistency checker, it must well understanding
+# structure that expected by domview_ui.  So, this class is highly
+# closed to the internal of \ref domview_ui.  It is separated from
+# domview_ui for collecting related logic and functions in a place to
+# set up a clear boundary from the functions provided by \ref
+# domview_ui.
+#
+# This class is expected to access private variables of \ref
+# domview_ui.  But, use public interface of domview_ui if possible.
+#
+# This class is also monitored by \ref data_monitor to monitor the
+# accessing to domview_ui.
+#
+class consistency_checker(object):
+    __metaclass__ = data_monitor
+    
+    def __init__(self, domview_ui):
+        self._domview = domview_ui
+        self._doc = None
+        self._root = None
+        pass
+
+    def _start_check(self):
+        doc = self._doc
+	dom_event.addEventListener(doc, 'DOMNodeInserted',
+                                   self.do_insert_node, None)
+	dom_event.addEventListener(doc, 'DOMNodeRemoved',
+                                   self.do_remove_node, None)
+	dom_event.addEventListener(doc, 'DOMAttrModified',
+                                   self.do_attr_modified, None)
+        pass
+    
+    ## \brief Handle a new document.
+    #
+    # This method is called by domview_ui.handle_doc_root().
+    #
+    def handle_doc_root(self, doc, root):
+        self._doc = doc
+        self._root = root
+
+        self._start_check()
+        pass
+
+    def do_insert_node(self, node, child):
+        pass
+
+    def do_remove_node(self, node, child):
+        pass
+
+    def do_attr_modified(self, node, name, old_value, new_value):
+        pass
+    pass