Files
Sourcetrail/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp
T

195 lines
6.1 KiB
C++

#include "qt/window/project_wizzard/QtProjectWizzardContentPreferences.h"
#include "settings/ApplicationSettings.h"
#include "utility/messaging/type/MessageSwitchColorScheme.h"
#include "utility/file/FileSystem.h"
#include "utility/ResourcePaths.h"
QtProjectWizzardContentPreferences::QtProjectWizzardContentPreferences(
std::shared_ptr<ProjectSettings> settings, QtProjectWizzardWindow* window
)
: QtProjectWizzardContent(settings, window)
, m_oldColorSchemeIndex(-1)
{
std::vector<std::string> colorSchemePaths =
FileSystem::getFileNamesFromDirectory(ResourcePaths::getColorSchemesPath(), std::vector<std::string>(1, ".xml"));
for (const std::string& colorScheme : colorSchemePaths)
{
m_colorSchemePaths.push_back(FilePath(colorScheme));
}
}
QtProjectWizzardContentPreferences::~QtProjectWizzardContentPreferences()
{
if (m_oldColorSchemeIndex != -1)
{
colorSchemeChanged(m_oldColorSchemeIndex);
}
}
void QtProjectWizzardContentPreferences::populateWindow(QGridLayout* layout, int& row)
{
populateForm(layout, row);
}
void QtProjectWizzardContentPreferences::populateForm(QGridLayout* layout, int& row)
{
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
// ui
layout->addWidget(createFormTitle("USER INTERFACE"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignLeft);
row++;
// font face
m_fontFace = new QLineEdit();
m_fontFace->setObjectName("name");
m_fontFace->setAttribute(Qt::WA_MacShowFocusRect, 0);
layout->addWidget(createFormLabel("Font face"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
layout->addWidget(m_fontFace, row, QtProjectWizzardWindow::BACK_COL);
row++;
// font size
m_fontSize = new QComboBox();
for (int i = appSettings->getFontSizeMin(); i <= appSettings->getFontSizeMax(); i++)
{
m_fontSize->insertItem(i, QString::number(i));
}
layout->addWidget(createFormLabel("Font size"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
layout->addWidget(m_fontSize, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft);
row++;
// tab width
m_tabWidth = new QComboBox();
for (int i = 1; i < 17; i++)
{
m_tabWidth->insertItem(i, QString::number(i));
}
layout->addWidget(createFormLabel("Tab width"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
layout->addWidget(m_tabWidth, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft);
row++;
// color scheme
m_colorSchemes = new QComboBox();
for (size_t i = 0; i < m_colorSchemePaths.size(); i++)
{
m_colorSchemes->insertItem(i, m_colorSchemePaths[i].withoutExtension().fileName().c_str());
}
connect(m_colorSchemes, SIGNAL(activated(int)), this, SLOT(colorSchemeChanged(int)));
layout->addWidget(createFormLabel("Color scheme"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
layout->addWidget(m_colorSchemes, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft);
row++;
// scroll speed
m_scrollSpeed = new QLineEdit();
m_scrollSpeed->setObjectName("name");
m_scrollSpeed->setAttribute(Qt::WA_MacShowFocusRect, 0);
layout->addWidget(createFormLabel("Scroll Speed"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
layout->addWidget(m_scrollSpeed, row, QtProjectWizzardWindow::BACK_COL);
addHelpButton(
"Multiplier for scroll speed. Set to a value between 0 and 1 to scroll slower, or set to larger than 1 to scroll faster."
, layout, row
);
row++;
layout->setRowMinimumHeight(row++, 20);
// indexing
layout->addWidget(createFormTitle("INDEXING"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignLeft);
row++;
// indexer threads
m_threads = new QComboBox();
for (int i = 1; i <= 24; i++)
{
m_threads->insertItem(i, QString::number(i));
}
layout->addWidget(createFormLabel("Indexer threads"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
layout->addWidget(m_threads, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft);
addHelpButton(
"Number of parallel threads used to index your projects."
, layout, row
);
row++;
// ignore non-fatal errors in non-indexed files
m_fatalErrors = new QCheckBox("Display non-fatal errors in unindexed files", this);
layout->addWidget(createFormLabel("Non-Fatal Errors"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
layout->addWidget(m_fatalErrors, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft);
addHelpButton(
"When checked non-fatal errors within included unindexed files are also shown."
, layout, row
);
row++;
}
void QtProjectWizzardContentPreferences::load()
{
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
m_fontFace->setText(QString::fromStdString(appSettings->getFontName()));
m_fontSize->setCurrentIndex(appSettings->getFontSize() - appSettings->getFontSizeMin());
m_tabWidth->setCurrentIndex(appSettings->getCodeTabWidth() - 1);
FilePath colorSchemePath = appSettings->getColorSchemePath();
for (size_t i = 0; i < m_colorSchemePaths.size(); i++)
{
if (colorSchemePath == m_colorSchemePaths[i])
{
m_colorSchemes->setCurrentIndex(i);
m_oldColorSchemeIndex = i;
break;
}
}
m_scrollSpeed->setText(QString::number(appSettings->getScrollSpeed(), 'f', 1));
m_threads->setCurrentIndex(appSettings->getIndexerThreadCount() - 1);
m_fatalErrors->setChecked(appSettings->getShowExternalNonFatalErrors());
}
void QtProjectWizzardContentPreferences::save()
{
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
appSettings->setFontName(m_fontFace->text().toStdString());
appSettings->setFontSize(m_fontSize->currentIndex() + appSettings->getFontSizeMin());
appSettings->setCodeTabWidth(m_tabWidth->currentIndex() + 1);
appSettings->setColorSchemePath(m_colorSchemePaths[m_colorSchemes->currentIndex()]);
m_oldColorSchemeIndex = -1;
float scrollSpeed = m_scrollSpeed->text().toFloat();
if (scrollSpeed)
{
appSettings->setScrollSpeed(scrollSpeed);
}
appSettings->setIndexerThreadCount(m_threads->currentIndex() + 1);
appSettings->setShowExternalNonFatalErrors(m_fatalErrors->isChecked());
}
bool QtProjectWizzardContentPreferences::check()
{
return true;
}
void QtProjectWizzardContentPreferences::colorSchemeChanged(int index)
{
MessageSwitchColorScheme(m_colorSchemePaths[index]).dispatch();
}