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/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; | ||||||
|  | }; | ||||||
		Reference in New Issue
	
	Block a user