24#include <wx/aui/auibook.h>
28#include <wx/checkbox.h>
67 int jobBmpColId =
m_jobList->AppendColumn( wxT(
"" ) );
68 int jobNoColId =
m_jobList->AppendColumn(
_(
"No." ) );
69 int jobDescColId =
m_jobList->AppendColumn(
_(
"Job Description" ) );
70 int jobSourceColId =
m_jobList->AppendColumn(
_(
"Source" ) );
71 m_jobList->SetColumnWidth( jobBmpColId, 26 );
72 m_jobList->SetColumnWidth( jobNoColId, GetTextExtent( wxT(
"XXXX" ) ).GetWidth() );
73 m_jobList->SetColumnWidth( jobSourceColId, GetTextExtent( wxT(
"XXXXXX" ) ).GetWidth() );
75 wxImageList* imageList =
new wxImageList( 16, 16,
true, 3 );
76 imageList->Add(
KiBitmapBundle( BITMAPS::ercerr ).GetBitmap( wxSize( 16, 16 ) ) );
77 imageList->Add(
KiBitmapBundle( BITMAPS::checked_ok ).GetBitmap( wxSize( 16, 16 ) ) );
78 m_jobList->SetImageList( imageList, wxIMAGE_LIST_SMALL );
95 m_jobList->SetItem( itemIndex, jobNoColId, wxString::Format(
"%d", num++ ) );
96 m_jobList->SetItem( itemIndex, jobDescColId, job.GetDescription() );
99 wxString source = wxEmptyString;
104 source = wxT(
"PCB" );
106 source = wxT(
"SCH" );
109 m_jobList->SetItem( itemIndex, jobSourceColId, source );
137 int itemIndex =
event.GetIndex();
145 if(
static_cast<size_t>( itemIndex ) < jobs.size() )
147 wxString jobId = jobs[itemIndex].m_id;
189 long style = GetWindowStyleFlag();
190 style &= ~wxBORDER_MASK;
191 style |= wxBORDER_SIMPLE;
192 SetWindowStyleFlag( style );
215 wxCHECK( destination, );
224 wxCHECK( destination, );
260 wxFileName fn =
project.GetProjectFullName();
261 wxSetWorkingDirectory( fn.GetPath() );
273 delete progressReporter;
283 wxCHECK( destination, );
292 wxCHECK( destination, );
295 menu.Append( wxID_EDIT,
_(
"Edit Destination Options..." ) );
296 menu.Append( wxID_DELETE,
_(
"Delete Destination" ) );
298 menu.AppendSeparator();
299 menu.Append( wxID_VIEW_DETAILS,
_(
"View Last Run Log..." ) );
301 menu.Enable( wxID_VIEW_DETAILS, destination->
m_lastRunSuccess.has_value() );
309 wxCHECK( destination, );
321 virtual void OnDelete( wxCommandEvent& aEvent )
override
340 switch( aEvent.GetId() )
344 wxCommandEvent
dummy;
351 wxCommandEvent
dummy;
356 case wxID_VIEW_DETAILS:
364 wxFAIL_MSG( wxT(
"Unknown ID in context menu event" ) );
387 wxArrayInt selectedRows =
m_grid->GetSelectedRows();
391 menu.AppendSeparator();
392 menu.Append(
GRIDTRICKS_ID_COPY,
_(
"Copy" ) +
"\tCtrl+C",
_(
"Copy selected cells to clipboard" ) );
400 m_grid->PopupMenu( &menu );
406 wxArrayInt selectedRows =
m_grid->GetSelectedRows();
410 if( selectedRows.size() > 0 )
412 m_grid->SetGridCursor( selectedRows[0], 2 );
413 m_grid->EnableCellEditControl();
418 if( selectedRows.size() > 0 )
423 wxCommandEvent
dummy;
437 int curr_col = aEvent.GetCol();
438 int curr_row = aEvent.GetRow();
467 std::unique_ptr<JOBSET> aJobsFile ) :
469 m_parentBook( aParent ),
471 m_jobsFile(
std::
move( aJobsFile ) )
477 m_jobsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
535 wxString source = wxEmptyString;
540 source = wxT(
"PCB" );
542 source = wxT(
"SCH" );
554 panel->UpdateStatus();
563 tabName = wxS(
"*" ) + tabName;
576 m_outputListSizer->Add( destinationPanel, 0, wxEXPAND, 5 );
587 std::vector<PANEL_DESTINATION*> panels;
592 panels.push_back( panel );
614 bool success =
false;
626 if( job.
m_job->GetType() ==
"special_execute" )
636 else if( job.
m_job->GetType() ==
"special_copyfiles" )
661 int row = aEvent.GetRow();
662 int col = aEvent.GetCol();
674 m_jobsFile->SaveToFile( wxEmptyString,
true );
684 wxArrayString headers;
685 std::vector<wxArrayString> items;
687 headers.Add(
_(
"Job Types" ) );
691 for(
const std::pair<const wxString, JOB_REGISTRY_ENTRY>& entry : jobMap )
694 item.Add( wxGetTranslation( entry.second.title ) );
695 items.emplace_back( item );
707 if( !selectedString.IsEmpty() )
709 for(
const std::pair<const wxString, JOB_REGISTRY_ENTRY>& entry : jobMap )
711 if( wxGetTranslation( entry.second.title ) == selectedString )
713 jobKey = entry.first;
719 if( !jobKey.IsEmpty() )
723 JOB* job = JOB_REGISTRY::CreateInstance<JOB>( jobKey );
749 wxArrayInt selectedRows =
m_jobsGrid->GetSelectedRows();
751 if( selectedRows.empty() )
758 selectedRows.Sort( [](
int* first,
int* second ) {
return *second - *first; } );
760 int select = selectedRows[0];
762 for(
int row : selectedRows )
777 wxArrayString headers;
778 std::vector<wxArrayString> items;
780 headers.Add(
_(
"Destination Types" ) );
785 item.Add( wxGetTranslation( destinationTypeInfo.name ) );
786 items.emplace_back( item );
799 if( wxGetTranslation( destinationTypeInfo.name ) == selectedString )
826 wxFileName fileName =
m_jobsFile->GetFullFilename();
827 wxString msg =
_(
"Save changes to '%s' before closing?" );
832 return m_jobsFile->SaveToFile(wxEmptyString, true);
857 wxFileName boardfn =
project.GetProjectFullName();
858 boardfn.SetExt( FILEEXT::PcbFileExtension );
861 wxEventBlocker blocker(
this );
863 frame->
OpenProjectFiles( std::vector<wxString>( 1, boardfn.GetFullPath() ) );
865 if( !frame->IsVisible() )
880 wxFileName schFn =
project.GetProjectFullName();
883 wxEventBlocker blocker(
this );
887 if( !frame->IsVisible() )
931 if( item < m_jobsGrid->GetNumberRows() - 1 )
960 panel->ClearStatus();
970 wxFileName fn =
project.GetProjectFullName();
971 wxSetWorkingDirectory( fn.GetPath() );
981 panel->UpdateStatus();
983 delete progressReporter;
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
Class DIALOG_JOBSET_RUN_LOG_BASE.
wxStaticText * m_staticTextOutputName
wxTextCtrl * m_textCtrlOutput
void OnJobListItemSelected(wxListEvent &event) override
DIALOG_JOBSET_RUN_LOG(wxWindow *aParent, JOBSET *aJobsFile, JOBSET_DESTINATION *aDestination)
JOBSET_DESTINATION * m_destination
virtual void OnUpdateUI(wxUpdateUIEvent &event) override
void SetupStandardButtons(std::map< int, wxString > aLabels={})
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
wxString GetTextSelection(int aColumn=0)
Return the selected text from aColumn in the wxListCtrl in the dialog.
void SetListLabel(const wxString &aLabel)
Add mouse and command handling (such as cut, copy, and paste) to a WX_GRID instance.
bool m_multiCellEditEnabled
bool m_enableSingleClickEdit
virtual void doPopupSelection(wxCommandEvent &event)
WX_GRID * m_grid
I don't own the grid, but he owns me.
std::vector< JOBSET_DESTINATION > & GetDestinations()
void SetDirty(bool aFlag=true)
std::vector< JOBSET_JOB > GetJobsForDestination(JOBSET_DESTINATION *aDestination)
std::vector< JOBSET_JOB > & GetJobs()
void showPopupMenu(wxMenu &menu, wxGridEvent &aEvent) override
void doPopupSelection(wxCommandEvent &event) override
bool handleDoubleClick(wxGridEvent &aEvent) override
JOBS_GRID_TRICKS(PANEL_JOBSET *aParent, WX_GRID *aGrid)
bool RunJobsAllDestinations(bool aBail=false)
bool RunJobsForDestination(JOBSET_DESTINATION *aDestination, bool aBail=false)
static const REGISTRY_MAP_T & GetRegistry()
std::unordered_map< wxString, JOB_REGISTRY_ENTRY > REGISTRY_MAP_T
static KIWAY::FACE_T GetKifaceType(const wxString &aName)
An simple container class that lets us dispatch output jobs to kifaces.
The main KiCad project manager frame.
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
virtual bool OpenProjectFiles(const std::vector< wxString > &aFileList, int aCtl=0)
Open a project or set of files given by aFileList.
bool ProcessJobConfigDialog(KIWAY::FACE_T aFace, JOB *aJob, wxWindow *aWindow)
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
FACE_T
Known KIFACE implementations.
virtual PROJECT & Prj() const
Return the PROJECT associated with this KIWAY.
Class PANEL_DESTINATION_BASE.
wxStaticBitmap * m_statusBitmap
wxButton * m_buttonGenerate
STD_BITMAP_BUTTON * m_buttonProperties
STD_BITMAP_BUTTON * m_buttonDelete
wxStaticBitmap * m_bitmapOutputType
wxStaticText * m_textOutputType
void onMenu(wxCommandEvent &aEvent)
JOBSET_DESTINATION * GetDestination()
PANEL_DESTINATION(wxWindow *aParent, PANEL_JOBSET *aPanelParent, KICAD_MANAGER_FRAME *aFrame, JOBSET *aFile, JOBSET_DESTINATION *aDestination)
virtual void OnDelete(wxCommandEvent &aEvent) override
virtual void OnLastStatusClick(wxMouseEvent &aEvent) override
virtual void OnGenerate(wxCommandEvent &event) override
void OnRightDown(wxMouseEvent &aEvent) override
KICAD_MANAGER_FRAME * m_frame
void OnProperties(wxCommandEvent &aEvent) override
PANEL_JOBSET * m_panelParent
STD_BITMAP_BUTTON * m_buttonAddDestination
STD_BITMAP_BUTTON * m_buttonDown
wxScrolledWindow * m_destinationList
wxBoxSizer * m_destinationListSizer
STD_BITMAP_BUTTON * m_buttonAddJob
STD_BITMAP_BUTTON * m_buttonDelete
STD_BITMAP_BUTTON * m_buttonUp
wxString GetFilePath() const
virtual void OnSaveButtonClick(wxCommandEvent &aEvent) override
void OnJobButtonDelete(wxCommandEvent &aEvent) override
virtual void OnJobButtonDown(wxCommandEvent &aEvent) override
void EnsurePcbSchFramesOpen()
bool GetCanClose() override
wxAuiNotebook * m_parentBook
void addDestinationPanel(JOBSET_DESTINATION *aDestination)
virtual void OnGenerateAllDestinationsClick(wxCommandEvent &event) override
bool OpenJobOptionsForListItem(size_t aItemIndex)
std::vector< PANEL_DESTINATION * > GetDestinationPanels()
void buildDestinationList()
KICAD_MANAGER_FRAME * m_frame
PANEL_JOBSET(wxAuiNotebook *aParent, KICAD_MANAGER_FRAME *aFrame, std::unique_ptr< JOBSET > aJobsFile)
virtual void OnAddDestinationClick(wxCommandEvent &aEvent) override
virtual void OnAddJobClick(wxCommandEvent &aEvent) override
std::unique_ptr< JOBSET > m_jobsFile
virtual void OnGridCellChange(wxGridEvent &aEvent) override
void RemoveDestination(PANEL_DESTINATION *aPanel)
virtual void OnJobButtonUp(wxCommandEvent &aEvent) override
virtual void OnSizeGrid(wxSizeEvent &aEvent) override
Container for project specific data.
void OverrideMinSize(double aXPct, double aYPct)
Grids that have column sizes automatically set to fill the available width don't want to shrink after...
bool CancelPendingChanges()
void CancelShowEditorOnMouseUp()
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Multi-thread safe progress reporter dialog, intended for use of tasks that parallel reporting back of...
A wrapper for reporting to a wxString object.
const wxString & GetMessages() const
bool HandleUnsavedChanges(wxWindow *aParent, const wxString &aMessage, const std::function< bool()> &aSaveFunction)
Display a dialog with Save, Cancel and Discard Changes buttons.
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
This file is part of the common library.
static const std::string KiCadSchematicFileExtension
Some functions to handle hotkeys in KiCad.
KICOMMON_API std::map< JOBSET_DESTINATION_T, JOBSET_DESTINATION_T_INFO > JobsetDestinationTypeInfos
KICOMMON_API std::map< JOBSET_DESTINATION_T, JOBSET_DESTINATION_T_INFO > JobsetDestinationTypeInfos
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
std::vector< FAB_LAYER_COLOR > dummy
std::unordered_map< wxString, REPORTER * > m_lastRunReporters
JOBSET_DESTINATION_T m_type
wxString GetDescription() const
std::optional< bool > m_lastRunSuccess
std::unordered_map< wxString, std::optional< bool > > m_lastRunSuccessMap
std::shared_ptr< JOB > m_job
Definition of file extensions used in Kicad.