NOISSUE split out language selection widget, use it in settings
This commit is contained in:
		
							
								
								
									
										67
									
								
								application/widgets/LanguageSelectionWidget.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								application/widgets/LanguageSelectionWidget.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
#include "LanguageSelectionWidget.h"
 | 
			
		||||
 | 
			
		||||
#include <QVBoxLayout>
 | 
			
		||||
#include <QTreeView>
 | 
			
		||||
#include <QHeaderView>
 | 
			
		||||
#include <QLabel>
 | 
			
		||||
#include "MultiMC.h"
 | 
			
		||||
#include "translations/TranslationsModel.h"
 | 
			
		||||
 | 
			
		||||
LanguageSelectionWidget::LanguageSelectionWidget(QWidget *parent) :
 | 
			
		||||
    QWidget(parent)
 | 
			
		||||
{
 | 
			
		||||
    verticalLayout = new QVBoxLayout(this);
 | 
			
		||||
    verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
 | 
			
		||||
    languageView = new QTreeView(this);
 | 
			
		||||
    languageView->setObjectName(QStringLiteral("languageView"));
 | 
			
		||||
    languageView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 | 
			
		||||
    languageView->setAlternatingRowColors(true);
 | 
			
		||||
    languageView->setRootIsDecorated(false);
 | 
			
		||||
    languageView->setItemsExpandable(false);
 | 
			
		||||
    languageView->setWordWrap(true);
 | 
			
		||||
    languageView->header()->setCascadingSectionResizes(true);
 | 
			
		||||
    languageView->header()->setStretchLastSection(false);
 | 
			
		||||
    verticalLayout->addWidget(languageView);
 | 
			
		||||
    helpUsLabel = new QLabel(this);
 | 
			
		||||
    helpUsLabel->setObjectName(QStringLiteral("helpUsLabel"));
 | 
			
		||||
    helpUsLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse);
 | 
			
		||||
    helpUsLabel->setOpenExternalLinks(true);
 | 
			
		||||
    helpUsLabel->setWordWrap(true);
 | 
			
		||||
    verticalLayout->addWidget(helpUsLabel);
 | 
			
		||||
 | 
			
		||||
    auto translations = MMC->translations();
 | 
			
		||||
    auto index = translations->selectedIndex();
 | 
			
		||||
    languageView->setModel(translations.get());
 | 
			
		||||
    languageView->setCurrentIndex(index);
 | 
			
		||||
    languageView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
 | 
			
		||||
    languageView->header()->setSectionResizeMode(0, QHeaderView::Stretch);
 | 
			
		||||
    connect(languageView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &LanguageSelectionWidget::languageRowChanged);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString LanguageSelectionWidget::getSelectedLanguageKey() const
 | 
			
		||||
{
 | 
			
		||||
    auto translations = MMC->translations();
 | 
			
		||||
    return translations->data(languageView->currentIndex(), Qt::UserRole).toString();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LanguageSelectionWidget::retranslate()
 | 
			
		||||
{
 | 
			
		||||
    QString text =
 | 
			
		||||
        tr("Don't see your language or the quality is poor?") +
 | 
			
		||||
        "<br/>" +
 | 
			
		||||
        QString("<a href=\"https://github.com/MultiMC/MultiMC5/wiki/Translating-MultiMC\">%1</a>").arg("Help us with translations!");
 | 
			
		||||
    helpUsLabel->setText(text);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LanguageSelectionWidget::languageRowChanged(const QModelIndex& current, const QModelIndex& previous)
 | 
			
		||||
{
 | 
			
		||||
    if (current == previous)
 | 
			
		||||
    {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    auto translations = MMC->translations();
 | 
			
		||||
    QString key = translations->data(current, Qt::UserRole).toString();
 | 
			
		||||
    translations->selectLanguage(key);
 | 
			
		||||
    translations->updateLanguage(key);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								application/widgets/LanguageSelectionWidget.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								application/widgets/LanguageSelectionWidget.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
/* Copyright 2013-2019 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 <QWidget>
 | 
			
		||||
 | 
			
		||||
class QVBoxLayout;
 | 
			
		||||
class QTreeView;
 | 
			
		||||
class QLabel;
 | 
			
		||||
 | 
			
		||||
class LanguageSelectionWidget: public QWidget
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
public:
 | 
			
		||||
    explicit LanguageSelectionWidget(QWidget *parent = 0);
 | 
			
		||||
    virtual ~LanguageSelectionWidget() { };
 | 
			
		||||
 | 
			
		||||
    QString getSelectedLanguageKey() const;
 | 
			
		||||
    void retranslate();
 | 
			
		||||
 | 
			
		||||
protected slots:
 | 
			
		||||
    void languageRowChanged(const QModelIndex ¤t, const QModelIndex &previous);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QVBoxLayout *verticalLayout = nullptr;
 | 
			
		||||
    QTreeView *languageView = nullptr;
 | 
			
		||||
    QLabel *helpUsLabel = nullptr;
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user