# HG changeset patch # User Sam Izzo # Date 1345910393 -36000 # Node ID 38c84c66ad7a2904ae226fa4015a011e773ebfee # Parent 0ef4ed400ced15e0f11bb3c8f2e33fc9a55839c3 * Added "show in" to show selected file in explorer diff -r 0ef4ed400ced -r 38c84c66ad7a src/filestates.cpp --- a/src/filestates.cpp Sat Aug 25 23:04:10 2012 +1000 +++ b/src/filestates.cpp Sun Aug 26 01:59:53 2012 +1000 @@ -161,11 +161,11 @@ switch (s) { case Modified: - a << Annotate << Diff << Commit << Revert << Rename << Copy << Remove; + a << Annotate << Diff << Commit << Revert << Rename << Copy << Remove << ShowIn; break; case Added: - a << Commit << Revert << Rename << Copy << Remove; + a << Commit << Revert << Rename << Copy << Remove << ShowIn; break; case Removed: @@ -173,7 +173,7 @@ break; case InConflict: - a << Annotate << Diff << RedoMerge << MarkResolved << Revert; + a << Annotate << Diff << RedoMerge << MarkResolved << Revert << ShowIn; break; case Missing: @@ -185,11 +185,11 @@ break; case Clean: - a << Annotate << Rename << Copy << Remove; + a << Annotate << Rename << Copy << Remove << ShowIn; break; case Ignored: - a << UnIgnore; + a << UnIgnore << ShowIn; break; } diff -r 0ef4ed400ced -r 38c84c66ad7a src/filestates.h --- a/src/filestates.h Sat Aug 25 23:04:10 2012 +1000 +++ b/src/filestates.h Sun Aug 26 01:59:53 2012 +1000 @@ -77,6 +77,8 @@ Ignore, UnIgnore, + ShowIn, + FirstActivity = Diff, LastActivity = UnIgnore }; diff -r 0ef4ed400ced -r 38c84c66ad7a src/filestatuswidget.cpp --- a/src/filestatuswidget.cpp Sat Aug 25 23:04:10 2012 +1000 +++ b/src/filestatuswidget.cpp Sun Aug 26 01:59:53 2012 +1000 @@ -72,6 +72,15 @@ // Unignore is too difficult in fact, so we just offer to edit the hgignore m_actionLabels[FileStates::UnIgnore] = tr("Edit .hgignore File"); + // No "show in" under Unix at the moment. +#if defined Q_OS_MAC + m_actionLabels[FileStates::ShowIn] = tr("Show in Finder"); +#elif defined Q_OS_WIN32 + m_actionLabels[FileStates::ShowIn] = tr("Show in Windows Explorer"); +#endif + + m_shortcuts[FileStates::ShowIn] = tr("Ctrl+Shift+S"); + m_descriptions[FileStates::Clean] = tr("You have not changed these files."); m_descriptions[FileStates::Modified] = tr("You have changed these files since you last committed them."); m_descriptions[FileStates::Added] = tr("These files will be added to version control next time you commit them."); @@ -127,6 +136,11 @@ FileStates::Activities activities = m_fileStates.activitiesSupportedBy(s); int prevGroup = -1; foreach (FileStates::Activity a, activities) { + QString label = m_actionLabels[a]; + if (label.length() == 0) { + // Skip empty labels. + continue; + } int group = FileStates::activityGroup(a); if (group != prevGroup && prevGroup != -1) { QAction *sep = new QAction("", w); @@ -134,9 +148,13 @@ w->insertAction(0, sep); } prevGroup = group; - QAction *act = new QAction(m_actionLabels[a], w); + QAction *act = new QAction(label, w); act->setProperty("state", s); act->setProperty("activity", a); + if (m_shortcuts.contains(a)) { + QString shortcut = m_shortcuts[a]; + act->setShortcut(shortcut); + } connect(act, SIGNAL(triggered()), this, SLOT(menuActionActivated())); w->insertAction(0, act); } @@ -282,6 +300,7 @@ case FileStates::MarkResolved: emit markFilesResolved(files); break; case FileStates::Ignore: emit ignoreFiles(files); break; case FileStates::UnIgnore: emit unIgnoreFiles(files); break; + case FileStates::ShowIn: emit showIn(files); break; } } diff -r 0ef4ed400ced -r 38c84c66ad7a src/filestatuswidget.h --- a/src/filestatuswidget.h Sat Aug 25 23:04:10 2012 +1000 +++ b/src/filestatuswidget.h Sun Aug 26 01:59:53 2012 +1000 @@ -74,6 +74,7 @@ void markFilesResolved(QStringList); void ignoreFiles(QStringList); void unIgnoreFiles(QStringList); + void showIn(QStringList); public slots: void clearSelections(); @@ -99,6 +100,7 @@ QMap m_descriptions; QMap m_stateListMap; QMap m_actionLabels; + QMap m_shortcuts; QString m_highlightExplanation; QFileInfo *m_dateReference; diff -r 0ef4ed400ced -r 38c84c66ad7a src/hgtabwidget.cpp --- a/src/hgtabwidget.cpp Sat Aug 25 23:04:10 2012 +1000 +++ b/src/hgtabwidget.cpp Sun Aug 26 01:59:53 2012 +1000 @@ -77,6 +77,9 @@ connect(m_fileStatusWidget, SIGNAL(unIgnoreFiles(QStringList)), this, SIGNAL(unIgnoreFiles(QStringList))); + connect(m_fileStatusWidget, SIGNAL(showIn(QStringList)), + this, SIGNAL(showIn(QStringList))); + addTab(m_fileStatusWidget, tr("My work")); // History graph tab diff -r 0ef4ed400ced -r 38c84c66ad7a src/hgtabwidget.h --- a/src/hgtabwidget.h Sat Aug 25 23:04:10 2012 +1000 +++ b/src/hgtabwidget.h Sun Aug 26 01:59:53 2012 +1000 @@ -108,6 +108,7 @@ void markFilesResolved(QStringList); void ignoreFiles(QStringList); void unIgnoreFiles(QStringList); + void showIn(QStringList); public slots: void clearSelections(); diff -r 0ef4ed400ced -r 38c84c66ad7a src/mainwindow.cpp --- a/src/mainwindow.cpp Sat Aug 25 23:04:10 2012 +1000 +++ b/src/mainwindow.cpp Sun Aug 26 01:59:53 2012 +1000 @@ -857,6 +857,26 @@ hgEditIgnore(); } +void MainWindow::hgShowIn(QStringList files) +{ + foreach (QString file, files) + { + QStringList args; + #if defined Q_OS_WIN32 + // Although the Win32 API is quite happy to have + // forward slashes as directory separators, Windows + // Explorer is not + file = file.replace('/', '\\'); + args << "/select," << file; + // FIXME: This shouldn't be using a hardcoded path. + QProcess::execute("c:/windows/explorer.exe", args); + #else if defined(Q_OS_MAC) + args << file; + QProcess::execute("/usr/bin/open", args); + #endif + } +} + QString MainWindow::getDiffBinaryName() { QSettings settings; @@ -2670,6 +2690,9 @@ connect(m_hgTabs, SIGNAL(unIgnoreFiles(QStringList)), this, SLOT(hgUnIgnoreFiles(QStringList))); + + connect(m_hgTabs, SIGNAL(showIn(QStringList)), + this, SLOT(hgShowIn(QStringList))); } void MainWindow::enableDisableActions() diff -r 0ef4ed400ced -r 38c84c66ad7a src/mainwindow.h --- a/src/mainwindow.h Sat Aug 25 23:04:10 2012 +1000 +++ b/src/mainwindow.h Sun Aug 26 01:59:53 2012 +1000 @@ -114,6 +114,7 @@ void hgMarkFilesResolved(QStringList); void hgIgnoreFiles(QStringList); void hgUnIgnoreFiles(QStringList); + void hgShowIn(QStringList); void updateFsWatcher(); void checkFilesystem();