diff options
author | Petr Mrázek <peterix@gmail.com> | 2019-10-14 02:31:53 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2019-10-14 02:31:53 +0200 |
commit | 9cc5ebcdd15736d648554c81e250cd6ce21f6e98 (patch) | |
tree | 8a3ee8329208e1324d278e1f21c826e33b00ba53 | |
parent | c60647523e0a19adff994ff165410e5f0438d718 (diff) | |
download | MultiMC-9cc5ebcdd15736d648554c81e250cd6ce21f6e98.tar MultiMC-9cc5ebcdd15736d648554c81e250cd6ce21f6e98.tar.gz MultiMC-9cc5ebcdd15736d648554c81e250cd6ce21f6e98.tar.lz MultiMC-9cc5ebcdd15736d648554c81e250cd6ce21f6e98.tar.xz MultiMC-9cc5ebcdd15736d648554c81e250cd6ce21f6e98.zip |
GH-2859 improve UI for twitch pack import with drag&drop
-rw-r--r-- | application/CMakeLists.txt | 2 | ||||
-rw-r--r-- | application/pages/modplatform/TwitchPage.cpp | 5 | ||||
-rw-r--r-- | application/pages/modplatform/TwitchPage.ui | 43 | ||||
-rw-r--r-- | application/widgets/DropLabel.cpp | 41 | ||||
-rw-r--r-- | application/widgets/DropLabel.h | 20 |
5 files changed, 98 insertions, 13 deletions
diff --git a/application/CMakeLists.txt b/application/CMakeLists.txt index 4ce031f7..74139557 100644 --- a/application/CMakeLists.txt +++ b/application/CMakeLists.txt @@ -178,6 +178,8 @@ SET(MULTIMC_SOURCES widgets/Common.h widgets/CustomCommands.cpp widgets/CustomCommands.h + widgets/DropLabel.cpp + widgets/DropLabel.h widgets/FocusLineEdit.cpp widgets/FocusLineEdit.h widgets/IconLabel.cpp diff --git a/application/pages/modplatform/TwitchPage.cpp b/application/pages/modplatform/TwitchPage.cpp index ea0f9267..389e3194 100644 --- a/application/pages/modplatform/TwitchPage.cpp +++ b/application/pages/modplatform/TwitchPage.cpp @@ -10,6 +10,11 @@ TwitchPage::TwitchPage(NewInstanceDialog* dialog, QWidget *parent) { ui->setupUi(this); connect(ui->checkButton, &QPushButton::clicked, this, &TwitchPage::triggerCheck); + connect(ui->twitchLabel, &DropLabel::droppedURLs, [this](QList<QUrl> urls){ + if(urls.size()) { + setUrl(urls[0].toString()); + } + }); } TwitchPage::~TwitchPage() diff --git a/application/pages/modplatform/TwitchPage.ui b/application/pages/modplatform/TwitchPage.ui index 0db2484d..f87af421 100644 --- a/application/pages/modplatform/TwitchPage.ui +++ b/application/pages/modplatform/TwitchPage.ui @@ -6,23 +6,13 @@ <rect> <x>0</x> <y>0</y> - <width>546</width> - <height>405</height> + <width>666</width> + <height>424</height> </rect> </property> <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="1"> - <widget class="QLineEdit" name="lineEdit"/> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Twitch URL:</string> - </property> - </widget> - </item> <item row="1" column="0" colspan="3"> - <widget class="QLabel" name="twitchLabel"> + <widget class="DropLabel" name="twitchLabel"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> <horstretch>0</horstretch> @@ -49,8 +39,35 @@ </property> </widget> </item> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Twitch URL:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="lineEdit"/> + </item> + <item row="2" column="0" colspan="3"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Drag and drop an Install button from CurseForge into the are above.</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> </layout> </widget> + <customwidgets> + <customwidget> + <class>DropLabel</class> + <extends>QLabel</extends> + <header>widgets/DropLabel.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>lineEdit</tabstop> <tabstop>checkButton</tabstop> diff --git a/application/widgets/DropLabel.cpp b/application/widgets/DropLabel.cpp new file mode 100644 index 00000000..a900e57c --- /dev/null +++ b/application/widgets/DropLabel.cpp @@ -0,0 +1,41 @@ +#include "DropLabel.h" + +#include <QMimeData> +#include <QDropEvent> + +DropLabel::DropLabel(QWidget *parent) : QLabel(parent) +{ + setAcceptDrops(true); +} + +void DropLabel::dragEnterEvent(QDragEnterEvent *event) +{ + event->acceptProposedAction(); +} + +void DropLabel::dragMoveEvent(QDragMoveEvent *event) +{ + event->acceptProposedAction(); +} + +void DropLabel::dragLeaveEvent(QDragLeaveEvent *event) +{ + event->accept(); +} + +void DropLabel::dropEvent(QDropEvent *event) +{ + const QMimeData *mimeData = event->mimeData(); + + if (!mimeData) + { + return; + } + + if (mimeData->hasUrls()) { + auto urls = mimeData->urls(); + emit droppedURLs(urls); + } + + event->acceptProposedAction(); +} diff --git a/application/widgets/DropLabel.h b/application/widgets/DropLabel.h new file mode 100644 index 00000000..c5ca0bcc --- /dev/null +++ b/application/widgets/DropLabel.h @@ -0,0 +1,20 @@ +#pragma once + +#include <QLabel> + +class DropLabel : public QLabel +{ + Q_OBJECT + +public: + explicit DropLabel(QWidget *parent = nullptr); + +signals: + void droppedURLs(QList<QUrl> urls); + +protected: + void dropEvent(QDropEvent *event) override; + void dragEnterEvent(QDragEnterEvent *event) override; + void dragMoveEvent(QDragMoveEvent *event) override; + void dragLeaveEvent(QDragLeaveEvent *event) override; +}; |