#include "./pathlineedit.h" #include #include #include #include #include #include #include #include using namespace std; using namespace Widgets; namespace QtGui { PathLineEdit::PathLineEdit(QWidget *parent) : ClearLineEdit(parent) {} QAbstractItemModel *PathLineEdit::completionModel() const { if(QCompleter *c = completer()) { return c->model(); } else { return nullptr; } } void PathLineEdit::setCompletionModel(QAbstractItemModel *model) { QCompleter *c = completer(); if(!c) { c = new QCompleter(this); c->setCompletionMode(QCompleter::PopupCompletion); setCompleter(c); } c->setModel(model); } void PathLineEdit::editText(const QString &text) { setText(text); emit textEdited(text); } void PathLineEdit::contextMenuEvent(QContextMenuEvent *event) { unique_ptr menu(createStandardContextMenu()); menu->addSeparator(); connect(menu->addAction(tr("Browse")), &QAction::triggered, [this] { QString path = QFileDialog::getExistingDirectory(this); if(!path.isEmpty()) { editText(path); } }); connect(menu->addAction(tr("Explore")), &QAction::triggered, [this] { QDesktopServices::openUrl(QUrl(QStringLiteral("file://") + text(), QUrl::TolerantMode)); }); menu->exec(event->globalPos()); } }