From 8035bc3225899800c239689c32503542f97dd19d Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Sat, 17 May 2014 19:46:24 +0300
Subject: Move textchunklist into separate file.

---
 src/CMakeLists.txt              |   2 +
 src/Makefile.am                 |   2 +
 src/gui/fonts/font.cpp          | 106 --------------------------------
 src/gui/fonts/font.h            |  25 +-------
 src/gui/fonts/textchunklist.cpp | 131 ++++++++++++++++++++++++++++++++++++++++
 src/gui/fonts/textchunklist.h   |  57 +++++++++++++++++
 6 files changed, 193 insertions(+), 130 deletions(-)
 create mode 100644 src/gui/fonts/textchunklist.cpp
 create mode 100644 src/gui/fonts/textchunklist.h

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e8689d753..a3dea452e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -429,6 +429,8 @@ SET(SRCS
     gui/fonts/font.h
     gui/fonts/textchunk.cpp
     gui/fonts/textchunk.h
+    gui/fonts/textchunklist.cpp
+    gui/fonts/textchunklist.h
     gui/fonts/textchunksmall.cpp
     gui/fonts/textchunksmall.h
     gui/windows/shopwindow.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 8e325261f..e2df5a905 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -526,6 +526,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \
 	      gui/fonts/font.h \
 	      gui/fonts/textchunk.cpp \
 	      gui/fonts/textchunk.h \
+	      gui/fonts/textchunklist.cpp \
+	      gui/fonts/textchunklist.h \
 	      gui/fonts/textchunksmall.cpp \
 	      gui/fonts/textchunksmall.h \
 	      gui/windows/shopwindow.cpp \
diff --git a/src/gui/fonts/font.cpp b/src/gui/fonts/font.cpp
index 485d1a84e..4c297793e 100644
--- a/src/gui/fonts/font.cpp
+++ b/src/gui/fonts/font.cpp
@@ -96,112 +96,6 @@ bool Font::mSoftMode(false);
 
 extern char *strBuf;
 
-TextChunkList::TextChunkList() :
-    start(nullptr),
-    end(nullptr),
-    size(0),
-    search(),
-    searchWidth()
-{
-}
-
-void TextChunkList::insertFirst(TextChunk *const item)
-{
-    TextChunk *const oldFirst = start;
-    if (start)
-        start->prev = item;
-    item->prev = nullptr;
-    if (oldFirst)
-        item->next = oldFirst;
-    else
-        end = item;
-    start = item;
-    size ++;
-    search[TextChunkSmall(item->text, item->color, item->color2)] = item;
-    searchWidth[item->text] = item;
-}
-
-void TextChunkList::moveToFirst(TextChunk *const item)
-{
-    if (item == start)
-        return;
-
-    TextChunk *oldPrev = item->prev;
-    if (oldPrev)
-        oldPrev->next = item->next;
-    TextChunk *oldNext = item->next;
-    if (oldNext)
-        oldNext->prev = item->prev;
-    else
-        end = oldPrev;
-    TextChunk *const oldFirst = start;
-    if (start)
-        start->prev = item;
-    item->prev = nullptr;
-    item->next = oldFirst;
-    start = item;
-}
-
-void TextChunkList::removeBack()
-{
-    TextChunk *oldEnd = end;
-    if (oldEnd)
-    {
-        end = oldEnd->prev;
-        if (end)
-            end->next = nullptr;
-        else
-            start = nullptr;
-        search.erase(TextChunkSmall(oldEnd->text,
-            oldEnd->color, oldEnd->color2));
-        searchWidth.erase(oldEnd->text);
-        delete oldEnd;
-        size --;
-    }
-}
-
-void TextChunkList::removeBack(int n)
-{
-    TextChunk *item = end;
-    while (n && item)
-    {
-        n --;
-        TextChunk *oldEnd = item;
-        item = item->prev;
-        search.erase(TextChunkSmall(oldEnd->text,
-            oldEnd->color, oldEnd->color2));
-        searchWidth.erase(oldEnd->text);
-        delete oldEnd;
-        size --;
-    }
-    if (item)
-    {
-        item->next = nullptr;
-        end = item;
-    }
-    else
-    {
-        start = nullptr;
-        end = nullptr;
-    }
-}
-
-void TextChunkList::clear()
-{
-    search.clear();
-    searchWidth.clear();
-    TextChunk *item = start;
-    while (item)
-    {
-        TextChunk *item2 = item->next;
-        delete item;
-        item = item2;
-    }
-    start = nullptr;
-    end = nullptr;
-    size = 0;
-}
-
 static int fontCounter;
 
 Font::Font(std::string filename,
diff --git a/src/gui/fonts/font.h b/src/gui/fonts/font.h
index 7ed400ff4..6e933f7e1 100644
--- a/src/gui/fonts/font.h
+++ b/src/gui/fonts/font.h
@@ -69,6 +69,7 @@
 
 #include "gui/color.h"
 
+#include "gui/fonts/textchunklist.h"
 #include "gui/fonts/textchunksmall.h"
 
 #include <SDL_ttf.h>
@@ -85,30 +86,6 @@ class TextChunk;
 
 const unsigned int CACHES_NUMBER = 256;
 
-class TextChunkList final
-{
-    public:
-        TextChunkList();
-
-        A_DELETE_COPY(TextChunkList)
-
-        void insertFirst(TextChunk *const item);
-
-        void moveToFirst(TextChunk *const item);
-
-        void removeBack();
-
-        void removeBack(int n);
-
-        void clear();
-
-        TextChunk *start;
-        TextChunk *end;
-        uint32_t size;
-        std::map<TextChunkSmall, TextChunk*> search;
-        std::map<std::string, TextChunk*> searchWidth;
-};
-
 /**
  * A wrapper around SDL_ttf for allowing the use of TrueType fonts.
  *
diff --git a/src/gui/fonts/textchunklist.cpp b/src/gui/fonts/textchunklist.cpp
new file mode 100644
index 000000000..98d90e23d
--- /dev/null
+++ b/src/gui/fonts/textchunklist.cpp
@@ -0,0 +1,131 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2011-2014  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gui/fonts/textchunklist.h"
+
+#include "gui/fonts/textchunk.h"
+
+#include "debug.h"
+
+TextChunkList::TextChunkList() :
+    start(nullptr),
+    end(nullptr),
+    size(0),
+    search(),
+    searchWidth()
+{
+}
+
+void TextChunkList::insertFirst(TextChunk *const item)
+{
+    TextChunk *const oldFirst = start;
+    if (start)
+        start->prev = item;
+    item->prev = nullptr;
+    if (oldFirst)
+        item->next = oldFirst;
+    else
+        end = item;
+    start = item;
+    size ++;
+    search[TextChunkSmall(item->text, item->color, item->color2)] = item;
+    searchWidth[item->text] = item;
+}
+
+void TextChunkList::moveToFirst(TextChunk *const item)
+{
+    if (item == start)
+        return;
+
+    TextChunk *oldPrev = item->prev;
+    if (oldPrev)
+        oldPrev->next = item->next;
+    TextChunk *oldNext = item->next;
+    if (oldNext)
+        oldNext->prev = item->prev;
+    else
+        end = oldPrev;
+    TextChunk *const oldFirst = start;
+    if (start)
+        start->prev = item;
+    item->prev = nullptr;
+    item->next = oldFirst;
+    start = item;
+}
+
+void TextChunkList::removeBack()
+{
+    TextChunk *oldEnd = end;
+    if (oldEnd)
+    {
+        end = oldEnd->prev;
+        if (end)
+            end->next = nullptr;
+        else
+            start = nullptr;
+        search.erase(TextChunkSmall(oldEnd->text,
+            oldEnd->color, oldEnd->color2));
+        searchWidth.erase(oldEnd->text);
+        delete oldEnd;
+        size --;
+    }
+}
+
+void TextChunkList::removeBack(int n)
+{
+    TextChunk *item = end;
+    while (n && item)
+    {
+        n --;
+        TextChunk *oldEnd = item;
+        item = item->prev;
+        search.erase(TextChunkSmall(oldEnd->text,
+            oldEnd->color, oldEnd->color2));
+        searchWidth.erase(oldEnd->text);
+        delete oldEnd;
+        size --;
+    }
+    if (item)
+    {
+        item->next = nullptr;
+        end = item;
+    }
+    else
+    {
+        start = nullptr;
+        end = nullptr;
+    }
+}
+
+void TextChunkList::clear()
+{
+    search.clear();
+    searchWidth.clear();
+    TextChunk *item = start;
+    while (item)
+    {
+        TextChunk *item2 = item->next;
+        delete item;
+        item = item2;
+    }
+    start = nullptr;
+    end = nullptr;
+    size = 0;
+}
diff --git a/src/gui/fonts/textchunklist.h b/src/gui/fonts/textchunklist.h
new file mode 100644
index 000000000..9c0240398
--- /dev/null
+++ b/src/gui/fonts/textchunklist.h
@@ -0,0 +1,57 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2011-2014  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GUI_FONTS_TEXTCHUNKLIST_H
+#define GUI_FONTS_TEXTCHUNKLIST_H
+
+#include "gui/fonts/textchunksmall.h"
+
+#include <map>
+#include <string>
+
+#include "localconsts.h"
+
+class TextChunk;
+
+class TextChunkList final
+{
+    public:
+        TextChunkList();
+
+        A_DELETE_COPY(TextChunkList)
+
+        void insertFirst(TextChunk *const item);
+
+        void moveToFirst(TextChunk *const item);
+
+        void removeBack();
+
+        void removeBack(int n);
+
+        void clear();
+
+        TextChunk *start;
+        TextChunk *end;
+        uint32_t size;
+        std::map<TextChunkSmall, TextChunk*> search;
+        std::map<std::string, TextChunk*> searchWidth;
+};
+
+#endif  // GUI_FONTS_TEXTCHUNKLIST_H
-- 
cgit v1.2.3-70-g09d2