culturered_client/TouchScreen/DetailedTown.cpp
2024-09-07 11:34:44 +08:00

223 lines
5.1 KiB
C++

#include "DetailedTown.h"
#include <QApplication>
#include <QDir>
#include <QFileInfoList>
#include <QFileInfo>
#include <QStringList>
#include <QKeyEvent>
#include "MainWindow.h"
#include "DetailedWidget/MatianWidget.h"
#include "DetailedWidget/YangjiaoWidget.h"
#include "DetailedWidget/HanwangWidget.h"
#include "DetailedWidget/QinquanWidget.h"
#include "DetailedWidget/GuaierWidget.h"
#include "DetailedWidget/ShixiaWidget.h"
#include "DetailedWidget/LiaoyangWidget.h"
#include "DetailedWidget/TongyuWidget.h"
#include "ui_DetailedTown.h"
DetailedTown::DetailedTown(MainWindow *parent) :
PageBaseWidget(parent),
ui(new Ui::DetailedTown)
{
ui->setupUi(this);
connect(ui->btn_last, &QPushButton::clicked, this, &DetailedTown::OnShowLast);
connect(ui->btn_return, &QPushButton::clicked, this, &DetailedTown::OnEnterHome);
connect(ui->btn_next, &QPushButton::clicked, this, &DetailedTown::OnShowNext);
InitDetailedWidget();
InitLastNextButton();
InitSequenceFrame();
ShowIndex(static_cast<DetailedType>(m_current));
}
DetailedTown::~DetailedTown()
{
delete ui;
}
void DetailedTown::SetCurrent(DetailedType dt) {
if (ShowIndex(dt)) {
m_current = static_cast<int32_t>(dt);
}
}
void DetailedTown::SetSequencePos(const QPoint& pos) {
if (nullptr == sequenceFrame_) {
qDebug() << __func__ << "sequenceFrame_ is nullptr";
return;
}
//if (pos == QPoint(0, 0)) {
// return;
//}
sequenceFrame_->move(pos);
sequenceFrame_->show();
}
void DetailedTown::keyPressEvent(QKeyEvent* event) {
return;
QPoint pos = sequenceFrame_->pos();
if (event->key() == Qt::Key_A) {
pos += QPoint(-1, 0);
} else if (event->key() == Qt::Key_D) {
pos += QPoint(1, 0);
} else if (event->key() == Qt::Key_W) {
pos += QPoint(0, -1);
} else if (event->key() == Qt::Key_S) {
pos += QPoint(0, +1);
} else if (event->key() == Qt::Key_T) {
MainWindow::Get().SaveConfig();
return;
} else if (event->key() == Qt::Key_Y) {
keyYPressed = true;
}
sequenceFrame_->move(pos);
if (nullptr != currentMediaInfo_) {
currentMediaInfo_->landmark = pos;
}
}
void DetailedTown::keyReleaseEvent(QKeyEvent* event) {
return;
keyYPressed = false;
}
void DetailedTown::mouseReleaseEvent(QMouseEvent* event) {
return;
if (!keyYPressed) {
return;
}
sequenceFrame_->move(event->pos() - QPoint(130, 152));
}
void DetailedTown::OnShowLast() {
MainWindow::Get().PlayAudio();
int last = m_current - 1;
if (ShowIndex(static_cast<DetailedType>(last))) {
m_current = last;
}
}
void DetailedTown::OnShowNext() {
MainWindow::Get().PlayAudio();
int next = m_current + 1;
if (ShowIndex(static_cast<DetailedType>(next))) {
m_current = next;
}
}
void DetailedTown::OnEnterHome() {
MainWindow::Get().PlayAudio();
MainWindow* mainWindow = GetParentWidget();
if (nullptr == mainWindow) {
qDebug() << __FUNCTION__ << "widget is nullptr";
return;
}
mainWindow->SwitchToPage(PageBaseWidget::PageType::PT_HomeWidget);
}
void DetailedTown::InitDetailedWidget() {
DetailedBaseWidget* widget = new MatianWidget(this);
AddDetailedWidget(widget);
widget = new YangjiaoWidget(this);
AddDetailedWidget(widget);
widget = new HanwangWidget(this);
AddDetailedWidget(widget);
widget = new QinquanWidget(this);
AddDetailedWidget(widget);
widget = new GuaierWidget(this);
AddDetailedWidget(widget);
widget = new ShixiaWidget(this);
AddDetailedWidget(widget);
widget = new LiaoyangWidget(this);
AddDetailedWidget(widget);
widget = new TongyuWidget(this);
AddDetailedWidget(widget);
}
void DetailedTown::InitLastNextButton() {
m_current = 0;
ui->btn_last->hide();
ui->btn_next->hide();
if (!(static_cast<int>(m_detailedBaseWidgets.size()) > m_current)) {
ui->btn_next->show();
}
}
void DetailedTown::InitSequenceFrame() {
const QString landmarkPath = QApplication::applicationDirPath() + "/sequence/landmark";
QStringList pngFileList;
QDir directory(landmarkPath);
if (!directory.exists()) {
qDebug() << "Directory does not exist: " << landmarkPath;
return;
}
QFileInfoList entries = directory.entryInfoList(QStringList() << "*.png", QDir::Files | QDir::NoDotAndDotDot);
for (const QFileInfo& entry : entries) {
QString filePath = entry.absoluteFilePath();
pngFileList.append(filePath);
}
sequenceFrame_ = new SequenceFrame(pngFileList, this);
sequenceFrame_->raise();
sequenceFrame_->setGeometry(0, 0, 260, 260);
sequenceFrame_->move(752, 501);
sequenceFrame_->hide();
}
bool DetailedTown::ShowIndex(DetailedType dt) {
if (nullptr != sequenceFrame_) {
sequenceFrame_->hide();
}
if (!m_detailedBaseWidgets.contains(dt)) {
return false;
}
for (auto item : m_detailedBaseWidgets) {
if (dt == item->GetDetailedType()) {
item->show();
}
else {
item->hide();
}
}
int32_t index = static_cast<int32_t>(dt);
if (0 == index) {
ui->btn_last->hide();
}
else {
ui->btn_last->show();
}
if (m_detailedBaseWidgets.size() > index + 1) {
ui->btn_next->show();
}
else {
ui->btn_next->hide();
}
return true;
}
void DetailedTown::AddDetailedWidget(DetailedBaseWidget* widget) {
m_detailedBaseWidgets.insert(widget->GetDetailedType(), widget);
ui->mainLayout->addWidget(widget);
}