KiCad PCB EDA Suite
Loading...
Searching...
No Matches
job_dispatcher.cpp
Go to the documentation of this file.
1
/*
2
* This program source code file is part of KiCad, a free EDA CAD application.
3
*
4
* Copyright (C) 2022 Mark Roszko <
[email protected]
>
5
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6
*
7
* This program is free software: you can redistribute it and/or modify it
8
* under the terms of the GNU General Public License as published by the
9
* Free Software Foundation, either version 3 of the License, or (at your
10
* option) any later version.
11
*
12
* This program is distributed in the hope that it will be useful, but
13
* WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License along
18
* with this program. If not, see <http://www.gnu.org/licenses/>.
19
*/
20
21
#include <
cli/exit_codes.h
>
22
#include <
jobs/job_dispatcher.h
>
23
#include <
reporter.h
>
24
#include <wx/debug.h>
25
26
class
wxWindow;
27
28
JOB_DISPATCHER::JOB_DISPATCHER
(
KIWAY
* aKiway ) :
29
m_kiway
( aKiway )
30
{
31
m_reporter
= &
NULL_REPORTER::GetInstance
();
32
m_progressReporter
=
nullptr
;
33
}
34
35
36
void
JOB_DISPATCHER::Register
(
const
std::string& aJobTypeName,
37
std::function<
int
(
JOB
* job )> aHandler,
38
std::function<
bool
(
JOB
* aJob, wxWindow* aParent )> aConfigHandler )
39
{
40
m_jobHandlers
.emplace( aJobTypeName, aHandler );
41
m_jobConfigHandlers
.emplace( aJobTypeName, aConfigHandler );
42
}
43
44
45
int
JOB_DISPATCHER::RunJob
(
JOB
* job,
REPORTER
* aReporter,
PROGRESS_REPORTER
* aProgressReporter )
46
{
47
int
result
=
CLI::EXIT_CODES::ERR_UNKNOWN
;
48
REPORTER
* existingReporter =
m_reporter
;
49
50
if
( aReporter )
51
m_reporter
= aReporter;
52
53
m_progressReporter
= aProgressReporter;
54
55
job->
ClearExistingOutputs
();
56
57
if
(
m_jobHandlers
.count( job->
GetType
() ) )
58
result
=
m_jobHandlers
[job->
GetType
()]( job );
59
60
m_reporter
= existingReporter;
61
62
return
result
;
63
}
64
65
66
bool
JOB_DISPATCHER::HandleJobConfig
(
JOB
* job, wxWindow* aParent )
67
{
68
if
(
m_jobConfigHandlers
.count( job->
GetType
() ) )
69
{
70
return
m_jobConfigHandlers
[job->
GetType
()]( job, aParent );
71
}
72
73
return
false
;
74
}
75
76
77
void
JOB_DISPATCHER::SetReporter
(
REPORTER
* aReporter )
78
{
79
wxCHECK( aReporter !=
nullptr
,
/*void*/
);
80
m_reporter
= aReporter;
81
}
82
83
84
void
JOB_DISPATCHER::SetProgressReporter
(
PROGRESS_REPORTER
* aReporter )
85
{
86
wxCHECK( aReporter !=
nullptr
,
/*void*/
);
87
m_progressReporter
= aReporter;
88
}
JOB_DISPATCHER::SetReporter
void SetReporter(REPORTER *aReporter)
Definition
job_dispatcher.cpp:77
JOB_DISPATCHER::Register
void Register(const std::string &aJobTypeName, std::function< int(JOB *job)> aHandler, std::function< bool(JOB *job, wxWindow *aParent)> aConfigHandler)
Definition
job_dispatcher.cpp:36
JOB_DISPATCHER::JOB_DISPATCHER
JOB_DISPATCHER(KIWAY *aKiway)
Definition
job_dispatcher.cpp:28
JOB_DISPATCHER::RunJob
int RunJob(JOB *aJob, REPORTER *aReporter, PROGRESS_REPORTER *aProgressReporter)
Definition
job_dispatcher.cpp:45
JOB_DISPATCHER::HandleJobConfig
bool HandleJobConfig(JOB *aJob, wxWindow *aParent)
Definition
job_dispatcher.cpp:66
JOB_DISPATCHER::m_progressReporter
PROGRESS_REPORTER * m_progressReporter
Definition
job_dispatcher.h:50
JOB_DISPATCHER::m_jobConfigHandlers
std::map< std::string, std::function< bool(JOB *job, wxWindow *aParent)> > m_jobConfigHandlers
Definition
job_dispatcher.h:55
JOB_DISPATCHER::m_kiway
KIWAY * m_kiway
Definition
job_dispatcher.h:48
JOB_DISPATCHER::m_reporter
REPORTER * m_reporter
Definition
job_dispatcher.h:49
JOB_DISPATCHER::m_jobHandlers
std::map< std::string, std::function< int(JOB *job)> > m_jobHandlers
Definition
job_dispatcher.h:53
JOB_DISPATCHER::SetProgressReporter
void SetProgressReporter(PROGRESS_REPORTER *aReporter)
Definition
job_dispatcher.cpp:84
JOB
An simple container class that lets us dispatch output jobs to kifaces.
Definition
job.h:183
JOB::GetType
const std::string & GetType() const
Definition
job.h:194
JOB::ClearExistingOutputs
void ClearExistingOutputs()
Definition
job.h:213
KIWAY
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition
kiway.h:286
NULL_REPORTER::GetInstance
static REPORTER & GetInstance()
Definition
reporter.cpp:96
PROGRESS_REPORTER
A progress reporter interface for use in multi-threaded environments.
Definition
progress_reporter.h:39
REPORTER
A pure virtual class used to derive REPORTER objects from.
Definition
reporter.h:73
exit_codes.h
job_dispatcher.h
CLI::EXIT_CODES::ERR_UNKNOWN
static const int ERR_UNKNOWN
Definition
exit_codes.h:32
reporter.h
result
wxString result
Test unit parsing edge cases and error handling.
Definition
test_text_eval_numeric_compat.cpp:602
src
common
jobs
job_dispatcher.cpp
Generated on Sun Sep 21 2025 01:05:21 for KiCad PCB EDA Suite by
1.13.2