From 4660216504e7e2ceb78123a9474c914354850d7c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roman=20Jaro=C5=A1?= <hello@romanjaros.dev>
Date: Wed, 26 Feb 2025 02:05:52 +0100
Subject: [PATCH] Refactor addon structure and introduce new speech frame.

---
 Quests/Quests.lua => Addon/Addon.lua          | 193 ++++++++---------
 {Quests => Addon}/Data/classic_era/0.lua      |   0
 {Quests => Addon}/Data/classic_era/1.lua      |   0
 {Quests => Addon}/Data/classic_era/2.lua      |   0
 {Quests => Addon}/Data/classic_era/3.lua      |   0
 {Quests => Addon}/Data/classic_era/4.lua      |   0
 {Quests => Addon}/Data/classic_era/5.lua      |   7 +
 {Quests => Addon}/Data/other.lua              |   0
 {Quests => Addon}/Data/retail/0.lua           |   0
 {Quests => Addon}/Data/retail/1.lua           |  10 +-
 Addon/Frames/Settings/OptionsFrame.lua        |  29 +++
 Addon/Frames/Settings/OptionsOthersFrame.lua  |  15 ++
 Addon/Frames/Settings/OptionsQuestFrame.lua   | 137 +++++++++++++
 Addon/Frames/Settings/OptionsSpeechFrame.lua  |  94 +++++++++
 Addon/Frames/TranslationQuestFrame.lua        | 194 ++++++++++++++++++
 Addon/Frames/TranslationSpeechFrame.lua       |  59 ++++++
 {Quests => Addon}/Utils.lua                   |   0
 {Fonts => Assets/Fonts}/caveat.ttf            | Bin
 {Fonts => Assets/Fonts}/frizquadratatt_cz.ttf | Bin
 {Fonts => Assets/Fonts}/morpheus_cz.ttf       | Bin
 {Fonts => Assets/Fonts}/quicksand.ttf         | Bin
 CzechQuests.lua                               |  57 +++--
 CzechQuests_Mainline.toc                      |  21 +-
 CzechQuests_Vanilla.toc                       |  28 +--
 Quests/Frames/OptionsFrame.lua                | 157 --------------
 Quests/Frames/TranslationFrame.lua            | 129 ------------
 sync.sh                                       |   9 +-
 27 files changed, 698 insertions(+), 441 deletions(-)
 rename Quests/Quests.lua => Addon/Addon.lua (53%)
 rename {Quests => Addon}/Data/classic_era/0.lua (100%)
 rename {Quests => Addon}/Data/classic_era/1.lua (100%)
 rename {Quests => Addon}/Data/classic_era/2.lua (100%)
 rename {Quests => Addon}/Data/classic_era/3.lua (100%)
 rename {Quests => Addon}/Data/classic_era/4.lua (100%)
 rename {Quests => Addon}/Data/classic_era/5.lua (99%)
 rename {Quests => Addon}/Data/other.lua (100%)
 rename {Quests => Addon}/Data/retail/0.lua (100%)
 rename {Quests => Addon}/Data/retail/1.lua (99%)
 create mode 100755 Addon/Frames/Settings/OptionsFrame.lua
 create mode 100755 Addon/Frames/Settings/OptionsOthersFrame.lua
 create mode 100755 Addon/Frames/Settings/OptionsQuestFrame.lua
 create mode 100755 Addon/Frames/Settings/OptionsSpeechFrame.lua
 create mode 100755 Addon/Frames/TranslationQuestFrame.lua
 create mode 100755 Addon/Frames/TranslationSpeechFrame.lua
 rename {Quests => Addon}/Utils.lua (100%)
 rename {Fonts => Assets/Fonts}/caveat.ttf (100%)
 rename {Fonts => Assets/Fonts}/frizquadratatt_cz.ttf (100%)
 rename {Fonts => Assets/Fonts}/morpheus_cz.ttf (100%)
 rename {Fonts => Assets/Fonts}/quicksand.ttf (100%)
 delete mode 100755 Quests/Frames/OptionsFrame.lua
 delete mode 100755 Quests/Frames/TranslationFrame.lua

diff --git a/Quests/Quests.lua b/Addon/Addon.lua
similarity index 53%
rename from Quests/Quests.lua
rename to Addon/Addon.lua
index e6b33fc..159aa20 100755
--- a/Quests/Quests.lua
+++ b/Addon/Addon.lua
@@ -1,71 +1,6 @@
-function CzechQuestsAddon:ShowTranslationFrame(primaryHeader, primaryText, secondaryHeader, secondaryText, parentFrame, yOffset, xOffset)
-    -- replace placeholders with current values
-    primaryText = CzechQuestsAddon:replacePlaceholders(primaryText);
-    secondaryText = CzechQuestsAddon:replacePlaceholders(secondaryText);
-
-    -- when user change own setting, does not require reload, just apply it
-    CzechQuestsAddon:SetTextureFromSettings(CzechQuestsAddon.translationFrame)
-
-    -- reset all texts
-    CzechQuestsAddon:ResetTranslationText(CzechQuestsAddon.translationFrame)
-
-    -- set text to labels
-    CzechQuestsAddon.translationFrame.primaryHeader:SetText(primaryHeader)
-    CzechQuestsAddon.translationFrame.primaryText:SetText(primaryText)
-    CzechQuestsAddon.translationFrame.secondaryHeader:SetText(secondaryHeader)
-    CzechQuestsAddon.translationFrame.secondaryText:SetText(secondaryText)
-
-    local primaryTextTopMargin = -CzechQuestsAddon.translationFrame.primaryHeader:GetHeight() - 15
-    local secondaryHeaderTopMargin = primaryTextTopMargin - CzechQuestsAddon.translationFrame.primaryText:GetHeight() - 20
-    local secondaryTextTopMargin = secondaryHeaderTopMargin - CzechQuestsAddon.translationFrame.secondaryHeader:GetHeight() - 5
-
-    -- apply gap between headers and texts
-    local gap = 10
-    local function addPadding(text, value)
-        if text ~= "" then
-            gap = gap + value
-        end
-    end
-
-    addPadding(primaryHeader, 10)
-    addPadding(primaryText, 5)
-    addPadding(secondaryHeader, 25)
-    addPadding(secondaryText, 5)
-
-    -- apply positions
-    CzechQuestsAddon.translationFrame.primaryHeader:SetPoint("TOPLEFT", 10, -10)
-    CzechQuestsAddon.translationFrame.primaryText:SetPoint("TOPLEFT", 10, primaryTextTopMargin)
-    CzechQuestsAddon.translationFrame.secondaryHeader:SetPoint("TOPLEFT", 10, secondaryHeaderTopMargin)
-    CzechQuestsAddon.translationFrame.secondaryText:SetPoint("TOPLEFT", 10, secondaryTextTopMargin)
-
-    -- apply changes per wow
-    if (WOW_PROJECT_ID == WOW_PROJECT_CLASSIC) then
-        CzechQuestsAddon.translationFrame:SetPoint("TOPLEFT", parentFrame, "TOPRIGHT", -8 + xOffset, yOffset)
-    else
-        CzechQuestsAddon.translationFrame:SetPoint("TOPLEFT", parentFrame, "TOPRIGHT", 8 + xOffset, yOffset)
-    end
-
-    -- calculate height
-    local height = 0;
-    local heights = {
-        CzechQuestsAddon.translationFrame.primaryHeader:GetHeight(),
-        CzechQuestsAddon.translationFrame.primaryText:GetHeight(),
-        CzechQuestsAddon.translationFrame.secondaryHeader:GetHeight(),
-        CzechQuestsAddon.translationFrame.secondaryText:GetHeight(),
-        gap,
-        10
-    }
-    for _, value in ipairs(heights) do
-        height = height + value
-    end
-
-    CzechQuestsAddon.translationFrame:SetParent(parentFrame)
-    CzechQuestsAddon.translationFrame:SetHeight(height < 200 and 200 or height)
-end
-
 function CzechQuestsAddon:ShowQuestTranslation(event)
     -- Hide frame, may contain old texts
-    CzechQuestsAddon.translationFrame:Hide()
+    CzechQuestsAddon.translationQuestFrame:Hide()
 
     -- Classic Era has QuestLogFrame
     if QuestLogFrame then
@@ -77,7 +12,7 @@ function CzechQuestsAddon:ShowQuestTranslation(event)
                 if questData then
                     local suffix = CzechQuestsAddon_Store.config.DEBUG_MODE and " (" .. questId .. ")" or ""
                     local questTitle = questData.title .. suffix
