From 74b174e4f037ac8cf806c6161e8d3d2554fd401c Mon Sep 17 00:00:00 2001
From: Mark Roszko <mark.roszko@gmail.com>
Date: Fri, 31 Jan 2025 08:16:26 -0500
Subject: [PATCH] Add "source" field for jobsets to discern SCH & PCB jobs

---
 kicad/dialogs/panel_jobset.cpp      | 47 ++++++++++++++++++++++++++---
 kicad/dialogs/panel_jobset_base.cpp |  7 +++--
 kicad/dialogs/panel_jobset_base.fbp |  4 +--
 kicad/dialogs/panel_jobset_base.h   |  2 +-
 4 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/kicad/dialogs/panel_jobset.cpp b/kicad/dialogs/panel_jobset.cpp
index 01f825fa2b..41d0f2f26d 100644
--- a/kicad/dialogs/panel_jobset.cpp
+++ b/kicad/dialogs/panel_jobset.cpp
@@ -63,6 +63,7 @@ public:
         int jobBmpColId = m_jobList->AppendColumn( wxT( "" ) );
         int jobNoColId = m_jobList->AppendColumn( _( "No." ) );
         int jobDescColId = m_jobList->AppendColumn( _( "Job Description" ) );
+        int jobSourceColId = m_jobList->AppendColumn( wxT( "Source" ) );
         m_jobList->SetColumnWidth( jobBmpColId, wxLIST_AUTOSIZE_USEHEADER );
         m_jobList->SetColumnWidth( jobNoColId, wxLIST_AUTOSIZE_USEHEADER );
         m_jobList->SetColumnWidth( jobDescColId, wxLIST_AUTOSIZE_USEHEADER );
@@ -88,6 +89,22 @@ public:
 
             m_jobList->SetItem( itemIndex, jobNoColId, wxString::Format( "%d", num++ ) );
             m_jobList->SetItem( itemIndex, jobDescColId, job.GetDescription() );
+
+            KIWAY::FACE_T iface = JOB_REGISTRY::GetKifaceType( job.m_type );
+            wxString source = wxEmptyString;
+            if( iface < KIWAY::KIWAY_FACE_COUNT )
+            {
+                
+                if( iface == KIWAY::FACE_PCB )
+                {
+                    source = wxT( "PCB" );
+                }
+                else if( iface == KIWAY::FACE_SCH )
+				{
+					source = wxT( "SCH" );
+				}
+            }
+            m_jobList->SetItem( itemIndex, jobSourceColId, source );
         }
 
         SetupStandardButtons( { { wxID_OK, _( "Close" ) } } );
@@ -381,7 +398,7 @@ void JOBS_GRID_TRICKS::doPopupSelection( wxCommandEvent& event )
     {
         if( selectedRows.size() > 0 )
         {
-            m_grid->SetGridCursor( selectedRows[0], 1 );
+            m_grid->SetGridCursor( selectedRows[0], 2 );
             m_grid->EnableCellEditControl();
         }
     }
@@ -409,7 +426,7 @@ bool JOBS_GRID_TRICKS::handleDoubleClick( wxGridEvent& aEvent )
     int curr_col = aEvent.GetCol();
     int curr_row = aEvent.GetRow();
 
