Index: src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp =================================================================== --- src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp (revision 1408) +++ src/frontend/keychooser/versekeychooser/ckeyreferencewidget.cpp (working copy) @@ -21,17 +21,88 @@ #include "util/directoryutil.h" //Qt includes -#include -#include -#include -#include #include -#include -#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +class KeyEdit: public QLineEdit { + public: + KeyEdit(CKeyReferenceWidget *parent = 0) + : QLineEdit(parent), m_hoverTimer(this) + { + m_buttons = new QWidget(0); + m_buttons->setWindowFlags(Qt::Popup); + m_buttons->setAttribute(Qt::WA_WindowPropagation); + m_buttons->setCursor(Qt::ArrowCursor); + QHBoxLayout *l(new QHBoxLayout(this)); + m_bookDropdownButton = new BtBookDropdownChooserButton(parent); + l->addWidget(m_bookDropdownButton, 2); + m_chapterDropdownButton = new BtChapterDropdownChooserButton(parent); + l->addWidget(m_chapterDropdownButton, 1); + m_verseDropdownButton = new BtVerseDropdownChooserButton(parent); + l->addWidget(m_verseDropdownButton, 1); + l->setContentsMargins(0, 0, 0, 0); + l->setSpacing(0); + m_buttons->setLayout(l); + m_buttons->hide(); + + m_buttons->installEventFilter(this); + + m_hoverTimer.setInterval(500); + m_hoverTimer.setSingleShot(true); + connect(&m_hoverTimer, SIGNAL(timeout()), + m_buttons, SLOT(hide())); + } + + ~KeyEdit() { + delete m_buttons; + } + + void enterEvent(QEvent *) { + m_hoverTimer.stop(); + int h(m_buttons->layout()->minimumSize().height()); + QPoint topLeft(mapTo(window(), QPoint(0, height()))); + m_buttons->setParent(window()); + m_buttons->setGeometry(topLeft.x(), topLeft.y(), + width(), h); + m_buttons->raise(); + m_buttons->show(); + } + + void leaveEvent(QEvent *) { + m_hoverTimer.start(); + } + + bool eventFilter(QObject *o, QEvent *e) { + if (o != m_buttons) return false; + switch (e->type()) { + case QEvent::Enter: + m_hoverTimer.stop(); + return true; + case QEvent::Leave: + m_hoverTimer.start(); + return true; + default: + return false; + } + } + + protected: + QTimer m_hoverTimer; + BtDropdownChooserButton* m_bookDropdownButton; + BtDropdownChooserButton* m_chapterDropdownButton; + BtDropdownChooserButton* m_verseDropdownButton; + QWidget *m_buttons; +}; CKeyReferenceWidget::CKeyReferenceWidget( CSwordBibleModuleInfo *mod, CSwordVerseKey *key, QWidget *parent, const char* /*name*/) : QWidget(parent), @@ -51,7 +122,7 @@ m_bookScroller = new CScrollerWidgetSet(this); - m_textbox = new QLineEdit( this ); + m_textbox = new KeyEdit( this ); m_textbox->setStyleSheet("QLineEdit{margin:0px;}"); setKey(key); // The order of these two functions is important. @@ -60,29 +131,12 @@ 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); Index: src/frontend/keychooser/versekeychooser/btdropdownchooserbutton.cpp =================================================================== --- src/frontend/keychooser/versekeychooser/btdropdownchooserbutton.cpp (revision 1408) +++ src/frontend/keychooser/versekeychooser/btdropdownchooserbutton.cpp (working copy) @@ -22,7 +22,7 @@ { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - setAutoRaise(true); + setAutoRaise(false); setArrowType(Qt::NoArrow); setFixedHeight(ARROW_HEIGHT); setFocusPolicy(Qt::NoFocus); Index: src/frontend/keychooser/versekeychooser/ckeyreferencewidget.h =================================================================== --- src/frontend/keychooser/versekeychooser/ckeyreferencewidget.h (revision 1408) +++ src/frontend/keychooser/versekeychooser/ckeyreferencewidget.h (working copy) @@ -74,10 +74,6 @@ CScrollerWidgetSet *m_chapterScroller; CScrollerWidgetSet *m_verseScroller; - BtDropdownChooserButton* m_bookDropdownButton; - BtDropdownChooserButton* m_chapterDropdownButton; - BtDropdownChooserButton* m_verseDropdownButton; - bool updatelock; QString oldKey; CSwordBibleModuleInfo *m_module;