-                    CzechQuestsAddon:ShowTranslationFrame(
+                    CzechQuestsAddon:ShowTranslationQuestFrame(
                             questTitle,
                             questData.objective,
                             "Popis",
@@ -86,7 +21,7 @@ function CzechQuestsAddon:ShowQuestTranslation(event)
                             -14,
                             0
                     )
-                    CzechQuestsAddon.translationFrame:Show()
+                    CzechQuestsAddon.translationQuestFrame:Show()
                 end
             end
         end
@@ -105,7 +40,7 @@ function CzechQuestsAddon:ShowQuestTranslation(event)
                 local suffix = CzechQuestsAddon_Store.config.DEBUG_MODE and " (" .. questId .. ")" or ""
                 local questTitle = questData.title .. suffix
                 local xOffset = hasModel and 210 or 0
-                CzechQuestsAddon:ShowTranslationFrame(
+                CzechQuestsAddon:ShowTranslationQuestFrame(
                         questTitle,
                         questData.objective,
                         "Popis",
@@ -114,9 +49,9 @@ function CzechQuestsAddon:ShowQuestTranslation(event)
                         0,
                         xOffset
                 )
-                CzechQuestsAddon.translationFrame:Show()
+                CzechQuestsAddon.translationQuestFrame:Show()
             else
-                CzechQuestsAddon.translationFrame:Hide()
+                CzechQuestsAddon.translationQuestFrame:Hide()
             end
         end
     end
@@ -131,12 +66,12 @@ function CzechQuestsAddon:ShowQuestTranslation(event)
         if questId then
             local questData = CzechQuestsAddon:GetData("quest", questId)
             if questData then
-                CzechQuestsAddon.translationFrame:Show()
+                CzechQuestsAddon.translationQuestFrame:Show()
                 local suffix = CzechQuestsAddon_Store.config.DEBUG_MODE and " (" .. questId .. ")" or ""
                 local questTitle = questData.title .. suffix
                 local xOffset = hasModel and 210 or 0
                 if event == "QUEST_PROGRESS" then
-                    CzechQuestsAddon:ShowTranslationFrame(
+                    CzechQuestsAddon:ShowTranslationQuestFrame(
                             questTitle,
                             questData.progress,
                             "",
@@ -146,7 +81,7 @@ function CzechQuestsAddon:ShowQuestTranslation(event)
                             xOffset
                     )
                 elseif event == "QUEST_COMPLETE" then
-                    CzechQuestsAddon:ShowTranslationFrame(
+                    CzechQuestsAddon:ShowTranslationQuestFrame(
                             questTitle,
                             questData.completion,
                             "",
@@ -156,7 +91,7 @@ function CzechQuestsAddon:ShowQuestTranslation(event)
                             xOffset
                     )
                 elseif event == "QUEST_DETAIL" then
-                    CzechQuestsAddon:ShowTranslationFrame(
+                    CzechQuestsAddon:ShowTranslationQuestFrame(
                             questTitle,
                             questData.description,
                             "Cíl úkolu",
@@ -166,10 +101,10 @@ function CzechQuestsAddon:ShowQuestTranslation(event)
                             xOffset
                     )
                 else
-                    CzechQuestsAddon.translationFrame:Hide()
+                    CzechQuestsAddon.translationQuestFrame:Hide()
                 end
             else
-                CzechQuestsAddon.translationFrame:Hide()
+                CzechQuestsAddon.translationQuestFrame:Hide()
             end
         end
     end
@@ -177,7 +112,7 @@ end
 
 function CzechQuestsAddon:ShowQuestItemTranslation()
     -- Hide frame, may contain old texts
-    CzechQuestsAddon.translationFrame:Hide()
+    CzechQuestsAddon.translationQuestFrame:Hide()
 
     -- should work for both wow version
     if ItemTextFrame:IsShown() then
@@ -197,7 +132,7 @@ function CzechQuestsAddon:ShowQuestItemTranslation()
             if contentPage ~= nil then
                 item.content = contentPage.descriptionMale
                 if item.name ~= nil and item.content ~= nil then
-                    CzechQuestsAddon:ShowTranslationFrame(
+                    CzechQuestsAddon:ShowTranslationQuestFrame(
                             item.name,
                             item.content,
                             "",
@@ -210,48 +145,72 @@ function CzechQuestsAddon:ShowQuestItemTranslation()
             end
         end
 
-        CzechQuestsAddon.translationFrame:Show()
+        CzechQuestsAddon.translationQuestFrame:Show()
     end
 end
 
+function CzechQuestsAddon:ShowSpeechTranslation(sender, message)
+    local blue = "|cffADD8E6"
+    local yellow = "|cffffd200"
+    local white = "|cffffffff"
+    local reset = "|r"
+
+    local text = nil
+    local translation = CzechQuestsAddon:GetData("speech", message)
+
+    if translation ~= nil then
+        text = translation.text
+
+        CzechQuestsAddon.translationSpeechFrame.npcName:SetText(sender)
+
+        CzechQuestsAddon.translationSpeechFrame.text:SetText(text)
+        CzechQuestsAddon.translationSpeechFrame.text:SetPoint(
+                "TOPLEFT", CzechQuestsAddon.translationSpeechFrame.npcName, "BOTTOMLEFT", 0, -10
+        )
+
+        CzechQuestsAddon.translationSpeechFrame:Show()
+
+        print(blue .. "[CZ]" .. reset .. " " .. yellow .. sender .. reset .. ": " .. white .. text .. reset)
+    end
+
+    if timerHandle then
+        timerHandle:Cancel()
+    end
+
+    timerHandle = C_Timer.NewTimer(10, function()
+        CzechQuestsAddon.translationSpeechFrame:Hide()
+    end)
+
+end
+
 -- Hover is enabled only for QuestLogFrame and QuestMapDetailsScrollFrame
 local function SetHoverScripts(frame)
-    local frameName = frame:GetName()
+    frame:SetScript("OnEnter", function()
+        CzechQuestsAddon:ShowQuestTranslation()
+    end)
 
-    if not string.find(frameName, "QuestLogItem") and not string.find(frameName, "QuestProgressItem") then
-        frame:SetScript("OnEnter", function()
-            CzechQuestsAddon:ShowQuestTranslation()
-        end)
-
-        frame:SetScript("OnLeave", function()
-            CzechQuestsAddon.translationFrame:Hide()
-        end)
-    end
+    frame:SetScript("OnLeave", function()
+        CzechQuestsAddon.translationQuestFrame:Hide()
+    end)
 end
 
 function CzechQuestsAddon:InitializeTranslations()
     -- create translation frame
-    CzechQuestsAddon.translationFrame = CzechQuestsAddon:CreateTranslationFrame()
+    CzechQuestsAddon.translationQuestFrame = CzechQuestsAddon:CreateTranslationQuestFrame()
+    CzechQuestsAddon.translationSpeechFrame = CzechQuestsAddon:CreateTranslationSpeechFrame()
 
-    -- Register events with the main frame
-    CzechQuestsAddon.translationFrame:RegisterEvent("PLAYER_LOGIN")
-    CzechQuestsAddon.translationFrame:RegisterEvent("QUEST_PROGRESS")
-    CzechQuestsAddon.translationFrame:RegisterEvent("QUEST_COMPLETE")
-    CzechQuestsAddon.translationFrame:RegisterEvent("QUEST_FINISHED")
-    CzechQuestsAddon.translationFrame:RegisterEvent("QUEST_DETAIL")
-    CzechQuestsAddon.translationFrame:RegisterEvent("ITEM_TEXT_READY")
-    CzechQuestsAddon.translationFrame:RegisterEvent("PLAYER_STARTED_MOVING")
-    CzechQuestsAddon.translationFrame:RegisterEvent("PLAYER_STOPPED_MOVING")
-
-    -- Preparation for eventually show translation when hover quest in quest tracker for retail
-    --if (WOW_PROJECT_ID == WOW_PROJECT_MAINLINE) then
-    --    _G.EventRegistry:RegisterCallback("OnQuestBlockHeader.OnEnter", function(sender, self, questID, isGroup)
-    --        print(questID)
-    --    end)
-    --end
+    -- Register events
+    CzechQuestsAddon.translationQuestFrame:RegisterEvent("PLAYER_LOGIN")
+    CzechQuestsAddon.translationQuestFrame:RegisterEvent("QUEST_PROGRESS")
+    CzechQuestsAddon.translationQuestFrame:RegisterEvent("QUEST_COMPLETE")
+    CzechQuestsAddon.translationQuestFrame:RegisterEvent("QUEST_FINISHED")
+    CzechQuestsAddon.translationQuestFrame:RegisterEvent("QUEST_DETAIL")
+    CzechQuestsAddon.translationQuestFrame:RegisterEvent("ITEM_TEXT_READY")
+    CzechQuestsAddon.translationQuestFrame:RegisterEvent("PLAYER_STARTED_MOVING")
+    CzechQuestsAddon.translationQuestFrame:RegisterEvent("PLAYER_STOPPED_MOVING")
 
     -- Define event handler for the main frame
-    CzechQuestsAddon.translationFrame:SetScript("OnEvent", function(self, event, ...)
+    CzechQuestsAddon.translationQuestFrame:SetScript("OnEvent", function(self, event)
         if event == "PLAYER_LOGIN" then
             -- classic
             if QuestLogFrame then
@@ -272,12 +231,24 @@ function CzechQuestsAddon:InitializeTranslations()
         end
 
         if event == "PLAYER_STARTED_MOVING" then
-            CzechQuestsAddon.translationFrame.texture:SetAlpha(
+            CzechQuestsAddon.translationQuestFrame.texture:SetAlpha(
                     CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXTURE_ALPHA / 100
             )
         elseif event == "PLAYER_STOPPED_MOVING" then
-            CzechQuestsAddon.translationFrame.texture:SetAlpha(1)
+            CzechQuestsAddon.translationQuestFrame.texture:SetAlpha(1)
         end
 
     end)
-end
\ No newline at end of file
+
+    CzechQuestsAddon.translationSpeechFrame:RegisterEvent("CHAT_MSG_MONSTER_SAY")
+    CzechQuestsAddon.translationSpeechFrame:RegisterEvent("CHAT_MSG_MONSTER_YELL")
+    CzechQuestsAddon.translationSpeechFrame:RegisterEvent("CHAT_MSG_MONSTER_EMOTE")
+    CzechQuestsAddon.translationSpeechFrame:RegisterEvent("CHAT_MSG_MONSTER_PARTY")
+    CzechQuestsAddon.translationSpeechFrame:RegisterEvent("CHAT_MSG_MONSTER_WHISPER")
+
+    -- Define event handler for the main frame
+    CzechQuestsAddon.translationSpeechFrame:SetScript("OnEvent", function(self, event, message, sender)
+        CzechQuestsAddon:ShowSpeechTranslation(sender, message)
+    end)
+
+end
diff --git a/Quests/Data/classic_era/0.lua b/Addon/Data/classic_era/0.lua
similarity index 100%
rename from Quests/Data/classic_era/0.lua
rename to Addon/Data/classic_era/0.lua
diff --git a/Quests/Data/classic_era/1.lua b/Addon/Data/classic_era/1.lua
similarity index 100%
rename from Quests/Data/classic_era/1.lua
rename to Addon/Data/classic_era/1.lua
diff --git a/Quests/Data/classic_era/2.lua b/Addon/Data/classic_era/2.lua
similarity index 100%
rename from Quests/Data/classic_era/2.lua
rename to Addon/Data/classic_era/2.lua
diff --git a/Quests/Data/classic_era/3.lua b/Addon/Data/classic_era/3.lua
similarity index 100%
rename from Quests/Data/classic_era/3.lua
rename to Addon/Data/classic_era/3.lua
diff --git a/Quests/Data/classic_era/4.lua b/Addon/Data/classic_era/4.lua
similarity index 100%
rename from Quests/Data/classic_era/4.lua
rename to Addon/Data/classic_era/4.lua
diff --git a/Quests/Data/classic_era/5.lua b/Addon/Data/classic_era/5.lua
similarity index 99%
rename from Quests/Data/classic_era/5.lua
rename to Addon/Data/classic_era/5.lua
index b8a4d88..eabb451 100644
--- a/Quests/Data/classic_era/5.lua
+++ b/Addon/Data/classic_era/5.lua
@@ -934,3 +934,10 @@ CzechQuestsAddon.data.quest[86444] = {
 	completionMale = "Fantastické! Nemůžu uvěřit, že jste se s tím tak trápili! Jsi nějaký stroj? Na mém místě bych asi nechal svět vybuchnout.\n\nSkláním před vámi svůj turban, pane. A žádný dobrý skutek by neměl zůstat bez odměny.", 
 	completionFemale = "", 
 }
+
+
+CzechQuestsAddon.data.speech["Fresh bread for sale!"] = {
+	npc = "",
+	text = "Čerstvý chléb na prodej!",
+}
+
diff --git a/Quests/Data/other.lua b/Addon/Data/other.lua
similarity index 100%
rename from Quests/Data/other.lua
rename to Addon/Data/other.lua
diff --git a/Quests/Data/retail/0.lua b/Addon/Data/retail/0.lua
similarity index 100%
rename from Quests/Data/retail/0.lua
rename to Addon/Data/retail/0.lua
diff --git a/Quests/Data/retail/1.lua b/Addon/Data/retail/1.lua
similarity index 99%
rename from Quests/Data/retail/1.lua
rename to Addon/Data/retail/1.lua
index d9a9c63..c019225 100644
--- a/Quests/Data/retail/1.lua
+++ b/Addon/Data/retail/1.lua
@@ -7767,10 +7767,16 @@ CzechQuestsAddon.data.item["Bloodwake Missive__1"] = {
 	titleFemale = "", 
 	objectiveMale = "", 
 	objectiveFemale = "", 
-	descriptionMale = "Krvavé zprávy, Asbjorne.\n\nNastal tvůj čas rozhřešení.\n\nNaši zvědové na otevřeném moři poslali Jorunovi zprávy. Poprvé po mnoha letech se opět ozval nešťastný ostrov Cyrandall.\n\nNemusím ti připomínat, že žádný Bloodwake v historii se nikdy neodvážil k jeho břehům.\n\nNespočet bláznivých klanů, zlákaných legendami o zapomenutých pokladech a prokletých příšerách, se nechalo zlákat jeho voláním.\n\nNikdo se nikdy nevrátil.\n\nAle pro mocného Bloodwake legendy nic neznamenají!\n\nPokud chceš získat zpět Jorunovu přízeň pro své neúspěchy, pak připluj se svou flotilou k ostrovu a vzneseš nárok na tajemství.\n\nNajdi Cyrce's Circlet a přines ho Jorunovi.\n\nAť je tvůj prapor potřísněn krví.\n\n- Drottin Fjardgrym", 
+	descriptionMale = "Krvavé zprávy, Asbjorne.\n\nNastal tvůj čas rozhřešení.\n\nNaši zvědové na otevřeném moři poslali Jorunovi zprávy. Poprvé po mnoha letech se opět ozval nešťastný ostrov Cyrandall.\n\nNemusím ti připomínat, že žádný Bloodwake v historii se nikdy neodvážil k jeho břehům.\n\nNespočet bláznivých klanů, zlákaných legendami o zapomenutých pokladech a prokletých příšerách, se nechalo zlákat jeho voláním.\n\nNikdo se nikdy nevrátil.\n\nAle pro mocného Bloodwake legendy nic neznamenají!\n\nPokud chceš získat zpět Jorunovu přízeň pro své neúspěchy, pak připluj se svou flotilou k ostrovu a vzneseš nárok na tajemství.\n\nNajdi Cyrce's Circlet a přines ho Jorunovi.\n\nAť je tvůj prapor potřísněn krví.\n\n- Drottin Fjardgrym",
 	descriptionFemale = "", 
 	progressMale = "", 
 	progressFemale = "", 
 	completionMale = "", 
-	completionFemale = "", 
+	completionFemale = "",
 }
+
+CzechQuestsAddon.data.speech["Aye. It can be lonely, followin' a path that others can't see. But don't make the same mistake I did, puttin' it all on yourself."] = {
+	npc = "",
+	text = "Ano. Může to být osamělé, jít cestou, kterou ostatní nevidí. Ale neudělej stejnou chybu jako já, když to všechno svedeš na sebe. ",
+}
+
diff --git a/Addon/Frames/Settings/OptionsFrame.lua b/Addon/Frames/Settings/OptionsFrame.lua
new file mode 100755
index 0000000..7343944
--- /dev/null
+++ b/Addon/Frames/Settings/OptionsFrame.lua
@@ -0,0 +1,29 @@
+-- define FontOptions
+function GetFontOptions()
+    local container = Settings.CreateControlTextContainer()
+    container:Add("morpheus_cz.ttf", "Morpheus (cz)")
+    container:Add("frizquadratatt_cz.ttf", "Friz Quadrata TT (cz)")
+    container:Add("quicksand.ttf", "Quicksand")
+    container:Add("caveat.ttf", "Caveat")
+    return container:GetData()
+end
+
+function CzechQuestsAddon:InitializeSettings()
+    CzechQuestsAddon.optionsFrame = {};
+    CzechQuestsAddon.optionsFrame, layout = Settings.RegisterVerticalLayoutCategory("CzechQuests")
+
+    -- Add options for quests
+    layout:AddInitializer(CreateSettingsListSectionHeaderInitializer("Questy"))
+    CzechQuestsAddon:AddQuestOptions(CzechQuestsAddon.optionsFrame)
+
+    -- Add options for speech
+    layout:AddInitializer(CreateSettingsListSectionHeaderInitializer("Projevy"))
+    CzechQuestsAddon:AddSpeechOptions(CzechQuestsAddon.optionsFrame)
+
+    -- Add options for speech
+    layout:AddInitializer(CreateSettingsListSectionHeaderInitializer("Ostatní"))
+    CzechQuestsAddon:AddOthersOptions(CzechQuestsAddon.optionsFrame)
+
+    -- Store it into Addon options
+    Settings.RegisterAddOnCategory(CzechQuestsAddon.optionsFrame)
+end
\ No newline at end of file
diff --git a/Addon/Frames/Settings/OptionsOthersFrame.lua b/Addon/Frames/Settings/OptionsOthersFrame.lua
new file mode 100755
index 0000000..a3a8391
--- /dev/null
+++ b/Addon/Frames/Settings/OptionsOthersFrame.lua
@@ -0,0 +1,15 @@
+function CzechQuestsAddon:AddOthersOptions(optionsFrame)
+
+    -- Add DEBUG checkbox
+    local debugCheckbox = Settings.RegisterAddOnSetting(
+            optionsFrame,
+            "CzechQuestsAddon__DEBUG_MODE",
+            "DEBUG_MODE",
+            CzechQuestsAddon_Store.config,
+            type(CzechQuestsAddon_Store.config.DEBUG_MODE),
+            "Zapnout DEBUG",
+            CzechQuestsAddon_Store.config.DEBUG_MODE
+    )
+    Settings.CreateCheckbox(optionsFrame, debugCheckbox)
+
+end
diff --git a/Addon/Frames/Settings/OptionsQuestFrame.lua b/Addon/Frames/Settings/OptionsQuestFrame.lua
new file mode 100755
index 0000000..1594fef
--- /dev/null
+++ b/Addon/Frames/Settings/OptionsQuestFrame.lua
@@ -0,0 +1,137 @@
+function CzechQuestsAddon:AddQuestOptions(optionsFrame)
+
+    if (WOW_PROJECT_ID == WOW_PROJECT_CLASSIC) then
+        -- Add DARK mode checkbox
+        local darkModeCheckbox = Settings.RegisterAddOnSetting(
+                optionsFrame,
+                "CzechQuestsAddon__TRANSLATION_QUEST_FRAME_DARK_MODE",
+                "TRANSLATION_QUEST_FRAME_DARK_MODE",
+                CzechQuestsAddon_Store.config,
+                type(CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_DARK_MODE),
+                "Použít tmavý režim",
+                CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_DARK_MODE
+        )
+        Settings.CreateCheckbox(optionsFrame, darkModeCheckbox)
+    end
+
+    -- define FontOptions
+    local function GetFontOptions()
+        local container = Settings.CreateControlTextContainer()
+        container:Add("morpheus_cz.ttf", "Morpheus (cz)")
+        container:Add("frizquadratatt_cz.ttf", "Friz Quadrata TT (cz)")
+        container:Add("quicksand.ttf", "Quicksand")
+        container:Add("caveat.ttf", "Caveat")
+        return container:GetData()
+    end
+
+    -- Add header font dropdown menu
+    local headerFontFamilyDropdown = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY),
+            "Písmo nadpisu",
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY = value
+                CzechQuestsAddon:UpdateTranslationQuestFrameFontSettings()
+            end
+    )
+    Settings.CreateDropdown(optionsFrame, headerFontFamilyDropdown, GetFontOptions)
+
+    -- Add text font dropdown menu
+    local textFontFamilyDropdown = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY),
+            "Písmo textu",
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY = value
+                CzechQuestsAddon:UpdateTranslationQuestFrameFontSettings()
+            end
+    )
+    Settings.CreateDropdown(optionsFrame, textFontFamilyDropdown, GetFontOptions)
+
+    -- Add slider for change primary header font size
+    local primaryHeaderFontSizeSlider = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_QUEST_FRAME_PRIMARY_HEADER_FONT_SIZE",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_PRIMARY_HEADER_FONT_SIZE),
+            "Velikost názvu",
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_PRIMARY_HEADER_FONT_SIZE,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_PRIMARY_HEADER_FONT_SIZE
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_PRIMARY_HEADER_FONT_SIZE = value
+                CzechQuestsAddon:UpdateTranslationQuestFrameFontSettings()
+            end
+    )
+    local primaryHeaderFontSizeSliderOptions = Settings.CreateSliderOptions(10, 30, 1)
+    primaryHeaderFontSizeSliderOptions:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
+    Settings.CreateSlider(optionsFrame, primaryHeaderFontSizeSlider, primaryHeaderFontSizeSliderOptions)
+
+    -- Add slider for change secondary header font size
+    local secondaryHeaderFontSizeSlider = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_QUEST_FRAME_SECONDARY_HEADER_FONT_SIZE",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_SECONDARY_HEADER_FONT_SIZE),
+            "Velikost nadpisu",
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_SECONDARY_HEADER_FONT_SIZE,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_SECONDARY_HEADER_FONT_SIZE
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_SECONDARY_HEADER_FONT_SIZE = value
+                CzechQuestsAddon:UpdateTranslationQuestFrameFontSettings()
+            end
+    )
+    local secondaryHeaderFontSizeSliderOptions = Settings.CreateSliderOptions(10, 30, 1)
+    secondaryHeaderFontSizeSliderOptions:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
+    Settings.CreateSlider(optionsFrame, secondaryHeaderFontSizeSlider, secondaryHeaderFontSizeSliderOptions)
+
+
+    -- Add slider for change secondary header font size
+    local textFontSizeSlider = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE),
+            "Velikost textu",
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE = value
+                CzechQuestsAddon:UpdateTranslationQuestFrameFontSettings()
+            end
+    )
+    local textFontSizeSliderOptions = Settings.CreateSliderOptions(10, 30, 1)
+    textFontSizeSliderOptions:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
+    Settings.CreateSlider(optionsFrame, textFontSizeSlider, textFontSizeSliderOptions)
+
+    -- Add slider for change secondary header font size
+    local textureAlphaSlider = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_QUEST_FRAME_TEXTURE_ALPHA",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXTURE_ALPHA),
+            "Pruhlednost pozadí",
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXTURE_ALPHA,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXTURE_ALPHA
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXTURE_ALPHA = value
+            end
+    )
+    local textureAlphaSliderOptions = Settings.CreateSliderOptions(10, 100, 10)
+    textureAlphaSliderOptions:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
+    Settings.CreateSlider(optionsFrame, textureAlphaSlider, textureAlphaSliderOptions)
+
+end
diff --git a/Addon/Frames/Settings/OptionsSpeechFrame.lua b/Addon/Frames/Settings/OptionsSpeechFrame.lua
new file mode 100755
index 0000000..a47a14c
--- /dev/null
+++ b/Addon/Frames/Settings/OptionsSpeechFrame.lua
@@ -0,0 +1,94 @@
+function CzechQuestsAddon:AddSpeechOptions(optionsFrame)
+
+    -- Add header font dropdown menu
+    local npcFontFamilyDropdown = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_SPEECH_FRAME_NPC_FONT_FAMILY",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_FAMILY),
+            "Písmo jména",
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_FAMILY,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_FAMILY
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_FAMILY = value
+                CzechQuestsAddon:UpdateTranslationSpeechFrameSettings()
+            end
+    )
+    Settings.CreateDropdown(optionsFrame, npcFontFamilyDropdown, GetFontOptions)
+
+    -- Add text font dropdown menu
+    local textFontFamilyDropdown = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_SPEECH_FRAME_TEXT_FONT_FAMILY",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_FAMILY),
+            "Písmo textu",
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_FAMILY,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_FAMILY
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_FAMILY = value
+                CzechQuestsAddon:UpdateTranslationSpeechFrameSettings()
+            end
+    )
+    Settings.CreateDropdown(optionsFrame, textFontFamilyDropdown, GetFontOptions)
+
+    -- Add slider for change primary header font size
+    local npcFontSizeSlider = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_SPEECH_FRAME_NPC_FONT_SIZE",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_SIZE),
+            "Velikost jméma",
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_SIZE,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_SIZE
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_SIZE = value
+                CzechQuestsAddon:UpdateTranslationSpeechFrameSettings()
+            end
+    )
+    local npcFontSizeOption = Settings.CreateSliderOptions(8, 30, 1)
+    npcFontSizeOption:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
+    Settings.CreateSlider(optionsFrame, npcFontSizeSlider, npcFontSizeOption)
+
+    -- Add slider for change secondary header font size
+    local textFontSizeSlider = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_SPEECH_FRAME_TEXT_FONT_SIZE",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_SIZE),
+            "Velikost textu",
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_SIZE,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_SIZE
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_SIZE = value
+                CzechQuestsAddon:UpdateTranslationSpeechFrameSettings()
+            end
+    )
+    local textFontSizeSliderOptions = Settings.CreateSliderOptions(8, 30, 1)
+    textFontSizeSliderOptions:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
+    Settings.CreateSlider(optionsFrame, textFontSizeSlider, textFontSizeSliderOptions)
+
+    -- Add slider for change secondary header font size
+    local windowWidthSizeSlider = Settings.RegisterProxySetting(
+            optionsFrame,
+            "CzechQuestsAddon__TRANSLATION_SPEECH_FRAME_WIDTH",
+            type(CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_WIDTH),
+            "Šírka zpráva",
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_WIDTH,
+            function()
+                return CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_WIDTH
+            end,
+            function(value)
+                CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_WIDTH = value
+                CzechQuestsAddon:UpdateTranslationSpeechFrameSettings()
+            end
+    )
+    local windowWidthSizeSliderOption = Settings.CreateSliderOptions(200, 800, 10)
+    windowWidthSizeSliderOption:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
+    Settings.CreateSlider(optionsFrame, windowWidthSizeSlider, windowWidthSizeSliderOption)
+
+end
diff --git a/Addon/Frames/TranslationQuestFrame.lua b/Addon/Frames/TranslationQuestFrame.lua
new file mode 100755
index 0000000..a8b9974
--- /dev/null
+++ b/Addon/Frames/TranslationQuestFrame.lua
@@ -0,0 +1,194 @@
+function CzechQuestsAddon:CreateTranslationQuestFrame()
+    local frame = {};
+
+    -- Quest Translation Frame
+    frame = CreateFrame("Frame", "CzechQuestTranslationQuestFrame", nil, BackdropTemplateMixin and "BackdropTemplate")
+    frame:SetWidth(300)
+    frame:SetBackdrop({ edgeFile = "Interface/Tooltips/UI-Tooltip-Border", edgeSize = 8 })
+    frame:Hide()
+
+    -- Background Parchment texture
+    frame.texture = frame:CreateTexture(nil, "BACKGROUND", nil, -1);
+    frame.texture:SetAllPoints(true)
+    frame.texture:SetHorizTile(true)
+
+    frame.primaryHeader = CzechQuestsAddon:CreateTranslationQuestFont(
+            frame,
+            "CzechQuestTranslationQuestPrimaryHeader",
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_PRIMARY_HEADER_FONT_SIZE
+    )
+    frame.secondaryHeader = CzechQuestsAddon:CreateTranslationQuestFont(
+            frame,
+            "CzechQuestTranslationQuestSecondaryHeader",
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_SECONDARY_HEADER_FONT_SIZE
+    )
+    frame.primaryText = CzechQuestsAddon:CreateTranslationQuestFont(
+            frame,
+            "CzechQuestTranslationQuestPrimaryText",
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE
+    )
+    frame.secondaryText = CzechQuestsAddon:CreateTranslationQuestFont(
+            frame,
+            "CzechQuestTranslationQuestSecondaryText",
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE
+    )
+
+    -- Apply correct texture for wow version
+    CzechQuestsAddon:SetTranslationQuestFrameTextureFromSettings(frame)
+
+    return frame;
+end
+
+function CzechQuestsAddon:CreateTranslationQuestFont(frame, name, font, size)
+    local label = frame:CreateFontString(name, "OVERLAY")
+    label:SetWidth(frame:GetWidth() - 20)
+    label:SetJustifyH("LEFT")
+    label:SetTextColor(0, 0, 0, 1)
+    label:SetFont(font, size, nil)
+    return label;
+end
+
+function CzechQuestsAddon:ResetTranslationQuestText(frame)
+    frame.primaryHeader:SetText("")
+    frame.secondaryHeader:SetText("")
+    frame.primaryText:SetText("")
+    frame.secondaryText:SetText("")
+end
+
+function CzechQuestsAddon:SetTranslationQuestFrameTextureFromSettings(frame)
+    if (WOW_PROJECT_ID == WOW_PROJECT_CLASSIC) then
+        -- setup default
+        frame.texture:SetTexture("Interface/QUESTFRAME/QuestBG");
+        frame.texture:SetTexCoord(0, .58, 0.005, 0.66)
+        frame.primaryHeader:SetTextColor(0, 0, 0, 1)
+        frame.secondaryHeader:SetTextColor(0, 0, 0, 1)
+        frame.primaryText:SetTextColor(0, 0, 0, 1)
+        frame.secondaryText:SetTextColor(0, 0, 0, 1)
+
+        if CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_DARK_MODE then
+            frame:SetBackdropColor(0, 0, 0, 1)
+            frame.texture:SetColorTexture(0, 0, 0, 1)
+            frame.primaryHeader:SetTextColor(255, 255, 255, 1)
+            frame.secondaryHeader:SetTextColor(255, 255, 255, 1)
+            frame.primaryText:SetTextColor(255, 255, 255, 1)
+            frame.secondaryText:SetTextColor(255, 255, 255, 1)
+        end
+    else
+        -- setup default
+        frame.texture:SetTexture("Interface/QUESTFRAME/QuestBackgroundParchment");
+        frame.texture:SetTexCoord(0, .01, 0, 0.4)
+        frame.primaryHeader:SetTextColor(0, 0, 0, 1)
+        frame.secondaryHeader:SetTextColor(0, 0, 0, 1)
+        frame.primaryText:SetTextColor(0, 0, 0, 1)
+        frame.secondaryText:SetTextColor(0, 0, 0, 1)
+
+        -- Read CVar from settings to setup same parchment as Quest frame
+        if C_CVar.GetCVar("questTextContrast") == "1" then -- Brown
+            frame.texture:SetTexCoord(0, .01, .4, .8)
+        elseif C_CVar.GetCVar("questTextContrast") == "2"
+                or C_CVar.GetCVar("questTextContrast") == "3" then  -- Gray
+            frame.texture:SetColorTexture(255, 255, 255, 1)
+        elseif C_CVar.GetCVar("questTextContrast") == "4" then -- Black
+            frame.texture:SetColorTexture(0, 0, 0, 1)
+            frame.primaryHeader:SetTextColor(255, 255, 255, 1)
+            frame.secondaryHeader:SetTextColor(255, 255, 255, 1)
+            frame.primaryText:SetTextColor(255, 255, 255, 1)
+            frame.secondaryText:SetTextColor(255, 255, 255, 1)
+        end
+    end
+end
+
+function CzechQuestsAddon:UpdateTranslationQuestFrameFontSettings()
+    CzechQuestsAddon.translationQuestFrame.primaryHeader:SetFont(
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_PRIMARY_HEADER_FONT_SIZE,
+            nil
+    )
+    CzechQuestsAddon.translationQuestFrame.secondaryHeader:SetFont(
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_SECONDARY_HEADER_FONT_SIZE,
+            nil
+    )
+    CzechQuestsAddon.translationQuestFrame.primaryText:SetFont(
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE,
+            nil
+    )
+    CzechQuestsAddon.translationQuestFrame.secondaryText:SetFont(
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE,
+            nil
+    )
+    CzechQuestsAddon.translationQuestFrame.texture:SetAlpha(
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXTURE_ALPHA / 100
+    )
+end
+
+function CzechQuestsAddon:ShowTranslationQuestFrame(primaryHeader, primaryText, secondaryHeader, secondaryText, parentFrame, yOffset, xOffset)
+    -- replace placeholders with current values
+    primaryText = CzechQuestsAddon:replacePlaceholders(primaryText);
+    secondaryText = CzechQuestsAddon:replacePlaceholders(secondaryText);
+
+    -- when user change own setting, does not require reload, just apply it
+    CzechQuestsAddon:SetTranslationQuestFrameTextureFromSettings(CzechQuestsAddon.translationQuestFrame)
+
+    -- reset all texts
+    CzechQuestsAddon:ResetTranslationQuestText(CzechQuestsAddon.translationQuestFrame)
+
+    -- set text to labels
+    CzechQuestsAddon.translationQuestFrame.primaryHeader:SetText(primaryHeader)
+    CzechQuestsAddon.translationQuestFrame.primaryText:SetText(primaryText)
+    CzechQuestsAddon.translationQuestFrame.secondaryHeader:SetText(secondaryHeader)
+    CzechQuestsAddon.translationQuestFrame.secondaryText:SetText(secondaryText)
+
+    local primaryTextTopMargin = -CzechQuestsAddon.translationQuestFrame.primaryHeader:GetHeight() - 15
+    local secondaryHeaderTopMargin = primaryTextTopMargin - CzechQuestsAddon.translationQuestFrame.primaryText:GetHeight() - 20
+    local secondaryTextTopMargin = secondaryHeaderTopMargin - CzechQuestsAddon.translationQuestFrame.secondaryHeader:GetHeight() - 5
+
+    -- apply gap between headers and texts
+    local gap = 10
+    local function addPadding(text, value)
+        if text ~= "" then
+            gap = gap + value
+        end
+    end
+
+    addPadding(primaryHeader, 10)
+    addPadding(primaryText, 5)
+    addPadding(secondaryHeader, 25)
+    addPadding(secondaryText, 5)
+
+    -- apply positions
+    CzechQuestsAddon.translationQuestFrame.primaryHeader:SetPoint("TOPLEFT", 10, -10)
+    CzechQuestsAddon.translationQuestFrame.primaryText:SetPoint("TOPLEFT", 10, primaryTextTopMargin)
+    CzechQuestsAddon.translationQuestFrame.secondaryHeader:SetPoint("TOPLEFT", 10, secondaryHeaderTopMargin)
+    CzechQuestsAddon.translationQuestFrame.secondaryText:SetPoint("TOPLEFT", 10, secondaryTextTopMargin)
+
+    -- apply changes per wow
+    if (WOW_PROJECT_ID == WOW_PROJECT_CLASSIC) then
+        CzechQuestsAddon.translationQuestFrame:SetPoint("TOPLEFT", parentFrame, "TOPRIGHT", -8 + xOffset, yOffset)
+    else
+        CzechQuestsAddon.translationQuestFrame:SetPoint("TOPLEFT", parentFrame, "TOPRIGHT", 8 + xOffset, yOffset)
+    end
+
+    -- calculate height
+    local height = 0;
+    local heights = {
+        CzechQuestsAddon.translationQuestFrame.primaryHeader:GetHeight(),
+        CzechQuestsAddon.translationQuestFrame.primaryText:GetHeight(),
+        CzechQuestsAddon.translationQuestFrame.secondaryHeader:GetHeight(),
+        CzechQuestsAddon.translationQuestFrame.secondaryText:GetHeight(),
+        gap,
+        10
+    }
+    for _, value in ipairs(heights) do
+        height = height + value
+    end
+
+    CzechQuestsAddon.translationQuestFrame:SetParent(parentFrame)
+    CzechQuestsAddon.translationQuestFrame:SetHeight(height < 200 and 200 or height)
+end
\ No newline at end of file
diff --git a/Addon/Frames/TranslationSpeechFrame.lua b/Addon/Frames/TranslationSpeechFrame.lua
new file mode 100755
index 0000000..081d3ff
--- /dev/null
+++ b/Addon/Frames/TranslationSpeechFrame.lua
@@ -0,0 +1,59 @@
+function CzechQuestsAddon:CreateTranslationSpeechFrame()
+    local frame = {};
+
+    -- Speech Translation Frame
+    frame = CreateFrame("Frame", "CzechQuestsTranslationSpeechFrame", UIParant, "BackdropTemplate")
+    frame:SetSize(CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_WIDTH, 50)
+    frame:SetPoint("CENTER", UIParent, "CENTER")
+
+    -- Make draggable
+    frame:EnableMouse(true)
+    frame:SetMovable(true)
+    frame:RegisterForDrag("LeftButton")
+    frame:SetScript("OnDragStart", function(self) self:StartMoving() end)
+    frame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end)
+
+    frame:Hide()
+
+    frame.npcName = frame:CreateFontString("CzechQuestsTranslationSpeechNpcName", "OVERLAY")
+    frame.npcName:SetTextColor(1, 1, 0)
+    frame.npcName:SetFont(
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_SIZE,
+            "OUTLINE"
+    )
+    frame.npcName:SetPoint("LEFT", frame, "LEFT", 0, 5)
+
+    frame.text = frame:CreateFontString("CzechQuestsTranslationSpeechText", "OVERLAY")
+    frame.text:SetTextColor(1, 1, 1)
+    frame.text:SetWordWrap(true)
+    frame.text:SetFont(
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_SIZE,
+            "OUTLINE"
+    )
+    frame.text:SetTextColor(1, 1, 1)
+    frame.text:SetWidth(CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_WIDTH)
+    frame.text:SetJustifyH("LEFT")
+    frame.text:SetJustifyV("TOP")
+
+    return frame;
+end
+
+function CzechQuestsAddon:UpdateTranslationSpeechFrameSettings()
+    -- Font
+    CzechQuestsAddon.translationSpeechFrame.npcName:SetFont(
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_SIZE,
+            "OUTLINE"
+    )
+    CzechQuestsAddon.translationSpeechFrame.text:SetFont(
+            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_FAMILY,
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_SIZE,
+            "OUTLINE"
+    )
+
+    -- Width
+    CzechQuestsAddon.translationSpeechFrame.text:SetWidth(CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_WIDTH)
+    CzechQuestsAddon.translationSpeechFrame:SetWidth(CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_WIDTH)
+end
\ No newline at end of file
diff --git a/Quests/Utils.lua b/Addon/Utils.lua
similarity index 100%
rename from Quests/Utils.lua
rename to Addon/Utils.lua
diff --git a/Fonts/caveat.ttf b/Assets/Fonts/caveat.ttf
similarity index 100%
rename from Fonts/caveat.ttf
rename to Assets/Fonts/caveat.ttf
diff --git a/Fonts/frizquadratatt_cz.ttf b/Assets/Fonts/frizquadratatt_cz.ttf
similarity index 100%
rename from Fonts/frizquadratatt_cz.ttf
rename to Assets/Fonts/frizquadratatt_cz.ttf
diff --git a/Fonts/morpheus_cz.ttf b/Assets/Fonts/morpheus_cz.ttf
similarity index 100%
rename from Fonts/morpheus_cz.ttf
rename to Assets/Fonts/morpheus_cz.ttf
diff --git a/Fonts/quicksand.ttf b/Assets/Fonts/quicksand.ttf
similarity index 100%
rename from Fonts/quicksand.ttf
rename to Assets/Fonts/quicksand.ttf
diff --git a/CzechQuests.lua b/CzechQuests.lua
index 842d717..7cc0a59 100644
--- a/CzechQuests.lua
+++ b/CzechQuests.lua
@@ -1,11 +1,12 @@
 -- Namespace
 CzechQuestsAddon = {};
