mirror of
https://github.com/ModOrganizer2/modorganizer.git
synced 2026-07-27 13:58:24 -07:00
more configuration options
- overwrite path configurable - one can now set a base directory for all configurable paths - user can now opt in/out of receiving pre-release updates (not functional yet)
This commit is contained in:
+107
-20
@@ -33,6 +33,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include <QLineEdit>
|
||||
#include <QMessageBox>
|
||||
#include <QRegExp>
|
||||
#include <QDir>
|
||||
|
||||
#include <memory>
|
||||
|
||||
@@ -179,6 +180,11 @@ QString Settings::getSteamAppID() const
|
||||
return m_Settings.value("Settings/app_id", m_GamePlugin->steamAPPId()).toString();
|
||||
}
|
||||
|
||||
bool Settings::usePrereleases() const
|
||||
{
|
||||
return m_Settings.value("Settings/use_prereleases", false).toBool();
|
||||
}
|
||||
|
||||
void Settings::setDownloadSpeed(const QString &serverName, int bytesPerSecond)
|
||||
{
|
||||
m_Settings.beginGroup("Servers");
|
||||
@@ -213,34 +219,55 @@ std::map<QString, int> Settings::getPreferredServers()
|
||||
return result;
|
||||
}
|
||||
|
||||
QString Settings::getConfigurablePath(const QString &key, const QString &def) const
|
||||
QString Settings::getConfigurablePath(const QString &key,
|
||||
const QString &def,
|
||||
bool resolve) const
|
||||
{
|
||||
return QDir::fromNativeSeparators(m_Settings.value(QString("settings/") + key, qApp->property("dataPath").toString() + "/" + def).toString());
|
||||
QString result = QDir::fromNativeSeparators(
|
||||
m_Settings.value(QString("settings/") + key,
|
||||
qApp->property("dataPath").toString() + "/" + def)
|
||||
.toString());
|
||||
if (resolve) {
|
||||
result.replace("%BASE_DIR%", getBaseDirectory());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
QString Settings::getDownloadDirectory() const
|
||||
QString Settings::getBaseDirectory() const
|
||||
{
|
||||
return getConfigurablePath("download_directory", ToQString(AppConfig::downloadPath()));
|
||||
return QDir::fromNativeSeparators(m_Settings.value(
|
||||
"settings/base_directory", qApp->property("dataPath").toString()).toString());
|
||||
}
|
||||
|
||||
QString Settings::getCacheDirectory() const
|
||||
QString Settings::getDownloadDirectory(bool resolve) const
|
||||
{
|
||||
return getConfigurablePath("cache_directory", ToQString(AppConfig::cachePath()));
|
||||
return getConfigurablePath("download_directory", ToQString(AppConfig::downloadPath()), resolve);
|
||||
}
|
||||
|
||||
QString Settings::getModDirectory() const
|
||||
QString Settings::getCacheDirectory(bool resolve) const
|
||||
{
|
||||
return getConfigurablePath("mod_directory", ToQString(AppConfig::modsPath()));
|
||||
return getConfigurablePath("cache_directory", ToQString(AppConfig::cachePath()), resolve);
|
||||
}
|
||||
|
||||
QString Settings::getProfileDirectory() const
|
||||
QString Settings::getModDirectory(bool resolve) const
|
||||
{
|
||||
return getConfigurablePath("profiles_directory", ToQString(AppConfig::profilesPath()));
|
||||
return getConfigurablePath("mod_directory", ToQString(AppConfig::modsPath()), resolve);
|
||||
}
|
||||
|
||||
QString Settings::getProfileDirectory(bool resolve) const
|
||||
{
|
||||
return getConfigurablePath("profiles_directory", ToQString(AppConfig::profilesPath()), resolve);
|
||||
}
|
||||
|
||||
QString Settings::getOverwriteDirectory(bool resolve) const
|
||||
{
|
||||
return getConfigurablePath("overwrite_directory",
|
||||
ToQString(AppConfig::overwritePath()), resolve);
|
||||
}
|
||||
|
||||
QString Settings::getNMMVersion() const
|
||||
{
|
||||
static const QString MIN_NMM_VERSION = "0.52.3";
|
||||
static const QString MIN_NMM_VERSION = "0.61.13";
|
||||
QString result = m_Settings.value("Settings/nmm_version", MIN_NMM_VERSION).toString();
|
||||
if (VersionInfo(result) < VersionInfo(MIN_NMM_VERSION)) {
|
||||
result = MIN_NMM_VERSION;
|
||||
@@ -508,12 +535,7 @@ void Settings::addLanguages(QComboBox *languageBox)
|
||||
void Settings::addStyles(QComboBox *styleBox)
|
||||
{
|
||||
styleBox->addItem("None", "");
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
|
||||
styleBox->addItem("Fusion", "Fusion");
|
||||
#else
|
||||
styleBox->addItem("Plastique", "Plastique");
|
||||
styleBox->addItem("Cleanlooks", "Cleanlooks");
|
||||
#endif
|
||||
|
||||
QDirIterator langIter(QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::stylesheetsPath()), QStringList("*.qss"), QDir::Files);
|
||||
while (langIter.hasNext()) {
|
||||
@@ -575,6 +597,7 @@ Settings::GeneralTab::GeneralTab(Settings *m_parent, SettingsDialog &m_dialog)
|
||||
, m_logLevelBox(m_dialog.findChild<QComboBox *>("logLevelBox"))
|
||||
, m_compactBox(m_dialog.findChild<QCheckBox *>("compactBox"))
|
||||
, m_showMetaBox(m_dialog.findChild<QCheckBox *>("showMetaBox"))
|
||||
, m_usePrereleaseBox(m_dialog.findChild<QCheckBox *>("usePrereleaseBox"))
|
||||
{
|
||||
// FIXME I think 'addLanguages' lives in here not in parent
|
||||
m_parent->addLanguages(m_languageBox);
|
||||
@@ -606,6 +629,7 @@ Settings::GeneralTab::GeneralTab(Settings *m_parent, SettingsDialog &m_dialog)
|
||||
m_logLevelBox->setCurrentIndex(m_parent->logLevel());
|
||||
m_compactBox->setChecked(m_parent->compactDownloads());
|
||||
m_showMetaBox->setChecked(m_parent->metaDownloads());
|
||||
m_usePrereleaseBox->setChecked(m_parent->usePrereleases());
|
||||
}
|
||||
|
||||
void Settings::GeneralTab::update()
|
||||
@@ -629,23 +653,53 @@ void Settings::GeneralTab::update()
|
||||
|
||||
m_Settings.setValue("Settings/compact_downloads", m_compactBox->isChecked());
|
||||
m_Settings.setValue("Settings/meta_downloads", m_showMetaBox->isChecked());
|
||||
m_Settings.setValue("Settings/use_prereleases", m_usePrereleaseBox->isChecked());
|
||||
}
|
||||
|
||||
Settings::PathsTab::PathsTab(Settings *parent, SettingsDialog &dialog)
|
||||
: SettingsTab(parent, dialog)
|
||||
, m_baseDirEdit(m_dialog.findChild<QLineEdit *>("baseDirEdit"))
|
||||
, m_downloadDirEdit(m_dialog.findChild<QLineEdit *>("downloadDirEdit"))
|
||||
, m_modDirEdit(m_dialog.findChild<QLineEdit *>("modDirEdit"))
|
||||
, m_cacheDirEdit(m_dialog.findChild<QLineEdit *>("cacheDirEdit"))
|
||||
, m_profilesDirEdit(m_dialog.findChild<QLineEdit *>("profilesDirEdit"))
|
||||
, m_overwriteDirEdit(m_dialog.findChild<QLineEdit *>("overwriteDirEdit"))
|
||||
{
|
||||
m_downloadDirEdit->setText(m_parent->getDownloadDirectory());
|
||||
m_modDirEdit->setText(m_parent->getModDirectory());
|
||||
m_cacheDirEdit->setText(m_parent->getCacheDirectory());
|
||||
m_profilesDirEdit->setText(m_parent->getProfileDirectory());
|
||||
m_baseDirEdit->setText(m_parent->getBaseDirectory());
|
||||
/*
|
||||
m_downloadDirEdit->setText(m_parent->getDownloadDirectory(false));
|
||||
m_modDirEdit->setText(m_parent->getModDirectory(false));
|
||||
m_cacheDirEdit->setText(m_parent->getCacheDirectory(false));
|
||||
m_profilesDirEdit->setText(m_parent->getProfileDirectory(false));
|
||||
m_overwriteDirEdit->setText(m_parent->getOverwriteDirectory(false));
|
||||
*/
|
||||
|
||||
QString basePath = parent->getBaseDirectory();
|
||||
QDir baseDir(basePath);
|
||||
for (const auto &dir : {
|
||||
std::make_pair(m_downloadDirEdit, m_parent->getDownloadDirectory(false)),
|
||||
std::make_pair(m_modDirEdit, m_parent->getModDirectory(false)),
|
||||
std::make_pair(m_cacheDirEdit, m_parent->getCacheDirectory(false)),
|
||||
std::make_pair(m_profilesDirEdit, m_parent->getProfileDirectory(false)),
|
||||
std::make_pair(m_overwriteDirEdit, m_parent->getOverwriteDirectory(false))
|
||||
}) {
|
||||
QString storePath = baseDir.relativeFilePath(dir.second);
|
||||
qDebug("%s -> %s", qPrintable(dir.second), qPrintable(storePath));
|
||||
if (storePath.startsWith("..") || QDir::isAbsolutePath(storePath)) {
|
||||
storePath = dir.second;
|
||||
} else {
|
||||
storePath = QString("%BASE_DIR%/") + storePath;
|
||||
}
|
||||
dir.first->setText(storePath);
|
||||
}
|
||||
}
|
||||
|
||||
void Settings::PathsTab::update()
|
||||
{
|
||||
typedef std::tuple<QString, QString, std::wstring> Directory;
|
||||
|
||||
QString basePath = m_parent->getBaseDirectory();
|
||||
|
||||
if ((QDir::fromNativeSeparators(m_modDirEdit->text())
|
||||
!= QDir::fromNativeSeparators(m_parent->getModDirectory()))
|
||||
&& (QMessageBox::question(
|
||||
@@ -660,6 +714,38 @@ void Settings::PathsTab::update()
|
||||
m_modDirEdit->setText(m_parent->getModDirectory());
|
||||
}
|
||||
|
||||
for (const Directory &dir :{
|
||||
Directory{m_downloadDirEdit->text(), "download_directory", AppConfig::downloadPath()},
|
||||
Directory{m_cacheDirEdit->text(), "cache_directory", AppConfig::cachePath()},
|
||||
Directory{m_modDirEdit->text(), "mod_directory", AppConfig::modsPath()},
|
||||
Directory{m_overwriteDirEdit->text(), "overwrite_directory", AppConfig::overwritePath()},
|
||||
Directory{m_profilesDirEdit->text(), "profiles_directory", AppConfig::profilesPath()}
|
||||
}) {
|
||||
QString path, settingsKey;
|
||||
std::wstring defaultName;
|
||||
std::tie(path, settingsKey, defaultName) = dir;
|
||||
|
||||
settingsKey = QString("Settings/%1").arg(settingsKey);
|
||||
|
||||
QString realPath = path;
|
||||
realPath.replace("%BASE_DIR%", m_parent->getBaseDirectory());
|
||||
|
||||
if (!QDir(realPath).exists()) {
|
||||
QDir().mkpath(realPath);
|
||||
}
|
||||
|
||||
qDebug("%s -> %s", qPrintable(path), qPrintable(realPath));
|
||||
|
||||
if (QFileInfo(realPath)
|
||||
!= QFileInfo(basePath + "/" + QString::fromStdWString(defaultName))) {
|
||||
m_Settings.setValue(settingsKey, path);
|
||||
} else {
|
||||
m_Settings.remove(settingsKey);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
if (!QDir(m_downloadDirEdit->text()).exists()) {
|
||||
QDir().mkpath(m_downloadDirEdit->text());
|
||||
}
|
||||
@@ -707,6 +793,7 @@ void Settings::PathsTab::update()
|
||||
} else {
|
||||
m_Settings.remove("Settings/profiles_directory");
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
Settings::NexusTab::NexusTab(Settings *parent, SettingsDialog &dialog)
|
||||
|
||||
+22
-5
@@ -105,10 +105,16 @@ public:
|
||||
**/
|
||||
QString getSteamAppID() const;
|
||||
|
||||
/**
|
||||
* retrieves the base directory under which the other directories usually
|
||||
* reside
|
||||
*/
|
||||
QString getBaseDirectory() const;
|
||||
|
||||
/**
|
||||
* retrieve the directory where downloads are stored (with native separators)
|
||||
**/
|
||||
QString getDownloadDirectory() const;
|
||||
QString getDownloadDirectory(bool resolve = true) const;
|
||||
|
||||
/**
|
||||
* retrieve a sorted list of preferred servers
|
||||
@@ -118,7 +124,7 @@ public:
|
||||
/**
|
||||
* retrieve the directory where mods are stored (with native separators)
|
||||
**/
|
||||
QString getModDirectory() const;
|
||||
QString getModDirectory(bool resolve = true) const;
|
||||
|
||||
/**
|
||||
* returns the version of nmm to impersonate when connecting to nexus
|
||||
@@ -128,12 +134,18 @@ public:
|
||||
/**
|
||||
* retrieve the directory where the web cache is stored (with native separators)
|
||||
**/
|
||||
QString getCacheDirectory() const;
|
||||
QString getCacheDirectory(bool resolve = true) const;
|
||||
|
||||
/**
|
||||
* retrieve the directory where profiles stored (with native separators)
|
||||
**/
|
||||
QString getProfileDirectory() const;
|
||||
QString getProfileDirectory(bool resolve = true) const;
|
||||
|
||||
/**
|
||||
* retrieve the directory were new files are stored that can't be assigned
|
||||
* to a mod (with native separators)
|
||||
*/
|
||||
QString getOverwriteDirectory(bool resolve = true) const;
|
||||
|
||||
/**
|
||||
* @return true if the user has set up automatic login to nexus
|
||||
@@ -295,6 +307,8 @@ public:
|
||||
*/
|
||||
std::vector<MOBase::IPlugin*> plugins() const { return m_Plugins; }
|
||||
|
||||
bool usePrereleases() const;
|
||||
|
||||
/**
|
||||
* @brief register MO as the handler for nxm links
|
||||
* @param force set to true to enforce the registration dialog to show up,
|
||||
@@ -315,7 +329,7 @@ private:
|
||||
void addStyles(QComboBox *styleBox);
|
||||
void readPluginBlacklist();
|
||||
void writePluginBlacklist();
|
||||
QString getConfigurablePath(const QString &key, const QString &def) const;
|
||||
QString getConfigurablePath(const QString &key, const QString &def, bool resolve) const;
|
||||
|
||||
class SettingsTab
|
||||
{
|
||||
@@ -346,6 +360,7 @@ private:
|
||||
QComboBox *m_logLevelBox;
|
||||
QCheckBox *m_compactBox;
|
||||
QCheckBox *m_showMetaBox;
|
||||
QCheckBox *m_usePrereleaseBox;
|
||||
};
|
||||
|
||||
class PathsTab : public SettingsTab
|
||||
@@ -356,10 +371,12 @@ private:
|
||||
void update();
|
||||
|
||||
private:
|
||||
QLineEdit *m_baseDirEdit;
|
||||
QLineEdit *m_downloadDirEdit;
|
||||
QLineEdit *m_modDirEdit;
|
||||
QLineEdit *m_cacheDirEdit;
|
||||
QLineEdit *m_profilesDirEdit;
|
||||
QLineEdit *m_overwriteDirEdit;
|
||||
};
|
||||
|
||||
/** Display/store the configuration in the 'nexus' tab of the settings dialogue */
|
||||
|
||||
@@ -100,6 +100,15 @@ void SettingsDialog::on_bsaDateBtn_clicked()
|
||||
dir.absolutePath().toStdWString());
|
||||
}
|
||||
|
||||
void SettingsDialog::on_browseBaseDirBtn_clicked()
|
||||
{
|
||||
QString temp = QFileDialog::getExistingDirectory(
|
||||
this, tr("Select base directory"), ui->baseDirEdit->text());
|
||||
if (!temp.isEmpty()) {
|
||||
ui->baseDirEdit->setText(temp);
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsDialog::on_browseDownloadDirBtn_clicked()
|
||||
{
|
||||
QString temp = QFileDialog::getExistingDirectory(this, tr("Select download directory"), ui->downloadDirEdit->text());
|
||||
@@ -132,6 +141,14 @@ void SettingsDialog::on_browseProfilesDirBtn_clicked()
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsDialog::on_browseOverwriteDirBtn_clicked()
|
||||
{
|
||||
QString temp = QFileDialog::getExistingDirectory(this, tr("Select overwrite directory"), ui->overwriteDirEdit->text());
|
||||
if (!temp.isEmpty()) {
|
||||
ui->overwriteDirEdit->setText(temp);
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsDialog::on_resetDialogsButton_clicked()
|
||||
{
|
||||
if (QMessageBox::question(this, tr("Confirm?"),
|
||||
|
||||
@@ -52,6 +52,12 @@ signals:
|
||||
|
||||
void resetDialogs();
|
||||
|
||||
private slots:
|
||||
void on_browseBaseDirBtn_clicked();
|
||||
|
||||
private slots:
|
||||
void on_browseOverwriteDirBtn_clicked();
|
||||
|
||||
private slots:
|
||||
void on_browseProfilesDirBtn_clicked();
|
||||
|
||||
|
||||
+106
-29
@@ -107,6 +107,36 @@ p, li { white-space: pre-wrap; }
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="usePrereleaseBox">
|
||||
<property name="toolTip">
|
||||
<string>Update to non-stable releases.</string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>If this is enabled, the integrated update mechanism will notify of all releases, including pre-releases (alphas, betas).
|
||||
|
||||
Please use this only if you're sufficiently tech-savvy to investigate issues, look for known problems in the issue tracker and create meaningful reports.
|
||||
|
||||
If you use pre-releases, never contact me directly by e-mail or via private messages!</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Install Pre-releases (Betas)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
@@ -204,54 +234,71 @@ p, li { white-space: pre-wrap; }
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<widget class="QLabel" name="label_25">
|
||||
<property name="text">
|
||||
<string>Downloads</string>
|
||||
<string>Base Directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="6" column="2">
|
||||
<widget class="QPushButton" name="browseOverwriteDirBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QLineEdit" name="overwriteDirEdit"/>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="baseDirEdit"/>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="browseBaseDirBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_24">
|
||||
<property name="text">
|
||||
<string>Overwrite</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string>Caches</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="browseModDirBtn">
|
||||
<property name="text">
|
||||
<string notr="true">...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<item row="4" column="1">
|
||||
<widget class="QLineEdit" name="cacheDirEdit"/>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="downloadDirEdit">
|
||||
<property name="toolTip">
|
||||
<string>Directory where downloads are stored.</string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Directory where downloads are stored.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Mods</string>
|
||||
<string>Downloads</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<item row="4" column="2">
|
||||
<widget class="QPushButton" name="browseCacheDirBtn">
|
||||
<property name="text">
|
||||
<string notr="true">...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="modDirEdit">
|
||||
<property name="toolTip">
|
||||
<string>Directory where mods are stored.</string>
|
||||
@@ -261,7 +308,7 @@ p, li { white-space: pre-wrap; }
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<item row="2" column="2">
|
||||
<widget class="QPushButton" name="browseDownloadDirBtn">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
@@ -274,22 +321,52 @@ p, li { white-space: pre-wrap; }
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="downloadDirEdit">
|
||||
<property name="toolTip">
|
||||
<string>Directory where downloads are stored.</string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Directory where downloads are stored.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Mods</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QPushButton" name="browseProfilesDirBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QLineEdit" name="profilesDirEdit"/>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_22">
|
||||
<property name="text">
|
||||
<string>Profiles</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="profilesDirEdit"/>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="browseProfilesDirBtn">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
<item row="1" column="1">
|
||||
<spacer name="verticalSpacer_8">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
|
||||
Reference in New Issue
Block a user