atrooney-online-2/src/aoevidencebutton.cpp
oldmud0 d27501313c Finish mounting feature
To pull this one off, a new class called VPath was created that denotes
"virtual" paths that can exist anywhere among the list of mount points.
It is functionally identical to QString, except that implicit conversion
between QString and VPath is not allowed. This makes it easy to spot
errors in path resolution at compile time, since get_real_path must be
called to resolve a VPath into an absolute path that can be passed into
a Qt function as a QString.

Other functions, such as the get_*_suffix functions, also return an
absolute path QString for convenience.

As for the rest of the functions that return a VPath, you will need to
call get_real_path yourself.

Finally, a path resolution cache was added to try to avoid blowing
up what is already a massive lookup cost for assets. The cache
is invalidated when the mount path list is changed.

Currently, this cache isn't bounded. Might need to write an LRU cache
if issues arise.
2021-06-05 14:58:40 -05:00

124 lines
3.1 KiB
C++

#include "aoevidencebutton.h"
#include "file_functions.h"
AOEvidenceButton::AOEvidenceButton(QWidget *p_parent, AOApplication *p_ao_app,
int p_x, int p_y, int p_w, int p_h)
: QPushButton(p_parent)
{
ao_app = p_ao_app;
m_parent = p_parent;
ui_selected = new AOImage(this, ao_app);
ui_selected->resize(p_w, p_h);
// ui_selected->move(p_x, p_y);
ui_selected->set_image("evidence_selected");
ui_selected->setAttribute(Qt::WA_TransparentForMouseEvents);
ui_selected->hide();
ui_selector = new AOImage(this, ao_app);
ui_selector->resize(p_w, p_h);
// ui_selector->move(p_x - 1, p_y - 1);
ui_selector->set_image("evidence_selector");
ui_selector->setAttribute(Qt::WA_TransparentForMouseEvents);
ui_selector->hide();
this->move(p_x, p_y);
this->resize(p_w, p_h);
// this->setAcceptDrops(true);
connect(this, SIGNAL(clicked()), this, SLOT(on_clicked()));
}
void AOEvidenceButton::set_image(QString p_image)
{
QString image_path = ao_app->get_real_path(ao_app->get_evidence_path(p_image));
if (file_exists(p_image)) {
this->setText("");
this->setStyleSheet(
"QPushButton { border-image: url(\"" + p_image +
"\") 0 0 0 0 stretch stretch; }"
"QToolTip { color: #000000; background-color: #ffffff; border: 0px; }");
}
else if (file_exists(image_path)) {
this->setText("");
this->setStyleSheet(
"QPushButton { border-image: url(\"" + image_path +
"\") 0 0 0 0 stretch stretch; }"
"QToolTip { color: #000000; background-color: #ffffff; border: 0px; }");
}
else {
this->setText(p_image);
this->setStyleSheet("QPushButton { border-image: url(); }"
"QToolTip { background-image: url(); color: #000000; "
"background-color: #ffffff; border: 0px; }");
}
}
void AOEvidenceButton::set_theme_image(QString p_image)
{
QString theme_image_path = ao_app->get_real_path(
ao_app->get_theme_path(p_image));
QString default_image_path = ao_app->get_real_path(
ao_app->get_theme_path(p_image, ao_app->default_theme));
QString final_image_path;
if (file_exists(theme_image_path))
final_image_path = theme_image_path;
else
final_image_path = default_image_path;
this->set_image(final_image_path);
}
void AOEvidenceButton::set_selected(bool p_selected)
{
if (p_selected)
ui_selected->show();
else
ui_selected->hide();
}
void AOEvidenceButton::on_clicked() { evidence_clicked(m_id); }
void AOEvidenceButton::mouseDoubleClickEvent(QMouseEvent *e)
{
QPushButton::mouseDoubleClickEvent(e);
evidence_double_clicked(m_id);
}
/*
void AOEvidenceButton::dragLeaveEvent(QMouseEvent *e)
{
//QWidget::dragLeaveEvent(e);
qDebug() << "drag leave event";
}
void AOEvidenceButton::dragEnterEvent(QMouseEvent *e)
{
//QWidget::dragEnterEvent(e);
qDebug() << "drag enter event";
}
*/
void AOEvidenceButton::enterEvent(QEvent *e)
{
ui_selector->show();
on_hover(m_id, true);
setFlat(false);
QPushButton::enterEvent(e);
}
void AOEvidenceButton::leaveEvent(QEvent *e)
{
ui_selector->hide();
on_hover(m_id, false);
QPushButton::leaveEvent(e);
}