summaryrefslogtreecommitdiff
path: root/src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp
diff options
context:
space:
mode:
authorRoberto C. Sanchez <roberto@connexer.com>2014-10-21 22:48:27 -0400
committerRoberto C. Sanchez <roberto@connexer.com>2014-10-21 22:48:27 -0400
commitdd2f7ce46df53f2c377c02d1bf4df8adcf092072 (patch)
tree51d4bd5d66a45a24784695c4e99b452b417dc3d1 /src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp
parentb954e6dbcceaba3b50aca624e1bddc6db4830829 (diff)
Imported Upstream version 2.3
Diffstat (limited to 'src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp')
-rw-r--r--src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp99
1 files changed, 69 insertions, 30 deletions
diff --git a/src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp b/src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp
index 11c5ddc..cedb4b3 100644
--- a/src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp
+++ b/src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp
@@ -31,12 +31,32 @@
#include <QString>
#include <QStringList>
#include <QToolButton>
+#include <QFocusEvent>
+class BtLineEdit : public QLineEdit
+{
+public:
+ BtLineEdit(QWidget* parent)
+ : QLineEdit(parent)
+ {
+ }
+protected:
+ void focusInEvent(QFocusEvent* event)
+ {
+ Qt::FocusReason reason = event->reason();
+ if (reason == Qt::OtherFocusReason)
+ {
+ selectAll();
+ }
+ QWidget::focusInEvent(event);
+ }
+};
-CKeyReferenceWidget::CKeyReferenceWidget( CSwordBibleModuleInfo *mod, CSwordVerseKey *key, QWidget *parent, const char* /*name*/) :
+
+CKeyReferenceWidget::CKeyReferenceWidget( CSwordBibleModuleInfo *mod, CSwordVerseKey *key, QWidget *parent, const char* /*name*/) :
QWidget(parent),
- m_key(new CSwordVerseKey(mod)),
+ m_key(key),
m_dropDownHoverTimer(this)
{
@@ -53,7 +73,8 @@ CKeyReferenceWidget::CKeyReferenceWidget( CSwordBibleModuleInfo *mod, CSwordVers
m_bookScroller = new CScrollerWidgetSet(this);
- m_textbox = new QLineEdit( this );
+ m_textbox = new BtLineEdit( this );
+ setFocusProxy(m_textbox);
m_textbox->setContentsMargins(0, 0, 0, 0);
setKey(key); // The order of these two functions is important.
@@ -127,7 +148,8 @@ CKeyReferenceWidget::CKeyReferenceWidget( CSwordBibleModuleInfo *mod, CSwordVers
connect(m_verseScroller, SIGNAL(scroller_released()), SLOT(slotUpdateUnlock()));
}
-CKeyReferenceWidget::~CKeyReferenceWidget() {
+CKeyReferenceWidget::~CKeyReferenceWidget()
+{
delete m_dropDownButtons;
}
@@ -140,7 +162,8 @@ void CKeyReferenceWidget::setModule(CSwordBibleModuleInfo *m)
}
}
-bool CKeyReferenceWidget::eventFilter(QObject *o, QEvent *e) {
+bool CKeyReferenceWidget::eventFilter(QObject *o, QEvent *e)
+{
if (o != m_dropDownButtons) return false;
switch (e->type()) {
case QEvent::Enter:
@@ -154,7 +177,8 @@ bool CKeyReferenceWidget::eventFilter(QObject *o, QEvent *e) {
}
}
-void CKeyReferenceWidget::enterEvent(QEvent *) {
+void CKeyReferenceWidget::enterEvent(QEvent *)
+{
m_dropDownHoverTimer.stop();
resetDropDownButtons();
@@ -163,18 +187,22 @@ void CKeyReferenceWidget::enterEvent(QEvent *) {
m_dropDownButtons->show();
}
-void CKeyReferenceWidget::leaveEvent(QEvent *) {
+void CKeyReferenceWidget::leaveEvent(QEvent *)
+{
m_dropDownHoverTimer.start();
}
-void CKeyReferenceWidget::resizeEvent(QResizeEvent *event) {
- if (m_dropDownButtons->isVisible()) {
+void CKeyReferenceWidget::resizeEvent(QResizeEvent *event)
+{
+ if (m_dropDownButtons->isVisible())
+ {
resetDropDownButtons();
}
QWidget::resizeEvent(event);
}
-void CKeyReferenceWidget::resetDropDownButtons() {
+void CKeyReferenceWidget::resetDropDownButtons()
+{
m_dropDownButtons->setParent(window());
int h(m_dropDownButtons->layout()->minimumSize().height());
QPoint topLeft(mapTo(window(), QPoint(m_textbox->x(), height())));
@@ -203,7 +231,7 @@ void CKeyReferenceWidget::updateText()
bool CKeyReferenceWidget::setKey(CSwordVerseKey *key)
{
if (!key) return false;
-
+
m_key->key(key->key());
updateText();
return true;
@@ -218,8 +246,7 @@ void CKeyReferenceWidget::slotReturnPressed()
{
m_key->key(m_textbox->text());
updateText();
-
- emit changed(m_key.get());
+ emit changed(m_key);
}
/* Handlers for the various scroller widgetsets. Do we really want a verse scroller? */
@@ -232,58 +259,70 @@ void CKeyReferenceWidget::slotUpdateLock()
void CKeyReferenceWidget::slotUpdateUnlock()
{
updatelock = false;
- if (oldKey != m_key->key()) emit changed(m_key.get());
+ if (oldKey != m_key->key())
+ emit changed(m_key);
}
void CKeyReferenceWidget::slotStepBook(int n)
{
- n > 0 ? m_key->next( CSwordVerseKey::UseBook ) : m_key->previous( CSwordVerseKey::UseBook );
+ CSwordVerseKey key = *m_key;
+ n > 0 ? key.next( CSwordVerseKey::UseBook ) : key.previous( CSwordVerseKey::UseBook );
+ if (!updatelock)
+ emit changed(&key); // does *m_key = key
updateText();
- if (!updatelock) emit changed(m_key.get());
}
void CKeyReferenceWidget::slotStepChapter(int n)
{
- n > 0 ? m_key->next( CSwordVerseKey::UseChapter ) : m_key->previous( CSwordVerseKey::UseChapter );
- updateText();
- if (!updatelock) emit changed(m_key.get());
+ CSwordVerseKey key = *m_key;
+ n > 0 ? key.next( CSwordVerseKey::UseChapter ) : key.previous( CSwordVerseKey::UseChapter );
+ if (!updatelock)
+ emit changed(&key); // does *m_key = key
+ updateText();
}
void CKeyReferenceWidget::slotStepVerse(int n)
{
- n > 0 ? m_key->next( CSwordVerseKey::UseVerse ) : m_key->previous( CSwordVerseKey::UseVerse );
+ CSwordVerseKey key = *m_key;
+ n > 0 ? key.next( CSwordVerseKey::UseVerse ) : key.previous( CSwordVerseKey::UseVerse );
+ if (!updatelock)
+ emit changed(&key); // does *m_key = key
updateText();
- if (!updatelock) emit changed(m_key.get());
}
void CKeyReferenceWidget::slotChangeVerse(int n)
{
- if (m_key->Verse() != n) {
+ if (m_key->Verse() != n)
+ {
m_key->Verse( n );
- setKey( m_key.get() );
+ setKey( m_key );
}
updateText();
- if (!updatelock) emit changed(m_key.get());
+ if (!updatelock) emit changed(m_key);
}
void CKeyReferenceWidget::slotChangeChapter(int n)
{
- if (m_key->Chapter() != n) {
+ if (m_key->Chapter() != n)
+ {
m_key->Chapter( n );
- setKey( m_key.get() );
+ setKey( m_key );
}
updateText();
- if (!updatelock) emit changed(m_key.get());
+ if (!updatelock)
+ emit changed(m_key);
}
void CKeyReferenceWidget::slotChangeBook(QString bookname)
{
- if (m_key->book() != bookname) {
+ if (m_key->book() != bookname)
+ {
m_key->book( bookname );
- setKey( m_key.get() );
+ setKey( m_key );
}
updateText();
- if (!updatelock) emit changed(m_key.get());
+ if (!updatelock)
+ emit changed(m_key);
}