Optionally use the internal browser for the Fossil UI

Support for persisting the state (Column order and sizes) of the File View



FossilOrigin-Name: 7439077817df40f70c96d6f5f3e6f47314ba1b59
This commit is contained in:
kostas 2012-12-15 14:12:28 +00:00
parent ca462c5ecd
commit 9d181c8d00
10 changed files with 890 additions and 787 deletions

View File

@ -1,10 +1,13 @@
Fuel V0.9.7 (2012-XX-XX) Fuel V0.9.7 (2012-XX-XX)
============ ============
- Distribution: Fuel is now available in the Arch User Repository - Distribution: Fuel is now available in the Arch User Repository
- Feature: Optionally use the internal browser for the Fossil UI
- UI: Support for persisting the state (Column order and sizes) of the File View
- Feature: Support for localization - Feature: Support for localization
- Localisations: - Localisations:
Greek Greek
German (thanks stayawake) German (thanks stayawake)
Spanish (thanks djnavas)
Fuel V0.9.6 (2012-05-13) Fuel V0.9.6 (2012-05-13)
============ ============

View File

@ -2,7 +2,7 @@
# Fuel # Fuel
#------------------------------------------------- #-------------------------------------------------
QT += core gui QT += core gui webkit
TARGET = Fuel TARGET = Fuel
TEMPLATE = app TEMPLATE = app

View File

@ -1,11 +1,11 @@
C Added\sSpanish\stranslation\nChanged\sthe\shandling\sof\sFileView\scolumns\nFileView\scolumn\sorder\sand\ssizes\sis\snow\spersisted\sin\sthe\ssettings\n\n\n\n\n C Optionally\suse\sthe\sinternal\sbrowser\sfor\sthe\sFossil\sUI\nSupport\sfor\spersisting\sthe\sstate\s(Column\sorder\sand\ssizes)\sof\sthe\sFile\sView\n\n
D 2012-12-15T10:50:34.083 D 2012-12-15T14:12:28.439
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 f2999c99053d2bf2aeaaba5504eb96e228dbac58 F doc/Changes.txt 50bdd6db6883452cfc7fe5b35512bf0e840772b9
F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c
F fuel.pro 3374e40d77a366de63f35f0c3bf48eb61ecbc979 F fuel.pro f2bda42ff7c3258dce38e679107687b16007f5a0
F intl/convert.sh 5694496585ff5f4363c90ff8b6f48e19e0b6b4aa x F intl/convert.sh 5694496585ff5f4363c90ff8b6f48e19e0b6b4aa x
F intl/de_DE.ts 82873d85b3df5b204d6c41aa666ef88dd60583aa F intl/de_DE.ts 82873d85b3df5b204d6c41aa666ef88dd60583aa
F intl/el_GR.ts e7ba75d373804b715d23b86d289fb7b556079889 F intl/el_GR.ts e7ba75d373804b715d23b86d289fb7b556079889
@ -180,10 +180,10 @@ 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 e46c31b692b3d072a5f80aab9b910ab4524257f8 F src/MainWindow.cpp bb82954d26ba915a4632e83af1d45d2498a1aac9
F src/MainWindow.h 3f3825cab25058666b6706b36f51269ad5f65f3e F src/MainWindow.h c7c72113541604b1c605345da5e680ed3865f39b
F src/SettingsDialog.cpp 66e8ad0a01c58cd29f397d74f46274021abe34b8 F src/SettingsDialog.cpp 2031ed9d431bce2c8a967030bc4043570134b22e
F src/SettingsDialog.h d37dde23f698fbe6182b2e14234104a15468be3d F src/SettingsDialog.h 01c1f876c64f750ba8820a0d745e377acabe4921
F src/Utils.cpp caca5268e3194abe77211040bf9511a82909d2e6 F src/Utils.cpp caca5268e3194abe77211040bf9511a82909d2e6
F src/Utils.h 5af911147390879176e587fc60fb662490bb9e97 F src/Utils.h 5af911147390879176e587fc60fb662490bb9e97
F src/main.cpp 8f8790822f82870a12169bcf204e571138adb065 F src/main.cpp 8f8790822f82870a12169bcf204e571138adb065
@ -191,9 +191,9 @@ F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x
F ui/CloneDialog.ui 0fc820804df91f16506ee466a44519fdd44e468f F ui/CloneDialog.ui 0fc820804df91f16506ee466a44519fdd44e468f
F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f
F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d
F ui/MainWindow.ui 998f26c6fe75bd655cf3d4f0073e67dc0bf3b3d7 F ui/MainWindow.ui 26585cc74af41321337e239e2cb283f25cddac5c
F ui/SettingsDialog.ui 7f578450cf01d6786ff2d91a2142505192446e3f F ui/SettingsDialog.ui 55aefad7145c40d936c43759789d1b50e361b020
P 33305fed1383ad01dd5d66ef4cf379956508b0c8 P 87b7bd70eec27bd136f17432d98dd313282fc3d1
R a1ac056afe9f31b4aa8bb64f43ff42ac R 2fcea15e839ecc5fd6f667fce4bef347
U kostas U kostas
Z 520d9618aa62a70c2f7ef5b438253c9f Z d8452a239012f381e4acfb4d4b9022db

