mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
40 lines
1,019 B
C++
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
|