1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/*********
*
* This file is part of BibleTime's source code, http://www.bibletime.info/.
*
* Copyright 1999-2016 by the BibleTime developers.
* The BibleTime source code is licensed under the GNU General Public License version 2.0.
*
**********/
#include "frontend/keychooser/versekeychooser/cbiblekeychooser.h"
#include <QDebug>
#include <QHBoxLayout>
#include "backend/drivers/cswordbiblemoduleinfo.h"
#include "backend/drivers/cswordmoduleinfo.h"
#include "backend/keys/cswordversekey.h"
#include "frontend/keychooser/bthistory.h"
#include "frontend/keychooser/cscrollbutton.h"
#include "frontend/keychooser/versekeychooser/btbiblekeywidget.h"
#include "util/btassert.h"
#include "util/btconnect.h"
#include "util/cresmgr.h"
CBibleKeyChooser::CBibleKeyChooser(const BtConstModuleList & modules,
BTHistory * historyPtr,
CSwordKey * key,
QWidget * parent)
: CKeyChooser(modules, historyPtr, parent)
, m_key(dynamic_cast<CSwordVerseKey *>(key))
{
using CSBMI = CSwordBibleModuleInfo;
w_ref = nullptr;
setModules(modules, false);
if (!m_modules.count()) {
qWarning() << "CBibleKeyChooser: module is not a Bible or commentary!";
m_key = nullptr;
return;
}
QHBoxLayout* layout = new QHBoxLayout(this);
layout->setSpacing(0);
layout->setContentsMargins(0, 0, 0, 0);
layout->setDirection( QBoxLayout::LeftToRight );
w_ref = new BtBibleKeyWidget(dynamic_cast<const CSBMI*>(m_modules.first()),
m_key, this);
setFocusProxy(w_ref);
layout->addWidget(w_ref);
BT_CONNECT(w_ref, SIGNAL(beforeChange(CSwordVerseKey *)),
SLOT(beforeRefChange(CSwordVerseKey *)));
BT_CONNECT(w_ref, SIGNAL(changed(CSwordVerseKey *)),
SLOT(refChanged(CSwordVerseKey *)));
setKey(m_key); //set the key without changing it, setKey(key()) would change it
BT_CONNECT(this, SIGNAL(keyChanged(CSwordKey *)),
history(), SLOT(add(CSwordKey *)));
}
CSwordKey* CBibleKeyChooser::key() {
return m_key;
}
void CBibleKeyChooser::setKey(CSwordKey* key) {
BT_ASSERT(dynamic_cast<CSwordVerseKey *>(key));
if (dynamic_cast<CSwordVerseKey*>(key) == nullptr) return;
m_key = dynamic_cast<CSwordVerseKey*>(key);
w_ref->setKey(m_key);
emit keyChanged(m_key);
}
void CBibleKeyChooser::beforeRefChange(CSwordVerseKey* key) {
Q_UNUSED(key);
BT_ASSERT(m_key);
if (!updatesEnabled())
return;
}
void CBibleKeyChooser::refChanged(CSwordVerseKey* key) {
BT_ASSERT(m_key);
BT_ASSERT(key);
if (!updatesEnabled())
return;
setUpdatesEnabled(false);
m_key = key;
emit keyChanged(m_key);
setUpdatesEnabled(true);
}
void CBibleKeyChooser::setModules(const BtConstModuleList &modules,
bool refresh)
{
using CSBMI = CSwordBibleModuleInfo;
m_modules.clear();
Q_FOREACH(CSwordModuleInfo const * const mod, modules)
if (mod->type() == CSwordModuleInfo::Bible
|| mod->type() == CSwordModuleInfo::Commentary)
if (CSBMI const * const bible = dynamic_cast<CSBMI const *>(mod))
m_modules.append(bible);
// First time this is called we havnt set up w_ref.
if (w_ref) w_ref->setModule(dynamic_cast<const CSwordBibleModuleInfo*>(m_modules.first()));
if (refresh) refreshContent();
}
void CBibleKeyChooser::refreshContent() {
setKey(m_key);
}
void CBibleKeyChooser::updateKey(CSwordKey* /*key*/) {
w_ref->updateText();
}
void CBibleKeyChooser::adjustFont() {}
void CBibleKeyChooser::setKey(const QString & newKey) {
m_key->setKey(newKey);
setKey(m_key);
}
|