-CzechQuestsAddon.fontPath = "Interface\\AddOns\\CzechQuests\\Fonts\\"
+CzechQuestsAddon.fontPath = "Interface\\AddOns\\CzechQuests\\Assets\\Fonts\\"
 
 -- Define data
 CzechQuestsAddon.data = {};
 CzechQuestsAddon.data.quest = {};
 CzechQuestsAddon.data.item = {};
+CzechQuestsAddon.data.speech = {}
 
 -- Event handler frame
 local frame = CreateFrame("Frame")
@@ -23,30 +24,52 @@ local function OnEvent(self, event, addonName, ...)
         if not CzechQuestsAddon_Store.config.DEBUG_MODE then
             CzechQuestsAddon_Store.config.DEBUG_MODE = false;
         end
-        if not CzechQuestsAddon_Store.config.DARK_MODE then
-            CzechQuestsAddon_Store.config.DARK_MODE = false;
+
+        -- Quests
+        if not CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_DARK_MODE then
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_DARK_MODE = false;
         end
-        if not CzechQuestsAddon_Store.config.TRANSLATION_FRAME_PRIMARY_HEADER_FONT_SIZE then
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_PRIMARY_HEADER_FONT_SIZE = 18;
+        if not CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_PRIMARY_HEADER_FONT_SIZE then
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_PRIMARY_HEADER_FONT_SIZE = 18;
         end
