KiCad PCB EDA Suite
Loading...
Searching...
No Matches
merge_dispatch.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 The KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 3
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, you may find one here:
18 * http://www.gnu.org/licenses/gpl-3.0.html
19 * or you may search the http://www.gnu.org website for the version 3 license,
20 * or you may write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
25
26#include <cli/exit_codes.h>
27#include <kiface_base.h>
28#include <kiface_ids.h>
29#include <kiway.h>
30
31
32namespace KICAD_DIFF
33{
34
35namespace
36{
39KIWAY::FACE_T faceForKind( DOC_KIND aKind )
40{
41 switch( aKind )
42 {
43 case DOC_KIND::SCH:
45 return KIWAY::FACE_SCH;
46 default:
47 return KIWAY::FACE_PCB;
48 }
49}
50} // namespace
51
52
53int DispatchMerge( KIWAY& aKiway, DOC_KIND aKind, const wxString& aAncestor, const wxString& aOurs,
54 const wxString& aTheirs, const wxString& aOutput, bool aInteractive,
55 bool aSingleFile, REPORTER* aReporter )
56{
57 typedef int ( *MERGE_FN )( int, const wxString&, const wxString&, const wxString&,
58 const wxString&, bool, bool, REPORTER* );
59
60 KIFACE* kiface = aKiway.KiFACE( faceForKind( aKind ) );
61
62 if( !kiface )
64
65 MERGE_FN fn = reinterpret_cast<MERGE_FN>( kiface->IfaceOrAddress( KIFACE_MERGE_DOCUMENT ) );
66
67 if( !fn )
69
70 return fn( static_cast<int>( aKind ), aAncestor, aOurs, aTheirs, aOutput, aInteractive,
71 aSingleFile, aReporter );
72}
73
74
75int DispatchOpenDiffDialog( KIWAY& aKiway, DOC_KIND aKind, const wxString& aFileA,
76 const wxString& aFileB, const wxString& aLabelA, const wxString& aLabelB,
77 wxWindow* aParent, REPORTER* aReporter )
78{
79 typedef int ( *OPEN_FN )( int, const wxString&, const wxString&, const wxString&,
80 const wxString&, wxWindow*, REPORTER* );
81
82 KIFACE* kiface = aKiway.KiFACE( faceForKind( aKind ) );
83
84 if( !kiface )
86
87 OPEN_FN fn = reinterpret_cast<OPEN_FN>( kiface->IfaceOrAddress( KIFACE_OPEN_DIFF_DIALOG ) );
88
89 if( !fn )
91
92 return fn( static_cast<int>( aKind ), aFileA, aFileB, aLabelA, aLabelB, aParent, aReporter );
93}
94
95} // namespace KICAD_DIFF
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition kiway.h:311
virtual KIFACE * KiFACE(FACE_T aFaceId, bool doLoad=true)
Return the KIFACE* given a FACE_T.
Definition kiway.cpp:207
FACE_T
Known KIFACE implementations.
Definition kiway.h:317
@ FACE_SCH
eeschema DSO
Definition kiway.h:318
@ FACE_PCB
pcbnew DSO
Definition kiway.h:319
A pure virtual class used to derive REPORTER objects from.
Definition reporter.h:71
@ KIFACE_MERGE_DOCUMENT
int (*)( int aKind, const wxString& aAncestor, const wxString& aOurs, const wxString& aTheirs,...
Definition kiface_ids.h:45
@ KIFACE_OPEN_DIFF_DIALOG
int (*)( int aKind, const wxString& aFileA, const wxString& aFileB, const wxString& aLabelA,...
Definition kiface_ids.h:52
static const int ERR_UNKNOWN
Definition exit_codes.h:32
int DispatchMerge(KIWAY &aKiway, DOC_KIND aKind, const wxString &aAncestor, const wxString &aOurs, const wxString &aTheirs, const wxString &aOutput, bool aInteractive, bool aSingleFile, REPORTER *aReporter)
Run a 3-way document/library merge by calling the owning kiface's KIFACE_MERGE_DOCUMENT function expo...
DOC_KIND
Document type a diff/merge entry point should route to, derived from a file path's extension.
int DispatchOpenDiffDialog(KIWAY &aKiway, DOC_KIND aKind, const wxString &aFileA, const wxString &aFileB, const wxString &aLabelA, const wxString &aLabelB, wxWindow *aParent, REPORTER *aReporter)
Open DIALOG_KICAD_DIFF on two files by calling the owning kiface's KIFACE_OPEN_DIFF_DIALOG function e...
Implement a participant in the KIWAY alchemy.
Definition kiway.h:152
IFACE KIFACE_BASE kiface("pcb_test_frame", KIWAY::FACE_PCB)