| | |
| | | m_grid.SetPortAllocated(p, !checked, _T("")); |
| | | GetDlgItem(btnID[p])->EnableWindow(checked); |
| | | } |
| | | // Keep one material type across all selected ports. |
| | | int syncMat = CCarrierSlotGrid::MAT_G1; |
| | | bool hasSyncMat = false; |
| | | for (int p = 0; p < kPortCount && !hasSyncMat; ++p) { |
| | | // 物料类型按 Port 维度独立统一,不跨 Port 联动。 |
| | | for (int p = 0; p < kPortCount; ++p) { |
| | | if (!pCurrent->selectedPorts[p]) continue; |
| | | int syncMat = m_grid.GetSlotMaterialType(p, 0); |
| | | for (int s = 0; s < kSlotCount; ++s) { |
| | | if (m_grid.GetSlotChecked(p, s)) { |
| | | syncMat = m_grid.GetSlotMaterialType(p, s); |
| | | hasSyncMat = true; |
| | | break; |
| | | } |
| | | } |
| | | SyncMaterialInPort(p, syncMat); |
| | | } |
| | | if (!hasSyncMat) { |
| | | for (int p = 0; p < kPortCount; ++p) { |
| | | if (!pCurrent->selectedPorts[p]) continue; |
| | | syncMat = m_grid.GetSlotMaterialType(p, 0); |
| | | hasSyncMat = true; |
| | | break; |
| | | } |
| | | } |
| | | SyncMaterialAcrossSelectedPorts(syncMat); |
| | | |
| | | EnsureWarpDefaults(*pCurrent); |
| | | } |
| | | |
| | | void CCjPage2::SyncMaterialAcrossSelectedPorts(int material) |
| | | void CCjPage2::SyncMaterialInPort(int port, int material) |
| | | { |
| | | if (m_pContext == nullptr) return; |
| | | |
| | | if (port < 0 || port >= kPortCount) return; |
| | | const int mat = NormalizeMaterial(material); |
| | | PJWarp* pCurrent = (PJWarp*)m_pContext; |
| | | for (int p = 0; p < kPortCount; ++p) { |
| | | if (!pCurrent->selectedPorts[p]) continue; |
| | | for (int s = 0; s < kSlotCount; ++s) { |
| | | m_grid.SetSlotMaterialType(p, s, mat, FALSE); |
| | | } |
| | | for (int s = 0; s < kSlotCount; ++s) { |
| | | m_grid.SetSlotMaterialType(port, s, mat, FALSE); |
| | | } |
| | | } |
| | | |
| | |
| | | void CCjPage2::OnGridMatChanged(NMHDR* pNMHDR, LRESULT* pResult) |
| | | { |
| | | auto* nm = reinterpret_cast<CSG_MAT_CHANGE*>(pNMHDR); |
| | | const int port = nm->port; |
| | | const int mat = nm->material; // 1/2 |
| | | |
| | | SyncMaterialAcrossSelectedPorts(mat); |
| | | SyncMaterialInPort(port, mat); |
| | | ContentChanged(0); |
| | | |
| | | *pResult = 0; |