//setBaseSize(QSize(600,400));
//setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
connect(ui.inputEdit, SIGNAL(returnPressed()), this, SLOT(enterPressed()));
+ connect(this, SIGNAL(nickListUpdated(QStringList)), ui.inputEdit, SLOT(updateNickList(QStringList)));
}
// TODO Use 005
void BufferWidget::updateNickList(BufferState *state, VarMap nicks) {
+ emit nickListUpdated(nicks.keys());
QTreeWidget *tree = state->nickTree;
if(!tree) return;
tree->clear();
***************************************************************************/
#include "channelwidgetinput.h"
+#include <QCompleter>
ChannelWidgetInput::ChannelWidgetInput(QWidget *parent) : QLineEdit(parent) {
idx = 0;
+ tabMode = false;
connect(this, SIGNAL(returnPressed()), this, SLOT(enter()));
}
void ChannelWidgetInput::keyPressEvent(QKeyEvent * event) {
- if(event->key() == Qt::Key_Up) {
- if(idx > 0) { idx--; setText(history[idx]); }
- event->accept();
- } else if(event->key() == Qt::Key_Down) {
- if(idx < history.count()) idx++;
- if(idx < history.count()) setText(history[idx]);
- else setText("");
- event->accept();
- } else if(event->key() == Qt::Key_Tab) {
+ if(event->key() == Qt::Key_Tab) {
// Tabcomplete
- if(cursorPosition() == text().length()) {
-
-
+ if(text().length() > 0) {
+ if (not tabMode) {
+ QString tabAbbrev = text().left(cursorPosition()).section(' ',-1,-1);
+ tabCompleteList.clear();
+ foreach(QString nick, nickList) {
+ if(nick.toLower().startsWith(tabAbbrev.toLower())) {
+ tabCompleteList << nick;
+ }
+ }
+
+ tabCompleteList.sort();
+ lastCompletionLength = tabAbbrev.length();
+ tabMode = true;
+ nextCompletion = tabCompleteList.begin();
+ }
+ if (nextCompletion != tabCompleteList.end()) {
+ for (int i = 0; i < lastCompletionLength; i++) {
+ backspace();
+ }
+ insert(*nextCompletion);
+ lastCompletionLength = nextCompletion->length();
+ nextCompletion++;
+ } else if (tabCompleteList.end() != tabCompleteList.begin()) {
+ nextCompletion = tabCompleteList.begin();
+ }
}
event->accept();
+
} else {
- QLineEdit::keyPressEvent(event);
+ tabMode = false;
+ if(event->key() == Qt::Key_Up) {
+ if(idx > 0) { idx--; setText(history[idx]); }
+ event->accept();
+ } else if(event->key() == Qt::Key_Down) {
+ if(idx < history.count()) idx++;
+ if(idx < history.count()) setText(history[idx]);
+ else setText("");
+ event->accept();
+ } else {
+ QLineEdit::keyPressEvent(event);
+ }
}
}
public:
ChannelWidgetInput(QWidget *parent = 0);
- public slots:
- void updateNickList(QStringList);
-
protected:
virtual bool event(QEvent *);
virtual void keyPressEvent(QKeyEvent * event);
private slots:
void enter();
+ public slots:
+ void updateNickList(QStringList);
+
private:
qint32 idx;
QStringList history;
QStringList nickList;
-
+
+ bool tabMode;
+ int lastCompletionLength;
+ QStringList tabCompleteList;
+ QStringList::Iterator nextCompletion;
};
#endif