summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-03-26 14:46:03 +0100
committerThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-03-26 15:13:47 +0100
commit9cd08956016aeea58e32b797052f348c98ac0522 (patch)
tree8f866727aaa2913b27fae7db1e1e228309c1a5d8 /src/plugins/cpptools/cppcodecompletion.cpp
parentf7c469f3b3bf0e1358e64ec5b480c8f1787c8f94 (diff)
downloadqt-creator-9cd08956016aeea58e32b797052f348c98ac0522.tar.gz
Improved function argument widget
Done with Roberto Raggi.
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp65
1 files changed, 36 insertions, 29 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 3813744774..fadd940f72 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -89,8 +89,7 @@ private slots:
void previousPage();
private:
- void update();
- void close();
+ void updateArgumentHighlight();
void updateHintText();
Function *currentFunction() const
@@ -103,6 +102,7 @@ private:
TextEditor::ITextEditor *m_editor;
QWidget *m_pager;
+ QLabel *m_numberLabel;
QFrame *m_popupFrame;
QList<Function *> m_items;
LookupContext m_context;
@@ -225,11 +225,12 @@ FunctionArgumentWidget::FunctionArgumentWidget():
QHBoxLayout *hbox = new QHBoxLayout(m_pager);
hbox->setMargin(0);
hbox->setSpacing(0);
- hbox->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum));
hbox->addWidget(leftArrow);
+ m_numberLabel = new QLabel;
+ hbox->addWidget(m_numberLabel);
hbox->addWidget(rightArrow);
- QVBoxLayout *layout = new QVBoxLayout;
+ QHBoxLayout *layout = new QHBoxLayout;
layout->setMargin(0);
layout->setSpacing(0);
layout->addWidget(m_pager);
@@ -259,7 +260,7 @@ void FunctionArgumentWidget::showFunctionHint(QList<Function *> functionSymbols,
if (m_startpos == startPosition)
return;
- m_popupFrame->hide();
+ m_pager->setVisible(functionSymbols.size() > 1);
m_items = functionSymbols;
m_context = context;
@@ -268,9 +269,7 @@ void FunctionArgumentWidget::showFunctionHint(QList<Function *> functionSymbols,
// update the text
m_currentarg = -1;
- update();
-
- m_pager->setVisible(functionSymbols.size() > 1);
+ updateArgumentHighlight();
QPoint pos = m_editor->cursorRect(m_startpos).topLeft();
pos.setY(pos.y() - m_popupFrame->sizeHint().height() - 1);
@@ -294,11 +293,11 @@ void FunctionArgumentWidget::previousPage()
updateHintText();
}
-void FunctionArgumentWidget::update()
+void FunctionArgumentWidget::updateArgumentHighlight()
{
int curpos = m_editor->position();
if (curpos < m_startpos) {
- close();
+ m_popupFrame->close();
return;
}
@@ -323,28 +322,37 @@ void FunctionArgumentWidget::update()
}
if (parcount < 0)
- close();
+ m_popupFrame->close();
}
bool FunctionArgumentWidget::eventFilter(QObject *obj, QEvent *e)
{
switch (e->type()) {
- case QEvent::KeyRelease:
- {
- if (static_cast<QKeyEvent*>(e)->key() == Qt::Key_Escape) {
- close();
- return false;
+ case QEvent::KeyPress:
+ if (m_items.size() > 1) {
+ QKeyEvent *ke = static_cast<QKeyEvent*>(e);
+ if (ke->key() == Qt::Key_Up) {
+ previousPage();
+ return true;
+ } else if (ke->key() == Qt::Key_Down) {
+ nextPage();
+ return true;
}
- update();
- break;
+ return false;
+ }
+ break;
+ case QEvent::KeyRelease:
+ if (static_cast<QKeyEvent*>(e)->key() == Qt::Key_Escape) {
+ m_popupFrame->close();
+ return false;
}
+ updateArgumentHighlight();
+ break;
case QEvent::WindowDeactivate:
case QEvent::FocusOut:
- {
- if (obj != m_editor->widget())
- break;
- }
- close();
+ if (obj != m_editor->widget())
+ break;
+ m_popupFrame->close();
break;
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease:
@@ -352,7 +360,7 @@ bool FunctionArgumentWidget::eventFilter(QObject *obj, QEvent *e)
case QEvent::Wheel: {
QWidget *widget = qobject_cast<QWidget *>(obj);
if (! (widget == this || m_popupFrame->isAncestorOf(widget))) {
- close();
+ m_popupFrame->close();
}
}
break;
@@ -362,11 +370,6 @@ bool FunctionArgumentWidget::eventFilter(QObject *obj, QEvent *e)
return false;
}
-void FunctionArgumentWidget::close()
-{
- m_popupFrame->close();
-}
-
void FunctionArgumentWidget::updateHintText()
{
Overview overview;
@@ -374,7 +377,11 @@ void FunctionArgumentWidget::updateHintText()
overview.setShowArgumentNames(true);
overview.setMarkArgument(m_currentarg + 1);
Function *f = currentFunction();
+
setText(overview(f->type(), f->name()));
+ m_numberLabel->setText(tr("%1 of %2").arg(m_current + 1).arg(m_items.size()));
+
+ m_popupFrame->setFixedWidth(m_popupFrame->minimumSizeHint().width());
}
CppCodeCompletion::CppCodeCompletion(CppModelManager *manager)