View File

@ -1 +1 @@
87b7bd70eec27bd136f17432d98dd313282fc3d1 7439077817df40f70c96d6f5f3e6f47314ba1b59

View File

@ -38,6 +38,12 @@ enum
COLUMN_PATH COLUMN_PATH
}; };
enum
{
TAB_LOG,
TAB_BROWSER
};
enum enum
{ {
REPODIRMODEL_ROLE_PATH = Qt::UserRole+1 REPODIRMODEL_ROLE_PATH = Qt::UserRole+1
@ -134,7 +140,7 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP
Qt::DirectConnection ); Qt::DirectConnection );
QStringList header; QStringList header;
header << tr("Status") << tr("File") << tr("Ext") << tr("Modified") << tr("Path"); header << tr("Status") << tr("File") << tr("Extension") << tr("Modified") << tr("Path");
repoFileModel.setHorizontalHeaderLabels(header); repoFileModel.setHorizontalHeaderLabels(header);
repoFileModel.horizontalHeaderItem(COLUMN_STATUS)->setTextAlignment(Qt::AlignCenter); repoFileModel.horizontalHeaderItem(COLUMN_STATUS)->setTextAlignment(Qt::AlignCenter);
@ -1394,6 +1400,27 @@ void MainWindow::selectRootDir()
ui->treeView->selectionModel()->select(root_index, QItemSelectionModel::Select); ui->treeView->selectionModel()->select(root_index, QItemSelectionModel::Select);
} }
} }
//------------------------------------------------------------------------------
void MainWindow::fossilBrowse(const QString &fossilUrl)
{
if(!uiRunning())
ui->actionFossilUI->activate(QAction::Trigger);
Q_ASSERT(uiRunning());
bool use_internal = settings.GetValue(FUEL_SETTING_WEB_BROWSER).toInt() == 1;
QUrl url = QUrl(getFossilHttpAddress()+fossilUrl);
if(use_internal)
{
ui->webView->load(url);
ui->tabWidget->setCurrentIndex(TAB_BROWSER);
}
else
QDesktopServices::openUrl(url);
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void MainWindow::getSelectionFilenames(QStringList &filenames, int includeMask, bool allIfEmpty) void MainWindow::getSelectionFilenames(QStringList &filenames, int includeMask, bool allIfEmpty)
{ {
@ -1567,7 +1594,10 @@ bool MainWindow::startUI()
log(tr("Starting Fossil browser UI. Please wait.")+"\n"); log(tr("Starting Fossil browser UI. Please wait.")+"\n");
QString fossil = getFossilPath(); QString fossil = getFossilPath();
fossilUI.start(fossil, QStringList() << "ui"); QString port = settings.GetValue(FUEL_SETTING_HTTP_PORT).toString();
fossilUI.start(fossil, QStringList() << "server" << "--localauth" << "-P" << port );
if(!fossilUI.waitForStarted() || fossilUI.state()!=QProcess::Running) if(!fossilUI.waitForStarted() || fossilUI.state()!=QProcess::Running)
{ {
log(tr("Could not start Fossil executable '%s'").arg(fossil)+"\n"); log(tr("Could not start Fossil executable '%s'").arg(fossil)+"\n");
@ -1575,31 +1605,7 @@ bool MainWindow::startUI()
return false; return false;
} }
#if 0
QString buffer;
while(buffer.indexOf(EOL_MARK)==-1)
{
fossilUI.waitForReadyRead(500);
buffer += fossilUI.readAll();
QCoreApplication::processEvents();
}
fossilUIPort.clear();
// Parse output to determine the running port
// "Listening for HTTP requests on TCP port 8080"
int idx = buffer.indexOf("TCP Port ");
if(idx!=-1)
fossilUIPort = buffer.mid(idx, 4);
else
fossilUIPort = "8080"; // Have a sensible default if we failed to parse the message
#else
fossilUIPort = "8080";
#endif
ui->actionFossilUI->setChecked(true); ui->actionFossilUI->setChecked(true);
return true; return true;
} }
@ -1614,14 +1620,19 @@ void MainWindow::stopUI()
fossilUI.terminate(); fossilUI.terminate();
#endif #endif
} }
fossilUI.close();
ui->actionFossilUI->setChecked(false); ui->actionFossilUI->setChecked(false);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void MainWindow::on_actionFossilUI_triggered() void MainWindow::on_actionFossilUI_triggered()
{ {
if(!uiRunning()) if(!uiRunning() && ui->actionFossilUI->isChecked())
{
startUI(); startUI();
fossilBrowse("");
}
else else
stopUI(); stopUI();
} }
@ -1635,29 +1646,17 @@ void MainWindow::on_actionQuit_triggered()
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void MainWindow::on_actionTimeline_triggered() void MainWindow::on_actionTimeline_triggered()
{ {
if(!uiRunning()) fossilBrowse("/timeline");
ui->actionFossilUI->activate(QAction::Trigger);
Q_ASSERT(uiRunning());
QDesktopServices::openUrl(QUrl(getFossilHttpAddress()+"/timeline"));
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void MainWindow::on_actionHistory_triggered() void MainWindow::on_actionHistory_triggered()
{ {
if(!uiRunning())
ui->actionFossilUI->activate(QAction::Trigger);
Q_ASSERT(uiRunning());
QStringList selection; QStringList selection;
getSelectionFilenames(selection); getSelectionFilenames(selection);
for(QStringList::iterator it = selection.begin(); it!=selection.end(); ++it) for(QStringList::iterator it = selection.begin(); it!=selection.end(); ++it)
{ fossilBrowse("/finfo?name="+*it);
QDesktopServices::openUrl(QUrl(getFossilHttpAddress()+"/finfo?name="+*it));
}
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -2103,7 +2102,8 @@ void MainWindow::on_actionViewAsList_triggered()
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
QString MainWindow::getFossilHttpAddress() QString MainWindow::getFossilHttpAddress()
{ {
return "http://127.0.0.1:"+fossilUIPort; QString port = settings.GetValue(FUEL_SETTING_HTTP_PORT).toString();
return "http://127.0.0.1:"+port;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------

View File

@ -163,6 +163,7 @@ private:
void updateFileView(); void updateFileView();
void updateStashView(); void updateStashView();
void selectRootDir(); void selectRootDir();
void fossilBrowse(const QString &fossilUrl);
virtual QMenu *createPopupMenu(); virtual QMenu *createPopupMenu();
@ -242,7 +243,6 @@ private:
QStandardItemModel repoDirModel; QStandardItemModel repoDirModel;
QStandardItemModel repoStashModel; QStandardItemModel repoStashModel;
QProcess fossilUI; QProcess fossilUI;
QString fossilUIPort;
class QAction *recentWorkspaceActs[MAX_RECENT]; class QAction *recentWorkspaceActs[MAX_RECENT];
class QProgressBar *progressBar; class QProgressBar *progressBar;
bool fossilAbort; // FIXME: No GUI for it yet bool fossilAbort; // FIXME: No GUI for it yet

View File

@ -47,9 +47,14 @@ SettingsDialog::SettingsDialog(QWidget *parent, Settings &_settings) :
ui->cmbDoubleClickAction->addItem(tr("Open File")); ui->cmbDoubleClickAction->addItem(tr("Open File"));
ui->cmbDoubleClickAction->addItem(tr("Open Containing Folder")); ui->cmbDoubleClickAction->addItem(tr("Open Containing Folder"));
ui->cmbFossilBrowser->addItem(tr("System"));
ui->cmbFossilBrowser->addItem(tr("Internal"));
// App Settings // App Settings
ui->lineFossilPath->setText(QDir::toNativeSeparators(settings->GetValue(FUEL_SETTING_FOSSIL_PATH).toString())); ui->lineFossilPath->setText(QDir::toNativeSeparators(settings->GetValue(FUEL_SETTING_FOSSIL_PATH).toString()));
ui->cmbDoubleClickAction->setCurrentIndex(settings->GetValue(FUEL_SETTING_FILE_DBLCLICK).toInt()); ui->cmbDoubleClickAction->setCurrentIndex(settings->GetValue(FUEL_SETTING_FILE_DBLCLICK).toInt());
ui->cmbFossilBrowser->setCurrentIndex(settings->GetValue(FUEL_SETTING_WEB_BROWSER).toInt());
ui->lineUIPort->setText(settings->GetValue(FUEL_SETTING_HTTP_PORT).toString());
// Initialize language combo // Initialize language combo
foreach(const LangMap &m, langMap) foreach(const LangMap &m, langMap)
@ -88,6 +93,8 @@ void SettingsDialog::on_buttonBox_accepted()
settings->SetValue(FUEL_SETTING_FOSSIL_PATH, QDir::fromNativeSeparators(ui->lineFossilPath->text())); settings->SetValue(FUEL_SETTING_FOSSIL_PATH, QDir::fromNativeSeparators(ui->lineFossilPath->text()));
Q_ASSERT(ui->cmbDoubleClickAction->currentIndex()>=FILE_DLBCLICK_ACTION_DIFF && ui->cmbDoubleClickAction->currentIndex()<FILE_DLBCLICK_ACTION_MAX); Q_ASSERT(ui->cmbDoubleClickAction->currentIndex()>=FILE_DLBCLICK_ACTION_DIFF && ui->cmbDoubleClickAction->currentIndex()<FILE_DLBCLICK_ACTION_MAX);
settings->SetValue(FUEL_SETTING_FILE_DBLCLICK, ui->cmbDoubleClickAction->currentIndex()); settings->SetValue(FUEL_SETTING_FILE_DBLCLICK, ui->cmbDoubleClickAction->currentIndex());
settings->SetValue(FUEL_SETTING_WEB_BROWSER, ui->cmbFossilBrowser->currentIndex());
settings->SetValue(FUEL_SETTING_HTTP_PORT, ui->lineUIPort->text());
Q_ASSERT(settings->HasValue(FUEL_SETTING_LANGUAGE)); Q_ASSERT(settings->HasValue(FUEL_SETTING_LANGUAGE));
QString curr_langid = settings->GetValue(FUEL_SETTING_LANGUAGE).toString(); QString curr_langid = settings->GetValue(FUEL_SETTING_LANGUAGE).toString();
@ -196,6 +203,10 @@ Settings::Settings(bool portableMode) : store(0)
SetValue(FUEL_SETTING_FILE_DBLCLICK, 0); SetValue(FUEL_SETTING_FILE_DBLCLICK, 0);
if(!HasValue(FUEL_SETTING_LANGUAGE) && SupportsLang(QLocale::system().name())) if(!HasValue(FUEL_SETTING_LANGUAGE) && SupportsLang(QLocale::system().name()))
SetValue(FUEL_SETTING_LANGUAGE, QLocale::system().name()); SetValue(FUEL_SETTING_LANGUAGE, QLocale::system().name());
if(!HasValue(FUEL_SETTING_WEB_BROWSER))
SetValue(FUEL_SETTING_WEB_BROWSER, 0);
if(!HasValue(FUEL_SETTING_HTTP_PORT))
SetValue(FUEL_SETTING_HTTP_PORT, "8090");
ApplyEnvironment(); ApplyEnvironment();
} }

View File

@ -15,6 +15,8 @@ namespace Ui {
#define FUEL_SETTING_COMMIT_MSG "CommitMsgHistory" #define FUEL_SETTING_COMMIT_MSG "CommitMsgHistory"
#define FUEL_SETTING_FILE_DBLCLICK "FileDblClickAction" #define FUEL_SETTING_FILE_DBLCLICK "FileDblClickAction"
#define FUEL_SETTING_LANGUAGE "Language" #define FUEL_SETTING_LANGUAGE "Language"
#define FUEL_SETTING_WEB_BROWSER "WebBrowser"
#define FUEL_SETTING_HTTP_PORT "HTTPPort"
#define FOSSIL_SETTING_GDIFF_CMD "gdiff-command" #define FOSSIL_SETTING_GDIFF_CMD "gdiff-command"
#define FOSSIL_SETTING_GMERGE_CMD "gmerge-command" #define FOSSIL_SETTING_GMERGE_CMD "gmerge-command"

View File

@ -27,6 +27,12 @@
</property> </property>
<item> <item>
<widget class="QSplitter" name="splitter_2"> <widget class="QSplitter" name="splitter_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>
@ -34,7 +40,7 @@
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>80</verstretch> <verstretch>75</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="orientation"> <property name="orientation">
@ -88,6 +94,12 @@
<property name="selectionBehavior"> <property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum> <enum>QAbstractItemView::SelectRows</enum>
</property> </property>
<property name="verticalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<property name="horizontalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<property name="showGrid"> <property name="showGrid">
<bool>false</bool> <bool>false</bool>
</property> </property>
@ -155,16 +167,58 @@
</attribute> </attribute>
</widget> </widget>
</widget> </widget>
<widget class="QTextBrowser" name="textBrowser"> <widget class="QTabWidget" name="tabWidget">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>20</verstretch> <verstretch>8</verstretch>
</sizepolicy>
</property>
<property name="tabPosition">
<enum>QTabWidget::South</enum>
</property>
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="tabLog">
<attribute name="title">
<string>Log</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QTextBrowser" name="textBrowser">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="contextMenuPolicy"> <property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum> <enum>Qt::CustomContextMenu</enum>
</property> </property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabBrowser">
<attribute name="title">
<string>Browser</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QWebView" name="webView"/>
</item>
</layout>
</widget>
</widget> </widget>
</widget> </widget>
</item> </item>
@ -830,6 +884,11 @@
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<customwidgets> <customwidgets>
<customwidget>
<class>QWebView</class>
<extends>QWidget</extends>
<header>QtWebKit/QWebView</header>
</customwidget>
<customwidget> <customwidget>
<class>FileTableView</class> <class>FileTableView</class>
<extends>QTableView</extends> <extends>QTableView</extends>

View File

@ -9,8 +9,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>560</width> <width>457</width>
<height>300</height> <height>352</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -34,12 +34,6 @@
<string>Application</string> <string>Application</string>
</attribute> </attribute>
<layout class="QFormLayout" name="formLayout"> <layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="minimumSize"> <property name="minimumSize">
@ -170,6 +164,20 @@
</layout> </layout>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="uILanguageLabel_3">
<property name="text">
<string>HTTP Port</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="lineUIPort">
<property name="toolTip">
<string>HTTP port to use for the Fossil web interface</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6"> <widget class="QLabel" name="label_6">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@ -182,7 +190,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="4" column="1">
<widget class="QPushButton" name="btnClearMessageHistory"> <widget class="QPushButton" name="btnClearMessageHistory">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -198,7 +206,27 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="5" column="0">
<widget class="QLabel" name="uILanguageLabel_2">
<property name="text">
<string>Web Browser</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="cmbFossilBrowser">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Web browser to use for the Fossil web interface</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@ -211,7 +239,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="6" column="1">
<widget class="QComboBox" name="cmbDoubleClickAction"> <widget class="QComboBox" name="cmbDoubleClickAction">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -227,14 +255,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="7" column="0">
<widget class="QLabel" name="uILanguageLabel"> <widget class="QLabel" name="uILanguageLabel">
<property name="text"> <property name="text">
<string>Language</string> <string>Language</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1"> <item row="7" column="1">
<widget class="QComboBox" name="cmbActiveLanguage"> <widget class="QComboBox" name="cmbActiveLanguage">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed">