JobCrossingChecker: react to session loaded and job changed

- Add context menu
This commit is contained in:
Filippo Gentile 2022-11-02 22:02:03 +01:00
parent 1b65e413de
commit f60f9ed11d
2 changed files with 67 additions and 3 deletions

View File

@ -5,12 +5,21 @@
#include "jobcrossingtask.h"
#include "jobcrossingmodel.h"
#include "app/session.h"
#include "viewmanager/viewmanager.h"
#include "utils/owningqpointer.h"
#include <QMenu>
JobCrossingChecker::JobCrossingChecker(sqlite3pp::database &db, QObject *parent) :
IBackgroundChecker(db, parent)
IBackgroundChecker(db, parent),
mDb(db)
{
eventType = int(JobCrossingResultEvent::_Type);
errorsModel = new JobCrossingModel(this);
connect(Session, &MeetingSession::jobChanged, this, &JobCrossingChecker::onJobChanged);
connect(Session, &MeetingSession::jobRemoved, this, &JobCrossingChecker::onJobRemoved);
}
QString JobCrossingChecker::getName() const
@ -25,7 +34,35 @@ void JobCrossingChecker::clearModel()
void JobCrossingChecker::showContextMenu(QWidget *panel, const QPoint &pos, const QModelIndex &idx) const
{
//TODO
const JobCrossingModel *model = static_cast<const JobCrossingModel *>(errorsModel);
auto item = model->getItem(idx);
if(!item)
return;
OwningQPointer<QMenu> menu = new QMenu(panel);
QAction *showInJobEditor = new QAction(tr("Show in Job Editor"), menu);
QAction *showInGraph = new QAction(tr("Show in graph"), menu);
menu->addAction(showInJobEditor);
menu->addAction(showInGraph);
QAction *act = menu->exec(pos);
if(act == showInJobEditor)
{
Session->getViewManager()->requestJobEditor(item->jobId, item->stopId);
}
else if(act == showInGraph)
{
//TODO: pass stopId
Session->getViewManager()->requestJobSelection(item->jobId, true, true);
}
}
void JobCrossingChecker::sessionLoadedHandler()
{
if(AppSettings.getCheckCrossingWhenOpeningDB())
startWorker();
}
IQuittableTask *JobCrossingChecker::createMainWorker()
@ -43,4 +80,20 @@ void JobCrossingChecker::setErrors(QEvent *e, bool merge)
model->setErrors(ev->results);
}
void JobCrossingChecker::onJobChanged(db_id newJobId, db_id oldJobId)
{
auto model = static_cast<JobCrossingModel *>(errorsModel);
model->renameJob(oldJobId, newJobId);
//After renaming check job
if(AppSettings.getCheckCrossingOnJobEdit())
startWorker();
}
void JobCrossingChecker::onJobRemoved(db_id jobId)
{
auto model = static_cast<JobCrossingModel *>(errorsModel);
model->removeJob(jobId);
}
#endif // ENABLE_BACKGROUND_MANAGER

View File

@ -5,6 +5,8 @@
#include "backgroundmanager/ibackgroundchecker.h"
#include "utils/types.h"
class JobCrossingChecker : public IBackgroundChecker
{
public:
@ -14,9 +16,18 @@ public:
void clearModel() override;
void showContextMenu(QWidget *panel, const QPoint& pos, const QModelIndex& idx) const override;
void sessionLoadedHandler() override;
protected:
IQuittableTask *createMainWorker() override;
void setErrors(QEvent *e, bool merge) override;
private slots:
void onJobChanged(db_id newJobId, db_id oldJobId);
void onJobRemoved(db_id jobId);
private:
sqlite3pp::database &mDb;
};
#endif // ENABLE_BACKGROUND_MANAGER