/**************************************************************************
Copyright (C) 2016 Arnaud Champenois arthelion@free.fr
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 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <windows.h>
#include <winbase.h>
#include "kernel.hpp"
#include <QInputDialog>
#include "about.h"
#include "toastdialog.h"
#include "managetemplatelist.h"
#include <QMessageBox>
#include <QClipboard>
#include <QRegExp>
using kernel::FileNameString;
void MainWindow::on_actionQuitter_triggered()
{
QCoreApplication * anApptPt = QCoreApplication::instance ();
anApptPt->exit();
}
void MainWindow::on_actionOuvrir_triggered()
{
QString aFileName = QFileDialog::getOpenFileName(this,
tr("Open video file"),
mInputFileName,
tr("MPEG stream files (*.ts *.m2ts *.mpeg2ts)"));
Open(aFileName);
}
void MainWindow::on_actionDetect_Segments_triggered()
{
guessLogoAndSearch();
}
void MainWindow::on_actionSave_selection_triggered()
{
if(!mDecoderPt) return;
QList<VideoSegment> aList = ui->RegionList->GetSelectedItems();
if(aList.empty()) return;
FileNameString aFileNameString(mLastOutputFile);
int segmentNum = 1;
if(!mMergeRegions)
{
aFileNameString.AppendBaseFileName(QString("_%1").arg(segmentNum++,2,10,QLatin1Char('0')));
}
int fileNumber = aFileNameString.GetNumber();
QFile aFile(aFileNameString.GetPath(fileNumber));
while(aFile.exists()) {
fileNumber++;
aFile.setFileName(aFileNameString.GetPath(fileNumber));
}
// Je le remets sans l'éventuel compteur de régions
aFileNameString = mLastOutputFile;
aFile.setFileName(aFileNameString.GetPath(fileNumber));
QString aFileName = QFileDialog::getSaveFileName(this,
tr("OuputFileName"),
aFile.fileName(),
tr("Video stream (*.ts)"));
if(aFileName.isEmpty()) return;
aFile.setFileName(aFileName);
mLastOutputFile = aFile.fileName();
saveSegmentsToVideoFile(aFileName,aList);
}
void MainWindow::on_actionAbout_VidePub_triggered()
{
About anAbout(this);
anAbout.exec();
}
void MainWindow::on_actionZoom_plus_triggered()
{
if(!mDecoderPt) return;
ui->actionZoom_plus->setEnabled(ui->VideoFrame->IncZoom());
ui->actionZoom_moins->setEnabled(true);
}
void MainWindow::on_actionZoom_moins_triggered()
{
if(!mDecoderPt) return;
ui->actionZoom_moins->setEnabled(ui->VideoFrame->DecZoom());
ui->actionZoom_plus->setEnabled(true);
}
void MainWindow::on_actionZoom_1_triggered()
{
if(!mDecoderPt) return;
ui->VideoFrame->SetZoom(1.0);
ui->actionZoom_moins->setEnabled(true);
ui->actionZoom_plus->setEnabled(true);
}
void MainWindow::on_actionClose_triggered()
{
Close();
}
void MainWindow::on_actionHelp_triggered()
{
QString anHelpFile = QDir::current().absolutePath();
anHelpFile += "/VidePub.pdf";
ShellExecuteA(NULL,"open",anHelpFile.toLocal8Bit(),0,0,SW_NORMAL);
}
void MainWindow::on_actionManage_stored_icons_triggered()
{
ManageTemplateList templateList(this);
templateList.setModal(true);
templateList.exec();
}
void MainWindow::on_actionSaveCurrentIcon_triggered()
{
if(mLogo.isNull()) return;
QString name = QInputDialog::getText(this,tr("Save logo"),tr("Name :"));
if(name.isEmpty()) return;
LogoTemplate tmpl(mLogo,name,mLogoRect,mInverseLogo,mMarginBefore,mMarginAfter);
LogoTemplate::write(tmpl);
}
void MainWindow::on_actionMerge_selected_region_triggered()
{
mMergeRegions = !mMergeRegions;
}
void MainWindow::on_actionAddSegment_triggered()
{
VPosition aPos = mDecoderPt->GetPosition();
VPosition anEnd = aPos+mDecoderPt->GetVPosition(theSecondMS);
ui->RegionList->AddNewRegion(aPos,anEnd);
}
void MainWindow::on_actionRemoveSegment_triggered()
{
ui->RegionList->DeleteSelection();
}
void MainWindow::on_actionSetBeginning_triggered()
{
VPosition aPos = mDecoderPt->GetPosition();
ui->RegionList->SetSelectionBegin(aPos);
}
void MainWindow::on_actionMergeSegment_triggered()
{
ui->RegionList->MergeSelection();
}
void MainWindow::on_actionSetEnd_triggered()
{
VPosition aPos = mDecoderPt->GetPosition();
ui->RegionList->SetSelectionEnd(aPos);
}
void MainWindow::on_actionGotoToBeginning_triggered()
{
VideoSegment aSegment;
if(!ui->RegionList->GetSelection(aSegment)) return;
mDecoderPt->SeekPosition(aSegment.mBegin.mFilePos);
ShowNextFrame();
}
void MainWindow::on_actionGoToEnd_triggered()
{
VideoSegment aSegment;
if(!ui->RegionList->GetSelection(aSegment)) return;
mDecoderPt->SeekPosition(aSegment.mEnd.mFilePos);
ShowNextFrame();
}
void MainWindow::on_actionCreateFromText_triggered()
{
bool ok;
QClipboard *clipboard = QApplication::clipboard();
QString text = clipboard->text();
if(segmentRegExp.indexIn(text) == -1)
text = "";
text = QInputDialog::getText(this, tr("Input segments"),
tr("Segments hh:mm:ss.sss-hh:mm:ss.sss(,...) :"), QLineEdit::Normal,
text, &ok);
if(!ok)
return;
createSegmentsFromText(text);
}
void MainWindow::on_actionCopySelection_triggered()
{
QList<VideoSegment> list = ui->RegionList->GetSelectedItems();
QString text;
for(VideoSegment &seg:list){
if(!text.isEmpty())
text += ",";
text += seg.GetMsString();
}
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(text);
ToastDialog(tr("Data copied to clipboard"));
}