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