mirror of
https://github.com/fwbuilder/fwbuilder
synced 2026-03-24 20:27:22 +01:00
655 lines
20 KiB
C++
655 lines
20 KiB
C++
/*
|
|
|
|
Firewall Builder
|
|
|
|
Copyright (C) 2009 NetCitadel, LLC
|
|
|
|
Author: Vadim Kurland vadim@fwbuilder.org
|
|
|
|
$Id$
|
|
|
|
This program is free software which we release under the GNU General Public
|
|
License. You may redistribute and/or modify this program under the terms
|
|
of that license as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied wdarranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
To get a copy of the GNU General Public License, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*/
|
|
|
|
|
|
#include "../../config.h"
|
|
#include "global.h"
|
|
#include "check_update_url.h"
|
|
#include "../../VERSION.h"
|
|
|
|
#include "utils.h"
|
|
#include "platforms.h"
|
|
|
|
#include "PrefsDialog.h"
|
|
#include "FWBSettings.h"
|
|
#include "FWWindow.h"
|
|
#include "ProjectPanel.h"
|
|
#include "HttpGet.h"
|
|
#include "RuleSetView.h"
|
|
|
|
#include "fwbuilder/Resources.h"
|
|
|
|
#include <qlineedit.h>
|
|
#include <qfiledialog.h>
|
|
#include <qcombobox.h>
|
|
#include <qlistwidget.h>
|
|
#include <qdir.h>
|
|
#include <qlabel.h>
|
|
#include <qcolor.h>
|
|
#include <qtooltip.h>
|
|
#include <qspinbox.h>
|
|
#include <qpainter.h>
|
|
#include <qpushbutton.h>
|
|
#include <qcolordialog.h>
|
|
#include <qcolor.h>
|
|
#include <qpixmapcache.h>
|
|
#include <qfontdialog.h>
|
|
#include <qmessagebox.h>
|
|
|
|
#include <QTreeWidgetItem>
|
|
#include <QUrl>
|
|
#include <QCheckBox>
|
|
#include <QFrame>
|
|
#include <QTableWidget>
|
|
#include <QHeaderView>
|
|
|
|
#include <sstream>
|
|
|
|
/*
|
|
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
#include <errno.h>
|
|
|
|
#ifdef _WIN32
|
|
# include <direct.h>
|
|
# include <stdlib.h>
|
|
# include <io.h>
|
|
#else
|
|
# include <unistd.h>
|
|
#endif
|
|
*/
|
|
|
|
#include <iostream>
|
|
|
|
using namespace std;
|
|
|
|
void PrefsDialog::setButtonColor(QPushButton *btn,const QString &colorCode)
|
|
{
|
|
QPixmap pm(40,14);
|
|
pm.fill( QColor(colorCode) );
|
|
QPainter p( &pm );
|
|
p.drawRect( pm.rect() );
|
|
btn->setIcon(QIcon(pm));
|
|
}
|
|
|
|
PrefsDialog::~PrefsDialog()
|
|
{
|
|
disconnect(¤t_version_http_getter, SIGNAL(done(const QString&)),
|
|
this, SLOT(checkForUpgrade(const QString&)));
|
|
|
|
delete m_dialog;
|
|
}
|
|
|
|
PrefsDialog::PrefsDialog(QWidget *parent) : QDialog(parent)
|
|
{
|
|
m_dialog = new Ui::prefsDialog_q;
|
|
m_dialog->setupUi(this);
|
|
|
|
m_dialog->tabWidget->setCurrentIndex(0);
|
|
|
|
m_dialog->wDir->setText(st->getWDir());
|
|
m_dialog->dataDir->setText(st->getDataDir());
|
|
|
|
m_dialog->objTooltips->setChecked( st->getObjTooltips() );
|
|
m_dialog->advTooltipMode->setChecked(st->getBool("UI/AdvancedTooltips"));
|
|
m_dialog->advTooltipMode->setEnabled(st->getObjTooltips());
|
|
// m_dialog->tooltipDelay->setValue( st->getTooltipDelay() );
|
|
|
|
m_dialog->enableCustomTemplates->setChecked( st->customTemplatesEnabled() );
|
|
|
|
m_dialog->deletedObj->setChecked( st->getBool("UI/ShowDeletedObjects") );
|
|
m_dialog->attributesInTree->setChecked(
|
|
st->getBool("UI/ShowObjectsAttributesInTree") );
|
|
|
|
m_dialog->new_dns_name_compile_tm->setChecked(
|
|
st->getBool("Objects/DNSName/useCompileTimeForNewObjects"));
|
|
m_dialog->new_dns_name_run_tm->setChecked(
|
|
! st->getBool("Objects/DNSName/useCompileTimeForNewObjects"));
|
|
m_dialog->use_name_for_dns_record->setChecked(
|
|
st->getBool("Objects/DNSName/useNameForDNSRecord"));
|
|
|
|
m_dialog->new_addr_tbl_compile_tm->setChecked(
|
|
st->getBool("Objects/AddressTable/useCompileTimeForNewObjects"));
|
|
m_dialog->new_addr_tbl_run_tm->setChecked(
|
|
! st->getBool("Objects/AddressTable/useCompileTimeForNewObjects"));
|
|
|
|
m_dialog->toolbarIconsText->setChecked(st->getIconsWithText());
|
|
|
|
m_dialog->emptyRCSLog->setChecked( st->getRCSLogState() );
|
|
|
|
m_dialog->autosaveFile->setChecked(st->getBool("Environment/autoSaveFile"));
|
|
m_dialog->autosaveInterval->setValue(
|
|
st->getInt("Environment/autoSaveFilePeriod"));
|
|
|
|
m_dialog->dataFileCompression->setChecked( st->getCompression() );
|
|
|
|
// dontSaveStdLib->setChecked( st->getDontSaveStdLib() );
|
|
|
|
m_dialog->sshPath->setText( st->getSSHPath() );
|
|
m_dialog->scpPath->setText( st->getSCPPath() );
|
|
m_dialog->sshTimeout->setValue( st->getSSHTimeout() );
|
|
|
|
m_dialog->rememberSshPass->setChecked(
|
|
st->getBool("Environment/RememberSshPassEnabled") );
|
|
|
|
m_dialog->showTips->setChecked( st->getBool("UI/NoStartTip") );
|
|
|
|
m_dialog->rulesLoggingOn->setChecked(
|
|
st->getBool("Objects/PolicyRule/defaultLoggingState") );
|
|
|
|
m_dialog->rulesDefaultStateful->setChecked(
|
|
st->getBool("Objects/PolicyRule/defaultStateful"));
|
|
|
|
m_dialog->rulesDefaultAction->setCurrentIndex(
|
|
st->getInt("Objects/PolicyRule/defaultAction"));
|
|
|
|
m_dialog->rulesDefaultDirection->setCurrentIndex(
|
|
st->getInt("Objects/PolicyRule/defaultDirection"));
|
|
|
|
m_dialog->autoconfigure_interfaces->setChecked(
|
|
st->getBool("Objects/Interface/autoconfigureInterfaces") );
|
|
|
|
// set label icons colors and text strings using user's settings
|
|
|
|
QString t;
|
|
colors[FWBSettings::RED]=st->getLabelColor(FWBSettings::RED);
|
|
t=st->getLabelText (FWBSettings::RED);
|
|
|
|
setButtonColor(m_dialog->redBtn,colors[FWBSettings::RED]);
|
|
m_dialog->redText->setText(t);
|
|
|
|
colors[FWBSettings::ORANGE]=st->getLabelColor(FWBSettings::ORANGE);
|
|
t=st->getLabelText (FWBSettings::ORANGE);
|
|
|
|
setButtonColor(m_dialog->orangeBtn,colors[FWBSettings::ORANGE]);
|
|
m_dialog->orangeText->setText(t);
|
|
|
|
colors[FWBSettings::YELLOW]=st->getLabelColor(FWBSettings::YELLOW);
|
|
t=st->getLabelText (FWBSettings::YELLOW);
|
|
|
|
setButtonColor(m_dialog->yellowBtn,colors[FWBSettings::YELLOW]);
|
|
m_dialog->yellowText->setText(t);
|
|
|
|
colors[FWBSettings::GREEN]=st->getLabelColor(FWBSettings::GREEN);
|
|
t=st->getLabelText (FWBSettings::GREEN);
|
|
|
|
setButtonColor(m_dialog->greenBtn,colors[FWBSettings::GREEN]);
|
|
m_dialog->greenText->setText(t);
|
|
|
|
colors[FWBSettings::BLUE]=st->getLabelColor(FWBSettings::BLUE);
|
|
t=st->getLabelText (FWBSettings::BLUE);
|
|
|
|
setButtonColor(m_dialog->blueBtn,colors[FWBSettings::BLUE]);
|
|
m_dialog->blueText->setText(t);
|
|
|
|
colors[FWBSettings::PURPLE]=st->getLabelColor(FWBSettings::PURPLE);
|
|
t=st->getLabelText (FWBSettings::PURPLE);
|
|
|
|
setButtonColor(m_dialog->purpleBtn,colors[FWBSettings::PURPLE]);
|
|
m_dialog->purpleText->setText(t);
|
|
|
|
colors[FWBSettings::GRAY]=st->getLabelColor(FWBSettings::GRAY);
|
|
t=st->getLabelText (FWBSettings::GRAY);
|
|
|
|
setButtonColor(m_dialog->grayBtn,colors[FWBSettings::GRAY]);
|
|
m_dialog->grayText->setText(t);
|
|
|
|
m_dialog->chShowIcons->setChecked(st->getShowIconsInRules() );
|
|
m_dialog->showDirectionText->setChecked(st->getShowDirectionText());
|
|
if (FWBSettings::SIZE25X25 == st->getIconsInRulesSize())
|
|
m_dialog->rb25->setChecked(true);
|
|
else
|
|
m_dialog->rb16->setChecked(true);
|
|
changeShowIcons();
|
|
|
|
rulesFont = st->getRulesFont();
|
|
treeFont = st->getTreeFont();
|
|
uiFont = st->getUiFont();
|
|
compilerOutputFont = st->getCompilerOutputFont();
|
|
|
|
m_dialog->rulesFontDescr->setText(getFontDescription(rulesFont));
|
|
m_dialog->treeFontDescr->setText(getFontDescription(treeFont));
|
|
m_dialog->compilerOutputFontDescr->setText(getFontDescription(compilerOutputFont));
|
|
|
|
m_dialog->chClipComment->setChecked(st->getClipComment() );
|
|
|
|
m_dialog->checkUpdates->setChecked(st->getCheckUpdates() );
|
|
|
|
m_dialog->checkUpdatesProxy->setText(st->getCheckUpdatesProxy() );
|
|
|
|
#if !defined(Q_OS_WIN32)
|
|
m_dialog->plink_hint->hide();
|
|
#endif
|
|
|
|
// Fill lists of platforms and host OS
|
|
|
|
QMap<QString,QString> platforms = getAllPlatforms(false);
|
|
QMap<QString,QString> os = getAllOS(false);
|
|
|
|
m_dialog->enabled_platforms->setRowCount(platforms.size());
|
|
m_dialog->enabled_platforms->setColumnCount(1);
|
|
int row = 0;
|
|
QMap<QString,QString>::iterator it;
|
|
for (it=platforms.begin(); it!=platforms.end(); ++it)
|
|
{
|
|
QString name = it.key();
|
|
QString readable_name = it.value();
|
|
QTableWidgetItem *cb = new QTableWidgetItem(readable_name);
|
|
m_dialog->enabled_platforms->setItem(row, 0, cb);
|
|
|
|
QString res_status = Resources::platform_res[name.toStdString()]->getResourceStr(
|
|
"/FWBuilderResources/Target/status/").c_str();
|
|
QString prefs_status = st->getTargetStatus(name, res_status);
|
|
cb->setCheckState((prefs_status=="disabled") ? Qt::Unchecked : Qt::Checked);
|
|
|
|
cb->setData(Qt::UserRole, name);
|
|
row++;
|
|
}
|
|
m_dialog->enabled_platforms->horizontalHeader()->setStretchLastSection(true);
|
|
m_dialog->enabled_platforms->sortItems(0);
|
|
m_dialog->enabled_platforms->update();
|
|
|
|
m_dialog->enabled_os->setRowCount(os.size());
|
|
m_dialog->enabled_os->setColumnCount(1);
|
|
row = 0;
|
|
for (it=os.begin(); it!=os.end(); ++it)
|
|
{
|
|
QString name = it.key();
|
|
QString readable_name = it.value();
|
|
QTableWidgetItem *cb = new QTableWidgetItem(readable_name);
|
|
m_dialog->enabled_os->setItem(row, 0, cb);
|
|
|
|
QString res_status = Resources::os_res[name.toStdString()]->getResourceStr(
|
|
"/FWBuilderResources/Target/status/").c_str();
|
|
QString prefs_status = st->getTargetStatus(name, res_status);
|
|
cb->setCheckState((prefs_status=="disabled") ? Qt::Unchecked : Qt::Checked);
|
|
|
|
cb->setData(Qt::UserRole, name);
|
|
row++;
|
|
}
|
|
m_dialog->enabled_os->horizontalHeader()->setStretchLastSection(true);
|
|
m_dialog->enabled_os->sortItems(0);
|
|
m_dialog->enabled_os->update();
|
|
}
|
|
|
|
QString PrefsDialog::getFontDescription(const QFont &font)
|
|
{
|
|
ostringstream str;
|
|
str << font.family().toLatin1().constData()
|
|
<< " " << font.pointSize();
|
|
return QString(str.str().c_str());
|
|
}
|
|
|
|
void PrefsDialog::changeColor(QPushButton *btn,
|
|
FWBSettings::LabelColors colorCode)
|
|
{
|
|
QColor clr = QColorDialog::getColor(
|
|
QColor(colors[colorCode]), this);
|
|
|
|
if (!clr.isValid()) return;
|
|
colors[colorCode]= clr.name();
|
|
setButtonColor(btn,colors[colorCode]);
|
|
}
|
|
|
|
void PrefsDialog::changeRedColor()
|
|
{
|
|
changeColor(m_dialog->redBtn, FWBSettings::RED);
|
|
}
|
|
|
|
void PrefsDialog::changeOrangeColor()
|
|
{
|
|
changeColor(m_dialog->orangeBtn, FWBSettings::ORANGE);
|
|
}
|
|
|
|
void PrefsDialog::changeYellowColor()
|
|
{
|
|
changeColor(m_dialog->yellowBtn, FWBSettings::YELLOW);
|
|
}
|
|
|
|
void PrefsDialog::changeGreenColor()
|
|
{
|
|
changeColor(m_dialog->greenBtn, FWBSettings::GREEN);
|
|
}
|
|
|
|
void PrefsDialog::changeBlueColor()
|
|
{
|
|
changeColor(m_dialog->blueBtn, FWBSettings::BLUE);
|
|
}
|
|
|
|
void PrefsDialog::changePurpleColor()
|
|
{
|
|
changeColor(m_dialog->purpleBtn, FWBSettings::PURPLE);
|
|
}
|
|
|
|
void PrefsDialog::changeGrayColor()
|
|
{
|
|
changeColor(m_dialog->grayBtn, FWBSettings::GRAY);
|
|
}
|
|
|
|
void PrefsDialog::changeIconSize25()
|
|
{
|
|
//st->setIconsInRulesSize(FWBSettings::SIZE25X25);
|
|
}
|
|
|
|
void PrefsDialog::changeIconSize16()
|
|
{
|
|
//st->setIconsInRulesSize(FWBSettings::SIZE16X16);
|
|
}
|
|
|
|
void PrefsDialog::changeShowIcons()
|
|
{
|
|
bool areShown = m_dialog->chShowIcons->isChecked();
|
|
m_dialog->rb16->setEnabled(areShown);
|
|
m_dialog->rb25->setEnabled(areShown);
|
|
}
|
|
|
|
void PrefsDialog::changeRulesFont()
|
|
{
|
|
changeFont(rulesFont);
|
|
m_dialog->rulesFontDescr->setText(getFontDescription(rulesFont));
|
|
}
|
|
|
|
void PrefsDialog::changeTreeFont()
|
|
{
|
|
changeFont(treeFont);
|
|
m_dialog->treeFontDescr->setText(getFontDescription(treeFont));
|
|
}
|
|
|
|
void PrefsDialog::changeCompilerOutputFont()
|
|
{
|
|
changeFont(compilerOutputFont);
|
|
m_dialog->compilerOutputFontDescr->setText(getFontDescription(compilerOutputFont));
|
|
}
|
|
|
|
void PrefsDialog::changeFont(QFont &font)
|
|
{
|
|
bool ok;
|
|
QFont f = QFontDialog::getFont(&ok, font, this);
|
|
if (ok)
|
|
{
|
|
font = f;
|
|
}
|
|
}
|
|
|
|
void PrefsDialog::findWDir()
|
|
{
|
|
QString wd = m_dialog->wDir->text();
|
|
if (wd.isEmpty()) wd = st->getWDir();
|
|
if (wd.isEmpty()) wd = st->getOpenFileDir();
|
|
QString dir = QFileDialog::getExistingDirectory(
|
|
this, tr("Find working directory"), wd, QFileDialog::ShowDirsOnly);
|
|
|
|
if (dir.isEmpty()) return;
|
|
st->setOpenFileDir(dir);
|
|
|
|
m_dialog->wDir->setText(dir);
|
|
}
|
|
|
|
void PrefsDialog::findDataDir()
|
|
{
|
|
QString dataDir = m_dialog->dataDir->text();
|
|
if (dataDir.isEmpty()) dataDir = st->getDataDir();
|
|
if (dataDir.isEmpty()) dataDir = st->getOpenFileDir();
|
|
QString dir = QFileDialog::getExistingDirectory(
|
|
this, tr("Find data directory"), dataDir, QFileDialog::ShowDirsOnly);
|
|
|
|
if (dir.isEmpty()) return;
|
|
st->setOpenFileDir(dir);
|
|
|
|
m_dialog->dataDir->setText(dir);
|
|
}
|
|
|
|
void PrefsDialog::findSSH()
|
|
{
|
|
QString sshPath = m_dialog->sshPath->text();
|
|
if (!QFileInfo(sshPath).isFile()) sshPath = st->getSSHPath();
|
|
if (!QFileInfo(sshPath).isFile()) sshPath = st->getOpenFileDir();
|
|
|
|
QString fp = QFileDialog::getOpenFileName(
|
|
this, tr("Find Secure Shell utility"), sshPath);
|
|
|
|
if (fp.isEmpty()) return;
|
|
st->setOpenFileDir(fp);
|
|
|
|
m_dialog->sshPath->setText(fp);
|
|
}
|
|
|
|
void PrefsDialog::findSCP()
|
|
{
|
|
QString scpPath = m_dialog->scpPath->text();
|
|
if (!QFileInfo(scpPath).isFile()) scpPath = st->getSCPPath();
|
|
if (!QFileInfo(scpPath).isFile()) scpPath = st->getOpenFileDir();
|
|
|
|
QString fp = QFileDialog::getOpenFileName(
|
|
this, tr("Find SCP utility"), scpPath);
|
|
|
|
if (fp.isEmpty()) return;
|
|
st->setOpenFileDir(fp);
|
|
|
|
m_dialog->scpPath->setText(fp);
|
|
}
|
|
|
|
void PrefsDialog::accept()
|
|
{
|
|
QString wd=m_dialog->wDir->text();
|
|
|
|
/* check if the default working directory does not exist yet */
|
|
|
|
st->setWDir( wd );
|
|
st->setDataDir(m_dialog->dataDir->text());
|
|
|
|
st->setObjTooltips( m_dialog->objTooltips->isChecked() );
|
|
st->setBool("UI/AdvancedTooltips", m_dialog->advTooltipMode->isChecked());
|
|
|
|
st->setCustomTemplatesEnabled(m_dialog->enableCustomTemplates->isChecked());
|
|
|
|
// st->setTooltipDelay( m_dialog->tooltipDelay->value() );
|
|
// QToolTip::setWakeUpDelay( st->getTooltipDelay()*1000 );
|
|
|
|
st->setBool("UI/ShowDeletedObjects", m_dialog->deletedObj->isChecked());
|
|
st->setBool("UI/ShowObjectsAttributesInTree", m_dialog->attributesInTree->isChecked());
|
|
|
|
st->setIconsWithText(m_dialog->toolbarIconsText->isChecked());
|
|
|
|
ProjectPanel *pp = mw->activeProject();
|
|
if (pp)
|
|
{
|
|
pp->m_panel->om->setAttributesColumnEnabled(
|
|
m_dialog->attributesInTree->isChecked());
|
|
if (m_dialog->attributesInTree->isChecked())
|
|
pp->m_panel->om->loadSectionSizes();
|
|
}
|
|
|
|
st->setBool("Objects/DNSName/useCompileTimeForNewObjects",
|
|
m_dialog->new_dns_name_compile_tm->isChecked());
|
|
st->setBool("Objects/DNSName/useNameForDNSRecord",
|
|
m_dialog->use_name_for_dns_record->isChecked());
|
|
|
|
st->setBool("Objects/AddressTable/useCompileTimeForNewObjects",
|
|
m_dialog->new_addr_tbl_compile_tm->isChecked());
|
|
|
|
st->setBool("Objects/PolicyRule/defaultLoggingState",
|
|
m_dialog->rulesLoggingOn->isChecked());
|
|
|
|
st->setBool("Objects/PolicyRule/defaultStateful",
|
|
m_dialog->rulesDefaultStateful->isChecked());
|
|
|
|
st->setInt("Objects/PolicyRule/defaultAction",
|
|
m_dialog->rulesDefaultAction->currentIndex());
|
|
|
|
st->setInt("Objects/PolicyRule/defaultDirection",
|
|
m_dialog->rulesDefaultDirection->currentIndex());
|
|
|
|
|
|
|
|
st->setBool("Objects/Interface/autoconfigureInterfaces",
|
|
m_dialog->autoconfigure_interfaces->isChecked());
|
|
|
|
|
|
st->setRCSLogState( m_dialog->emptyRCSLog->isChecked() );
|
|
|
|
st->setBool("Environment/autoSaveFile", m_dialog->autosaveFile->isChecked());
|
|
st->setInt("Environment/autoSaveFilePeriod", m_dialog->autosaveInterval->value() );
|
|
|
|
st->setCompression(m_dialog->dataFileCompression->isChecked());
|
|
|
|
// st->setDontSaveStdLib( dontSaveStdLib->isChecked() );
|
|
|
|
st->setLabelColor(FWBSettings::RED, colors[FWBSettings::RED]);
|
|
st->setLabelColor(FWBSettings::ORANGE, colors[FWBSettings::ORANGE]);
|
|
st->setLabelColor(FWBSettings::YELLOW, colors[FWBSettings::YELLOW]);
|
|
st->setLabelColor(FWBSettings::GREEN, colors[FWBSettings::GREEN]);
|
|
st->setLabelColor(FWBSettings::BLUE, colors[FWBSettings::BLUE]);
|
|
st->setLabelColor(FWBSettings::PURPLE, colors[FWBSettings::PURPLE]);
|
|
st->setLabelColor(FWBSettings::GRAY, colors[FWBSettings::GRAY]);
|
|
|
|
st->setLabelText (FWBSettings::RED, m_dialog->redText->text() );
|
|
st->setLabelText (FWBSettings::ORANGE, m_dialog->orangeText->text() );
|
|
st->setLabelText (FWBSettings::YELLOW, m_dialog->yellowText->text() );
|
|
st->setLabelText (FWBSettings::GREEN, m_dialog->greenText->text() );
|
|
st->setLabelText (FWBSettings::BLUE, m_dialog->blueText->text() );
|
|
st->setLabelText (FWBSettings::PURPLE, m_dialog->purpleText->text() );
|
|
st->setLabelText (FWBSettings::GRAY, m_dialog->grayText->text() );
|
|
|
|
st->setShowIconsInRules(m_dialog->chShowIcons->isChecked());
|
|
st->setShowDirectionText(m_dialog->showDirectionText->isChecked());
|
|
FWBSettings::IconSize sz = m_dialog->rb25->isChecked() ?
|
|
FWBSettings::SIZE25X25 : FWBSettings::SIZE16X16;
|
|
st->setIconsInRulesSize(sz);
|
|
|
|
st->setRulesFont(rulesFont);
|
|
st->setTreeFont(treeFont);
|
|
st->setUiFont(uiFont);
|
|
st->setCompilerOutputFont(compilerOutputFont);
|
|
|
|
st->setClipComment(m_dialog->chClipComment->isChecked());
|
|
|
|
st->setCheckUpdatesProxy(m_dialog->checkUpdatesProxy->text());
|
|
|
|
// annoyingly, widget shotTip has the name opposite to its meaning.
|
|
// When it is checked, we do not show tip of the day.
|
|
|
|
st->setBool("UI/NoStartTip", m_dialog->showTips->isChecked());
|
|
|
|
st->setSSHPath( m_dialog->sshPath->text() );
|
|
st->setSCPPath( m_dialog->scpPath->text() );
|
|
st->setSSHTimeout(m_dialog->sshTimeout->value());
|
|
|
|
st->setBool("Environment/RememberSshPassEnabled", m_dialog->rememberSshPass->isChecked());
|
|
|
|
st->setCheckUpdates(m_dialog->checkUpdates->isChecked());
|
|
|
|
for (int row=0; row < m_dialog->enabled_platforms->rowCount(); ++row)
|
|
{
|
|
QTableWidgetItem *itm = m_dialog->enabled_platforms->item(row, 0);
|
|
st->setTargetStatus(itm->data(Qt::UserRole).toString(),
|
|
(itm && itm->checkState() == Qt::Unchecked) ?
|
|
"disabled" : "active");
|
|
}
|
|
|
|
QStringList disabled_os;
|
|
for (int row=0; row < m_dialog->enabled_os->rowCount(); ++row)
|
|
{
|
|
QTableWidgetItem *itm = m_dialog->enabled_os->item(row, 0);
|
|
st->setTargetStatus(itm->data(Qt::UserRole).toString(),
|
|
(itm && itm->checkState() == Qt::Unchecked) ?
|
|
"disabled" : "active");
|
|
}
|
|
|
|
if (!wd.isEmpty())
|
|
{
|
|
QDir d;
|
|
d.mkdir( wd );
|
|
}
|
|
|
|
if (pp)
|
|
{
|
|
RuleSetView* rsv = pp->getCurrentRuleSetView();
|
|
if (rsv)
|
|
rsv->updateAll();
|
|
}
|
|
|
|
mw->setupAutoSave();
|
|
mw->showDeletedObjects(st->getBool("UI/ShowDeletedObjects"));
|
|
mw->updateTreeFont();
|
|
mw->setupGlobalToolbar();
|
|
// app->setFont(st->getTreeFont());
|
|
|
|
|
|
QDialog::accept();
|
|
}
|
|
|
|
void PrefsDialog::checkSwUpdates()
|
|
{
|
|
st->setCheckUpdatesProxy(m_dialog->checkUpdatesProxy->text());
|
|
|
|
connect(¤t_version_http_getter, SIGNAL(done(const QString&)),
|
|
this, SLOT(checkForUpgrade(const QString&)));
|
|
QString url = QString(CHECK_UPDATE_URL).arg(VERSION).arg(st->getAppGUID());
|
|
current_version_http_getter.get(QUrl(url));
|
|
}
|
|
|
|
void PrefsDialog::checkForUpgrade(const QString& server_response)
|
|
{
|
|
disconnect(¤t_version_http_getter, SIGNAL(done(const QString&)),
|
|
this, SLOT(checkForUpgrade(const QString&)));
|
|
|
|
if (current_version_http_getter.getStatus())
|
|
{
|
|
/*
|
|
* server response may be some html or other data in case
|
|
* connection goes via proxy, esp. with captive portals. We
|
|
* should not interpret that as "new version is available"
|
|
*/
|
|
if (server_response.trimmed() == "update = 1")
|
|
{
|
|
QMessageBox::warning(
|
|
this,"Firewall Builder",
|
|
tr("A new version of Firewall Builder is available at"
|
|
" http://www.fwbuilder.org"));
|
|
} else
|
|
{
|
|
QMessageBox::information(
|
|
this,"Firewall Builder",
|
|
tr("Your version of Firewall Builder is up to date."));
|
|
}
|
|
} else
|
|
{
|
|
QMessageBox::critical(
|
|
this,"Firewall Builder",
|
|
tr("Error checking for software updates:\n%1").
|
|
arg(current_version_http_getter.getLastError()));
|
|
}
|
|
}
|
|
|
|
void PrefsDialog::objTooltipsEnabled(bool enabled)
|
|
{
|
|
if (!enabled && m_dialog->advTooltipMode->isChecked())
|
|
m_dialog->advTooltipMode->setChecked(false);
|
|
m_dialog->advTooltipMode->setEnabled(enabled);
|
|
}
|