# HG changeset patch # User Chris Cannam # Date 1290790975 0 # Node ID 4bd17f36d0591b1d25c4e5886c16972c71b93c55 # Parent 151209bc5bd6321f6f377e850cf189cd5276ba3a * Make diff binary a settings property; some tidying diff -r 151209bc5bd6 -r 4bd17f36d059 common.cpp --- a/common.cpp Fri Nov 26 16:28:18 2010 +0000 +++ b/common.cpp Fri Nov 26 17:02:55 2010 +0000 @@ -81,35 +81,6 @@ #endif return name; } - -QString getSystem() -{ - #ifdef Q_WS_X11 - return QString("Linux"); - #endif - - #ifdef Q_WS_MAC - return QString("Mac"); - #endif - - #ifdef Q_WS_WIN - return QString("Windows"); - #endif - - return QString(""); -} - -QString getHgDirName() -{ - if (getSystem() == "Windows") - { - return QString(".hg\\"); - } - else - { - return QString(".hg/"); - } -} #ifdef Q_OS_WIN32 QString getUserRealName() diff -r 151209bc5bd6 -r 4bd17f36d059 easyhg.pro --- a/easyhg.pro Fri Nov 26 16:28:18 2010 +0000 +++ b/easyhg.pro Fri Nov 26 17:02:55 2010 +0000 @@ -15,7 +15,6 @@ common.h \ grapher.h \ hgrunner.h \ - settingsdialog.h \ changeset.h \ changesetitem.h \ logparser.h \ @@ -40,7 +39,6 @@ hgtabwidget.cpp \ hgrunner.cpp \ grapher.cpp \ - settingsdialog.cpp \ common.cpp \ changeset.cpp \ changesetitem.cpp \ diff -r 151209bc5bd6 -r 4bd17f36d059 grapher.cpp --- a/grapher.cpp Fri Nov 26 16:28:18 2010 +0000 +++ b/grapher.cpp Fri Nov 26 17:02:55 2010 +0000 @@ -123,7 +123,7 @@ } Changeset *cs = m_changesets[id]; - std::cerr << "layoutCol: Looking at " << id.toStdString() << std::endl; +// std::cerr << "layoutCol: Looking at " << id.toStdString() << std::endl; ChangesetItem *item = m_items[id]; @@ -180,7 +180,7 @@ break; } - std::cerr << "putting " << cs->id().toStdString() << " at col " << col << std::endl; +// std::cerr << "putting " << cs->id().toStdString() << " at col " << col << std::endl; m_alloc[row].insert(col); item->setColumn(col); diff -r 151209bc5bd6 -r 4bd17f36d059 mainwindow.cpp --- a/mainwindow.cpp Fri Nov 26 16:28:18 2010 +0000 +++ b/mainwindow.cpp Fri Nov 26 17:02:55 2010 +0000 @@ -31,7 +31,6 @@ #include #include "mainwindow.h" -#include "settingsdialog.h" #include "multichoicedialog.h" #include "startupdialog.h" #include "colourset.h" @@ -81,6 +80,8 @@ startupDialog(); } + findDiffBinaryName(); + ColourSet *cs = ColourSet::instance(); cs->clearDefaultNames(); cs->addDefaultName(""); @@ -285,8 +286,8 @@ if (ConfirmCommentDialog::confirmAndGetLongComment (this, tr("Commit files"), - tr("

Commit files

About to commit the following files:"), - tr("

Commit files

About to commit %1 files."), + tr("

Commit files

You are about to commit the following files:"), + tr("

Commit files