-        if not CzechQuestsAddon_Store.config.TRANSLATION_FRAME_SECONDARY_HEADER_FONT_SIZE then
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_SECONDARY_HEADER_FONT_SIZE = 16;
+        if not CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_SECONDARY_HEADER_FONT_SIZE then
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_SECONDARY_HEADER_FONT_SIZE = 16;
         end
-        if not CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_SIZE then
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_SIZE = 14;
+        if not CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE then
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_SIZE = 14;
         end
-        if not CzechQuestsAddon_Store.config.TRANSLATION_FRAME_HEADER_FONT_FAMILY then
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_HEADER_FONT_FAMILY = 'morpheus_cz.ttf';
+        if not CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY then
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_HEADER_FONT_FAMILY = 'morpheus_cz.ttf';
         end
-        if not CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_FAMILY then
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_FAMILY = 'frizquadratatt_cz.ttf';
+        if not CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY then
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXT_FONT_FAMILY = 'frizquadratatt_cz.ttf';
         end
-        if not CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXTURE_ALPHA then
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXTURE_ALPHA = 80;
+        if not CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXTURE_ALPHA then
+            CzechQuestsAddon_Store.config.TRANSLATION_QUEST_FRAME_TEXTURE_ALPHA = 80;
         end
 
-        -- Initialize Options
-        CzechQuestsAddon:InitializeOptions()
+        -- Speech
+        if not CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_SIZE then
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_SIZE = 14;
+        end
+        if not CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_SIZE then
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_SIZE = 12;
+        end
+        if not CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_FAMILY then
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_NPC_FONT_FAMILY = 'frizquadratatt_cz.ttf';
+        end
+        if not CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_FAMILY then
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_TEXT_FONT_FAMILY = 'frizquadratatt_cz.ttf';
+        end
+        if not CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_WIDTH then
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_WIDTH = 320;
+        end
+        if not CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_POSITION then
+            CzechQuestsAddon_Store.config.TRANSLATION_SPEECH_FRAME_POSITION = "0,0";
+        end
+
+        -- Initialize settings
+        CzechQuestsAddon:InitializeSettings()
 
         -- Initialize Quests
         CzechQuestsAddon:InitializeTranslations()
diff --git a/CzechQuests_Mainline.toc b/CzechQuests_Mainline.toc
index fda52fa..701b49a 100755
--- a/CzechQuests_Mainline.toc
+++ b/CzechQuests_Mainline.toc
@@ -2,19 +2,22 @@
 ## Title: CzechQuests
 ## Notes: Addon displays texts of quests in Czech language as tooltip
 ## Author: Roman Jaroš
-## Version: 0.2.11
+## Version: 0.2.10
 ## SavedVariables: CzechQuestsAddon_Store
 
 CzechQuests.lua
 
-Quests/Data/0.lua
-Quests/Data/1.lua
+Addon/Data/0.lua
+Addon/Data/1.lua
 
-Quests/Data/other.lua
+Addon/Data/other.lua
 
+Addon/Frames/Settings/OptionsQuestFrame.lua
+Addon/Frames/Settings/OptionsSpeechFrame.lua
+Addon/Frames/Settings/OptionsOthersFrame.lua
+Addon/Frames/TranslationQuestFrame.lua
+Addon/Frames/TranslationSpeechFrame.lua
+Addon/Frames/Settings/OptionsFrame.lua
 
-Quests/Frames/TranslationFrame.lua
-Quests/Frames/OptionsFrame.lua
-
-Quests/Utils.lua
-Quests/Quests.lua
\ No newline at end of file
+Addon/Utils.lua
+Addon/Addon.lua
\ No newline at end of file
diff --git a/CzechQuests_Vanilla.toc b/CzechQuests_Vanilla.toc
index 7cb73cb..a71f236 100755
--- a/CzechQuests_Vanilla.toc
+++ b/CzechQuests_Vanilla.toc
@@ -2,22 +2,26 @@
 ## Title: CzechQuests
 ## Notes: Addon displays texts of quests in Czech language as tooltip
 ## Author: Roman Jaroš
