summaryrefslogtreecommitdiff
path: root/src/frontend/keychooser/cbookkeychooser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/keychooser/cbookkeychooser.cpp')
-rw-r--r--src/frontend/keychooser/cbookkeychooser.cpp408
1 files changed, 198 insertions, 210 deletions
diff --git a/src/frontend/keychooser/cbookkeychooser.cpp b/src/frontend/keychooser/cbookkeychooser.cpp
index 411bf26..ca13baa 100644
--- a/src/frontend/keychooser/cbookkeychooser.cpp
+++ b/src/frontend/keychooser/cbookkeychooser.cpp
@@ -23,256 +23,244 @@
QMap<QObject*, int> boxes;
CBookKeyChooser::CBookKeyChooser(QList<CSwordModuleInfo*> modules, CSwordKey *key, QWidget *parent)
- : CKeyChooser(modules, key, parent), m_layout(0)
-{
+ : CKeyChooser(modules, key, parent), m_layout(0) {
- setModules(modules, false);
- m_key = dynamic_cast<CSwordTreeKey*>(key);
- if (!m_modules.count()) {
- m_key = 0;
- }
+ setModules(modules, false);
+ m_key = dynamic_cast<CSwordTreeKey*>(key);
+ if (!m_modules.count()) {
+ m_key = 0;
+ }
- setModules(modules, true);
- setKey(key);
+ setModules(modules, true);
+ setKey(key);
- adjustFont();
- connect(this, SIGNAL(keyChanged(CSwordKey*)), history(), SLOT(add(CSwordKey*)) );
+ adjustFont();
+ connect(this, SIGNAL(keyChanged(CSwordKey*)), history(), SLOT(add(CSwordKey*)) );
}
CBookKeyChooser::~CBookKeyChooser() {}
-void CBookKeyChooser::setKey(CSwordKey* newKey)
-{
- setKey(newKey, true);
+void CBookKeyChooser::setKey(CSwordKey* newKey) {
+ setKey(newKey, true);
}
/** Sets a new key to this keychooser */
-void CBookKeyChooser::setKey(CSwordKey* newKey, const bool emitSignal)
-{
- if (m_key != newKey) { //set the internal key to the new one
- m_key = dynamic_cast<CSwordTreeKey*>(newKey);
- }
-
- QString oldKey = m_key->key(); //string backup of key
-
- if (oldKey.isEmpty()) { //don't set keys equal to "/", always use a key which may have content
- m_key->firstChild();
- oldKey = m_key->key();
- }
-
- const int oldOffset = m_key->getOffset(); //backup key position
-
- QStringList siblings; //split up key
- if (m_key && !oldKey.isEmpty()) {
- siblings = oldKey.split('/', QString::SkipEmptyParts);
- }
-
- int depth = 0;
- int index = 0;
-
- m_key->root(); //start iteration at root node
-
- while( m_key->firstChild() && (depth < siblings.count()) ) {
- QString key = m_key->key();
- index = (depth == 0) ? -1 : 0;
-
- bool found = false;
-
- do { //look for matching sibling
- ++index;
- found = (m_key->getLocalNameUnicode() == siblings[depth]);
- }
- while (!found && m_key->nextSibling());
-
- if (found)
- key = m_key->key(); //found: change key to this level
- else
- m_key->key(key); //not found: restore old key
-
- setupCombo(key, depth, index);
-
- //last iteration: check to see if another box can be filled with child entries
- if (depth == siblings.count()-1 && m_key->hasChildren())
- {
- m_key->firstChild();
- setupCombo(m_key->key(), ++depth, 0);
- }
-
- depth++;
- }
-
- //clear the combos which were not filled
- for (; depth < m_modules.first()->depth(); ++depth) {
- CKeyChooserWidget* chooser = m_chooserWidgets.at(depth);
- if (chooser) chooser->reset(0,0,false);
- }
-
- if (oldKey.isEmpty()) {
- m_key->root();
- }
- else {
- //m_key->key(oldKey);
- m_key->setOffset(oldOffset);
- }
-
- if (emitSignal) emit keyChanged(m_key);
+void CBookKeyChooser::setKey(CSwordKey* newKey, const bool emitSignal) {
+ if (m_key != newKey) { //set the internal key to the new one
+ m_key = dynamic_cast<CSwordTreeKey*>(newKey);
+ }
+
+ QString oldKey = m_key->key(); //string backup of key
+
+ if (oldKey.isEmpty()) { //don't set keys equal to "/", always use a key which may have content
+ m_key->firstChild();
+ oldKey = m_key->key();
+ }
+
+ const int oldOffset = m_key->getOffset(); //backup key position
+
+ QStringList siblings; //split up key
+ if (m_key && !oldKey.isEmpty()) {
+ siblings = oldKey.split('/', QString::SkipEmptyParts);
+ }
+
+ int depth = 0;
+ int index = 0;
+
+ m_key->root(); //start iteration at root node
+
+ while ( m_key->firstChild() && (depth < siblings.count()) ) {
+ QString key = m_key->key();
+ index = (depth == 0) ? -1 : 0;
+
+ bool found = false;
+
+ do { //look for matching sibling
+ ++index;
+ found = (m_key->getLocalNameUnicode() == siblings[depth]);
+ }
+ while (!found && m_key->nextSibling());
+
+ if (found)
+ key = m_key->key(); //found: change key to this level
+ else
+ m_key->key(key); //not found: restore old key
+
+ setupCombo(key, depth, index);
+
+ //last iteration: check to see if another box can be filled with child entries
+ if (depth == siblings.count() - 1 && m_key->hasChildren()) {
+ m_key->firstChild();
+ setupCombo(m_key->key(), ++depth, 0);
+ }
+
+ depth++;
+ }
+
+ //clear the combos which were not filled
+ for (; depth < m_modules.first()->depth(); ++depth) {
+ CKeyChooserWidget* chooser = m_chooserWidgets.at(depth);
+ if (chooser) chooser->reset(0, 0, false);
+ }
+
+ if (oldKey.isEmpty()) {
+ m_key->root();
+ }
+ else {
+ //m_key->key(oldKey);
+ m_key->setOffset(oldOffset);
+ }
+
+ if (emitSignal) emit keyChanged(m_key);
}
/** Returns the key of this kechooser. */
-CSwordKey* CBookKeyChooser::key()
-{
- return m_key;
+CSwordKey* CBookKeyChooser::key() {
+ return m_key;
}
/** Sets another module to this keychooser */
-void CBookKeyChooser::setModules(const QList<CSwordModuleInfo*>& modules, const bool refresh)
-{
- m_modules.clear();
-
- // for (modules.first(); modules.current(); modules.next()) {
- QList<CSwordModuleInfo*>::const_iterator end_it = modules.end();
- for (QList<CSwordModuleInfo*>::const_iterator it(modules.begin()); it != end_it; ++it) {
- if ( (*it)->type() == CSwordModuleInfo::GenericBook ) {
- if (CSwordBookModuleInfo* book = dynamic_cast<CSwordBookModuleInfo*>(*it)) {
- m_modules.append(book);
- }
- }
- }
-
- //refresh the number of combos
- if (refresh && m_modules.count() && m_key) {
- if (!m_layout) {
- m_layout = new QHBoxLayout(this);
- m_layout->setSpacing(0);
- m_layout->setContentsMargins(0,0,0,0);
- }
-
- qDeleteAll(m_chooserWidgets);
- m_chooserWidgets.clear();
-
- for (int i = 0; i < m_modules.first()->depth(); ++i) {
- // Create an empty keychooser, don't handle next/prev signals
- CKeyChooserWidget* w = new CKeyChooserWidget(0, false, this);
- m_chooserWidgets.append( w );
-
- //don't allow a too high width, try to keep as narrow as possible
- //to aid users with smaller screen resolutions
- int totalWidth = 200; //only 1 level
- if (m_modules.first()->depth() > 1) {
- if (m_modules.first()->depth() > 3)
- totalWidth = 400; //4+ levels
- else
- totalWidth = 300; //2-3 levels
- }
-
- int maxWidth = (int) ((float) totalWidth / (float) m_modules.first()->depth());
-
- w->comboBox()->setMaximumWidth(maxWidth);
- w->comboBox()->setCurrentIndex(0);
-
- connect(w, SIGNAL(changed(int)), SLOT(keyChooserChanged(int)));
- connect(w, SIGNAL(focusOut(int)), SLOT(keyChooserChanged(int)));
-
- m_layout->addWidget(w);
- boxes[w] = i;
-
- w->show();
- }
-
- //set the tab order of the key chooser widgets
-
- CKeyChooserWidget* chooser = 0;
- CKeyChooserWidget* chooser_prev = 0;
- const int count = m_chooserWidgets.count();
- for (int i = 0; i < count; ++i) {
- chooser = m_chooserWidgets.at(i);
- Q_ASSERT(chooser);
-
- if (chooser && chooser_prev) {
- QWidget::setTabOrder(chooser_prev, chooser);
- }
-
- chooser_prev = chooser;
- }
- QWidget::setTabOrder(chooser, 0);
-
- updateKey(m_key);
- adjustFont(); // only when refresh is set.
- }
+void CBookKeyChooser::setModules(const QList<CSwordModuleInfo*>& modules, const bool refresh) {
+ m_modules.clear();
+
+ // for (modules.first(); modules.current(); modules.next()) {
+ QList<CSwordModuleInfo*>::const_iterator end_it = modules.end();
+ for (QList<CSwordModuleInfo*>::const_iterator it(modules.begin()); it != end_it; ++it) {
+ if ( (*it)->type() == CSwordModuleInfo::GenericBook ) {
+ if (CSwordBookModuleInfo* book = dynamic_cast<CSwordBookModuleInfo*>(*it)) {
+ m_modules.append(book);
+ }
+ }
+ }
+
+ //refresh the number of combos
+ if (refresh && m_modules.count() && m_key) {
+ if (!m_layout) {
+ m_layout = new QHBoxLayout(this);
+ m_layout->setSpacing(0);
+ m_layout->setContentsMargins(0, 0, 0, 0);
+ }
+
+ qDeleteAll(m_chooserWidgets);
+ m_chooserWidgets.clear();
+
+ for (int i = 0; i < m_modules.first()->depth(); ++i) {
+ // Create an empty keychooser, don't handle next/prev signals
+ CKeyChooserWidget* w = new CKeyChooserWidget(0, false, this);
+ m_chooserWidgets.append( w );
+
+ //don't allow a too high width, try to keep as narrow as possible
+ //to aid users with smaller screen resolutions
+ int totalWidth = 200; //only 1 level
+ if (m_modules.first()->depth() > 1) {
+ if (m_modules.first()->depth() > 3)
+ totalWidth = 400; //4+ levels
+ else
+ totalWidth = 300; //2-3 levels
+ }
+
+ int maxWidth = (int) ((float) totalWidth / (float) m_modules.first()->depth());
+
+ w->comboBox()->setMaximumWidth(maxWidth);
+ w->comboBox()->setCurrentIndex(0);
+
+ connect(w, SIGNAL(changed(int)), SLOT(keyChooserChanged(int)));
+ connect(w, SIGNAL(focusOut(int)), SLOT(keyChooserChanged(int)));
+
+ m_layout->addWidget(w);
+ boxes[w] = i;
+
+ w->show();
+ }
+
+ //set the tab order of the key chooser widgets
+
+ CKeyChooserWidget* chooser = 0;
+ CKeyChooserWidget* chooser_prev = 0;
+ const int count = m_chooserWidgets.count();
+ for (int i = 0; i < count; ++i) {
+ chooser = m_chooserWidgets.at(i);
+ Q_ASSERT(chooser);
+
+ if (chooser && chooser_prev) {
+ QWidget::setTabOrder(chooser_prev, chooser);
+ }
+
+ chooser_prev = chooser;
+ }
+ QWidget::setTabOrder(chooser, 0);
+
+ updateKey(m_key);
+ adjustFont(); // only when refresh is set.
+ }
}
/** No descriptions */
-void CBookKeyChooser::adjustFont()
-{
- //Make sure the entries are displayed correctly.
- QListIterator<CKeyChooserWidget*> it(m_chooserWidgets);
- while (it.hasNext()) {
- it.next()->comboBox()->setFont( CBTConfig::get( m_modules.first()->language() ).second );
- }
+void CBookKeyChooser::adjustFont() {
+ //Make sure the entries are displayed correctly.
+ QListIterator<CKeyChooserWidget*> it(m_chooserWidgets);
+ while (it.hasNext()) {
+ it.next()->comboBox()->setFont( CBTConfig::get( m_modules.first()->language() ).second );
+ }
}
/** Refreshes the content. */
-void CBookKeyChooser::refreshContent()
-{
- if (m_key) {
- updateKey( m_key ); //refresh with current key
- }
+void CBookKeyChooser::refreshContent() {
+ if (m_key) {
+ updateKey( m_key ); //refresh with current key
+ }
}
-void CBookKeyChooser::setupCombo(const QString key, const int depth, const int currentItem)
-{
- CKeyChooserWidget* chooserWidget = m_chooserWidgets.at(depth);
+void CBookKeyChooser::setupCombo(const QString key, const int depth, const int currentItem) {
+ CKeyChooserWidget* chooserWidget = m_chooserWidgets.at(depth);
- CSwordTreeKey tmpKey(*m_key);
- tmpKey.key(key);
- tmpKey.parent();
- tmpKey.firstChild();
+ CSwordTreeKey tmpKey(*m_key);
+ tmpKey.key(key);
+ tmpKey.parent();
+ tmpKey.firstChild();
- QStringList items;
- if (depth > 0) items << QString::null; //insert an empty item at the top
+ QStringList items;
+ if (depth > 0) items << QString::null; //insert an empty item at the top
- do {
- items << tmpKey.getLocalNameUnicode();
- }
- while (tmpKey.nextSibling());
+ do {
+ items << tmpKey.getLocalNameUnicode();
+ }
+ while (tmpKey.nextSibling());
- if (chooserWidget) chooserWidget->reset(items,currentItem,false);
+ if (chooserWidget) chooserWidget->reset(items, currentItem, false);
}
/** A keychooser changed. Update and emit a signal if necessary. */
-void CBookKeyChooser::keyChooserChanged(int /*newIndex*/)
-{
- const int activeID = boxes[const_cast<QObject*>(sender())]; //no so good code!
+void CBookKeyChooser::keyChooserChanged(int /*newIndex*/) {
+ const int activeID = boxes[const_cast<QObject*>(sender())]; //no so good code!
- QStringList items;
- CKeyChooserWidget* chooser;
+ QStringList items;
+ CKeyChooserWidget* chooser;
- for (int i = 0; i < m_chooserWidgets.count(); ++i) {
- chooser = m_chooserWidgets.at(i);
- const QString currentText = (chooser && chooser->comboBox()) ? chooser->comboBox()->currentText() : QString::null;
+ for (int i = 0; i < m_chooserWidgets.count(); ++i) {
+ chooser = m_chooserWidgets.at(i);
+ const QString currentText = (chooser && chooser->comboBox()) ? chooser->comboBox()->currentText() : QString::null;
- if (currentText.isEmpty() || i > activeID) {
- break;
- }
+ if (currentText.isEmpty() || i > activeID) {
+ break;
+ }
- items << currentText;
- }
+ items << currentText;
+ }
- QString newKey("/");
- newKey.append(items.join("/"));
+ QString newKey("/");
+ newKey.append(items.join("/"));
- m_key->key(newKey);
- setKey(m_key);
+ m_key->key(newKey);
+ setKey(m_key);
}
/** Updates the keychoosers for the given key but emit no signal. */
-void CBookKeyChooser::updateKey(CSwordKey* key)
-{
- setKey(key, false);
+void CBookKeyChooser::updateKey(CSwordKey* key) {
+ setKey(key, false);
}
-void CBookKeyChooser::setKey(QString& newKey)
-{
- m_key->key(newKey);
- setKey(m_key);
+void CBookKeyChooser::setKey(QString& newKey) {
+ m_key->key(newKey);
+ setKey(m_key);
}