Added settings dialog

Added platform specific settings storage/retrieval

FossilOrigin-Name: 66205d14199523228d7f6fa0241a7ef7162f6940
This commit is contained in:
kostas
2011-08-06 08:31:19 +00:00
parent 4beebf9b30
commit 064819d295
14 changed files with 287 additions and 60 deletions

View File

@ -7,8 +7,6 @@ CommitDialog::CommitDialog(QWidget *parent, const QStringList &commitMsgHistory,
QDialog(parent, Qt::Sheet),
ui(new Ui::CommitDialog)
{
setModal(true);
setWindowModality(Qt::WindowModal);
ui->setupUi(this);
ui->comboBox->clear();
ui->comboBox->insertItems(0, commitMsgHistory);

View File

@ -2,6 +2,9 @@
<ui version="4.0">
<class>CommitDialog</class>
<widget class="QDialog" name="CommitDialog">
<property name="windowModality">
<enum>Qt::WindowModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
@ -13,6 +16,9 @@
<property name="windowTitle">
<string>Commit</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QComboBox" name="comboBox"/>

View File

@ -5,8 +5,6 @@ FileActionDialog::FileActionDialog(QWidget *parent, const QString &title, const
QDialog(parent, Qt::Sheet),
ui(new Ui::FileActionDialog)
{
setModal(true);
setWindowModality(Qt::WindowModal);
ui->setupUi(this);
setWindowTitle(title);
ui->label->setText(message);

View File

@ -2,6 +2,9 @@
<ui version="4.0">
<class>FileActionDialog</class>
<widget class="QDialog" name="FileActionDialog">
<property name="windowModality">
<enum>Qt::WindowModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
@ -13,6 +16,9 @@
<property name="windowTitle">
<string>File Action</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">

View File

@ -84,8 +84,6 @@ MainWindow::MainWindow(QWidget *parent) :
statusLabel->setMinimumSize( statusLabel->sizeHint() );
ui->statusBar->addWidget( statusLabel, 1 );
settingsFile = QDir::homePath() + QDir::separator() + ".fuelrc";
#ifdef DEV_SETTINGS
currentWorkspace = "/home/kostas/tmp/testfossil";
fossilPath = "fossil";
@ -128,7 +126,10 @@ bool MainWindow::openWorkspace(const QString &dir)
bool ok = refresh();
if(ok)
{
QDir::setCurrent(dir);
rebuildRecent();
}
return ok;
}
@ -456,17 +457,17 @@ bool MainWindow::runFossilRaw(const QStringList &args, QStringList *output, int
if(detached)
{
return QProcess::startDetached(fossilPath, args, wkdir);
return QProcess::startDetached(settings.fossilPath, args, wkdir);
}
QProcess process(this);
process.setProcessChannelMode(QProcess::MergedChannels);
process.setWorkingDirectory(wkdir);
process.start(fossilPath, args);
process.start(settings.fossilPath, args);
if(!process.waitForStarted())
{
log("Could not start fossil executable '"+fossilPath + "''\n");
log("Could not start fossil executable '"+settings.fossilPath + "''\n");
return false;
}
@ -512,46 +513,46 @@ void MainWindow::addWorkspace(const QString &dir)
//------------------------------------------------------------------------------
void MainWindow::loadSettings()
{
QSettings settings(settingsFile, QSettings::NativeFormat);
QSettings qsettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
if(settings.contains("FossilPath"))
fossilPath = settings.value("FossilPath").toString();
if(qsettings.contains("FossilPath"))
settings.fossilPath = qsettings.value("FossilPath").toString();
else
fossilPath = "fossil";
settings.fossilPath = "fossil";
int num_wks = 0;
if(settings.contains("NumWorkspaces"))
num_wks = settings.value("NumWorkspaces").toInt();
if(qsettings.contains("NumWorkspaces"))
num_wks = qsettings.value("NumWorkspaces").toInt();
for(int i=0; i<num_wks; ++i)
{
QString key = "Workspace_" + QString::number(i);
QString wk = settings.value(key).toString();
QString wk = qsettings.value(key).toString();
if(!wk.isEmpty())
addWorkspace(wk);
}
int curr_wkspace = -1;
if(settings.contains("LastWorkspace"))
curr_wkspace = settings.value("LastWorkspace").toInt();
if(qsettings.contains("LastWorkspace"))
curr_wkspace = qsettings.value("LastWorkspace").toInt();
if(curr_wkspace!=-1 && curr_wkspace< workspaceHistory.size())
currentWorkspace = workspaceHistory[curr_wkspace];
if(settings.contains("WindowX") && settings.contains("WindowY"))
if(qsettings.contains("WindowX") && qsettings.contains("WindowY"))
{
QPoint _pos;
_pos.setX(settings.value("WindowX").toInt());
_pos.setY(settings.value("WindowY").toInt());
_pos.setX(qsettings.value("WindowX").toInt());
_pos.setY(qsettings.value("WindowY").toInt());
move(_pos);
}
if(settings.contains("WindowWidth") && settings.contains("WindowHeight"))
if(qsettings.contains("WindowWidth") && qsettings.contains("WindowHeight"))
{
QSize _size;
_size.setWidth(settings.value("WindowWidth").toInt());
_size.setHeight(settings.value("WindowHeight").toInt());
_size.setWidth(qsettings.value("WindowWidth").toInt());
_size.setHeight(qsettings.value("WindowHeight").toInt());
resize(_size);
}
}
@ -559,24 +560,24 @@ void MainWindow::loadSettings()
//------------------------------------------------------------------------------
void MainWindow::saveSettings()
{
QSettings settings(settingsFile, QSettings::NativeFormat);
settings.setValue("FossilPath", fossilPath);
settings.setValue("NumWorkspaces", workspaceHistory.size());
QSettings qsettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
qsettings.setValue("FossilPath", settings.fossilPath);
qsettings.setValue("NumWorkspaces", workspaceHistory.size());
for(int i=0; i<workspaceHistory.size(); ++i)
{
QString key = "Workspace_" + QString::number(i);
settings.setValue(key, workspaceHistory[i]);
qsettings.setValue(key, workspaceHistory[i]);
}
int curr_wkspace = workspaceHistory.indexOf(currentWorkspace);
if(curr_wkspace>-1)
settings.setValue("LastWorkspace", curr_wkspace);
qsettings.setValue("LastWorkspace", curr_wkspace);
settings.setValue("WindowX", x());
settings.setValue("WindowY", y());
settings.setValue("WindowWidth", width());
settings.setValue("WindowHeight", height());
qsettings.setValue("WindowX", x());
qsettings.setValue("WindowY", y());
qsettings.setValue("WindowWidth", width());
qsettings.setValue("WindowHeight", height());
}
@ -642,10 +643,10 @@ bool MainWindow::startUI()
log("> fossil ui\n");
fossilUI.start(fossilPath, QStringList() << "ui");
fossilUI.start(settings.fossilPath, QStringList() << "ui");
if(!fossilUI.waitForStarted())
{
log(fossilPath + tr(" does not exist") +"\n");
log(settings.fossilPath + tr(" does not exist") +"\n");
return false;
}
@ -994,3 +995,9 @@ void MainWindow::on_actionUpdate_triggered()
refresh();
}
//------------------------------------------------------------------------------
void MainWindow::on_actionSettings_triggered()
{
SettingsDialog::run(this, settings);
}

View File

@ -8,6 +8,7 @@
#include <QFileInfo>
#include <QDir>
#include <QProcess>
#include "SettingsDialog.h"
namespace Ui {
class MainWindow;
@ -154,6 +155,8 @@ private slots:
void on_actionAbout_triggered();
void on_actionUpdate_triggered();
void on_actionSettings_triggered();
private:
enum
{
@ -167,12 +170,9 @@ private:
class QAction *recentWorkspaceActs[MAX_RECENT];
class QLabel *statusLabel;
QString settingsFile;
// Settings
Settings settings;
QString projectName;
QString repositoryFile;
QString fossilPath;
QStringList workspaceHistory;
QString currentWorkspace;
QStringList commitMessages;

View File

@ -132,11 +132,11 @@
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="actionRefresh"/>
<addaction name="separator"/>
<addaction name="actionCommit"/>
<addaction name="actionUpdate"/>
<addaction name="separator"/>
<addaction name="actionRefresh"/>
<addaction name="separator"/>
<addaction name="actionPush"/>
<addaction name="actionPull"/>
<addaction name="separator"/>
@ -153,6 +153,7 @@
<addaction name="actionFossilUI"/>
<addaction name="separator"/>
<addaction name="actionOpenContaining"/>
<addaction name="actionSettings"/>
<addaction name="actionClearLog"/>
</widget>
<widget class="QStatusBar" name="statusBar"/>
@ -432,6 +433,18 @@
<string>Ctrl+U</string>
</property>
</action>
<action name="actionSettings">
<property name="icon">
<iconset resource="resources.qrc">
<normaloff>:/icons/icons/Gear-01.png</normaloff>:/icons/icons/Gear-01.png</iconset>
</property>
<property name="text">
<string>Settings</string>
</property>
<property name="toolTip">
<string>Settings</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>

49
SettingsDialog.cpp Normal file
View File

@ -0,0 +1,49 @@
#include "SettingsDialog.h"
#include "ui_SettingsDialog.h"
#include <QFileDialog>
SettingsDialog::SettingsDialog(QWidget *parent, Settings &_settings) :
QDialog(parent, Qt::Sheet),
ui(new Ui::SettingsDialog),
settings(&_settings)
{
ui->setupUi(this);
ui->lineEdit->setText(settings->fossilPath);
}
SettingsDialog::~SettingsDialog()
{
delete ui;
}
void SettingsDialog::on_btnSelectFossil_clicked()
{
#ifdef Q_WS_WIN
QString filter(tr("Fossil Executables (*.exe)"));
#else
QString filter(tr("Fossil Executables (*)"));
#endif
QString path = QFileDialog::getOpenFileName(
this,
tr("Select Fossil Executable"),
QString(),
filter,
&filter);
if(QFile::exists(path))
{
ui->lineEdit->setText(path) ;
}
}
bool SettingsDialog::run(QWidget *parent, Settings &settings)
{
SettingsDialog dlg(parent, settings);
return dlg.exec() == QDialog::Accepted;
}
void SettingsDialog::on_buttonBox_accepted()
{
settings->fossilPath = ui->lineEdit->text();
}

38
SettingsDialog.h Normal file
View File

@ -0,0 +1,38 @@
#ifndef SETTINGSDIALOG_H
#define SETTINGSDIALOG_H
#include <QDialog>
namespace Ui {
class SettingsDialog;
}
struct Settings
{
QString fossilPath;
};
class SettingsDialog : public QDialog
{
Q_OBJECT
public:
explicit SettingsDialog(QWidget *parent, Settings &_settings);
~SettingsDialog();
static bool run(QWidget *parent, Settings &_settings);
private slots:
void on_btnSelectFossil_clicked();
void on_buttonBox_accepted();
private:
Ui::SettingsDialog *ui;
Settings *settings;
};
#endif // SETTINGSDIALOG_H

95
SettingsDialog.ui Normal file
View File

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SettingsDialog</class>
<widget class="QDialog" name="SettingsDialog">
<property name="windowModality">
<enum>Qt::WindowModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>100</height>
</rect>
</property>
<property name="windowTitle">
<string>Settings</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Fossil Path</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnSelectFossil">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>SettingsDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>SettingsDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -19,17 +19,20 @@ SOURCES += main.cpp\
MainWindow.cpp \
CommitDialog.cpp \
FileActionDialog.cpp \
RepoDialog.cpp
RepoDialog.cpp \
SettingsDialog.cpp
HEADERS += MainWindow.h \
CommitDialog.h \
FileActionDialog.h \
RepoDialog.h
RepoDialog.h \
SettingsDialog.h
FORMS += MainWindow.ui \
CommitDialog.ui \
FileActionDialog.ui \
RepoDialog.ui
RepoDialog.ui \
SettingsDialog.ui
RESOURCES += \
resources.qrc
@ -43,3 +46,10 @@ RESOURCES += \

View File

@ -4,6 +4,10 @@
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setApplicationName("Fuel");
a.setApplicationVersion("1.0.0");
a.setOrganizationDomain("karanik.com");
a.setOrganizationName("karanik");
MainWindow w;
w.show();

View File

@ -1,18 +1,21 @@
C Fixed\sQt\swarning\son\smy\scustom\sworkspace\schange\sslot\nAdded\sWindows\sicon\n
D 2011-08-06T06:03:06.064
F CommitDialog.cpp e3d9da638dd3a1df1f7c6676f87602501299297e
C Added\ssettings\sdialog\nAdded\splatform\sspecific\ssettings\sstorage/retrieval
D 2011-08-06T08:31:19.360
F CommitDialog.cpp a1fcdc94933f4e1a144224c7c70f1e067d3ee31e
F CommitDialog.h 0550b1b652924ae54b6f6c9274cad2d4c491808a
F CommitDialog.ui 3589fe539108343ea90f269f74a6a9e7a00dd2a9
F FileActionDialog.cpp 36a8ac047f45932aa5977dbbbf043911a0b00e05
F CommitDialog.ui 5067623f6af6f5a42c87df903278e383e945e154
F FileActionDialog.cpp ed26a6f9dd1debd6926d4bbff7ba18acb63dacc0
F FileActionDialog.h 873a9f720753a37d67071563ed7954f91b0d4699
F FileActionDialog.ui 2d7a0fa47f9555f4a4a7485feacd5bce504415a0
F MainWindow.cpp 44982070dd96913a6d6177325c23d791c6fc628e
F MainWindow.h b9c42e6c2eb01e6b04525ec9b346b1b00c00bb0e
F MainWindow.ui 65536bfe40bc9ee69ac55b1669359878172e7cad
F FileActionDialog.ui 3d4f7ad0665d51dc3ba405edbc472dd317138c5f
F MainWindow.cpp baa17293fc095dd2aa485dd830fb78ef0da683fb
F MainWindow.h 8a23caf1a70d41fe60a25894649a88b1efb851ba
F MainWindow.ui a68b2f41fc5edec06235504a88575463fa365590
F RepoDialog.cpp 8f20e1511526973555c774350ec413dcecf51c9e
F RepoDialog.h a958c5f98f1e6882bf41dbdd2e4df3cb89700802
F RepoDialog.ui 8fe9b7f7528332ca9a45e919cf116aaf144a3286
F fuel.pro 920964ebcbc2aa8c035e4faa3d1e1bda59008b72
F SettingsDialog.cpp 4e4cd109baed184bf0d1bb506e98aebf81ca43f0
F SettingsDialog.h 0da162b0bf9656f5ca5e6977ef669c24a44659e5
F SettingsDialog.ui 998b2bf7cf84df8247493c0f948b4193808494cd
F fuel.pro 295944fd817518c7c2412c5e52ce5ecad11dd8f8
F fuel.rc 8e9ac966f283102c11a77cd7f936cdc09e09bd79
F icons/Address\sBook-01.png ef2cec80ea5a559b72e8be4a344a1869fe69cbd8
F icons/Adobe\sIllustrator\sCS3\sDocument-01.png 2e44e933d58eefee7ccfa1650fed4ceadcf3c2be
@ -168,9 +171,9 @@ F icons/Zoom\sOut-01.png 8eda092100d9e00c9097f43a80d1e26695947448
F icons/Zoom-01.png 67ca532922e9166325c5c75fce1ca3fbb0d2b6a6
F icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b
F icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038
F main.cpp f53e9e1e34f65565f06b2d37d7be5c38e2113a03
F main.cpp 8e60cd775217ab3ab76d576b967186923e8cb9ab
F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53
P 3b6f4f542c7c6daedf1eb7aff03ef988cbb5100f
R f99b9b68fb5220c904ccfdfd2ac560ca
P dc4d1a0ea7eea22ee41170f366c08f09368735a7
R c5696a2a2cc67a5876ce07be3131bc73
U kostas
Z 42a29c0daccbc520d3edb5b0bd58af16
Z e87aeac6860a9baf9498236b899d9a66

View File

@ -1 +1 @@
dc4d1a0ea7eea22ee41170f366c08f09368735a7
66205d14199523228d7f6fa0241a7ef7162f6940