annotate src/workstatuswidget.cpp @ 737:4f3a8aa8d384 tip

Markdown
author Chris Cannam
date Wed, 28 Aug 2019 17:40:54 +0100
parents ae67ea0af696
children
rev   line source
Chris@283 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@283 2
Chris@283 3 /*
Chris@283 4 EasyMercurial
Chris@283 5
Chris@283 6 Based on HgExplorer by Jari Korhonen
Chris@283 7 Copyright (c) 2010 Jari Korhonen
Chris@644 8 Copyright (c) 2013 Chris Cannam
Chris@644 9 Copyright (c) 2013 Queen Mary, University of London
Chris@283 10
Chris@283 11 This program is free software; you can redistribute it and/or
Chris@283 12 modify it under the terms of the GNU General Public License as
Chris@283 13 published by the Free Software Foundation; either version 2 of the
Chris@283 14 License, or (at your option) any later version. See the file
Chris@283 15 COPYING included with this distribution for more information.
Chris@283 16 */
Chris@283 17
Chris@283 18 #include "workstatuswidget.h"
Chris@283 19 #include "debug.h"
Chris@283 20 #include "clickablelabel.h"
Chris@523 21 #include "squeezedlabel.h"
Chris@283 22
Chris@283 23 #include <QGridLayout>
Chris@283 24 #include <QSpacerItem>
Chris@283 25 #include <QLabel>
Chris@283 26 #include <QProcess>
Chris@283 27 #include <QDir>
Chris@283 28
Chris@283 29 WorkStatusWidget::WorkStatusWidget(QWidget *parent) :
Chris@283 30 QWidget(parent)
Chris@283 31 {
Chris@283 32 QGridLayout *layout = new QGridLayout;
Chris@297 33 layout->setMargin(6);
Chris@297 34 layout->setSpacing(6);
Chris@283 35 setLayout(layout);
Chris@283 36
Chris@283 37 int row = 0;
Chris@283 38
Chris@283 39 #ifndef Q_OS_MAC
Chris@283 40 layout->addItem(new QSpacerItem(1, 1), row, 0);
Chris@283 41 ++row;
Chris@283 42 #endif
Chris@283 43
Chris@297 44 layout->addWidget(new QLabel(tr("Local:")), row, 1);
Chris@283 45
Chris@283 46 m_openButton = new ClickableLabel;
Chris@283 47 QFont f(m_openButton->font());
Chris@283 48 f.setBold(true);
Chris@283 49 m_openButton->setFont(f);
Chris@283 50 m_openButton->setMouseUnderline(true);
Chris@283 51 connect(m_openButton, SIGNAL(clicked()), this, SLOT(openButtonClicked()));
Chris@523 52 layout->addWidget(m_openButton, row, 2, 1, 2);
Chris@283 53
Chris@283 54 ++row;
Chris@297 55 layout->addWidget(new QLabel(tr("Remote:")), row, 1);
Chris@523 56 m_remoteURLLabel = new SqueezedLabel;
Chris@375 57 m_remoteURLLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
Chris@297 58 layout->addWidget(m_remoteURLLabel, row, 2, 1, 2);
Chris@283 59
Chris@283 60 ++row;
Chris@297 61 layout->addWidget(new QLabel(tr("State:")), row, 1);
Chris@283 62 m_stateLabel = new QLabel;
Chris@297 63 layout->addWidget(m_stateLabel, row, 2, 1, 2);
Chris@283 64
Chris@297 65 layout->setColumnStretch(2, 20);
Chris@283 66
Chris@283 67
Chris@283 68 }
Chris@283 69
Chris@283 70 WorkStatusWidget::~WorkStatusWidget()
Chris@283 71 {
Chris@283 72 }
Chris@283 73
Chris@283 74 void
Chris@283 75 WorkStatusWidget::setLocalPath(QString p)
Chris@283 76 {
Chris@283 77 m_localPath = p;
Chris@283 78 m_openButton->setText(p);
Chris@283 79 m_openButton->setEnabled(QDir(m_localPath).exists());
Chris@283 80 }
Chris@283 81
Chris@283 82 void
Chris@283 83 WorkStatusWidget::setRemoteURL(QString r)
Chris@283 84 {
Chris@283 85 m_remoteURL = r;
Chris@283 86 m_remoteURLLabel->setText(r);
Chris@283 87 }
Chris@283 88
Chris@283 89 void
Chris@283 90 WorkStatusWidget::setState(QString b)
Chris@283 91 {
Chris@283 92 m_state = b;
Chris@283 93 updateStateLabel();
Chris@283 94 }
Chris@283 95
Chris@283 96 void
Chris@283 97 WorkStatusWidget::updateStateLabel()
Chris@283 98 {
Chris@283 99 m_stateLabel->setText(m_state);
Chris@283 100 }
Chris@283 101
Chris@283 102 void
Chris@283 103 WorkStatusWidget::openButtonClicked()
Chris@283 104 {
Chris@283 105 QDir d(m_localPath);
Chris@283 106 if (d.exists()) {
Chris@283 107 QStringList args;
Chris@283 108 QString path = d.canonicalPath();
Chris@283 109 #if defined Q_OS_WIN32
Chris@283 110 // Although the Win32 API is quite happy to have
Chris@283 111 // forward slashes as directory separators, Windows
Chris@283 112 // Explorer is not
Chris@283 113 path = path.replace('/', '\\');
Chris@283 114 args << path;
Chris@283 115 QProcess::execute("c:/windows/explorer.exe", args);
Chris@283 116 #else
Chris@283 117 args << path;
Chris@283 118 QProcess::execute(
Chris@283 119 #if defined Q_OS_MAC
Chris@283 120 "/usr/bin/open",
Chris@283 121 #else
Chris@283 122 "/usr/bin/xdg-open",
Chris@283 123 #endif
Chris@283 124 args);
Chris@283 125 #endif
Chris@283 126 }
Chris@283 127 }