#include "DetailedTown.h" #include #include #include #include #include #include #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(m_current)); } DetailedTown::~DetailedTown() { delete ui; } void DetailedTown::SetCurrent(DetailedType dt) { if (ShowIndex(dt)) { m_current = static_cast(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(last))) { m_current = last; } } void DetailedTown::OnShowNext() { MainWindow::Get().PlayAudio(); int next = m_current + 1; if (ShowIndex(static_cast(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(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(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); }