223 lines
5.1 KiB
C++
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);
|
|
}
|