You are about to commit %1 files."), files, comment)) { @@ -350,15 +351,17 @@ hgIgnorePath += ".hgignore"; params << hgIgnorePath; - - if ((getSystem() == "Linux")) - { + +//!!! +#ifdef Q_OS_LINUX + editorName = "gedit"; - } - else - { + +#else + editorName = """C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe"""; - } + +#endif HgAction action(ACT_HG_IGNORE, workFolderPath, params); action.executable = editorName; @@ -366,7 +369,29 @@ runner->requestAction(action); } - +void MainWindow::findDiffBinaryName() +{ + QSettings settings; + QString diff = settings.value("extdiffbinary", "").toString(); + if (diff == "") { + QStringList bases; + bases << "opendiff" << "kompare" << "kdiff3" << "meld"; + bool found = false; + foreach (QString base, bases) { + diff = findExecutable(base); + if (diff != base) { + found = true; + break; + } + } + if (found) { + settings.setValue("extdiffbinary", diff); + } else { + diff = ""; + } + } + diffBinaryName = diff; +} void MainWindow::hgFileDiff() { @@ -387,14 +412,15 @@ void MainWindow::hgFolderDiff() { + if (diffBinaryName == "") return; + QStringList params; - //Diff parent against working folder (folder diff) + // Diff parent against working folder (folder diff) + params << "--config" << "extensions.extdiff=" << "extdiff" << "-p"; + params << diffBinaryName; - params << "kompare"; - -// params << "kdiff3"; runner->requestAction(HgAction(ACT_FOLDERDIFF, workFolderPath, params)); } @@ -465,8 +491,8 @@ if (ConfirmCommentDialog::confirmDangerousFilesAction (this, tr("Revert files"), - tr("

Revert files

About to revert the following files to their previous committed state. This will throw away any changes that you have made to these files but have not committed."), - tr("

Revert files

About to revert %1 files. This will throw away any changes that you have made to these files but have not committed."), + tr("

Revert files

You are about to revert the following files to their previous committed state.

This will throw away any changes that you have made to these files but have not committed."), + tr("

Revert files

You are about to revert %1 files.

This will throw away any changes that you have made to these files but have not committed."), files)) { if (files.empty()) { @@ -1217,7 +1243,7 @@ workFolderExist = true; } - if (!localRepoDir.exists(workFolderPath + "/" + getHgDirName())) { + if (!localRepoDir.exists(workFolderPath + "/.hg")) { localRepoActionsEnabled = false; localRepoExist = false; } @@ -1232,10 +1258,12 @@ localRepoActionsEnabled = false; } */ + bool haveDiff = (diffBinaryName != ""); + hgInitAct -> setEnabled((localRepoExist == false) && (workFolderExist==true)); hgStatAct -> setEnabled(localRepoActionsEnabled); - hgFileDiffAct -> setEnabled(localRepoActionsEnabled); - hgFolderDiffAct -> setEnabled(localRepoActionsEnabled); + hgFileDiffAct -> setEnabled(localRepoActionsEnabled && haveDiff); + hgFolderDiffAct -> setEnabled(localRepoActionsEnabled && haveDiff); hgRevertAct -> setEnabled(localRepoActionsEnabled); hgAddAct -> setEnabled(localRepoActionsEnabled); hgRemoveAct -> setEnabled(localRepoActionsEnabled); diff -r 151209bc5bd6 -r 4bd17f36d059 mainwindow.h --- a/mainwindow.h Fri Nov 26 16:28:18 2010 +0000 +++ b/mainwindow.h Fri Nov 26 17:02:55 2010 +0000 @@ -56,7 +56,6 @@ public slots: void hgQueryPaths(); void hgStat(); -// void tabChanged(int currTab); void commandCompleted(HgAction action, QString stdout); void commandFailed(HgAction action, QString stdout); void enableDisableActions(); @@ -186,11 +185,12 @@ HgRunner *runner; + void findDiffBinaryName(); + QString diffBinaryName; + QFileSystemWatcher *fsWatcher; -// int tabPage; -// unsigned char initialFileTypesBits; - bool justMerged; + bool justMerged; }; #endif diff -r 151209bc5bd6 -r 4bd17f36d059 settingsdialog.cpp --- a/settingsdialog.cpp Fri Nov 26 16:28:18 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ - -/* - EasyMercurial - - Based on HgExplorer by Jari Korhonen - Copyright (c) 2010 Jari Korhonen - Copyright (c) 2010 Chris Cannam - Copyright (c) 2010 Queen Mary, University of London - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. See the file - COPYING included with this distribution for more information. -*/ - -#include "settingsdialog.h" - -#include -#include -#include -#include -#include - -SettingsDialog::SettingsDialog(QWidget *parent): QDialog(parent) -{ - QPushButton *okButton; - QPushButton *cancelButton; - - mainWnd = (MainWindow *) parent; - - userInfoLabel = new QLabel(tr("User info for commits, e.g. John Smith ")); - userInfoLineEdit = new QLineEdit("");//!!!mainWnd->userInfo); - userInfoLabel -> setBuddy(userInfoLineEdit); - - remoteRepoLabel = new QLabel(tr("Remote repository path, e.g. http://192.168.1.10:8000/ or /home/mike/anotherrepo/ or c:\\anotherrepo\\")); - remoteRepoCombo = new QComboBox(); - remoteRepoCombo -> insertItem(0, mainWnd->remoteRepoPath); -/*!!! for(int i = 0; i < NUM_PATHS_IN_MRU_LIST; i++) - { - remoteRepoCombo -> insertItem(i + 1, mainWnd -> remoteRepoMruList[i]); - } -*/ - remoteRepoCombo -> setEditable(true); - remoteRepoLabel -> setBuddy(remoteRepoCombo); - remoteRepoBrowseButton = new QPushButton(tr("Browse...")); - - workFolderLabel = new QLabel(tr("Local work folder path, e.g. /home/mike/work/ or c:\\mike\\work\\")); - workFolderCombo = new QComboBox(); - workFolderCombo -> insertItem(0, mainWnd -> workFolderPath); -/*!!! for(int i = 0; i < NUM_PATHS_IN_MRU_LIST; i++) - { - workFolderCombo -> insertItem(i + 1, mainWnd -> workFolderMruList[i]); - } -*/ - workFolderCombo -> setEditable(true); - workFolderLabel -> setBuddy(workFolderCombo); - workFolderBrowseButton = new QPushButton(tr("Browse...")); - - okButton = new QPushButton(tr("Ok")); - cancelButton = new QPushButton(tr("Cancel")); - - QHBoxLayout *btnLayout = new QHBoxLayout; - btnLayout -> addWidget(okButton); - btnLayout -> addWidget(cancelButton); - btnLayout -> addStretch(); - - QHBoxLayout *workFolderLayout = new QHBoxLayout; - workFolderLayout -> addWidget(workFolderCombo, 3); - workFolderLayout -> addWidget(workFolderBrowseButton, 1); - - QHBoxLayout *remoteRepoLayout = new QHBoxLayout; - remoteRepoLayout -> addWidget(remoteRepoCombo, 3); - remoteRepoLayout -> addWidget(remoteRepoBrowseButton, 1); - - QVBoxLayout *mainLayout = new QVBoxLayout; - - mainLayout -> addWidget(userInfoLabel); - mainLayout -> addWidget(userInfoLineEdit); - - mainLayout -> addWidget(remoteRepoLabel); - mainLayout -> addLayout(remoteRepoLayout); - - mainLayout -> addWidget(workFolderLabel); - mainLayout -> addLayout(workFolderLayout); - - mainLayout -> addLayout(btnLayout); - - setLayout(mainLayout); - - connect(okButton, SIGNAL(clicked()), this, SLOT(okClicked())); - connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelClicked())); - connect(workFolderBrowseButton, SIGNAL(clicked()), this, SLOT(browseWorkFolder())); - connect(remoteRepoBrowseButton, SIGNAL(clicked()), this, SLOT(browseRemoteRepo())); -} - -#define EMPTY_DIR 2 - -void SettingsDialog::okClicked() -{ - QString tmp; - -//!!! mainWnd -> firstStart = false; -//!!! mainWnd -> userInfo = userInfoLineEdit->text(); - - if (mainWnd -> remoteRepoPath != remoteRepoCombo-> currentText()) - { -//!!! insertPathToMruList(mainWnd -> remoteRepoPath, mainWnd -> remoteRepoMruList); - mainWnd -> remoteRepoPath = remoteRepoCombo-> currentText(); - } - - tmp = workFolderCombo -> currentText(); - if (!tmp.endsWith(QDir::separator())) - { - tmp += QDir::separator(); - } - - if (mainWnd -> workFolderPath != tmp) - { -//!!! insertPathToMruList(mainWnd -> workFolderPath, mainWnd -> workFolderMruList); - mainWnd -> workFolderPath = tmp; - } - - mainWnd -> writeSettings(); - mainWnd -> enableDisableActions(); - mainWnd -> hgStat(); - mainWnd -> hgTabs -> setWorkFolderAndRepoNames(mainWnd -> workFolderPath, mainWnd -> remoteRepoPath); - - QDir dir(mainWnd -> workFolderPath); - if (dir.exists(mainWnd -> workFolderPath)) - { - uint cnt = dir.count(); - if (cnt == EMPTY_DIR) - { - QMessageBox::information(this, tr("Todo"), tr("Your chosen workfolder is empty.\nChoose \"File/Clone from remote\"\nto download a remote repository.\nYou can also choose \"File/Init local repository\"\nto initialize repository and add files later.")); - } - else - { - QString repoPath = mainWnd -> workFolderPath + getHgDirName(); - QDir repoDir(repoPath); - if (!repoDir.exists()) - { - QMessageBox::information(this, tr("Todo"), tr("Your chosen workfolder is not empty,\nbut does not yet contain a repository.\nChoose \"File/Init local repository\" \nto initialize repository.")); - } - } - } - - - close(); -} - - -void SettingsDialog::cancelClicked() -{ - close(); -} - -void SettingsDialog::browseDirAndSetCombo(QComboBox *combo) -{ - QString dir; - QString startDir; - QString system; - - system = getSystem(); - if ((system == "Linux") || (system == "Mac")) - { - startDir = QDir::homePath(); - } - else - { - startDir = "c:\\"; - } - - dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), - startDir, - QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - - combo -> setItemText(0, dir + QDir::separator()); -} - -void SettingsDialog::browseWorkFolder() -{ - browseDirAndSetCombo(workFolderCombo); -} - -void SettingsDialog::browseRemoteRepo() -{ - browseDirAndSetCombo(remoteRepoCombo); -} - - diff -r 151209bc5bd6 -r 4bd17f36d059 settingsdialog.h --- a/settingsdialog.h Fri Nov 26 16:28:18 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ - -/* - EasyMercurial - - Based on HgExplorer by Jari Korhonen - Copyright (c) 2010 Jari Korhonen - Copyright (c) 2010 Chris Cannam - Copyright (c) 2010 Queen Mary, University of London - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. See the file - COPYING included with this distribution for more information. -*/ - -#ifndef SETTINGSDIALOG_H -#define SETTINGSDIALOG_H - -#include "mainwindow.h" - -#include -#include -#include -#include -#include - -class SettingsDialog : public QDialog -{ - Q_OBJECT - -public: - SettingsDialog(QWidget *parent = 0); - -private slots: - void okClicked(); - void cancelClicked(); - void browseWorkFolder(); - void browseRemoteRepo(); - -private: - QLabel *userInfoLabel; - QLineEdit *userInfoLineEdit; - - QLabel *remoteRepoLabel; - QComboBox *remoteRepoCombo; - QPushButton *remoteRepoBrowseButton; - QHBoxLayout *remoteRepoLayout; - - QLabel *workFolderLabel; - QComboBox *workFolderCombo; - QPushButton *workFolderBrowseButton; - QHBoxLayout *workFolderLayout; - - QPushButton *okButton; - QPushButton *cancelButton; - - MainWindow *mainWnd; - - void browseDirAndSetCombo(QComboBox *combo); -}; - - -#endif // SETTINGSDIALOG_H