aboutsummaryrefslogtreecommitdiff
path: root/src/readerview.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/readerview.cc')
-rw-r--r--src/readerview.cc73
1 files changed, 26 insertions, 47 deletions
diff --git a/src/readerview.cc b/src/readerview.cc
index d008be6..9eace05 100644
--- a/src/readerview.cc
+++ b/src/readerview.cc
@@ -1,10 +1,13 @@
#include "readerview.h"
-#include <libbible.h>
#include <gdkmm/rgba.h>
#include <algorithm>
+#include <libbible.h>
+#include <iostream>
using namespace std;
+std::vector<libbible::passage> conf;
+
std::string getCurrMod() {
auto mods = libbible::getModuleNames();
std::string currMod = libbible::settingsRead("biblereader::currMod");
@@ -24,28 +27,9 @@ std::string getCurrMod() {
return currMod;
}
-void updateConfig(string book, int chapter, struct config *conf) {
- string currMod = getCurrMod();
- if(currMod.empty()) {
- conf->chapter = 0;
- conf->book = "";
- conf->bookFull = "";
- conf->maxChapter = 0;
- conf->version = "";
- } else {
- auto passages = libbible::getPassages(currMod, book);
- conf->chapter = chapter;
- conf->book = passages[0].bookShort;
- conf->bookFull = passages[0].book;
- conf->maxChapter = passages.back().chapterStart;
- conf->version = currMod;
- }
-}
-
ReaderView::ReaderView()
: text()
{
- this->conf = new struct config;
text.set_editable(false);
text.set_cursor_visible(false);
text.set_wrap_mode(Gtk::WrapMode::WRAP_WORD_CHAR);
@@ -55,42 +39,42 @@ ReaderView::ReaderView()
scroll->add(text);
add(*scroll);
// Open the passage we had last time
- std::string book = libbible::settingsRead("book");
- int chapter = libbible::settingsReadInt("chapter");
- if(book.empty() || chapter == 0) {
- book = "Genesis";
- chapter = 1;
+ setBook(libbible::settingsRead("book"));
+ if(libbible::settingsRead("book").empty() || getChapter() == 0) {
+ setBook("Genesis");
}
- updateConfig(book, chapter, conf);
refresh();
}
ReaderView::~ReaderView() {}
-void ReaderView::setChapter(int chapter) {
- conf->chapter = chapter;
- refresh();
+void ReaderView::setChapter(unsigned int chapter) {
+ libbible::settingsWriteInt("chapter", chapter);
}
-int ReaderView::getChapter() {
- return conf->chapter;
+unsigned int ReaderView::getChapter() {
+ if(conf.empty()) return 0;
+ return libbible::settingsReadInt("chapter");
}
-int ReaderView::getChapterMax() {
- return conf->maxChapter;
+unsigned int ReaderView::getChapterMax() {
+ if(conf.empty()) return 0;
+ return conf.back().chapterEnd;
}
void ReaderView::setBook(std::string book) {
- conf->book = book;
- refresh();
+ libbible::settingsWrite("book", book);
+ conf = libbible::getPassages(getCurrMod(), book);
}
std::string ReaderView::getBook() {
- return conf->book;
+ if(conf.empty()) return "";
+ return conf[0].bookShort;
}
std::string ReaderView::getBookFull() {
- return conf->bookFull;
+ if(conf.empty()) return "";
+ return conf[0].book;
}
std::vector<std::string> ReaderView::getAllBooks() {
@@ -101,17 +85,8 @@ std::vector<std::string> ReaderView::getAllBooks() {
return libbible::getBooks(currMod);
}
-std::string ReaderView::getVersion() {
- return conf->version;
-}
-
void ReaderView::refresh() {
auto buf = text.get_buffer();
- libbible::settingsWrite("book", conf->book);
- libbible::settingsWriteInt("chapter", conf->chapter);
- updateConfig(conf->book, conf->chapter, conf);
- // Get passage back
- string ref = conf->book + " " + std::to_string(conf->chapter);
buf->set_text(""); // Clear contents
string currMod = getCurrMod();
@@ -124,7 +99,11 @@ void ReaderView::refresh() {
return;
}
- auto texts = libbible::getText(libbible::getPassage(currMod, ref));
+ conf = libbible::getPassages(getCurrMod(), getBook());
+ if(getChapter() > conf.size()) {
+ setChapter(1);
+ }
+ auto texts = libbible::getText(conf[getChapter()-1]);
auto iter = buf->get_iter_at_offset(0);