Initial support for localization

FossilOrigin-Name: 8d881de4e52069221dd6ae38a436449fbccdac25
This commit is contained in:
kostas 2012-09-23 10:20:57 +00:00
parent 152041ff05
commit d40b70d737
11 changed files with 180 additions and 118 deletions

View File

@ -64,3 +64,7 @@ FORMS += ui/MainWindow.ui \
RESOURCES += \ RESOURCES += \
rsrc/resources.qrc rsrc/resources.qrc
unix {
system(intl/convert.sh)
}

17
intl/convert.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PRJDIR=$SCRIPTDIR/..
INTLDIR=$SCRIPTDIR
echo "Converting localizations"
rm -rf $PRJDIR/rsrc/intl
mkdir $PRJDIR/rsrc/intl
for i in $INTLDIR/*.po
do
TARGET=`basename $i .po`.qm
echo "$TARGET"
lconvert $i -o $PRJDIR/rsrc/intl/$TARGET
done

View File

@ -1,11 +1,12 @@
C Added\sbuild\sinstructions\sfor\swindows C Initial\ssupport\sfor\slocalization
D 2012-05-17T14:41:29.847 D 2012-09-23T10:20:57.755
F dist/arch/PKGBUILD dd21073c035af4e6a4ecb3842c1fd7ae45c5e93d F dist/arch/PKGBUILD dd21073c035af4e6a4ecb3842c1fd7ae45c5e93d
F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e
F doc/Building.txt 7c0f1060d4a08ed330058d4a3a68905c05228381 F doc/Building.txt 7c0f1060d4a08ed330058d4a3a68905c05228381
F doc/Changes.txt e21c9355aaeb7643c8d6784effd2f9ebadf3a8e0 F doc/Changes.txt e21c9355aaeb7643c8d6784effd2f9ebadf3a8e0
F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c
F fuel.pro 2f1650c8b3e4b09eeb5b6283655d2142fe67cb00 F fuel.pro f9053752c0ea40a7f9c90ac738a6c1689b92dfe5
F intl/convert.sh 6dfabd9c78df20b2c5c767b301cc4cd8813f442d x
F rsrc/fuel.desktop 43145556bc61f5a91b497c38a16aec44af271d29 F rsrc/fuel.desktop 43145556bc61f5a91b497c38a16aec44af271d29
F rsrc/fuel.rc 8e9ac966f283102c11a77cd7f936cdc09e09bd79 F rsrc/fuel.rc 8e9ac966f283102c11a77cd7f936cdc09e09bd79
F rsrc/icons/Address\sBook-01.png ef2cec80ea5a559b72e8be4a344a1869fe69cbd8 F rsrc/icons/Address\sBook-01.png ef2cec80ea5a559b72e8be4a344a1869fe69cbd8
@ -174,20 +175,20 @@ F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2
F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df
F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c
F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261
F src/MainWindow.cpp 4041709d8fa2d9485fd64b8838ddfed5eccb277d F src/MainWindow.cpp 026cb929ead96dd5885be7ff14190c7ff8d033d5
F src/MainWindow.h f97ef3776d10211f42651cd2b7c7291d90bac3c1 F src/MainWindow.h 7839457d09848b40beb03e36ddc4f755d8631881
F src/SettingsDialog.cpp 296c77c5704bd8cb77a00d561db072aaaf60c1d6 F src/SettingsDialog.cpp 824ab2445df35aec131e0c1d891c96f660c1bb28
F src/SettingsDialog.h 9592ec491cd44a5bff70ea42853d7e1f053f4040 F src/SettingsDialog.h 09d3f375b2fab59248fae9bd12419f2985720d28
F src/Utils.cpp caca5268e3194abe77211040bf9511a82909d2e6 F src/Utils.cpp caca5268e3194abe77211040bf9511a82909d2e6
F src/Utils.h 5af911147390879176e587fc60fb662490bb9e97 F src/Utils.h 5af911147390879176e587fc60fb662490bb9e97
F src/main.cpp f2913af0af1a5fcbebe93fb53b8a9cf6e7bbf65a F src/main.cpp fcd78f44b893fb9c93bbb71a2e861bd36af95f88
F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x
F ui/CloneDialog.ui 0fc820804df91f16506ee466a44519fdd44e468f F ui/CloneDialog.ui 0fc820804df91f16506ee466a44519fdd44e468f
F ui/CommitDialog.ui 813d7cba316e226de1a22b7e480bb969fbe9b0c4 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f
F ui/FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7 F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d
F ui/MainWindow.ui 6ad583b6d864ccbeac8e3fd1d05cd964bc17c5f9 F ui/MainWindow.ui 6ad583b6d864ccbeac8e3fd1d05cd964bc17c5f9
F ui/SettingsDialog.ui cd6faff19c1a6c2640193eb5a258f0daa926a2cf F ui/SettingsDialog.ui cd6faff19c1a6c2640193eb5a258f0daa926a2cf
P 623d92282857d1eef5ba9314b02ee9482ad7e7ea P 1760813f6ce3ed23ab45bee2fbde8cbf487d2481
R 994818d5dcdeeac6bdf896aa00d04986 R 12e9a8ebc31d18b45a1d208db05caf62
U kostas U kostas
Z fa78223180c8f2827d94a33c07e67bbb Z 63bee23b106d51238aa4d200b0a7da88

View File

@ -1 +1 @@
1760813f6ce3ed23ab45bee2fbde8cbf487d2481 8d881de4e52069221dd6ae38a436449fbccdac25

View File

@ -106,9 +106,10 @@ private:
}; };
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
MainWindow::MainWindow(QWidget *parent, QString *workspacePath, bool portableMode) : MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspacePath) :
QMainWindow(parent), QMainWindow(parent),
ui(new Ui::MainWindow) ui(new Ui::MainWindow),
settings(_settings)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -197,17 +198,6 @@ MainWindow::MainWindow(QWidget *parent, QString *workspacePath, bool portableMod
viewMode = VIEWMODE_TREE; viewMode = VIEWMODE_TREE;
// Go into portable mode when explicitly requested or if a config file exists next to the executable
QString ini_path = QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + QDir::separator() + QCoreApplication::applicationName() + ".ini");
if(portableMode || QFile::exists(ini_path))
qsettings = new QSettings(ini_path, QSettings::IniFormat);
else
{
// Linux: ~/.config/organizationName/applicationName.conf
// Windows: HKEY_CURRENT_USER\Software\organizationName\Fuel
qsettings = new QSettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
}
loadSettings(); loadSettings();
// Apply any explicit workspace path if available // Apply any explicit workspace path if available
@ -228,7 +218,6 @@ MainWindow::~MainWindow()
{ {
stopUI(); stopUI();
saveSettings(); saveSettings();
delete qsettings;
// Dispose RepoFiles // Dispose RepoFiles
for(filemap_t::iterator it = workspaceFiles.begin(); it!=workspaceFiles.end(); ++it) for(filemap_t::iterator it = workspaceFiles.begin(); it!=workspaceFiles.end(); ++it)
@ -257,7 +246,7 @@ void MainWindow::setCurrentWorkspace(const QString &workspace)
addWorkspace(new_workspace); addWorkspace(new_workspace);
if(!QDir::setCurrent(new_workspace)) if(!QDir::setCurrent(new_workspace))
QMessageBox::critical(this, tr("Error"), tr("Could not change current diectory to ")+new_workspace, QMessageBox::Ok ); QMessageBox::critical(this, tr("Error"), tr("Could not change current diectory to '%0'").arg(new_workspace), QMessageBox::Ok );
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -508,7 +497,7 @@ void MainWindow::rebuildRecent()
for(int i = 0; i < enabled_acts; ++i) for(int i = 0; i < enabled_acts; ++i)
{ {
QString text = tr("&%1 %2").arg(i + 1).arg(QDir::toNativeSeparators(workspaceHistory[i])); QString text = QString("&%1 %2").arg(i + 1).arg(QDir::toNativeSeparators(workspaceHistory[i]));
recentWorkspaceActs[i]->setText(text); recentWorkspaceActs[i]->setText(text);
recentWorkspaceActs[i]->setData(workspaceHistory[i]); recentWorkspaceActs[i]->setData(workspaceHistory[i]);
@ -602,7 +591,7 @@ bool MainWindow::refresh()
} }
else if(st==REPO_OLD_SCHEMA) else if(st==REPO_OLD_SCHEMA)
{ {
setStatus(tr("Old fossil schema detected. Consider running rebuild.")); setStatus(tr("Old fossil schema detected. Consider running 'fossil rebuild'"));
enableActions(false); enableActions(false);
repoFileModel.removeRows(0, repoFileModel.rowCount()); repoFileModel.removeRows(0, repoFileModel.rowCount());
repoDirModel.clear(); repoDirModel.clear();
@ -1104,7 +1093,7 @@ bool MainWindow::runFossilRaw(const QStringList &args, QStringList *output, int
process.start(fossil, args); process.start(fossil, args);
if(!process.waitForStarted()) if(!process.waitForStarted())
{ {
log(tr("Could not start fossil executable '") + fossil + "''\n"); log(tr("Could not start Fossil executable '%s'\n").arg(fossil));
return false; return false;
} }
const QChar EOL_MARK('\n'); const QChar EOL_MARK('\n');
@ -1295,20 +1284,20 @@ QString MainWindow::getFossilPath()
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void MainWindow::loadSettings() void MainWindow::loadSettings()
{ {
if(qsettings->contains(FUEL_SETTING_FOSSIL_PATH)) if(settings.store->contains(FUEL_SETTING_FOSSIL_PATH))
settings.Mappings[FUEL_SETTING_FOSSIL_PATH].Value = qsettings->value(FUEL_SETTING_FOSSIL_PATH); settings.Mappings[FUEL_SETTING_FOSSIL_PATH].Value = settings.store->value(FUEL_SETTING_FOSSIL_PATH);
if(qsettings->contains(FUEL_SETTING_COMMIT_MSG)) if(settings.store->contains(FUEL_SETTING_COMMIT_MSG))
settings.Mappings[FUEL_SETTING_COMMIT_MSG].Value = qsettings->value(FUEL_SETTING_COMMIT_MSG); settings.Mappings[FUEL_SETTING_COMMIT_MSG].Value = settings.store->value(FUEL_SETTING_COMMIT_MSG);
if(qsettings->contains(FUEL_SETTING_FILE_DBLCLICK)) if(settings.store->contains(FUEL_SETTING_FILE_DBLCLICK))
settings.Mappings[FUEL_SETTING_FILE_DBLCLICK].Value = qsettings->value(FUEL_SETTING_FILE_DBLCLICK); settings.Mappings[FUEL_SETTING_FILE_DBLCLICK].Value = settings.store->value(FUEL_SETTING_FILE_DBLCLICK);
int num_wks = qsettings->beginReadArray("Workspaces"); int num_wks = settings.store->beginReadArray("Workspaces");
for(int i=0; i<num_wks; ++i) for(int i=0; i<num_wks; ++i)
{ {
qsettings->setArrayIndex(i); settings.store->setArrayIndex(i);
QString wk = qsettings->value("Path").toString(); QString wk = settings.store->value("Path").toString();
// Skip invalid workspaces // Skip invalid workspaces
if(wk.isEmpty() || !QDir(wk).exists()) if(wk.isEmpty() || !QDir(wk).exists())
@ -1316,46 +1305,47 @@ void MainWindow::loadSettings()
addWorkspace(wk); addWorkspace(wk);
if(qsettings->contains("Active") && qsettings->value("Active").toBool()) if(settings.store->contains("Active") && settings.store->value("Active").toBool())
setCurrentWorkspace(wk); setCurrentWorkspace(wk);
} }
qsettings->endArray(); settings.store->endArray();
if(qsettings->contains("WindowX") && qsettings->contains("WindowY")) if(settings.store->contains("WindowX") && settings.store->contains("WindowY"))
{ {
QPoint _pos; QPoint _pos;
_pos.setX(qsettings->value("WindowX").toInt()); _pos.setX(settings.store->value("WindowX").toInt());
_pos.setY(qsettings->value("WindowY").toInt()); _pos.setY(settings.store->value("WindowY").toInt());
move(_pos); move(_pos);
} }
if(qsettings->contains("WindowWidth") && qsettings->contains("WindowHeight")) if(settings.store->contains("WindowWidth") && settings.store->contains("WindowHeight"))
{ {
QSize _size; QSize _size;
_size.setWidth(qsettings->value("WindowWidth").toInt()); _size.setWidth(settings.store->value("WindowWidth").toInt());
_size.setHeight(qsettings->value("WindowHeight").toInt()); _size.setHeight(settings.store->value("WindowHeight").toInt());
resize(_size); resize(_size);
} }
if(qsettings->contains("ViewUnknown")) if(settings.store->contains("ViewUnknown"))
ui->actionViewUnknown->setChecked(qsettings->value("ViewUnknown").toBool()); ui->actionViewUnknown->setChecked(settings.store->value("ViewUnknown").toBool());
if(qsettings->contains("ViewModified")) if(settings.store->contains("ViewModified"))
ui->actionViewModified->setChecked(qsettings->value("ViewModified").toBool()); ui->actionViewModified->setChecked(settings.store->value("ViewModified").toBool());
if(qsettings->contains("ViewUnchanged")) if(settings.store->contains("ViewUnchanged"))
ui->actionViewUnchanged->setChecked(qsettings->value("ViewUnchanged").toBool()); ui->actionViewUnchanged->setChecked(settings.store->value("ViewUnchanged").toBool());
if(qsettings->contains("ViewIgnored")) if(settings.store->contains("ViewIgnored"))
ui->actionViewIgnored->setChecked(qsettings->value("ViewIgnored").toBool()); ui->actionViewIgnored->setChecked(settings.store->value("ViewIgnored").toBool());
if(qsettings->contains("ViewAsList")) if(settings.store->contains("ViewAsList"))
{ {
ui->actionViewAsList->setChecked(qsettings->value("ViewAsList").toBool()); ui->actionViewAsList->setChecked(settings.store->value("ViewAsList").toBool());
viewMode = qsettings->value("ViewAsList").toBool()? VIEWMODE_LIST : VIEWMODE_TREE; viewMode = settings.store->value("ViewAsList").toBool()? VIEWMODE_LIST : VIEWMODE_TREE;
} }
ui->treeView->setVisible(viewMode == VIEWMODE_TREE); ui->treeView->setVisible(viewMode == VIEWMODE_TREE);
if(qsettings->contains("ViewStash")) if(settings.store->contains("ViewStash"))
ui->actionViewStash->setChecked(qsettings->value("ViewStash").toBool()); ui->actionViewStash->setChecked(settings.store->value("ViewStash").toBool());
ui->tableViewStash->setVisible(ui->actionViewStash->isChecked()); ui->tableViewStash->setVisible(ui->actionViewStash->isChecked());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -1363,32 +1353,32 @@ void MainWindow::saveSettings()
{ {
// If we have a customize fossil path, save it // If we have a customize fossil path, save it
QString fossil_path = settings.Mappings[FUEL_SETTING_FOSSIL_PATH].Value.toString(); QString fossil_path = settings.Mappings[FUEL_SETTING_FOSSIL_PATH].Value.toString();
qsettings->setValue(FUEL_SETTING_FOSSIL_PATH, fossil_path); settings.store->setValue(FUEL_SETTING_FOSSIL_PATH, fossil_path);
qsettings->setValue(FUEL_SETTING_COMMIT_MSG, settings.Mappings[FUEL_SETTING_COMMIT_MSG].Value); settings.store->setValue(FUEL_SETTING_COMMIT_MSG, settings.Mappings[FUEL_SETTING_COMMIT_MSG].Value);
qsettings->setValue(FUEL_SETTING_FILE_DBLCLICK, settings.Mappings[FUEL_SETTING_FILE_DBLCLICK].Value); settings.store->setValue(FUEL_SETTING_FILE_DBLCLICK, settings.Mappings[FUEL_SETTING_FILE_DBLCLICK].Value);
qsettings->beginWriteArray("Workspaces", workspaceHistory.size()); settings.store->beginWriteArray("Workspaces", workspaceHistory.size());
for(int i=0; i<workspaceHistory.size(); ++i) for(int i=0; i<workspaceHistory.size(); ++i)
{ {
qsettings->setArrayIndex(i); settings.store->setArrayIndex(i);
qsettings->setValue("Path", workspaceHistory[i]); settings.store->setValue("Path", workspaceHistory[i]);
if(getCurrentWorkspace() == workspaceHistory[i]) if(getCurrentWorkspace() == workspaceHistory[i])
qsettings->setValue("Active", true); settings.store->setValue("Active", true);
else else
qsettings->remove("Active"); settings.store->remove("Active");
} }
qsettings->endArray(); settings.store->endArray();
qsettings->setValue("WindowX", x()); settings.store->setValue("WindowX", x());
qsettings->setValue("WindowY", y()); settings.store->setValue("WindowY", y());
qsettings->setValue("WindowWidth", width()); settings.store->setValue("WindowWidth", width());
qsettings->setValue("WindowHeight", height()); settings.store->setValue("WindowHeight", height());
qsettings->setValue("ViewUnknown", ui->actionViewUnknown->isChecked()); settings.store->setValue("ViewUnknown", ui->actionViewUnknown->isChecked());
qsettings->setValue("ViewModified", ui->actionViewModified->isChecked()); settings.store->setValue("ViewModified", ui->actionViewModified->isChecked());
qsettings->setValue("ViewUnchanged", ui->actionViewUnchanged->isChecked()); settings.store->setValue("ViewUnchanged", ui->actionViewUnchanged->isChecked());
qsettings->setValue("ViewIgnored", ui->actionViewIgnored->isChecked()); settings.store->setValue("ViewIgnored", ui->actionViewIgnored->isChecked());
qsettings->setValue("ViewAsList", ui->actionViewAsList->isChecked()); settings.store->setValue("ViewAsList", ui->actionViewAsList->isChecked());
qsettings->setValue("ViewStash", ui->actionViewStash->isChecked()); settings.store->setValue("ViewStash", ui->actionViewStash->isChecked());
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -1570,13 +1560,13 @@ bool MainWindow::startUI()
fossilUI.setWorkingDirectory(getCurrentWorkspace()); fossilUI.setWorkingDirectory(getCurrentWorkspace());
log("<b>&gt; fossil ui</b><br>", true); log("<b>&gt; fossil ui</b><br>", true);
log(tr("Starting Fossil UI. Please wait.\n")); log(tr("Starting Fossil browser UI. Please wait.\n"));
QString fossil = getFossilPath(); QString fossil = getFossilPath();
fossilUI.start(fossil, QStringList() << "ui"); fossilUI.start(fossil, QStringList() << "ui");
if(!fossilUI.waitForStarted() || fossilUI.state()!=QProcess::Running) if(!fossilUI.waitForStarted() || fossilUI.state()!=QProcess::Running)
{ {
log(tr("%0 does not exist\n").arg(fossil)); log(tr("Could not start Fossil executable '%s'\n").arg(fossil));
ui->actionFossilUI->setChecked(false); ui->actionFossilUI->setChecked(false);
return false; return false;
} }
@ -1885,7 +1875,7 @@ void MainWindow::on_actionRename_triggered()
if(fi_after.exists()) if(fi_after.exists())
{ {
QMessageBox::critical(this, tr("Error"), tr("File %0 already exists.\nRename aborted.").arg(new_name), QMessageBox::Ok ); QMessageBox::critical(this, tr("Error"), tr("File '%0' already exists.\nRename aborted.").arg(new_name), QMessageBox::Ok );
return; return;
} }
@ -1951,7 +1941,7 @@ void MainWindow::on_actionAbout_triggered()
{ {
int off = res[0].indexOf("version "); int off = res[0].indexOf("version ");
if(off!=-1) if(off!=-1)
fossil_ver = tr("Fossil version ")+res[0].mid(off) + "\n\n"; fossil_ver = tr("Fossil version %0").arg(res[0].mid(off)) + "\n\n";
} }
QMessageBox::about(this, tr("About Fuel..."), QMessageBox::about(this, tr("About Fuel..."),
@ -2269,10 +2259,10 @@ void MainWindow::on_actionRenameFolder_triggered()
QDir wkdir(getCurrentWorkspace()); QDir wkdir(getCurrentWorkspace());
Q_ASSERT(wkdir.exists()); Q_ASSERT(wkdir.exists());
log(tr("Creating folder '")+target_path+"'\n"); log(tr("Creating folder '%0'\n").arg(target_path));
if(!wkdir.mkpath(new_paths[i] + PATH_SEP + ".")) if(!wkdir.mkpath(new_paths[i] + PATH_SEP + "."))
{ {
QMessageBox::critical(this, tr("Error"), tr("Cannot make target folder '")+target_path+"'\n"); QMessageBox::critical(this, tr("Error"), tr("Cannot make target folder '%0'\n").arg(target_path));
goto _exit; goto _exit;
} }
} }
@ -2289,7 +2279,7 @@ void MainWindow::on_actionRenameFolder_triggered()
goto _exit; goto _exit;
} }
log(tr("Copying file '")+r->getFilePath()+tr("' to '")+new_file_path+"'\n"); log(tr("Copying file '%0' to '%1'\n").arg(r->getFilePath(), new_file_path));
if(!QFile::copy(r->getFilePath(), new_file_path)) if(!QFile::copy(r->getFilePath(), new_file_path))
{ {
@ -2303,7 +2293,7 @@ void MainWindow::on_actionRenameFolder_triggered()
{ {
RepoFile *r = files_to_move[i]; RepoFile *r = files_to_move[i];
log(tr("Removing old file '")+r->getFilePath()+"'\n"); log(tr("Removing old file '%0'\n").arg(r->getFilePath()));
if(!QFile::exists(r->getFilePath())) if(!QFile::exists(r->getFilePath()))
{ {

View File

@ -12,7 +12,7 @@
#include "SettingsDialog.h" #include "SettingsDialog.h"
namespace Ui { namespace Ui {
class MainWindow; class MainWindow;
} }
@ -113,11 +113,11 @@ private:
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
class MainWindow : public QMainWindow class MainWindow : public QMainWindow
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit MainWindow(QWidget *parent = 0, QString *workspacePath = 0, bool portableMode = false); explicit MainWindow(Settings &_settings, QWidget *parent = 0, QString *workspacePath = 0);
~MainWindow(); ~MainWindow();
bool diffFile(QString repoFile); bool diffFile(QString repoFile);
private: private:
@ -227,7 +227,7 @@ private slots:
void on_actionApplyStash_triggered(); void on_actionApplyStash_triggered();
void on_actionDeleteStash_triggered(); void on_actionDeleteStash_triggered();
void on_actionDiffStash_triggered(); void on_actionDiffStash_triggered();
void on_textBrowser_customContextMenuRequested(const QPoint &pos); void on_textBrowser_customContextMenuRequested(const QPoint &pos);
void on_tableView_customContextMenuRequested(const QPoint &pos); void on_tableView_customContextMenuRequested(const QPoint &pos);
private: private:
@ -247,7 +247,7 @@ private:
class QProgressBar *progressBar; class QProgressBar *progressBar;
bool fossilAbort; // FIXME: No GUI for it yet bool fossilAbort; // FIXME: No GUI for it yet
Settings settings; Settings &settings;
QString projectName; QString projectName;
QString repositoryFile; QString repositoryFile;
QStringList workspaceHistory; QStringList workspaceHistory;
@ -255,8 +255,6 @@ private:
ViewMode viewMode; ViewMode viewMode;
stringset_t selectedDirs; // The directory selected in the tree stringset_t selectedDirs; // The directory selected in the tree
class QSettings *qsettings;
// Repository State // Repository State
typedef QList<RepoFile*> filelist_t; typedef QList<RepoFile*> filelist_t;
typedef QMap<QString, RepoFile*> filemap_t; typedef QMap<QString, RepoFile*> filemap_t;

View File

@ -3,6 +3,13 @@
#include <QFileDialog> #include <QFileDialog>
#include "Utils.h" #include "Utils.h"
#include <QSettings>
#include <QCoreApplication>
#include <QDir>
#include <QTranslator>
#include <QResource>
QString SettingsDialog::SelectExe(QWidget *parent, const QString &description) QString SettingsDialog::SelectExe(QWidget *parent, const QString &description)
{ {
QString filter(tr("Applications")); QString filter(tr("Applications"));
@ -104,3 +111,48 @@ void SettingsDialog::on_btnClearMessageHistory_clicked()
if(DialogQuery(this, tr("Clear Commit Message History"), tr("Are you sure want to clear the commit message history?"))==QMessageBox::Yes) if(DialogQuery(this, tr("Clear Commit Message History"), tr("Are you sure want to clear the commit message history?"))==QMessageBox::Yes)
settings->Mappings[FUEL_SETTING_COMMIT_MSG].Value = QStringList(); settings->Mappings[FUEL_SETTING_COMMIT_MSG].Value = QStringList();
} }
///////////////////////////////////////////////////////////////////////////////
Settings::Settings(bool portableMode) : store(0)
{
Mappings[FUEL_SETTING_FOSSIL_PATH] = Setting();
Mappings[FUEL_SETTING_COMMIT_MSG] = Setting();
Mappings[FUEL_SETTING_FILE_DBLCLICK] = Setting(0); // Maps to FileDblClickAction
Mappings[FUEL_SETTING_GDIFF_CMD] = Setting("", Setting::TYPE_FOSSIL_GLOBAL);
Mappings[FUEL_SETTING_GMERGE_CMD] = Setting("", Setting::TYPE_FOSSIL_GLOBAL);
Mappings[FUEL_SETTING_IGNORE_GLOB] = Setting("", Setting::TYPE_FOSSIL_LOCAL);
Mappings[FUEL_SETTING_CRNL_GLOB] = Setting("", Setting::TYPE_FOSSIL_LOCAL);
Mappings[FUEL_SETTING_REMOTE_URL] = Setting("off", Setting::TYPE_FOSSIL_COMMAND);
// Go into portable mode when explicitly requested or if a config file exists next to the executable
QString ini_path = QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + QDir::separator() + QCoreApplication::applicationName() + ".ini");
if(portableMode || QFile::exists(ini_path))
store = new QSettings(ini_path, QSettings::IniFormat);
else
{
// Linux: ~/.config/organizationName/applicationName.conf
// Windows: HKEY_CURRENT_USER\Software\organizationName\Fuel
store = new QSettings(QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
}
ApplyEnvironment();
}
//-----------------------------------------------------------------------------
Settings::~Settings()
{
delete store;
}
//-----------------------------------------------------------------------------
void Settings::ApplyEnvironment()
{
QString locale_name = QLocale::system().name();
//locale_name = "el_GR";
QString locale_path = QString(":intl/intl/%0.qm").arg(locale_name);
QResource res(locale_path);
if(res.isValid() && translator.load(res.data(), res.size()))
QCoreApplication::instance()->installTranslator(&translator);
}

View File

@ -4,6 +4,8 @@
#include <QDialog> #include <QDialog>
#include <QMap> #include <QMap>
#include <QVariant> #include <QVariant>
#include <QTranslator>
namespace Ui { namespace Ui {
class SettingsDialog; class SettingsDialog;
@ -44,20 +46,15 @@ struct Settings
SettingType Type; SettingType Type;
}; };
typedef QMap<QString, Setting> mappings_t; Settings(bool portableMode = false);
mappings_t Mappings; ~Settings();
void ApplyEnvironment();
typedef QMap<QString, Setting> mappings_t;
mappings_t Mappings;
class QSettings *store;
QTranslator translator;
Settings()
{
Mappings[FUEL_SETTING_FOSSIL_PATH] = Setting();
Mappings[FUEL_SETTING_COMMIT_MSG] = Setting();
Mappings[FUEL_SETTING_FILE_DBLCLICK] = Setting(0); // Maps to FileDblClickAction
Mappings[FUEL_SETTING_GDIFF_CMD] = Setting("", Setting::TYPE_FOSSIL_GLOBAL);
Mappings[FUEL_SETTING_GMERGE_CMD] = Setting("", Setting::TYPE_FOSSIL_GLOBAL);
Mappings[FUEL_SETTING_IGNORE_GLOB] = Setting("", Setting::TYPE_FOSSIL_LOCAL);
Mappings[FUEL_SETTING_CRNL_GLOB] = Setting("", Setting::TYPE_FOSSIL_LOCAL);
Mappings[FUEL_SETTING_REMOTE_URL] = Setting("off", Setting::TYPE_FOSSIL_COMMAND);
}
}; };

View File

@ -1,14 +1,15 @@
#include <QtGui/QApplication> #include <QApplication>
#include "MainWindow.h" #include "MainWindow.h"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QApplication app(argc, argv); QApplication app(argc, argv);
app.setApplicationName("Fuel"); app.setApplicationName("Fuel");
app.setApplicationVersion("0.9.6"); app.setApplicationVersion("0.9.6");
app.setOrganizationDomain("fuel-scm.org"); app.setOrganizationDomain("fuel-scm.org");
app.setOrganizationName("Fuel-SCM"); app.setOrganizationName("Fuel-SCM");
#ifdef Q_WS_MACX #ifdef Q_WS_MACX
// Native OSX applications don't use menu icons // Native OSX applications don't use menu icons
app.setAttribute(Qt::AA_DontShowIconsInMenus); app.setAttribute(Qt::AA_DontShowIconsInMenus);
@ -16,7 +17,7 @@ int main(int argc, char *argv[])
{ {
bool portable = false; bool portable = false;
QString workspace; QString workspace;
Q_ASSERT(app.arguments().size()>0); Q_ASSERT(app.arguments().size()>0);
for(int i=1; i<app.arguments().size(); ++i) for(int i=1; i<app.arguments().size(); ++i)
{ {
@ -32,9 +33,11 @@ int main(int argc, char *argv[])
workspace = arg; workspace = arg;
} }
MainWindow mainwin(0, Settings settings(portable);
workspace.isEmpty() ? 0 : &workspace,
portable); MainWindow mainwin(settings,
0,
workspace.isEmpty() ? 0 : &workspace);
mainwin.show(); mainwin.show();
return app.exec(); return app.exec();
} }

View File

@ -64,7 +64,7 @@
<item> <item>
<widget class="QCheckBox" name="checkBox"> <widget class="QCheckBox" name="checkBox">
<property name="text"> <property name="text">
<string>CheckBox</string> <string/>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -26,7 +26,7 @@
<enum>QFrame::NoFrame</enum> <enum>QFrame::NoFrame</enum>
</property> </property>
<property name="text"> <property name="text">
<string>TextLabel</string> <string/>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>