-## Version: 0.1.9
+## Version: 0.1.10
 ## SavedVariables: CzechQuestsAddon_Store
 
 CzechQuests.lua
 
-Quests/Data/0.lua
-Quests/Data/1.lua
-Quests/Data/2.lua
-Quests/Data/3.lua
-Quests/Data/4.lua
-Quests/Data/5.lua
+Addon/Data/0.lua
+Addon/Data/1.lua
+Addon/Data/2.lua
+Addon/Data/3.lua
+Addon/Data/4.lua
+Addon/Data/5.lua
 
-Quests/Data/other.lua
+Addon/Data/other.lua
 
-Quests/Frames/TranslationFrame.lua
-Quests/Frames/OptionsFrame.lua
+Addon/Frames/Settings/OptionsQuestFrame.lua
+Addon/Frames/Settings/OptionsSpeechFrame.lua
+Addon/Frames/Settings/OptionsOthersFrame.lua
+Addon/Frames/TranslationQuestFrame.lua
+Addon/Frames/TranslationSpeechFrame.lua
+Addon/Frames/Settings/OptionsFrame.lua
 
-Quests/Utils.lua
-Quests/Quests.lua
\ No newline at end of file
+Addon/Utils.lua
+Addon/Addon.lua
\ No newline at end of file
diff --git a/Quests/Frames/OptionsFrame.lua b/Quests/Frames/OptionsFrame.lua
deleted file mode 100755
index d020139..0000000
--- a/Quests/Frames/OptionsFrame.lua
+++ /dev/null
@@ -1,157 +0,0 @@
-function CzechQuestsAddon:InitializeOptions()
-    CzechQuestsAddon.optionsFrame = {};
-    CzechQuestsAddon.optionsFrame = Settings.RegisterVerticalLayoutCategory("CzechQuests")
-
-    -- Add DEBUG checkbox
-    local debugCheckbox = Settings.RegisterAddOnSetting(
-            CzechQuestsAddon.optionsFrame,
-            "CzechQuestsAddon__DEBUG_MODE",
-            "DEBUG_MODE",
-            CzechQuestsAddon_Store.config,
-            type(CzechQuestsAddon_Store.config.DEBUG_MODE),
-            "Enable DEBUG mode",
-            CzechQuestsAddon_Store.config.DEBUG_MODE
-    )
-    Settings.CreateCheckbox(CzechQuestsAddon.optionsFrame, debugCheckbox)
-
-    if (WOW_PROJECT_ID == WOW_PROJECT_CLASSIC) then
-        -- Add DARK mode checkbox
-        local darkModeCheckbox = Settings.RegisterAddOnSetting(
-                CzechQuestsAddon.optionsFrame,
-                "CzechQuestsAddon__DARK_MODE",
-                "DARK_MODE",
-                CzechQuestsAddon_Store.config,
-                type(CzechQuestsAddon_Store.config.DARK_MODE),
-                "Use dark mode",
-                CzechQuestsAddon_Store.config.DARK_MODE
-        )
-        Settings.CreateCheckbox(CzechQuestsAddon.optionsFrame, darkModeCheckbox)
-    end
-
-    -- define FontOptions
-    local function GetFontOptions()
-        local container = Settings.CreateControlTextContainer()
-        container:Add("morpheus_cz.ttf", "Morpheus (cz)")
-        container:Add("frizquadratatt_cz.ttf", "Friz Quadrata TT (cz)")
-        container:Add("quicksand.ttf", "Quicksand")
-        container:Add("caveat.ttf", "Caveat")
-        return container:GetData()
-    end
-
-    -- Add header font dropdown menu
-    local headerFontFamilyDropdown = Settings.RegisterProxySetting(
-            CzechQuestsAddon.optionsFrame,
-            "CzechQuestsAddon__TRANSLATION_FRAME_HEADER_FONT_FAMILY",
-            type(CzechQuestsAddon_Store.config.TRANSLATION_FRAME_HEADER_FONT_FAMILY),
-            "Header font",
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_HEADER_FONT_FAMILY,
-            function()
-                return CzechQuestsAddon_Store.config.TRANSLATION_FRAME_HEADER_FONT_FAMILY
-            end,
-            function(value)
-                CzechQuestsAddon_Store.config.TRANSLATION_FRAME_HEADER_FONT_FAMILY = value
-                CzechQuestsAddon:UpdateTranslationFrameFontSettings()
-            end
-    )
-    Settings.CreateDropdown(CzechQuestsAddon.optionsFrame, headerFontFamilyDropdown, GetFontOptions)
-
-    -- Add text font dropdown menu
-    local textFontFamilyDropdown = Settings.RegisterProxySetting(
-            CzechQuestsAddon.optionsFrame,
-            "CzechQuestsAddon__TRANSLATION_FRAME_TEXT_FONT_FAMILY",
-            type(CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_FAMILY),
-            "Text font",
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_FAMILY,
-            function()
-                return CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_FAMILY
-            end,
-            function(value)
-                CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_FAMILY = value
-                CzechQuestsAddon:UpdateTranslationFrameFontSettings()
-            end
-    )
-    Settings.CreateDropdown(CzechQuestsAddon.optionsFrame, textFontFamilyDropdown, GetFontOptions)
-
-    -- Add slider for change primary header font size
-    local primaryHeaderFontSizeSlider = Settings.RegisterProxySetting(
-            CzechQuestsAddon.optionsFrame,
-            "CzechQuestsAddon__TRANSLATION_FRAME_PRIMARY_HEADER_FONT_SIZE",
-            type(CzechQuestsAddon_Store.config.TRANSLATION_FRAME_PRIMARY_HEADER_FONT_SIZE),
-            "Quest title size",
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_PRIMARY_HEADER_FONT_SIZE,
-            function()
-                return CzechQuestsAddon_Store.config.TRANSLATION_FRAME_PRIMARY_HEADER_FONT_SIZE
-            end,
-            function(value)
-                CzechQuestsAddon_Store.config.TRANSLATION_FRAME_PRIMARY_HEADER_FONT_SIZE = value
-                CzechQuestsAddon:UpdateTranslationFrameFontSettings()
-            end
-    )
-    local primaryHeaderFontSizeSliderOptions = Settings.CreateSliderOptions(10, 30, 1)
-    primaryHeaderFontSizeSliderOptions:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
-    Settings.CreateSlider(CzechQuestsAddon.optionsFrame, primaryHeaderFontSizeSlider, primaryHeaderFontSizeSliderOptions)
-
-    -- Add slider for change secondary header font size
-    local secondaryHeaderFontSizeSlider = Settings.RegisterProxySetting(
-            CzechQuestsAddon.optionsFrame,
-            "CzechQuestsAddon__TRANSLATION_FRAME_SECONDARY_HEADER_FONT_SIZE",
-            type(CzechQuestsAddon_Store.config.TRANSLATION_FRAME_SECONDARY_HEADER_FONT_SIZE),
-            "Secondary title size",
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_SECONDARY_HEADER_FONT_SIZE,
-            function()
-                return CzechQuestsAddon_Store.config.TRANSLATION_FRAME_SECONDARY_HEADER_FONT_SIZE
-            end,
-            function(value)
-                CzechQuestsAddon_Store.config.TRANSLATION_FRAME_SECONDARY_HEADER_FONT_SIZE = value
-                CzechQuestsAddon:UpdateTranslationFrameFontSettings()
-            end
-    )
-    local secondaryHeaderFontSizeSliderOptions = Settings.CreateSliderOptions(10, 30, 1)
-    secondaryHeaderFontSizeSliderOptions:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
-    Settings.CreateSlider(CzechQuestsAddon.optionsFrame, secondaryHeaderFontSizeSlider, secondaryHeaderFontSizeSliderOptions)
-
-
-    -- Add slider for change secondary header font size
-    local textFontSizeSlider = Settings.RegisterProxySetting(
-            CzechQuestsAddon.optionsFrame,
-            "CzechQuestsAddon__TRANSLATION_FRAME_TEXT_FONT_SIZE",
-            type(CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_SIZE),
-            "Text size",
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_SIZE,
-            function()
-                return CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_SIZE
-            end,
-            function(value)
-                local currentFont, _, currentFlags = {}
-                currentFont, _, currentFlags = CzechQuestsAddon.translationFrame.primaryText:GetFont()
-                CzechQuestsAddon.translationFrame.primaryText:SetFont(currentFont, value, currentFlags)
-                currentFont, _, currentFlags = CzechQuestsAddon.translationFrame.secondaryText:GetFont()
-                CzechQuestsAddon.translationFrame.secondaryText:SetFont(currentFont, value, currentFlags)
-                CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_SIZE = value
-            end
-    )
-    local textFontSizeSliderOptions = Settings.CreateSliderOptions(10, 30, 1)
-    textFontSizeSliderOptions:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
-    Settings.CreateSlider(CzechQuestsAddon.optionsFrame, textFontSizeSlider, textFontSizeSliderOptions)
-
-    -- Add slider for change secondary header font size
-    local textureAlphaSlider = Settings.RegisterProxySetting(
-            CzechQuestsAddon.optionsFrame,
-            "CzechQuestsAddon__TRANSLATION_FRAME_TEXTURE_ALPHA",
-            type(CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXTURE_ALPHA),
-            "Texture transparency",
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXTURE_ALPHA,
-            function()
-                return CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXTURE_ALPHA
-            end,
-            function(value)
-                CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXTURE_ALPHA = value
-            end
-    )
-    local textureAlphaSliderOptions = Settings.CreateSliderOptions(10, 100, 10)
-    textureAlphaSliderOptions:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
-    Settings.CreateSlider(CzechQuestsAddon.optionsFrame, textureAlphaSlider, textureAlphaSliderOptions)
-
-    -- Store it into Addon options
-    Settings.RegisterAddOnCategory(CzechQuestsAddon.optionsFrame)
-end
diff --git a/Quests/Frames/TranslationFrame.lua b/Quests/Frames/TranslationFrame.lua
deleted file mode 100755
index 6d2a929..0000000
--- a/Quests/Frames/TranslationFrame.lua
+++ /dev/null
@@ -1,129 +0,0 @@
-function CzechQuestsAddon:CreateTranslationFrame()
-    local frame = {};
-
-    -- Main Translation Frame
-    frame = CreateFrame("Frame", "CzechQuestTranslationFrame", nil, BackdropTemplateMixin and "BackdropTemplate")
-    frame:SetWidth(300)
-    frame:SetBackdrop({ edgeFile = "Interface/Tooltips/UI-Tooltip-Border", edgeSize = 8 })
-    frame:Hide()
-
-    -- Background Parchment texture
-    frame.texture = frame:CreateTexture(nil, "BACKGROUND", nil, -1);
-    frame.texture:SetAllPoints(true)
-    frame.texture:SetHorizTile(true)
-
-    frame.primaryHeader = CzechQuestsAddon:CreateTranslationFont(
-            frame,
-            "CzechQuestTranslationPrimaryHeader",
-            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_FRAME_HEADER_FONT_FAMILY,
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_PRIMARY_HEADER_FONT_SIZE
-    )
-    frame.secondaryHeader = CzechQuestsAddon:CreateTranslationFont(
-            frame,
-            "CzechQuestTranslationSecondaryHeader",
-            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_FRAME_HEADER_FONT_FAMILY,
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_SECONDARY_HEADER_FONT_SIZE
-    )
-    frame.primaryText = CzechQuestsAddon:CreateTranslationFont(
-            frame,
-            "CzechQuestTranslationPrimaryText",
-            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_FAMILY,
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_SIZE
-    )
-    frame.secondaryText = CzechQuestsAddon:CreateTranslationFont(
-            frame,
-            "CzechQuestTranslationSecondaryText",
-            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_FAMILY,
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_SIZE
-    )
-
-    -- Apply correct texture for wow version
-    CzechQuestsAddon:SetTextureFromSettings(frame)
-
-    return frame;
-end
-
-function CzechQuestsAddon:CreateTranslationFont(frame, name, font, size)
-    local label = frame:CreateFontString(name, "OVERLAY")
-    label:SetWidth(frame:GetWidth() - 20)
-    label:SetJustifyH("LEFT")
-    label:SetTextColor(0, 0, 0, 1)
-    label:SetFont(font, size, nil)
-    return label;
-end
-
-function CzechQuestsAddon:ResetTranslationText(frame)
-    frame.primaryHeader:SetText("")
-    frame.secondaryHeader:SetText("")
-    frame.primaryText:SetText("")
-    frame.secondaryText:SetText("")
-end
-
-function CzechQuestsAddon:SetTextureFromSettings(frame)
-    if (WOW_PROJECT_ID == WOW_PROJECT_CLASSIC) then
-        -- setup default
-        frame.texture:SetTexture("Interface/QUESTFRAME/QuestBG");
-        frame.texture:SetTexCoord(0, .58, 0.005, 0.66)
-        frame.primaryHeader:SetTextColor(0, 0, 0, 1)
-        frame.secondaryHeader:SetTextColor(0, 0, 0, 1)
-        frame.primaryText:SetTextColor(0, 0, 0, 1)
-        frame.secondaryText:SetTextColor(0, 0, 0, 1)
-
-        if CzechQuestsAddon_Store.config.DARK_MODE then
-            frame:SetBackdropColor(0, 0, 0, 1)
-            frame.texture:SetColorTexture(0, 0, 0, 1)
-            frame.primaryHeader:SetTextColor(255, 255, 255, 1)
-            frame.secondaryHeader:SetTextColor(255, 255, 255, 1)
-            frame.primaryText:SetTextColor(255, 255, 255, 1)
-            frame.secondaryText:SetTextColor(255, 255, 255, 1)
-        end
-    else
-        -- setup default
-        frame.texture:SetTexture("Interface/QUESTFRAME/QuestBackgroundParchment");
-        frame.texture:SetTexCoord(0, .01, 0, 0.4)
-        frame.primaryHeader:SetTextColor(0, 0, 0, 1)
-        frame.secondaryHeader:SetTextColor(0, 0, 0, 1)
-        frame.primaryText:SetTextColor(0, 0, 0, 1)
-        frame.secondaryText:SetTextColor(0, 0, 0, 1)
-
-        -- Read CVar from settings to setup same parchment as Quest frame
-        if C_CVar.GetCVar("questTextContrast") == "1" then -- Brown
-            frame.texture:SetTexCoord(0, .01, .4, .8)
-        elseif C_CVar.GetCVar("questTextContrast") == "2"
-                or C_CVar.GetCVar("questTextContrast") == "3" then  -- Gray
-            frame.texture:SetColorTexture(255, 255, 255, 1)
-        elseif C_CVar.GetCVar("questTextContrast") == "4" then -- Black
-            frame.texture:SetColorTexture(0, 0, 0, 1)
-            frame.primaryHeader:SetTextColor(255, 255, 255, 1)
-            frame.secondaryHeader:SetTextColor(255, 255, 255, 1)
-            frame.primaryText:SetTextColor(255, 255, 255, 1)
-            frame.secondaryText:SetTextColor(255, 255, 255, 1)
-        end
-    end
-end
-
-function CzechQuestsAddon:UpdateTranslationFrameFontSettings()
-    CzechQuestsAddon.translationFrame.primaryHeader:SetFont(
-            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_FRAME_HEADER_FONT_FAMILY,
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_PRIMARY_HEADER_FONT_SIZE,
-            nil
-    )
-    CzechQuestsAddon.translationFrame.secondaryHeader:SetFont(
-            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_FRAME_HEADER_FONT_FAMILY,
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_SECONDARY_HEADER_FONT_SIZE,
-            nil
-    )
-    CzechQuestsAddon.translationFrame.primaryText:SetFont(
-            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_FAMILY,
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_SIZE,
-            nil
-    )
-    CzechQuestsAddon.translationFrame.secondaryText:SetFont(
-            CzechQuestsAddon.fontPath .. CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_FAMILY,
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXT_FONT_SIZE,
-            nil
-    )
-    CzechQuestsAddon.translationFrame.texture:SetAlpha(
-            CzechQuestsAddon_Store.config.TRANSLATION_FRAME_TEXTURE_ALPHA / 100
-    )
-end
\ No newline at end of file
diff --git a/sync.sh b/sync.sh
index ebfb728..740bbfc 100644
--- a/sync.sh
+++ b/sync.sh
@@ -13,7 +13,8 @@ wow_destiny_folder="classic_era"
 dest_folder="/Applications/World of Warcraft/_${wow_destiny_folder}_/Interface/AddOns/CzechQuests"
 
 fswatch -o "$src_folder" | while read -r change; do
-  rsync -avu --delete "$src_folder" "$dest_folder" --exclude={'.*','*.png','*.sh','*.md','Quests/Data/**','downloader/**'}
-  rsync -au --delete "$src_folder/Quests/Data/$wow_source_folder/" "$dest_folder/Quests/Data/"
-  cp "$src_folder/Quests/Data/other.lua" "$dest_folder/Quests/Data/"
-done
\ No newline at end of file
+  rsync -avu --delete "$src_folder" "$dest_folder" --exclude={'.*','*.png','*.sh','*.md','Addon/Data/**','downloader/**'}
+  rsync -au --delete "$src_folder/Addon/Data/$wow_source_folder/" "$dest_folder/Addon/Data/"
+  cp "$src_folder/Addon/Data/other.lua" "$dest_folder/Addon/Data/"
+done
+