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:
		@@ -315,10 +315,14 @@ gui/dialogs/UpdateDialog.h
 | 
			
		||||
gui/dialogs/UpdateDialog.cpp
 | 
			
		||||
 | 
			
		||||
# GUI - widgets
 | 
			
		||||
gui/widgets/Common.h
 | 
			
		||||
gui/widgets/Common.cpp
 | 
			
		||||
gui/widgets/InstanceDelegate.h
 | 
			
		||||
gui/widgets/InstanceDelegate.cpp
 | 
			
		||||
gui/widgets/ModListView.h
 | 
			
		||||
gui/widgets/ModListView.cpp
 | 
			
		||||
gui/widgets/VersionListView.h
 | 
			
		||||
gui/widgets/VersionListView.cpp
 | 
			
		||||
gui/widgets/LabeledToolButton.h
 | 
			
		||||
gui/widgets/LabeledToolButton.cpp
 | 
			
		||||
gui/widgets/MCModInfoFrame.h
 | 
			
		||||
 
 | 
			
		||||
@@ -142,7 +142,8 @@ void OneSixModEditDialog::on_customEditorBtn_clicked()
 | 
			
		||||
	{
 | 
			
		||||
		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);
 | 
			
		||||
	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 (m_inst->versionIsCustom())
 | 
			
		||||
@@ -240,9 +243,9 @@ void OneSixModEditDialog::on_liteloaderBtn_clicked()
 | 
			
		||||
	}
 | 
			
		||||
	if (!liteloader.apply(m_version))
 | 
			
		||||
	{
 | 
			
		||||
		QMessageBox::critical(
 | 
			
		||||
			this, tr("LiteLoader"),
 | 
			
		||||
			tr("For reasons unknown, the LiteLoader installation failed. Check your MultiMC log files for details."));
 | 
			
		||||
		QMessageBox::critical(this, tr("LiteLoader"),
 | 
			
		||||
							  tr("For reasons unknown, the LiteLoader installation failed. "
 | 
			
		||||
								 "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()
 | 
			
		||||
{
 | 
			
		||||
	delete ui;
 | 
			
		||||
 
 | 
			
		||||
@@ -44,6 +44,7 @@ public:
 | 
			
		||||
	BaseVersionPtr selectedVersion() const;
 | 
			
		||||
 | 
			
		||||
	void setFilter(int column, QString filter);
 | 
			
		||||
	void setEmptyString(QString emptyString);
 | 
			
		||||
	void setResizeOn(int column);
 | 
			
		||||
 | 
			
		||||
private
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@
 | 
			
		||||
  </property>
 | 
			
		||||
  <layout class="QVBoxLayout" name="verticalLayout">
 | 
			
		||||
   <item>
 | 
			
		||||
    <widget class="QTreeView" name="listView">
 | 
			
		||||
    <widget class="VersionListView" name="listView">
 | 
			
		||||
     <property name="horizontalScrollBarPolicy">
 | 
			
		||||
      <enum>Qt::ScrollBarAlwaysOff</enum>
 | 
			
		||||
     </property>
 | 
			
		||||
@@ -65,6 +65,13 @@
 | 
			
		||||
   </item>
 | 
			
		||||
  </layout>
 | 
			
		||||
 </widget>
 | 
			
		||||
 <customwidgets>
 | 
			
		||||
  <customwidget>
 | 
			
		||||
   <class>VersionListView</class>
 | 
			
		||||
   <extends>QTreeView</extends>
 | 
			
		||||
   <header>gui/widgets/VersionListView.h</header>
 | 
			
		||||
  </customwidget>
 | 
			
		||||
 </customwidgets>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections>
 | 
			
		||||
  <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 <QApplication>
 | 
			
		||||
#include <QtCore/qmath.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();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#include "Common.h"
 | 
			
		||||
#define QFIXED_MAX (INT_MAX / 256)
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user