summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLeo Lam <leolino.lam@gmail.com>2017-06-03 12:47:18 +0200
committerGitHub <noreply@github.com>2017-06-03 12:47:18 +0200
commitccccb8463d43ef8ea74af738f85511cec553469c (patch)
tree3edac2c212a953d74c4b5eb91d72570a7a5da7cf /Source/Core
parent1a983bd357e2eadf7f2b24787aad927ace1626db (diff)
parent87a74ca3ae3829e86ad53b4078a090c962c97f7c (diff)
Merge pull request #5503 from ligfx/qtelidedbutton
DolphinQt2: add ElidedButton for controller mapping buttons
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt2/CMakeLists.txt1
-rw-r--r--Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp3
-rw-r--r--Source/Core/DolphinQt2/Config/Mapping/MappingButton.h6
-rw-r--r--Source/Core/DolphinQt2/Config/Mapping/MappingWidget.cpp1
-rw-r--r--Source/Core/DolphinQt2/DolphinQt2.vcxproj3
-rw-r--r--Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters8
-rw-r--r--Source/Core/DolphinQt2/QtUtils/ElidedButton.cpp40
-rw-r--r--Source/Core/DolphinQt2/QtUtils/ElidedButton.h20
8 files changed, 74 insertions, 8 deletions
diff --git a/Source/Core/DolphinQt2/CMakeLists.txt b/Source/Core/DolphinQt2/CMakeLists.txt
index faf8b468f5..e9886ea4e0 100644
--- a/Source/Core/DolphinQt2/CMakeLists.txt
+++ b/Source/Core/DolphinQt2/CMakeLists.txt
@@ -39,6 +39,7 @@ set(SRCS
GameList/GameListModel.cpp
GameList/GameTracker.cpp
GameList/ListProxyModel.cpp
+ QtUtils/ElidedButton.cpp
Settings/GeneralPane.cpp
Settings/InterfacePane.cpp
)
diff --git a/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp b/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp
index 12c1b939fc..dcb92e6072 100644
--- a/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp
+++ b/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp
@@ -17,9 +17,8 @@
#include "InputCommon/ControllerInterface/ControllerInterface.h"
MappingButton::MappingButton(MappingWidget* widget, ControlReference* ref)
- : QPushButton(QString::fromStdString(ref->expression)), m_parent(widget), m_reference(ref)
+ : ElidedButton(QString::fromStdString(ref->expression)), m_parent(widget), m_reference(ref)
{
- setText(QString::fromStdString(m_reference->expression));
Connect();
}
diff --git a/Source/Core/DolphinQt2/Config/Mapping/MappingButton.h b/Source/Core/DolphinQt2/Config/Mapping/MappingButton.h
index 304389297e..27249c0685 100644
--- a/Source/Core/DolphinQt2/Config/Mapping/MappingButton.h
+++ b/Source/Core/DolphinQt2/Config/Mapping/MappingButton.h
@@ -4,16 +4,14 @@
#pragma once
-#include <QPoint>
-#include <QPushButton>
-#include <QString>
+#include "DolphinQt2/QtUtils/ElidedButton.h"
class ControlReference;
class MappingWidget;
class QEvent;
class QMouseEvent;
-class MappingButton : public QPushButton
+class MappingButton : public ElidedButton
{
public:
MappingButton(MappingWidget* widget, ControlReference* ref);
diff --git a/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.cpp b/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.cpp
index 6daa56dfdd..bb711f3058 100644
--- a/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.cpp
+++ b/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.cpp
@@ -49,6 +49,7 @@ QGroupBox* MappingWidget::CreateGroupBox(const QString& name, ControllerEmu::Con
for (auto& control : group->controls)
{
auto* button = new MappingButton(this, control->control_ref.get());
+ button->setMinimumWidth(125);
button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
form_layout->addRow(QString::fromStdString(control->name), button);
m_buttons.push_back(button);
diff --git a/Source/Core/DolphinQt2/DolphinQt2.vcxproj b/Source/Core/DolphinQt2/DolphinQt2.vcxproj
index cf67948adb..888b126218 100644
--- a/Source/Core/DolphinQt2/DolphinQt2.vcxproj
+++ b/Source/Core/DolphinQt2/DolphinQt2.vcxproj
@@ -154,6 +154,7 @@
<ClCompile Include="Main.cpp" />
<ClCompile Include="MainWindow.cpp" />
<ClCompile Include="MenuBar.cpp" />
+ <ClCompile Include="QtUtils\ElidedButton.cpp" />
<ClCompile Include="RenderWidget.cpp" />
<ClCompile Include="Resources.cpp" />
<ClCompile Include="Settings.cpp" />
@@ -254,4 +255,4 @@
<Message Text="Copy: @(BinaryFiles) -&gt; $(BinaryOutputDir)" Importance="High" />
<Copy SourceFiles="@(BinaryFiles)" DestinationFolder="$(BinaryOutputDir)" />
</Target>
-</Project> \ No newline at end of file
+</Project>
diff --git a/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters b/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters
index 0a4627d729..5e25b8b58f 100644
--- a/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters
+++ b/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters
@@ -116,6 +116,9 @@
<ClCompile Include="Config\Mapping\WiimoteEmuExtension.cpp" />
<ClCompile Include="Config\Mapping\WiimoteEmuGeneral.cpp" />
<ClCompile Include="Config\Mapping\WiimoteEmuMotionControl.cpp" />
+ <ClCompile Include="QtUtils\ElidedButton.cpp">
+ <Filter>QtUtils</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="MainWindow.h" />
@@ -177,6 +180,9 @@
<Filter Include="Config">
<UniqueIdentifier>{42f8a963-563e-420d-8aca-5761657dcff5}</UniqueIdentifier>
</Filter>
+ <Filter Include="QtUtils">
+ <UniqueIdentifier>{fb4b5691-df66-4984-af40-fcc2b37f3622}</UniqueIdentifier>
+ </Filter>
<Filter Include="Settings">
<UniqueIdentifier>{d2a31121-7903-4a66-9b42-9358e92d36ff}</UniqueIdentifier>
</Filter>
@@ -184,4 +190,4 @@
<ItemGroup>
<ClInclude Include="Resources.h" />
</ItemGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/Source/Core/DolphinQt2/QtUtils/ElidedButton.cpp b/Source/Core/DolphinQt2/QtUtils/ElidedButton.cpp
new file mode 100644
index 0000000000..309c4b5d29
--- /dev/null
+++ b/Source/Core/DolphinQt2/QtUtils/ElidedButton.cpp
@@ -0,0 +1,40 @@
+// Copyright 2017 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#include "DolphinQt2/QtUtils/ElidedButton.h"
+
+#include <QFontMetrics>
+#include <QStyleOptionButton>
+#include <QStylePainter>
+
+ElidedButton::ElidedButton(const QString& text, Qt::TextElideMode elide_mode)
+ : QPushButton(text, nullptr), m_elide_mode{elide_mode}
+{
+}
+
+Qt::TextElideMode ElidedButton::elideMode() const
+{
+ return m_elide_mode;
+}
+
+void ElidedButton::setElideMode(Qt::TextElideMode elide_mode)
+{
+ if (elide_mode == m_elide_mode)
+ return;
+
+ m_elide_mode = elide_mode;
+ repaint();
+}
+
+void ElidedButton::paintEvent(QPaintEvent* event)
+{
+ QStyleOptionButton option;
+ initStyleOption(&option);
+
+ option.text = fontMetrics().elidedText(
+ text(), m_elide_mode,
+ style()->subElementRect(QStyle::SE_PushButtonContents, &option, this).width());
+
+ QStylePainter{this}.drawControl(QStyle::CE_PushButton, option);
+}
diff --git a/Source/Core/DolphinQt2/QtUtils/ElidedButton.h b/Source/Core/DolphinQt2/QtUtils/ElidedButton.h
new file mode 100644
index 0000000000..bce6593f8d
--- /dev/null
+++ b/Source/Core/DolphinQt2/QtUtils/ElidedButton.h
@@ -0,0 +1,20 @@
+// Copyright 2017 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <QPushButton>
+
+class ElidedButton : public QPushButton
+{
+public:
+ ElidedButton(const QString& text = QStringLiteral(""),
+ Qt::TextElideMode elide_mode = Qt::ElideRight);
+ Qt::TextElideMode elideMode() const;
+ void setElideMode(Qt::TextElideMode elide_mode);
+
+private:
+ void paintEvent(QPaintEvent* event);
+ Qt::TextElideMode m_elide_mode;
+};