diff options
author | Roberto C. Sanchez <roberto@connexer.com> | 2014-10-21 22:48:25 -0400 |
---|---|---|
committer | Roberto C. Sanchez <roberto@connexer.com> | 2014-10-21 22:48:25 -0400 |
commit | b954e6dbcceaba3b50aca624e1bddc6db4830829 (patch) | |
tree | 31fa8e2579585c9626d56bc9beb55326cbd40ff2 /src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp | |
parent | 04e7ba8bf082e2b170595eef488834accd9d946e (diff) |
Imported Upstream version 2.2
Diffstat (limited to 'src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp')
-rw-r--r-- | src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp | 114 |
1 files changed, 87 insertions, 27 deletions
diff --git a/src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp b/src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp index 0815a89..11c5ddc 100644 --- a/src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp +++ b/src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp @@ -21,21 +21,23 @@ #include "util/directoryutil.h" //Qt includes -#include <QString> -#include <QStringList> -#include <QEvent> -#include <QPixmap> #include <QApplication> -#include <QHBoxLayout> -#include <QToolButton> #include <QDebug> +#include <QHBoxLayout> #include <QLineEdit> +#include <QEvent> +#include <QMouseEvent> +#include <QPixmap> +#include <QString> +#include <QStringList> +#include <QToolButton> CKeyReferenceWidget::CKeyReferenceWidget( CSwordBibleModuleInfo *mod, CSwordVerseKey *key, QWidget *parent, const char* /*name*/) : QWidget(parent), - m_key(new CSwordVerseKey(mod)) + m_key(new CSwordVerseKey(mod)), + m_dropDownHoverTimer(this) { updatelock = false; @@ -52,7 +54,7 @@ CKeyReferenceWidget::CKeyReferenceWidget( CSwordBibleModuleInfo *mod, CSwordVers m_bookScroller = new CScrollerWidgetSet(this); m_textbox = new QLineEdit( this ); - m_textbox->setStyleSheet("QLineEdit{margin:0px;}"); + m_textbox->setContentsMargins(0, 0, 0, 0); setKey(key); // The order of these two functions is important. setModule(); @@ -60,34 +62,39 @@ CKeyReferenceWidget::CKeyReferenceWidget( CSwordBibleModuleInfo *mod, CSwordVers m_chapterScroller = new CScrollerWidgetSet(this); m_verseScroller = new CScrollerWidgetSet(this); - m_bookDropdownButton = new BtBookDropdownChooserButton(this); - m_chapterDropdownButton = new BtChapterDropdownChooserButton(this); - m_verseDropdownButton = new BtVerseDropdownChooserButton(this); - - QHBoxLayout* dropdownButtonsLayout = new QHBoxLayout(); - QVBoxLayout* editorAndButtonsLayout = new QVBoxLayout(); - dropdownButtonsLayout->setContentsMargins(0,0,0,0); - editorAndButtonsLayout->setContentsMargins(0,0,0,0); - dropdownButtonsLayout->setSpacing(0); - editorAndButtonsLayout->setSpacing(0); - - dropdownButtonsLayout->addWidget(m_bookDropdownButton, 2); - dropdownButtonsLayout->addWidget(m_chapterDropdownButton,1); - dropdownButtonsLayout->addWidget(m_verseDropdownButton,1); - editorAndButtonsLayout->addWidget(m_textbox); - editorAndButtonsLayout->addLayout(dropdownButtonsLayout); - QHBoxLayout* m_mainLayout = new QHBoxLayout( this ); m_mainLayout->setContentsMargins(0,0,0,0); m_mainLayout->setSpacing(0); m_mainLayout->addWidget(clearRef); m_mainLayout->addWidget(m_bookScroller); - m_mainLayout->addLayout(editorAndButtonsLayout); + m_mainLayout->addWidget(m_textbox); m_mainLayout->addWidget(m_chapterScroller); m_mainLayout->addWidget(m_verseScroller); setTabOrder(m_textbox, 0); + m_dropDownButtons = new QWidget(0); + m_dropDownButtons->setWindowFlags(Qt::Popup); + m_dropDownButtons->setAttribute(Qt::WA_WindowPropagation); + m_dropDownButtons->setCursor(Qt::ArrowCursor); + QHBoxLayout *dropDownButtonsLayout(new QHBoxLayout(m_dropDownButtons)); + m_bookDropdownButton = new BtBookDropdownChooserButton(this); + dropDownButtonsLayout->addWidget(m_bookDropdownButton, 2); + m_chapterDropdownButton = new BtChapterDropdownChooserButton(this); + dropDownButtonsLayout->addWidget(m_chapterDropdownButton, 1); + m_verseDropdownButton = new BtVerseDropdownChooserButton(this); + dropDownButtonsLayout->addWidget(m_verseDropdownButton, 1); + dropDownButtonsLayout->setContentsMargins(0, 0, 0, 0); + dropDownButtonsLayout->setSpacing(0); + m_dropDownButtons->setLayout(dropDownButtonsLayout); + m_dropDownButtons->hide(); + + m_dropDownButtons->installEventFilter(this); + + m_dropDownHoverTimer.setInterval(500); + m_dropDownHoverTimer.setSingleShot(true); + connect(&m_dropDownHoverTimer, SIGNAL(timeout()), + m_dropDownButtons, SLOT(hide())); QString scrollButtonToolTip(tr("Scroll through the entries of the list. Press the button and move the mouse to increase or decrease the item.")); m_bookScroller->setToolTips( @@ -120,6 +127,10 @@ CKeyReferenceWidget::CKeyReferenceWidget( CSwordBibleModuleInfo *mod, CSwordVers connect(m_verseScroller, SIGNAL(scroller_released()), SLOT(slotUpdateUnlock())); } +CKeyReferenceWidget::~CKeyReferenceWidget() { + delete m_dropDownButtons; +} + void CKeyReferenceWidget::setModule(CSwordBibleModuleInfo *m) { if (m) //can be null @@ -129,6 +140,48 @@ void CKeyReferenceWidget::setModule(CSwordBibleModuleInfo *m) } } +bool CKeyReferenceWidget::eventFilter(QObject *o, QEvent *e) { + if (o != m_dropDownButtons) return false; + switch (e->type()) { + case QEvent::Enter: + m_dropDownHoverTimer.stop(); + return true; + case QEvent::Leave: + m_dropDownHoverTimer.start(); + return true; + default: + return false; + } +} + +void CKeyReferenceWidget::enterEvent(QEvent *) { + m_dropDownHoverTimer.stop(); + + resetDropDownButtons(); + + m_dropDownButtons->raise(); + m_dropDownButtons->show(); +} + +void CKeyReferenceWidget::leaveEvent(QEvent *) { + m_dropDownHoverTimer.start(); +} + +void CKeyReferenceWidget::resizeEvent(QResizeEvent *event) { + if (m_dropDownButtons->isVisible()) { + resetDropDownButtons(); + } + QWidget::resizeEvent(event); +} + +void CKeyReferenceWidget::resetDropDownButtons() { + m_dropDownButtons->setParent(window()); + int h(m_dropDownButtons->layout()->minimumSize().height()); + QPoint topLeft(mapTo(window(), QPoint(m_textbox->x(), height()))); + m_dropDownButtons->setGeometry(topLeft.x(), topLeft.y(), + m_textbox->width(), h); +} + void CKeyReferenceWidget::slotClearRef( ) { m_textbox->setText(""); @@ -137,7 +190,14 @@ void CKeyReferenceWidget::slotClearRef( ) void CKeyReferenceWidget::updateText() { - m_textbox->setText(m_key->key()); + QString text(m_key->key()); + m_textbox->setText(text); + QFontMetrics fm(m_textbox->font()); + int nw(m_textbox->minimumSizeHint().width() + fm.width(text)); + if (nw > m_textbox->minimumWidth()) { + m_textbox->setMinimumWidth(nw); + m_textbox->updateGeometry(); + } } bool CKeyReferenceWidget::setKey(CSwordVerseKey *key) |