Add 'empty text' to all the version selection dialogs.
Customize it for the Forge one so people finally shut up about 1.7.4
This commit is contained in:
parent
ffbc5bb62c
commit
b4b6091372
@ -315,10 +315,14 @@ gui/dialogs/UpdateDialog.h
|
|||||||
gui/dialogs/UpdateDialog.cpp
|
gui/dialogs/UpdateDialog.cpp
|
||||||
|
|
||||||
# GUI - widgets
|
# GUI - widgets
|
||||||
|
gui/widgets/Common.h
|
||||||
|
gui/widgets/Common.cpp
|
||||||
gui/widgets/InstanceDelegate.h
|
gui/widgets/InstanceDelegate.h
|
||||||
gui/widgets/InstanceDelegate.cpp
|
gui/widgets/InstanceDelegate.cpp
|
||||||
gui/widgets/ModListView.h
|
gui/widgets/ModListView.h
|
||||||
gui/widgets/ModListView.cpp
|
gui/widgets/ModListView.cpp
|
||||||
|
gui/widgets/VersionListView.h
|
||||||
|
gui/widgets/VersionListView.cpp
|
||||||
gui/widgets/LabeledToolButton.h
|
gui/widgets/LabeledToolButton.h
|
||||||
gui/widgets/LabeledToolButton.cpp
|
gui/widgets/LabeledToolButton.cpp
|
||||||
gui/widgets/MCModInfoFrame.h
|
gui/widgets/MCModInfoFrame.h
|
||||||
|
@ -142,7 +142,8 @@ void OneSixModEditDialog::on_customEditorBtn_clicked()
|
|||||||
{
|
{
|
||||||
if (!MMC->openJsonEditor(m_inst->instanceRoot() + "/custom.json"))
|
if (!MMC->openJsonEditor(m_inst->instanceRoot() + "/custom.json"))
|
||||||
{
|
{
|
||||||
QMessageBox::warning(this, tr("Error"), tr("Unable to open custom.json, check the settings"));
|
QMessageBox::warning(this, tr("Error"),
|
||||||
|
tr("Unable to open custom.json, check the settings"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -151,6 +152,8 @@ void OneSixModEditDialog::on_forgeBtn_clicked()
|
|||||||
{
|
{
|
||||||
VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this);
|
VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this);
|
||||||
vselect.setFilter(1, m_inst->currentVersionId());
|
vselect.setFilter(1, m_inst->currentVersionId());
|
||||||
|
vselect.setEmptyString(tr("No Forge versions are currently available for Minecraft ") +
|
||||||
|
m_inst->currentVersionId());
|
||||||
if (vselect.exec() && vselect.selectedVersion())
|
if (vselect.exec() && vselect.selectedVersion())
|
||||||
{
|
{
|
||||||
if (m_inst->versionIsCustom())
|
if (m_inst->versionIsCustom())
|
||||||
@ -240,9 +243,9 @@ void OneSixModEditDialog::on_liteloaderBtn_clicked()
|
|||||||
}
|
}
|
||||||
if (!liteloader.apply(m_version))
|
if (!liteloader.apply(m_version))
|
||||||
{
|
{
|
||||||
QMessageBox::critical(
|
QMessageBox::critical(this, tr("LiteLoader"),
|
||||||
this, tr("LiteLoader"),
|
tr("For reasons unknown, the LiteLoader installation failed. "
|
||||||
tr("For reasons unknown, the LiteLoader installation failed. Check your MultiMC log files for details."));
|
"Check your MultiMC log files for details."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +51,11 @@ VersionSelectDialog::VersionSelectDialog(BaseVersionList *vlist, QString title,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VersionSelectDialog::setEmptyString(QString emptyString)
|
||||||
|
{
|
||||||
|
ui->listView->setEmptyString(emptyString);
|
||||||
|
}
|
||||||
|
|
||||||
VersionSelectDialog::~VersionSelectDialog()
|
VersionSelectDialog::~VersionSelectDialog()
|
||||||
{
|
{
|
||||||
delete ui;
|
delete ui;
|
||||||
|
@ -44,6 +44,7 @@ public:
|
|||||||
BaseVersionPtr selectedVersion() const;
|
BaseVersionPtr selectedVersion() const;
|
||||||
|
|
||||||
void setFilter(int column, QString filter);
|
void setFilter(int column, QString filter);
|
||||||
|
void setEmptyString(QString emptyString);
|
||||||
void setResizeOn(int column);
|
void setResizeOn(int column);
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTreeView" name="listView">
|
<widget class="VersionListView" name="listView">
|
||||||
<property name="horizontalScrollBarPolicy">
|
<property name="horizontalScrollBarPolicy">
|
||||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -65,6 +65,13 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>VersionListView</class>
|
||||||
|
<extends>QTreeView</extends>
|
||||||
|
<header>gui/widgets/VersionListView.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
<connections>
|
||||||
<connection>
|
<connection>
|
||||||
|
27
gui/widgets/Common.cpp
Normal file
27
gui/widgets/Common.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include "Common.h"
|
||||||
|
|
||||||
|
// Origin: Qt
|
||||||
|
QStringList viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height,
|
||||||
|
qreal &widthUsed)
|
||||||
|
{
|
||||||
|
QStringList lines;
|
||||||
|
height = 0;
|
||||||
|
widthUsed = 0;
|
||||||
|
textLayout.beginLayout();
|
||||||
|
QString str = textLayout.text();
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
QTextLine line = textLayout.createLine();
|
||||||
|
if (!line.isValid())
|
||||||
|
break;
|
||||||
|
if (line.textLength() == 0)
|
||||||
|
break;
|
||||||
|
line.setLineWidth(lineWidth);
|
||||||
|
line.setPosition(QPointF(0, height));
|
||||||
|
height += line.height();
|
||||||
|
lines.append(str.mid(line.textStart(), line.textLength()));
|
||||||
|
widthUsed = qMax(widthUsed, line.naturalTextWidth());
|
||||||
|
}
|
||||||
|
textLayout.endLayout();
|
||||||
|
return lines;
|
||||||
|
}
|
6
gui/widgets/Common.h
Normal file
6
gui/widgets/Common.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QTextLayout>
|
||||||
|
|
||||||
|
QStringList viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height,
|
||||||
|
qreal &widthUsed);
|
@ -19,30 +19,7 @@
|
|||||||
#include <QTextLayout>
|
#include <QTextLayout>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QtCore/qmath.h>
|
#include <QtCore/qmath.h>
|
||||||
|
#include "Common.h"
|
||||||
// Origin: Qt
|
|
||||||
static void viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height,
|
|
||||||
qreal &widthUsed)
|
|
||||||
{
|
|
||||||
height = 0;
|
|
||||||
widthUsed = 0;
|
|
||||||
textLayout.beginLayout();
|
|
||||||
QString str = textLayout.text();
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
QTextLine line = textLayout.createLine();
|
|
||||||
if (!line.isValid())
|
|
||||||
break;
|
|
||||||
if (line.textLength() == 0)
|
|
||||||
break;
|
|
||||||
line.setLineWidth(lineWidth);
|
|
||||||
line.setPosition(QPointF(0, height));
|
|
||||||
height += line.height();
|
|
||||||
widthUsed = qMax(widthUsed, line.naturalTextWidth());
|
|
||||||
}
|
|
||||||
textLayout.endLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
#define QFIXED_MAX (INT_MAX / 256)
|
#define QFIXED_MAX (INT_MAX / 256)
|
||||||
|
|
||||||
ListViewDelegate::ListViewDelegate(QObject *parent) : QStyledItemDelegate(parent)
|
ListViewDelegate::ListViewDelegate(QObject *parent) : QStyledItemDelegate(parent)
|
||||||
|
150
gui/widgets/VersionListView.cpp
Normal file
150
gui/widgets/VersionListView.cpp
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
/* Copyright 2013 MultiMC Contributors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QHeaderView>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
#include <QDrag>
|
||||||
|
#include <QPainter>
|
||||||
|
#include "VersionListView.h"
|
||||||
|
#include "Common.h"
|
||||||
|
|
||||||
|
VersionListView::VersionListView(QWidget *parent)
|
||||||
|
:QTreeView ( parent )
|
||||||
|
{
|
||||||
|
m_emptyString = tr("No versions are currently available.");
|
||||||
|
}
|
||||||
|
|
||||||
|
void VersionListView::rowsInserted(const QModelIndex &parent, int start, int end)
|
||||||
|
{
|
||||||
|
if(!m_itemCount)
|
||||||
|
viewport()->update();
|
||||||
|
m_itemCount += end-start+1;
|
||||||
|
QTreeView::rowsInserted(parent, start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void VersionListView::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end)
|
||||||
|
{
|
||||||
|
m_itemCount -= end-start+1;
|
||||||
|
if(!m_itemCount)
|
||||||
|
viewport()->update();
|
||||||
|
QTreeView::rowsInserted(parent, start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VersionListView::setModel(QAbstractItemModel *model)
|
||||||
|
{
|
||||||
|
m_itemCount = model->rowCount();
|
||||||
|
if(!m_itemCount)
|
||||||
|
viewport()->update();
|
||||||
|
QTreeView::setModel(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VersionListView::reset()
|
||||||
|
{
|
||||||
|
if(model())
|
||||||
|
{
|
||||||
|
m_itemCount = model()->rowCount();
|
||||||
|
}
|
||||||
|
viewport()->update();
|
||||||
|
QTreeView::reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VersionListView::setEmptyString(QString emptyString)
|
||||||
|
{
|
||||||
|
m_emptyString = emptyString;
|
||||||
|
if(!m_itemCount)
|
||||||
|
{
|
||||||
|
viewport()->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VersionListView::paintEvent(QPaintEvent *event)
|
||||||
|
{
|
||||||
|
if(m_itemCount)
|
||||||
|
{
|
||||||
|
QTreeView::paintEvent(event);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
paintInfoLabel(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VersionListView::paintInfoLabel(QPaintEvent *event)
|
||||||
|
{
|
||||||
|
int scrollInterval = 500;
|
||||||
|
|
||||||
|
//calculate the rect for the overlay
|
||||||
|
QPainter painter(viewport());
|
||||||
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
|
const QChar letter = 'Q';
|
||||||
|
QFont font("sans", 20);
|
||||||
|
font.setBold(true);
|
||||||
|
|
||||||
|
QRect bounds = viewport()->geometry();
|
||||||
|
bounds.moveTop(0);
|
||||||
|
QTextLayout layout(m_emptyString, font);
|
||||||
|
qreal height = 0.0;
|
||||||
|
qreal widthUsed = 0.0;
|
||||||
|
QStringList lines = viewItemTextLayout(layout, bounds.width() - 20, height, widthUsed);
|
||||||
|
QRect rect (0,0, widthUsed, height);
|
||||||
|
rect.setWidth(rect.width()+20);
|
||||||
|
rect.setHeight(rect.height()+20);
|
||||||
|
rect.moveCenter(bounds.center());
|
||||||
|
//check if we are allowed to draw in our area
|
||||||
|
if (!event->rect().intersects(rect)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//draw the letter of the topmost item semitransparent in the middle
|
||||||
|
QColor background = QApplication::palette().color(QPalette::Foreground);
|
||||||
|
QColor foreground = QApplication::palette().color(QPalette::Base);
|
||||||
|
/*
|
||||||
|
background.setAlpha(128 - scrollFade);
|
||||||
|
foreground.setAlpha(128 - scrollFade);
|
||||||
|
*/
|
||||||
|
painter.setBrush(QBrush(background));
|
||||||
|
painter.setPen(foreground);
|
||||||
|
painter.drawRoundedRect(rect, 5.0, 5.0);
|
||||||
|
foreground.setAlpha(190);
|
||||||
|
painter.setPen(foreground);
|
||||||
|
painter.setFont(font);
|
||||||
|
painter.drawText(rect, Qt::AlignCenter, lines.join("\n"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void ModListView::setModel ( QAbstractItemModel* model )
|
||||||
|
{
|
||||||
|
QTreeView::setModel ( model );
|
||||||
|
auto head = header();
|
||||||
|
head->setStretchLastSection(false);
|
||||||
|
// HACK: this is true for the checkbox column of mod lists
|
||||||
|
auto string = model->headerData(0,head->orientation()).toString();
|
||||||
|
if(!string.size())
|
||||||
|
{
|
||||||
|
head->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||||||
|
head->setSectionResizeMode(1, QHeaderView::Stretch);
|
||||||
|
for(int i = 2; i < head->count(); i++)
|
||||||
|
head->setSectionResizeMode(i, QHeaderView::ResizeToContents);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
head->setSectionResizeMode(0, QHeaderView::Stretch);
|
||||||
|
for(int i = 1; i < head->count(); i++)
|
||||||
|
head->setSectionResizeMode(i, QHeaderView::ResizeToContents);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
43
gui/widgets/VersionListView.h
Normal file
43
gui/widgets/VersionListView.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/* Copyright 2013 MultiMC Contributors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <QTreeView>
|
||||||
|
|
||||||
|
class Mod;
|
||||||
|
|
||||||
|
class VersionListView : public QTreeView
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit VersionListView(QWidget *parent = 0);
|
||||||
|
virtual void paintEvent(QPaintEvent *event) override;
|
||||||
|
void setEmptyString(QString emptyString);
|
||||||
|
virtual void setModel ( QAbstractItemModel* model );
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void reset() override;
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
virtual void rowsAboutToBeRemoved(const QModelIndex & parent, int start, int end) override;
|
||||||
|
virtual void rowsInserted(const QModelIndex &parent, int start, int end) override;
|
||||||
|
|
||||||
|
private: /* methods */
|
||||||
|
void paintInfoLabel(QPaintEvent *event);
|
||||||
|
|
||||||
|
private: /* variables */
|
||||||
|
int m_itemCount = 0;
|
||||||
|
QString m_emptyString;
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user