code_app/app/scanner2/dialog_fullscreen.cpp

215 lines
5.9 KiB
C++
Raw Normal View History

2022-05-03 10:25:52 +00:00
#include "dialog_fullscreen.h"
#include "ui_dialog_fullscreen.h"
#include "mainwindow.h"
#include "imgfmt/HGPdf.h"
#include "imgfmt/HGImgFmt.h"
#include "HGUIGlobal.h"
#include <assert.h>
2022-05-03 10:25:52 +00:00
Dialog_FullScreen::Dialog_FullScreen(class MainWindow *mainWidget, const QStringList &fileNames, int currIndex, int multiIndex)
: QDialog(nullptr)
, ui(new Ui::Dialog_FullScreen)
, m_mainWidget(mainWidget)
, m_fileNames(fileNames)
, m_currFilePath("")
, m_currIndex(currIndex)
, m_multiPageCount(0)
, m_multiIndex(multiIndex)
, m_pa_contrlWidget(new QPropertyAnimation(&m_effect_contrlWidget, "opacity", this))
, m_pa_text(new QPropertyAnimation(&m_effect_exit, "opacity", this))
{
ui->setupUi(this);
QFont font;
font.setFamily("微软雅黑");
2023-02-02 09:28:40 +00:00
font.setPointSize(35);//文字大小
font.setBold(true);//粗体
ui->btn_exit->setFont(font);
ui->btn_exit->setText(tr("Exit fullscreen"));
ui->btn_exit->setStyleSheet("color: rgb(255, 255, 255); background-color: rgb(0, 0, 0);");
2022-05-03 10:25:52 +00:00
connect(&m_timer_hide, SIGNAL(timeout()), this, SLOT(on_hide()));
connect(ui->view, SIGNAL(escape()), this, SLOT(on_escape()));
connect(ui->view, SIGNAL(mousePos(int, int)), this, SLOT(on_mousePos(int, int)));
this->setWindowFlags(Qt::FramelessWindowHint);
this->setWindowState(Qt::WindowFullScreen);
this->showFullScreen();
ui->view->setFocus();
m_pa_contrlWidget->setStartValue(0.7);
m_pa_contrlWidget->setEndValue(0.0);
m_pa_contrlWidget->setDuration(4000);
m_pa_text->setStartValue(0.7);
m_pa_text->setEndValue(0.0);
m_pa_text->setDuration(4000);
if (m_fileNames.count() > 0)
{
if (-1 != m_currIndex)
{
assert(-1 != m_multiIndex);
m_currFilePath = m_fileNames.at(m_currIndex);
m_multiPageCount = getMultiPageCount();
}
else
{
assert(-1 == m_multiIndex);
}
}
else
{
assert(-1 == m_currIndex && -1 == m_multiIndex);
}
showImage();
}
Dialog_FullScreen::~Dialog_FullScreen()
{
delete ui;
}
void Dialog_FullScreen::showImage()
{
if (-1 != m_currIndex && -1 != m_multiIndex)
{
assert(!m_currFilePath.isEmpty());
HGImage img = nullptr;
HGImgFmtReader imgFmtReader = nullptr;
HGImgFmt_OpenImageReader(getStdString(m_currFilePath).c_str(), 0, &imgFmtReader);
if (nullptr != imgFmtReader)
{
HGImgFmt_LoadImageFromReader(imgFmtReader, (HGUInt)m_multiIndex, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
HGImgFmt_CloseImageReader(imgFmtReader);
}
2022-05-03 10:25:52 +00:00
if (nullptr != img)
{
ui->view->addImage(img);
HGBase_DestroyImage(img);
}
else
{
ui->view->clearImage();
}
}
setBtnOpacity(0.7);
setBtnEnable();
}
int Dialog_FullScreen::getMultiPageCount()
{
assert(-1 != m_currIndex);
assert(!m_currFilePath.isEmpty());
int count = 0;
HGImgFmtReader imgFmtReader = nullptr;
HGImgFmt_OpenImageReader(getStdString(m_currFilePath).c_str(), 0, &imgFmtReader);
if (nullptr != imgFmtReader)
{
HGImgFmt_GetImagePageCount(imgFmtReader, (HGUInt *)&count);
HGImgFmt_CloseImageReader(imgFmtReader);
}
return count;
}
void Dialog_FullScreen::on_btn_exit_clicked()
{
m_mainWidget->exitFullScreen();
}
void Dialog_FullScreen::on_btn_prePage_clicked()
{
if (m_fileNames.size() > 0 && (-1 == m_currIndex || m_currIndex > 0))
{
if (-1 == m_currIndex)
m_currIndex = 0;
else if (m_currIndex > 0)
--m_currIndex;
m_currFilePath = m_fileNames.at(m_currIndex);
m_multiPageCount = getMultiPageCount();
m_multiIndex = 0;
showImage();
}
}
void Dialog_FullScreen::on_btn_nextPage_clicked()
{
if (m_fileNames.size() > 0 && (-1 == m_currIndex || m_currIndex < m_fileNames.size() - 1))
{
if (-1 == m_currIndex)
m_currIndex = 0;
else if (m_currIndex < m_fileNames.size() - 1)
++m_currIndex;
m_currFilePath = m_fileNames.at(m_currIndex);
m_multiPageCount = getMultiPageCount();
m_multiIndex = 0;
showImage();
}
}
void Dialog_FullScreen::on_btn_pre_clicked()
{
if (-1 != m_currIndex && m_multiPageCount > 0 && m_multiIndex > 0)
{
--m_multiIndex;
showImage();
}
}
void Dialog_FullScreen::on_btn_next_clicked()
{
if (-1 != m_currIndex && m_multiPageCount > 0 && m_multiIndex != -1 && m_multiIndex < m_multiPageCount - 1)
{
++m_multiIndex;
showImage();
}
}
void Dialog_FullScreen::on_hide()
{
m_pa_contrlWidget->start();
m_pa_text->start();
}
void Dialog_FullScreen::on_escape()
{
m_mainWidget->exitFullScreen();
}
void Dialog_FullScreen::on_mousePos(int x, int y)
{
(void)x;
(void)y;
setBtnOpacity(0.7);
}
void Dialog_FullScreen::setBtnOpacity(qreal opacity)
{
m_effect_contrlWidget.setOpacity(opacity);
ui->contrlWidget->setGraphicsEffect(&m_effect_contrlWidget);
m_effect_exit.setOpacity(opacity);
ui->btn_exit->setGraphicsEffect(&m_effect_exit);
m_pa_contrlWidget->stop();
m_pa_text->stop();
m_timer_hide.setSingleShot(true); //设置按钮显示计时为单次触发模式
m_timer_hide.start(1000); //设置按钮1秒后开始淡化
}
void Dialog_FullScreen::setBtnEnable()
{
ui->btn_prePage->setEnabled(m_fileNames.size() > 0 && (-1 == m_currIndex || m_currIndex > 0));
ui->btn_nextPage->setEnabled(m_fileNames.size() > 0 && (-1 == m_currIndex || m_currIndex < m_fileNames.size() - 1));
ui->btn_pre->setEnabled(-1 != m_currIndex && m_multiPageCount > 0 && m_multiIndex > 0);
ui->btn_next->setEnabled(-1 != m_currIndex && m_multiPageCount > 0 && m_multiIndex != -1 && m_multiIndex < m_multiPageCount - 1);
ui->btn_exit->setEnabled(true);
}