| 
									
										
										
										
											2025-09-18 11:46:35 +08:00
										 |  |  | #include "copy_channel.h"
 | 
					
						
							|  |  |  | #include "ui_copy_channel.h"
 | 
					
						
							| 
									
										
										
										
											2025-09-27 21:34:27 +08:00
										 |  |  | #include "data_config.h"
 | 
					
						
							|  |  |  | #include "config_mgr.h"
 | 
					
						
							|  |  |  | #include "vibrationdata.h"
 | 
					
						
							|  |  |  | #include <QMessageBox>
 | 
					
						
							| 
									
										
										
										
											2025-09-18 11:46:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-27 21:34:27 +08:00
										 |  |  | CopyChannel::CopyChannel(int slot_no_,QWidget *parent) : | 
					
						
							| 
									
										
										
										
											2025-09-18 11:46:35 +08:00
										 |  |  |     QWidget(parent), | 
					
						
							|  |  |  |     ui(new Ui::CopyChannel) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ui->setupUi(this); | 
					
						
							| 
									
										
										
										
											2025-09-27 21:34:27 +08:00
										 |  |  |     slot_no = slot_no_; | 
					
						
							|  |  |  |     radio_btn.reserve(4); | 
					
						
							|  |  |  |     check_ch.reserve(4); | 
					
						
							|  |  |  |     radio_btn.push_back(ui->radioButton_ch1); | 
					
						
							|  |  |  |     radio_btn.push_back(ui->radioButton_ch2); | 
					
						
							|  |  |  |     radio_btn.push_back(ui->radioButton_ch3); | 
					
						
							|  |  |  |     radio_btn.push_back(ui->radioButton_ch4); | 
					
						
							|  |  |  |     check_ch.push_back(ui->checkBox_ch1); | 
					
						
							|  |  |  |     check_ch.push_back(ui->checkBox_ch2); | 
					
						
							|  |  |  |     check_ch.push_back(ui->checkBox_ch3); | 
					
						
							|  |  |  |     check_ch.push_back(ui->checkBox_ch4); | 
					
						
							|  |  |  |     ui->checkBox_ch1->setEnabled(false); | 
					
						
							| 
									
										
										
										
											2025-09-18 11:46:35 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CopyChannel::~CopyChannel() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     delete ui; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CopyChannel::on_radioButton_ch1_clicked(bool checked) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if(checked){ | 
					
						
							|  |  |  |         ui->checkBox_ch1->setChecked(false); | 
					
						
							|  |  |  |         ui->checkBox_ch1->setEnabled(false); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     ui->checkBox_ch2->setEnabled(true); | 
					
						
							|  |  |  |     ui->checkBox_ch3->setEnabled(true); | 
					
						
							|  |  |  |     ui->checkBox_ch4->setEnabled(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CopyChannel::on_radioButton_ch2_clicked(bool checked) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if(checked){ | 
					
						
							|  |  |  |         ui->checkBox_ch2->setChecked(false); | 
					
						
							|  |  |  |         ui->checkBox_ch2->setEnabled(false); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     ui->checkBox_ch1->setEnabled(true); | 
					
						
							|  |  |  |     ui->checkBox_ch3->setEnabled(true); | 
					
						
							|  |  |  |     ui->checkBox_ch4->setEnabled(true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CopyChannel::on_radioButton_ch3_clicked(bool checked) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if(checked){ | 
					
						
							|  |  |  |         ui->checkBox_ch3->setChecked(false); | 
					
						
							|  |  |  |         ui->checkBox_ch3->setEnabled(false); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     ui->checkBox_ch2->setEnabled(true); | 
					
						
							|  |  |  |     ui->checkBox_ch1->setEnabled(true); | 
					
						
							|  |  |  |     ui->checkBox_ch4->setEnabled(true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CopyChannel::on_radioButton_ch4_clicked(bool checked) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if(checked){ | 
					
						
							|  |  |  |         ui->checkBox_ch4->setChecked(false); | 
					
						
							|  |  |  |         ui->checkBox_ch4->setEnabled(false); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     ui->checkBox_ch2->setEnabled(true); | 
					
						
							|  |  |  |     ui->checkBox_ch3->setEnabled(true); | 
					
						
							|  |  |  |     ui->checkBox_ch1->setEnabled(true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-27 21:34:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | void CopyChannel::on_pushButton_cancel_clicked() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     this->close(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CopyChannel::on_pushButton_confirm_clicked() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     int var = 0; | 
					
						
							|  |  |  |     for( ; var < 4; var ++){ | 
					
						
							|  |  |  |          if(radio_btn[var]->isChecked()) | 
					
						
							|  |  |  |              break; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     std::shared_ptr<CardBase> base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no); | 
					
						
							|  |  |  |     if (base_ptr == nullptr) { | 
					
						
							|  |  |  |         qDebug() << "base_ptr"; | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     std::shared_ptr<VibrationData> vib_data = std::dynamic_pointer_cast<VibrationData>(base_ptr); | 
					
						
							|  |  |  |     for (int i = 0; i < 4; i++) { | 
					
						
							|  |  |  |         if(i != var && check_ch[i]->isChecked()){ | 
					
						
							|  |  |  |             QString point_name = vib_data->base_config_[i].point_name; | 
					
						
							|  |  |  |             vib_data->base_config_[i] = vib_data->base_config_[var]; | 
					
						
							|  |  |  |             vib_data->base_config_[i].point_name = point_name; | 
					
						
							|  |  |  |             vib_data->dc_output[i] = vib_data->dc_output[var]; | 
					
						
							|  |  |  |             auto variable_base_old = vib_data->GetChannelPtr(var + 1); | 
					
						
							|  |  |  |             if(vib_data->base_config_[var].channel_type == kVibRadial){ | 
					
						
							|  |  |  |                 std::shared_ptr<RadialVariable>  variable = std::dynamic_pointer_cast<RadialVariable>(variable_base_old); | 
					
						
							|  |  |  |                 std::shared_ptr<RadialVariable> variable_new = std::make_shared<RadialVariable>(); | 
					
						
							|  |  |  |                 *variable_new = *variable; | 
					
						
							|  |  |  |                 variable_new->id_ = i + 1; | 
					
						
							|  |  |  |                 vib_data->RemoveChannel(i + 1); | 
					
						
							|  |  |  |                 vib_data->InsertChannelPtr(variable_new); | 
					
						
							|  |  |  |             }else if(vib_data->base_config_[var].channel_type == kVibAcc || | 
					
						
							|  |  |  |                      vib_data->base_config_[var].channel_type == kVibVelocity){ | 
					
						
							|  |  |  |                 std::shared_ptr<AccVelVariable>  variable = std::dynamic_pointer_cast<AccVelVariable>(variable_base_old); | 
					
						
							|  |  |  |                 std::shared_ptr<AccVelVariable> variable_new = std::make_shared<AccVelVariable>(); | 
					
						
							|  |  |  |                 *variable_new = *variable; | 
					
						
							|  |  |  |                 variable_new->id_ = i + 1; | 
					
						
							|  |  |  |                 vib_data->RemoveChannel(i + 1); | 
					
						
							|  |  |  |                 vib_data->InsertChannelPtr(variable_new); | 
					
						
							|  |  |  |             }else if(vib_data->base_config_[var].channel_type == kVibThrust){ | 
					
						
							|  |  |  |                 std::shared_ptr<ThrustVariable>  variable = std::dynamic_pointer_cast<ThrustVariable>(variable_base_old); | 
					
						
							|  |  |  |                 std::shared_ptr<ThrustVariable> variable_new = std::make_shared<ThrustVariable>(); | 
					
						
							|  |  |  |                 *variable_new = *variable; | 
					
						
							|  |  |  |                 variable_new->id_ = i + 1; | 
					
						
							|  |  |  |                 vib_data->RemoveChannel(i + 1); | 
					
						
							|  |  |  |                 vib_data->InsertChannelPtr(variable_new); | 
					
						
							|  |  |  |             }else if(vib_data->base_config_[var].channel_type == kVibPressurePulsation){ | 
					
						
							|  |  |  |                 std::shared_ptr<PressurePulsationVariable>  variable = std::dynamic_pointer_cast<PressurePulsationVariable>(variable_base_old); | 
					
						
							|  |  |  |                 std::shared_ptr<PressurePulsationVariable> variable_new = std::make_shared<PressurePulsationVariable>(); | 
					
						
							|  |  |  |                 *variable_new = *variable; | 
					
						
							|  |  |  |                 variable_new->id_ = i + 1; | 
					
						
							|  |  |  |                 vib_data->RemoveChannel(i + 1); | 
					
						
							|  |  |  |                 vib_data->InsertChannelPtr(variable_new); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     emit copy_end_sg(); | 
					
						
							|  |  |  |     this->close(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |