瀏覽代碼

[refactor] removed isDirty and isRoot flags

B Thibault 9 年之前
父節點
當前提交
5b6bb9242a
共有 3 個文件被更改,包括 21 次插入42 次删除
  1. 4 3
      include/curseSplitOutput.hh
  2. 16 37
      src/curseSplitOutput.cpp
  3. 1 2
      test/testDiffSubAdd.6.json

+ 4 - 3
include/curseSplitOutput.hh

@@ -36,9 +36,10 @@ class CurseSplitOutput: public CurseOutput
         void checkSelection(const JSonElement *item);
 
         bool redraw();
-        bool redraw(const t_Cursor &screenSize, std::pair<int, JSonContainer *> &, bool isRoot =false);
-        bool redraw(const t_Cursor &screenSize, JSonElement *, bool isRoot =false);
-        Optional<bool> redrawOneItemToWorkingWin(t_subWindow &w, const t_Cursor &);
+        bool redraw(const t_Cursor &screenSize, std::pair<int, JSonContainer *> &);
+        bool redraw(const t_Cursor &screenSize, JSonElement *);
+        const Optional<bool> redrawOneItemToWorkingWin(t_subWindow &w, const t_Cursor &);
+        const Optional<bool> isAdded(const std::pair<int, JSonContainer *> &);
 
         bool writeContainer(const t_Cursor &maxSize, JSonContainer *, bool opening = true);
         bool writeContent(const t_Cursor &maxSize, std::list<JSonElement*> *_item);

+ 16 - 37
src/curseSplitOutput.cpp

@@ -368,15 +368,15 @@ bool CurseSplitOutput::jumpToNextSearch()
     return true;
 }
 
-Optional<bool> CurseSplitOutput::redrawOneItemToWorkingWin(t_subWindow &w, const t_Cursor &screenSize)
+const Optional<bool> CurseSplitOutput::redrawOneItemToWorkingWin(t_subWindow &w, const t_Cursor &screenSize)
 {
     bool result;
 
     try {
         if (w.parentsIterators.empty())
-            result = redraw(screenSize, w.root, true);
+            result = redraw(screenSize, w.root);
         else
-            result = redraw(screenSize, w.parentsIterators.top(), true);
+            result = redraw(screenSize, w.parentsIterators.top());
     }
     catch (SelectionOutOfRange &e)
     {
@@ -439,12 +439,15 @@ bool CurseSplitOutput::redraw()
         workingWin = 0;
         //TODO first, iterate through windows to check which one has "new" items (and prints them)
         for (t_subWindow &w : subWindows)
+        {
             ;
+        }
         for (t_subWindow &w : subWindows)
         {
             if ((writingDone & (1 << workingWin)))
             {
-                Optional<bool> wrote = redrawOneItemToWorkingWin(w, screenSize);
+                const Optional<bool> wrote = redrawOneItemToWorkingWin(w, screenSize);
+
                 if (wrote.absent())
                     return false;
                 if (wrote.get())
@@ -548,21 +551,11 @@ bool CurseSplitOutput::writeContent(const t_Cursor &maxSize, std::list<JSonEleme
                 if (saveSelection == ent)
                     w.selection = w.lastSelection = **ent;
                 w.cursor.first += INDENT_LEVEL /2;
-                if (!redraw(maxSize, **ent))
-                {
-                    w.selection = w.lastSelection = saveSelection;
-                    w.cursor.first -= INDENT_LEVEL /2;
-                    return false;
-                }
-                w.selection = w.lastSelection = saveSelection;
-                w.cursor.first -= INDENT_LEVEL /2;
+                throw CurseSplitOutput::reachNext();
             }
         }
         else
-        {
-            if (!redraw(maxSize, i))
-                break;
-        }
+            throw CurseSplitOutput::reachNext();
         result = true;
     }
     w.cursor.first -= INDENT_LEVEL;
@@ -608,15 +601,16 @@ bool CurseSplitOutput::writeKey(const std::string &key, const size_t keylen, con
     return (cursor.second < w.scrollTop || (cursor.second - w.scrollTop) <= maxWidth.second);
 }
 
-bool CurseSplitOutput::redraw(const t_Cursor &maxSize, std::pair<int, JSonContainer *> &item, bool isRoot)
+const Optional<bool> CurseSplitOutput::isAdded(const std::pair<int, JSonContainer *> &item)
+{
+    return Optional<bool>::empty;
+}
+
+bool CurseSplitOutput::redraw(const t_Cursor &maxSize, std::pair<int, JSonContainer *> &item)
 {
     t_subWindow &w = subWindows.at(workingWin);
-    static short dirty =0;
     JSonElement *currentItem;
 
-    if (dirty && !isRoot)
-        throw CurseSplitOutput::reachNext();
-    dirty = 1;
     (item.first)++;
     if ((unsigned int) item.first == item.second->size())
     {
@@ -630,45 +624,30 @@ bool CurseSplitOutput::redraw(const t_Cursor &maxSize, std::pair<int, JSonContai
     if (dynamic_cast<const JSonContainer*>(currentItem))
     {
         if (!writeContainer(maxSize, (JSonContainer*) currentItem))
-        {
-            dirty = 0;
             return false;
-        }
-        dirty = 0;
     }
     else
     {
         w.cursor.second += CurseOutput::write(w.cursor.first, w.cursor.second, currentItem, maxSize.first, CurseSplitOutput::getFlag(currentItem));
-        dirty = 0;
         if (w.cursor.second > w.scrollTop && (w.cursor.second - w.scrollTop) > maxSize.second -1)
             return false;
     }
     return true;
 }
 
-bool CurseSplitOutput::redraw(const t_Cursor &maxSize, JSonElement *item, bool isRoot)
+bool CurseSplitOutput::redraw(const t_Cursor &maxSize, JSonElement *item)
 {
-    static short dirty =0;
-
-    if (dirty && !isRoot)
-        throw CurseSplitOutput::reachNext();
-    dirty = 1;
     checkSelection(item);
     if (dynamic_cast<const JSonContainer*>(item))
     {
         if (!writeContainer(maxSize, (JSonContainer *) item))
-        {
-            dirty = 0;
             return false;
-        }
-        dirty = 0;
     }
     else
     {
         t_subWindow &w = subWindows.at(workingWin);
 
         w.cursor.second += CurseOutput::write(w.cursor.first, w.cursor.second, item, maxSize.first, CurseSplitOutput::getFlag(item));
-        dirty = 0;
         if (w.cursor.second > w.scrollTop && (w.cursor.second - w.scrollTop) > maxSize.second -1)
             return false;
     }

+ 1 - 2
test/testDiffSubAdd.6.json

@@ -9,6 +9,5 @@
         1,
         6,
         3
-    ],
-    3
+    ]
 ]