subsurface/desktop-widgets/tagwidget.h
Berthold Stoeger d543196059 desktop: overwrite drag & drop in TagWidget
The interaction of Qt's drag & drop with GroupedLineEdit was
exceedingly weird. The user was able to scroll the viewport
making the text invisible.

This implements a very primitive alternative drag & drop
functionality: dropped text is regarged as a distinct tag.
This means that it is not possible to modify existing tags
by dropping in the middle of them. Arguably, this might even
be better than arbitrary drag & drop. But even if not perfect,
this fixes a very nasty UI behavior.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-10-24 09:49:36 -07:00

40 lines
1,019 B
C++

// SPDX-License-Identifier: GPL-2.0
#ifndef TAGWIDGET_H
#define TAGWIDGET_H
#include "groupedlineedit.h"
#include <QPair>
class QCompleter;
class TagWidget : public GroupedLineEdit {
Q_OBJECT
public:
explicit TagWidget(QWidget *parent = 0);
void setCompleter(QCompleter *completer);
QPair<int, int> getCursorTagPosition();
void highlight();
void setText(const QString &text);
void clear();
void setCursorPosition(int position);
void wheelEvent(QWheelEvent *event);
void fixPopupPosition(int delta);
public
slots:
void reparse();
void completionSelected(const QString &text);
void completionHighlighted(const QString &text);
protected:
void keyPressEvent(QKeyEvent *e) override;
void dragEnterEvent(QDragEnterEvent *e) override;
void dragLeaveEvent(QDragLeaveEvent *e) override;
void dragMoveEvent(QDragMoveEvent *e) override;
void dropEvent(QDropEvent *e) override;
private:
void focusOutEvent(QFocusEvent *ev) override;
QCompleter *m_completer;
bool lastFinishedTag;
};
#endif // TAGWIDGET_H