-    if( ( curr_col == 0 || curr_col == 1 )
+    if( ( curr_col == 0 || curr_col == 1 || curr_col == 2 )
         && curr_row >= 0 && curr_row < (int) m_parent->GetJobsFile()->GetJobs().size() )
     {
         m_doubleClickRow = curr_row;
@@ -450,6 +467,7 @@ PANEL_JOBSET::PANEL_JOBSET( wxAuiNotebook* aParent, KICAD_MANAGER_FRAME* aFrame,
 
     // 'm' for margins
     m_jobsGrid->SetColSize( 0, GetTextExtent( wxT( "99m" ) ).x );
+    m_jobsGrid->SetColSize( 1, GetTextExtent( wxT( "PCBm" ) ).x );
 
     m_buttonAddJob->SetBitmap( KiBitmapBundle( BITMAPS::small_plus ) );
     m_buttonUp->SetBitmap( KiBitmapBundle( BITMAPS::small_up ) );
@@ -503,7 +521,25 @@ void PANEL_JOBSET::rebuildJobList()
         m_jobsGrid->SetCellValue( num - 1, 0, wxString::Format( "%d", num ) );
         m_jobsGrid->SetReadOnly( num - 1, 0 );
 
-        m_jobsGrid->SetCellValue( num - 1, 1, job.GetDescription() );
+        m_jobsGrid->SetCellValue( num - 1, 2, job.GetDescription() );
+
+        m_jobsGrid->SetReadOnly( num - 1, 1 );
+        
+        KIWAY::FACE_T iface = JOB_REGISTRY::GetKifaceType( job.m_type );
+        wxString      source = wxEmptyString;
+        if( iface < KIWAY::KIWAY_FACE_COUNT )
+        {
+            if( iface == KIWAY::FACE_PCB )
+            {
+                source = wxT( "PCB" );
+            }
+            else if( iface == KIWAY::FACE_SCH )
+            {
+                source = wxT( "SCH" );
+            }
+        }
+
+        m_jobsGrid->SetCellValue( num - 1, 1, source );
 
         num++;
     }
@@ -688,7 +724,7 @@ void PANEL_JOBSET::OnAddJobClick( wxCommandEvent& aEvent )
             {
                 rebuildJobList();
 
-                m_jobsGrid->SetGridCursor( row, 1 );
+                m_jobsGrid->SetGridCursor( row, 2 );
                 m_jobsGrid->EnableCellEditControl();
             }
             else
@@ -950,7 +986,8 @@ void PANEL_JOBSET::OnGenerateAllOutputsClick( wxCommandEvent& event )
 
 void PANEL_JOBSET::OnSizeGrid( wxSizeEvent& aEvent )
 {
-    m_jobsGrid->SetColSize( 1, m_jobsGrid->GetSize().x - m_jobsGrid->GetColSize( 0 ) );
+    m_jobsGrid->SetColSize( 2, m_jobsGrid->GetSize().x - m_jobsGrid->GetColSize( 1 )
+                                       - m_jobsGrid->GetColSize( 0 ) );
 
     // Always propagate for a grid repaint (needed if the height changes, as well as width)
     aEvent.Skip();
diff --git a/kicad/dialogs/panel_jobset_base.cpp b/kicad/dialogs/panel_jobset_base.cpp
index 1f074f58ce..06fd514084 100644
--- a/kicad/dialogs/panel_jobset_base.cpp
+++ b/kicad/dialogs/panel_jobset_base.cpp
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
+// C++ code generated with wxFormBuilder (version 4.2.1-62-g497c85bd-dirty)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO *NOT* EDIT THIS FILE!
@@ -26,7 +26,7 @@ PANEL_JOBSET_BASE::PANEL_JOBSET_BASE( wxWindow* parent, wxWindowID id, const wxP
 	m_jobsGrid = new WX_GRID( sbJobs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
 
 	// Grid
-	m_jobsGrid->CreateGrid( 5, 2 );
+	m_jobsGrid->CreateGrid( 5, 3 );
 	m_jobsGrid->EnableEditing( true );
 	m_jobsGrid->EnableGridLines( true );
 	m_jobsGrid->EnableDragGridSize( false );
@@ -34,7 +34,8 @@ PANEL_JOBSET_BASE::PANEL_JOBSET_BASE( wxWindow* parent, wxWindowID id, const wxP
 
 	// Columns
 	m_jobsGrid->SetColSize( 0, 30 );
-	m_jobsGrid->SetColSize( 1, 260 );
+	m_jobsGrid->SetColSize( 1, 30 );
+	m_jobsGrid->SetColSize( 2, 260 );
 	m_jobsGrid->EnableDragColMove( false );
 	m_jobsGrid->EnableDragColSize( false );
 	m_jobsGrid->SetColLabelSize( 0 );
diff --git a/kicad/dialogs/panel_jobset_base.fbp b/kicad/dialogs/panel_jobset_base.fbp
index 17fa54d458..571fb239a5 100644
--- a/kicad/dialogs/panel_jobset_base.fbp
+++ b/kicad/dialogs/panel_jobset_base.fbp
@@ -111,8 +111,8 @@
                     <property name="col_label_size">0</property>
                     <property name="col_label_values"></property>
                     <property name="col_label_vert_alignment">wxALIGN_CENTER</property>
-                    <property name="cols">2</property>
-                    <property name="column_sizes">30,260</property>
+                    <property name="cols">3</property>
+                    <property name="column_sizes">30,30,260</property>
                     <property name="context_help"></property>
                     <property name="context_menu">1</property>
                     <property name="default_pane">0</property>
diff --git a/kicad/dialogs/panel_jobset_base.h b/kicad/dialogs/panel_jobset_base.h
index 35634f55ec..2a0a947595 100644
--- a/kicad/dialogs/panel_jobset_base.h
+++ b/kicad/dialogs/panel_jobset_base.h
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
+// C++ code generated with wxFormBuilder (version 4.2.1-62-g497c85bd-dirty)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO *NOT* EDIT THIS FILE!