Improved HTML formating + new context menu.
This commit is contained in:
parent
d2924b7c10
commit
831c0e07e5
@ -5,9 +5,11 @@
|
|||||||
<file>MediaInfoXP.png</file>
|
<file>MediaInfoXP.png</file>
|
||||||
<file>res/ico_clear.png</file>
|
<file>res/ico_clear.png</file>
|
||||||
<file>res/ico_discard.png</file>
|
<file>res/ico_discard.png</file>
|
||||||
|
<file>res/ico_disk.png</file>
|
||||||
<file>res/ico_folder.png</file>
|
<file>res/ico_folder.png</file>
|
||||||
<file>res/ico_info.png</file>
|
<file>res/ico_info.png</file>
|
||||||
<file>res/ico_link.png</file>
|
<file>res/ico_link.png</file>
|
||||||
|
<file>res/ico_paste.png</file>
|
||||||
<file>res/ico_qt.png</file>
|
<file>res/ico_qt.png</file>
|
||||||
<file>res/ico_quit.png</file>
|
<file>res/ico_quit.png</file>
|
||||||
<file>res/logo.png</file>
|
<file>res/logo.png</file>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>720</width>
|
<width>800</width>
|
||||||
<height>384</height>
|
<height>384</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -160,7 +160,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>720</width>
|
<width>800</width>
|
||||||
<height>21</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -169,6 +169,9 @@
|
|||||||
<string>Application</string>
|
<string>Application</string>
|
||||||
</property>
|
</property>
|
||||||
<addaction name="actionOpen"/>
|
<addaction name="actionOpen"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionSave"/>
|
||||||
|
<addaction name="actionCopyToClipboard"/>
|
||||||
<addaction name="actionClear"/>
|
<addaction name="actionClear"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionExit"/>
|
<addaction name="actionExit"/>
|
||||||
@ -232,6 +235,9 @@
|
|||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionClear">
|
<action name="actionClear">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="../MediaInfoXP.qrc">
|
<iconset resource="../MediaInfoXP.qrc">
|
||||||
<normaloff>:/res/ico_clear.png</normaloff>:/res/ico_clear.png</iconset>
|
<normaloff>:/res/ico_clear.png</normaloff>:/res/ico_clear.png</iconset>
|
||||||
@ -249,6 +255,30 @@
|
|||||||
<string>MediaInfo Discussion (Doom9)</string>
|
<string>MediaInfo Discussion (Doom9)</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionCopyToClipboard">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../MediaInfoXP.qrc">
|
||||||
|
<normaloff>:/res/ico_paste.png</normaloff>:/res/ico_paste.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Copy to Clipboard</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionSave">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../MediaInfoXP.qrc">
|
||||||
|
<normaloff>:/res/ico_disk.png</normaloff>:/res/ico_disk.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save to File...</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>analyzeButton</tabstop>
|
<tabstop>analyzeButton</tabstop>
|
||||||
|
BIN
res/ico_disk.png
Normal file
BIN
res/ico_disk.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 620 B |
BIN
res/ico_paste.png
Normal file
BIN
res/ico_paste.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 605 B |
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
//Version
|
//Version
|
||||||
static unsigned int mixp_versionMajor = 2;
|
static unsigned int mixp_versionMajor = 2;
|
||||||
static unsigned int mixp_versionMinor = 0;
|
static unsigned int mixp_versionMinor = 1;
|
||||||
|
|
||||||
//MediaInfo Version
|
//MediaInfo Version
|
||||||
static unsigned int mixp_miVersionMajor = 0;
|
static unsigned int mixp_miVersionMajor = 0;
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include <QCloseEvent>
|
#include <QCloseEvent>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
|
#include <QClipboard>
|
||||||
|
|
||||||
//Win32
|
//Win32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
@ -79,6 +80,8 @@ CMainWindow::CMainWindow(const QString &tempFolder, QWidget *parent)
|
|||||||
//Setup connections
|
//Setup connections
|
||||||
connect(ui->analyzeButton, SIGNAL(clicked()), this, SLOT(analyzeButtonClicked()));
|
connect(ui->analyzeButton, SIGNAL(clicked()), this, SLOT(analyzeButtonClicked()));
|
||||||
connect(ui->actionOpen, SIGNAL(triggered()), this, SLOT(analyzeButtonClicked()));
|
connect(ui->actionOpen, SIGNAL(triggered()), this, SLOT(analyzeButtonClicked()));
|
||||||
|
connect(ui->actionSave, SIGNAL(triggered()), this, SLOT(saveButtonClicked()));
|
||||||
|
connect(ui->actionCopyToClipboard, SIGNAL(triggered()), this, SLOT(copyToClipboardButtonClicked()));
|
||||||
connect(ui->actionClear, SIGNAL(triggered()), this, SLOT(clearButtonClicked()));
|
connect(ui->actionClear, SIGNAL(triggered()), this, SLOT(clearButtonClicked()));
|
||||||
connect(ui->actionLink_MuldeR, SIGNAL(triggered()), this, SLOT(linkTriggered()));
|
connect(ui->actionLink_MuldeR, SIGNAL(triggered()), this, SLOT(linkTriggered()));
|
||||||
connect(ui->actionLink_MediaInfo, SIGNAL(triggered()), this, SLOT(linkTriggered()));
|
connect(ui->actionLink_MediaInfo, SIGNAL(triggered()), this, SLOT(linkTriggered()));
|
||||||
@ -86,6 +89,10 @@ CMainWindow::CMainWindow(const QString &tempFolder, QWidget *parent)
|
|||||||
connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(showAboutScreen()));
|
connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(showAboutScreen()));
|
||||||
ui->versionLabel->installEventFilter(this);
|
ui->versionLabel->installEventFilter(this);
|
||||||
|
|
||||||
|
//Context menu
|
||||||
|
ui->textBrowser->setContextMenuPolicy(Qt::ActionsContextMenu);
|
||||||
|
ui->textBrowser->insertActions(0, ui->menuFile->actions());
|
||||||
|
|
||||||
//Create label
|
//Create label
|
||||||
m_floatingLabel = new QLabel(ui->textBrowser);
|
m_floatingLabel = new QLabel(ui->textBrowser);
|
||||||
m_floatingLabel->setText(QString::fromLatin1(STATUS_BLNK));
|
m_floatingLabel->setText(QString::fromLatin1(STATUS_BLNK));
|
||||||
@ -93,12 +100,9 @@ CMainWindow::CMainWindow(const QString &tempFolder, QWidget *parent)
|
|||||||
m_floatingLabel->show();
|
m_floatingLabel->show();
|
||||||
SET_TEXT_COLOR(m_floatingLabel, Qt::darkGray);
|
SET_TEXT_COLOR(m_floatingLabel, Qt::darkGray);
|
||||||
SET_FONT_BOLD(m_floatingLabel, true);
|
SET_FONT_BOLD(m_floatingLabel, true);
|
||||||
|
m_floatingLabel->setContextMenuPolicy(Qt::ActionsContextMenu);
|
||||||
//Update font
|
m_floatingLabel->insertActions(0, ui->textBrowser->actions());
|
||||||
QFont font("Lucida Console");
|
|
||||||
font.setStyleHint(QFont::TypeWriter);
|
|
||||||
ui->textBrowser->setFont(font);
|
|
||||||
|
|
||||||
//Clear
|
//Clear
|
||||||
m_mediaInfoPath.clear();
|
m_mediaInfoPath.clear();
|
||||||
m_mediaInfoHandle = INVALID_HANDLE_VALUE;
|
m_mediaInfoHandle = INVALID_HANDLE_VALUE;
|
||||||
@ -237,6 +241,34 @@ void CMainWindow::analyzeButtonClicked(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMainWindow::saveButtonClicked(void)
|
||||||
|
{
|
||||||
|
const QString selectedFile = QFileDialog::getSaveFileName(this, tr("Select file to save..."), QString(), tr("Plain Text (*.txt)"));
|
||||||
|
if(!selectedFile.isEmpty())
|
||||||
|
{
|
||||||
|
QFile file(selectedFile);
|
||||||
|
if(file.open(QIODevice::WriteOnly | QIODevice::WriteOnly))
|
||||||
|
{
|
||||||
|
file.write(m_outputLines.join("\r\n").toUtf8());
|
||||||
|
file.close();
|
||||||
|
MessageBeep(MB_ICONINFORMATION);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QMessageBox::critical(this, tr("Failure"), tr("Error: Failed to open the file writing!"), QMessageBox::Ok);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMainWindow::copyToClipboardButtonClicked(void)
|
||||||
|
{
|
||||||
|
if(QClipboard *clipboard = QApplication::clipboard())
|
||||||
|
{
|
||||||
|
clipboard->setText(m_outputLines.join("\n"));
|
||||||
|
MessageBeep(MB_ICONINFORMATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CMainWindow::clearButtonClicked(void)
|
void CMainWindow::clearButtonClicked(void)
|
||||||
{
|
{
|
||||||
if(m_process)
|
if(m_process)
|
||||||
@ -247,30 +279,70 @@ void CMainWindow::clearButtonClicked(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Clear data and re-show banner
|
||||||
ui->textBrowser->clear();
|
ui->textBrowser->clear();
|
||||||
m_floatingLabel->setText(STATUS_BLNK);
|
m_floatingLabel->setText(STATUS_BLNK);
|
||||||
m_floatingLabel->show();
|
m_floatingLabel->show();
|
||||||
|
|
||||||
|
//Disable actions
|
||||||
|
ui->actionClear->setEnabled(false);
|
||||||
|
ui->actionCopyToClipboard->setEnabled(false);
|
||||||
|
ui->actionSave->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::outputAvailable(void)
|
void CMainWindow::outputAvailable(void)
|
||||||
{
|
{
|
||||||
if(m_process)
|
if(m_process)
|
||||||
{
|
{
|
||||||
|
bool bDataChanged = false;
|
||||||
|
|
||||||
|
//Update lines
|
||||||
while(m_process->canReadLine())
|
while(m_process->canReadLine())
|
||||||
{
|
{
|
||||||
|
bDataChanged = true;
|
||||||
|
QString line = QString::fromUtf8(m_process->readLine()).trimmed();
|
||||||
|
m_outputLines << line;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(bDataChanged)
|
||||||
|
{
|
||||||
|
//Hide banner
|
||||||
if(m_floatingLabel->isVisible()) m_floatingLabel->hide();
|
if(m_floatingLabel->isVisible()) m_floatingLabel->hide();
|
||||||
QString line = Qt::escape(QString::fromUtf8(m_process->readLine()).trimmed()).replace(' ', " ");
|
|
||||||
if(!(line.isEmpty() || line.contains(':'))) line = QString("<b>%1</b>").arg(line);
|
//Convert to HTML
|
||||||
ui->textBrowser->setHtml(m_output.append(line).append("<br>"));
|
QStringList htmlData(m_outputLines);
|
||||||
|
htmlData.replaceInStrings("<", "<", Qt::CaseInsensitive);
|
||||||
|
htmlData.replaceInStrings(">", ">", Qt::CaseInsensitive);
|
||||||
|
htmlData.replaceInStrings("\"", """, Qt::CaseInsensitive);
|
||||||
|
htmlData.replaceInStrings("&", "&", Qt::CaseInsensitive);
|
||||||
|
|
||||||
|
//Highlight headers
|
||||||
|
htmlData.replaceInStrings(QRegExp("^([^:]+):(.+)$"), "<font color=\"darkblue\">\\1:</font>\\2");
|
||||||
|
htmlData.replaceInStrings(QRegExp("^([^:]+)$"), "<b><font color=\"darkred\">\\1</font></b>");
|
||||||
|
|
||||||
|
//Update document
|
||||||
|
ui->textBrowser->setHtml(QString("<pre>%1</pre>").arg(htmlData.join("<br>")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::processFinished(void)
|
void CMainWindow::processFinished(void)
|
||||||
{
|
{
|
||||||
|
//Fetch any remaining data
|
||||||
outputAvailable();
|
outputAvailable();
|
||||||
|
|
||||||
|
//Enable actions
|
||||||
|
if(!m_outputLines.empty())
|
||||||
|
{
|
||||||
|
ui->actionClear->setEnabled(true);
|
||||||
|
ui->actionCopyToClipboard->setEnabled(true);
|
||||||
|
ui->actionSave->setEnabled(true);
|
||||||
|
}
|
||||||
|
ui->actionOpen->setEnabled(true);
|
||||||
ui->analyzeButton->setEnabled(true);
|
ui->analyzeButton->setEnabled(true);
|
||||||
ui->exitButton->setEnabled(true);
|
ui->exitButton->setEnabled(true);
|
||||||
|
|
||||||
|
//Scroll up
|
||||||
ui->textBrowser->verticalScrollBar()->setValue(0);
|
ui->textBrowser->verticalScrollBar()->setValue(0);
|
||||||
ui->textBrowser->horizontalScrollBar()->setValue(0);
|
ui->textBrowser->horizontalScrollBar()->setValue(0);
|
||||||
}
|
}
|
||||||
@ -298,7 +370,7 @@ void CMainWindow::showAboutScreen(void)
|
|||||||
text += QString().sprintf("<hr><br>");
|
text += QString().sprintf("<hr><br>");
|
||||||
text += QString().sprintf("This application is powered by MediaInfo v%u.%u.%02u<br>", mixp_miVersionMajor, mixp_miVersionMinor, mixp_miVersionPatch);
|
text += QString().sprintf("This application is powered by MediaInfo v%u.%u.%02u<br>", mixp_miVersionMajor, mixp_miVersionMinor, mixp_miVersionPatch);
|
||||||
text += QString().sprintf("Free and OpenSource tool for displaying technical information about media files.<br>");
|
text += QString().sprintf("Free and OpenSource tool for displaying technical information about media files.<br>");
|
||||||
text += QString().sprintf("Copyright (c) 2002-2013 MediaArea.net SARL. All rights reserved.<br><br>");
|
text += QString().sprintf("Copyright (c) 2002-%s MediaArea.net SARL. All rights reserved.<br><br>", &mixp_buildDate[7]);
|
||||||
text += QString().sprintf("Redistribution and use is permitted according to the (2-Clause) BSD License.<br>");
|
text += QString().sprintf("Redistribution and use is permitted according to the (2-Clause) BSD License.<br>");
|
||||||
text += QString().sprintf("Please see <a href=\"%s\">%s</a> for more information.<br></tt></nobr>", LINK_MEDIAINFO, LINK_MEDIAINFO);
|
text += QString().sprintf("Please see <a href=\"%s\">%s</a> for more information.<br></tt></nobr>", LINK_MEDIAINFO, LINK_MEDIAINFO);
|
||||||
|
|
||||||
@ -485,11 +557,15 @@ bool CMainWindow::analyzeFile(const QString &filePath)
|
|||||||
|
|
||||||
//Clear data
|
//Clear data
|
||||||
ui->textBrowser->clear();
|
ui->textBrowser->clear();
|
||||||
m_output.clear();
|
m_outputLines.clear();
|
||||||
|
|
||||||
//Disable buttons
|
//Disable buttons
|
||||||
ui->analyzeButton->setEnabled(false);
|
ui->analyzeButton->setEnabled(false);
|
||||||
ui->exitButton->setEnabled(false);
|
ui->exitButton->setEnabled(false);
|
||||||
|
ui->actionClear->setEnabled(false);
|
||||||
|
ui->actionCopyToClipboard->setEnabled(false);
|
||||||
|
ui->actionSave->setEnabled(false);
|
||||||
|
ui->actionOpen->setEnabled(false);
|
||||||
|
|
||||||
//Show banner
|
//Show banner
|
||||||
m_floatingLabel->show();
|
m_floatingLabel->show();
|
||||||
@ -515,6 +591,7 @@ bool CMainWindow::analyzeFile(const QString &filePath)
|
|||||||
{
|
{
|
||||||
QMessageBox::critical(this, tr("Failure"), tr("Error: Failed to create MediaInfo process!"), QMessageBox::Ok);
|
QMessageBox::critical(this, tr("Failure"), tr("Error: Failed to create MediaInfo process!"), QMessageBox::Ok);
|
||||||
m_floatingLabel->hide();
|
m_floatingLabel->hide();
|
||||||
|
ui->actionOpen->setEnabled(true);
|
||||||
ui->analyzeButton->setEnabled(true);
|
ui->analyzeButton->setEnabled(true);
|
||||||
ui->exitButton->setEnabled(true);
|
ui->exitButton->setEnabled(true);
|
||||||
return false;
|
return false;
|
||||||
|
@ -43,6 +43,8 @@ public:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void analyzeButtonClicked(void);
|
void analyzeButtonClicked(void);
|
||||||
|
void saveButtonClicked(void);
|
||||||
|
void copyToClipboardButtonClicked(void);
|
||||||
void clearButtonClicked(void);
|
void clearButtonClicked(void);
|
||||||
void outputAvailable(void);
|
void outputAvailable(void);
|
||||||
void processFinished(void);
|
void processFinished(void);
|
||||||
@ -68,7 +70,7 @@ private:
|
|||||||
QProcess *m_process;
|
QProcess *m_process;
|
||||||
QLabel *m_floatingLabel;
|
QLabel *m_floatingLabel;
|
||||||
QString m_droppedFile;
|
QString m_droppedFile;
|
||||||
QString m_output;
|
QStringList m_outputLines;
|
||||||
|
|
||||||
QDate getBuildDate(void);
|
QDate getBuildDate(void);
|
||||||
QString getMediaInfoPath(void);
|
QString getMediaInfoPath(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user