File indexing completed on 2025-01-19 09:45:50
0001 /* 0002 SPDX-FileCopyrightText: 2009 Prakash Mohan <prakash.mohan@kdemail.net> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "oal/equipmentwriter.h" 0008 #include "ui_equipmentwriter.h" 0009 0010 #include <QFile> 0011 0012 #include "kstarsdata.h" 0013 #include "oal/oal.h" 0014 #include "oal/scope.h" 0015 #include "oal/dslrlens.h" 0016 #include "oal/eyepiece.h" 0017 #include "oal/lens.h" 0018 #include "oal/filter.h" 0019 #include "ekos/ekos.h" 0020 0021 #include <config-kstars.h> 0022 0023 #ifdef HAVE_INDI 0024 #include "indi/drivermanager.h" 0025 #endif 0026 0027 EquipmentWriter::EquipmentWriter() 0028 { 0029 QWidget *widget = new QWidget; 0030 ui.setupUi(widget); 0031 ui.tabWidget->setCurrentIndex(0); 0032 setWindowTitle(i18nc("@title:window", "Configure Equipment")); 0033 0034 QVBoxLayout *mainLayout = new QVBoxLayout; 0035 mainLayout->addWidget(widget); 0036 setLayout(mainLayout); 0037 0038 QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close); 0039 mainLayout->addWidget(buttonBox); 0040 0041 QObject::connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); 0042 0043 nextScope = 0; 0044 nextEyepiece = 0; 0045 nextFilter = 0; 0046 nextLens = 0; 0047 nextDSLRLens = 0; 0048 loadEquipment(); 0049 newScope = true; 0050 newEyepiece = true; 0051 newLens = true; 0052 newFilter = true; 0053 newDSLRLens = true; 0054 0055 //make connections 0056 connect(ui.NewScope, SIGNAL(clicked()), this, SLOT(slotNewScope())); 0057 connect(ui.NewEyepiece, SIGNAL(clicked()), this, SLOT(slotNewEyepiece())); 0058 connect(ui.NewLens, SIGNAL(clicked()), this, SLOT(slotNewLens())); 0059 connect(ui.NewFilter, SIGNAL(clicked()), this, SLOT(slotNewFilter())); 0060 connect(ui.AddScope, SIGNAL(clicked()), this, SLOT(slotSave())); 0061 connect(ui.AddEyepiece, SIGNAL(clicked()), this, SLOT(slotSave())); 0062 connect(ui.AddLens, SIGNAL(clicked()), this, SLOT(slotSave())); 0063 connect(ui.AddFilter, SIGNAL(clicked()), this, SLOT(slotSave())); 0064 connect(ui.ScopeList, SIGNAL(currentTextChanged(QString)), this, SLOT(slotSetScope(QString))); 0065 connect(ui.EyepieceList, SIGNAL(currentTextChanged(QString)), this, SLOT(slotSetEyepiece(QString))); 0066 connect(ui.LensList, SIGNAL(currentTextChanged(QString)), this, SLOT(slotSetLens(QString))); 0067 connect(ui.FilterList, SIGNAL(currentTextChanged(QString)), this, SLOT(slotSetFilter(QString))); 0068 connect(ui.RemoveScope, SIGNAL(clicked()), this, SLOT(slotRemoveScope())); 0069 connect(ui.RemoveEyepiece, SIGNAL(clicked()), this, SLOT(slotRemoveEyepiece())); 0070 connect(ui.RemoveLens, SIGNAL(clicked()), this, SLOT(slotRemoveLens())); 0071 connect(ui.RemoveFilter, SIGNAL(clicked()), this, SLOT(slotRemoveFilter())); 0072 0073 connect(ui.NewDSLRLens, &QPushButton::clicked, this, &EquipmentWriter::slotNewDSLRLens); 0074 connect(ui.AddDSLRLens, &QPushButton::clicked, this, &EquipmentWriter::slotAddDSLRLens); 0075 connect(ui.RemoveDSLRLens, &QPushButton::clicked, this, &EquipmentWriter::slotRemoveDSLRLens); 0076 connect(ui.DSLRLensList, &QListWidget::currentTextChanged, this, &EquipmentWriter::slotSetDSLRLens); 0077 } 0078 0079 void EquipmentWriter::slotAddScope() 0080 { 0081 KStarsData::Instance()->userdb()->AddScope(ui.Model->text(), 0082 ui.Vendor->text(), 0083 ui.Type->currentText(), 0084 ui.Aperture->value(), 0085 ui.FocalLength->value()); 0086 0087 loadEquipment(); 0088 ui.Model->clear(); 0089 ui.Vendor->clear(); 0090 ui.Aperture->setValue(0); 0091 ui.FocalLength->setValue(0); 0092 } 0093 0094 void EquipmentWriter::slotRemoveScope() 0095 { 0096 KStarsData::Instance()->userdb()->DeleteEquipment("telescope", ui.Id->text()); 0097 ui.Model->clear(); 0098 ui.Vendor->clear(); 0099 ui.Aperture->setValue(0); 0100 ui.FocalLength->setValue(0); 0101 loadEquipment(); 0102 } 0103 0104 void EquipmentWriter::slotSaveScope() 0105 { 0106 KStarsData::Instance()->userdb()->AddScope(ui.Model->text(), 0107 ui.Vendor->text(), 0108 ui.Type->currentText(), 0109 ui.Aperture->value(), 0110 ui.FocalLength->value(), 0111 ui.Id->text()); 0112 0113 loadEquipment(); 0114 } 0115 0116 void EquipmentWriter::slotSetScope(QString name) 0117 { 0118 //TODO: maybe this should also use the DB? ~~spacetime 0119 OAL::Scope *s = KStarsData::Instance()->logObject()->findScopeByName(name); 0120 if (s) 0121 { 0122 ui.Id->setText(s->id()); 0123 ui.Model->setText(s->model()); 0124 ui.Vendor->setText(s->vendor()); 0125 ui.Type->setCurrentIndex(ui.Type->findText(s->type())); 0126 ui.Aperture->setValue(s->aperture()); 0127 ui.FocalLength->setValue(s->focalLength()); 0128 newScope = false; 0129 } 0130 } 0131 void EquipmentWriter::slotNewScope() 0132 { 0133 ui.Id->clear(); 0134 ui.Model->clear(); 0135 ui.Vendor->clear(); 0136 ui.FocalLength->setValue(0); 0137 ui.ScopeList->selectionModel()->clear(); 0138 newScope = true; 0139 } 0140 0141 ////////////////////////////////////////////////////////////////////////////////////////// 0142 /// DSLR lens 0143 ////////////////////////////////////////////////////////////////////////////////////////// 0144 0145 void EquipmentWriter::slotAddDSLRLens() 0146 { 0147 KStarsData::Instance()->userdb()->AddDSLRLens( 0148 ui.DSLR_model->text(), 0149 ui.DSLR_vendor->text(), 0150 ui.DSLRFocalLength->value(), 0151 ui.DSLRFocalRatio->value()); 0152 loadEquipment(); 0153 ui.DSLR_model->clear(); 0154 ui.DSLR_vendor->clear(); 0155 ui.DSLRFocalLength->setValue(24); 0156 ui.DSLRFocalRatio->setValue(2.8); 0157 } 0158 0159 void EquipmentWriter::slotRemoveDSLRLens() 0160 { 0161 KStarsData::Instance()->userdb()->DeleteEquipment("dslrlens", ui.DSLR_id->text()); 0162 ui.DSLR_model->clear(); 0163 ui.DSLR_vendor->clear(); 0164 ui.DSLRFocalLength->setValue(24); 0165 ui.DSLRFocalRatio->setValue(2.8); 0166 loadEquipment(); 0167 } 0168 0169 void EquipmentWriter::slotSaveDSLRLens() 0170 { 0171 KStarsData::Instance()->userdb()->AddDSLRLens( 0172 ui.DSLR_model->text(), 0173 ui.DSLR_vendor->text(), 0174 ui.DSLRFocalLength->value(), 0175 ui.DSLRFocalRatio->value(), 0176 ui.DSLR_id->text()); 0177 0178 loadEquipment(); 0179 } 0180 0181 void EquipmentWriter::slotSetDSLRLens(QString name) 0182 { 0183 OAL::DSLRLens *s = KStarsData::Instance()->logObject()->findDSLRLensByName(name); 0184 if (s) 0185 { 0186 ui.DSLR_id->setText(s->id()); 0187 ui.DSLR_model->setText(s->model()); 0188 ui.DSLR_vendor->setText(s->vendor()); 0189 ui.DSLRFocalLength->setValue(s->focalLength()); 0190 ui.DSLRFocalRatio->setValue(s->focalRatio()); 0191 newDSLRLens = false; 0192 } 0193 } 0194 0195 void EquipmentWriter::slotNewDSLRLens() 0196 { 0197 ui.DSLR_id->clear(); 0198 ui.DSLR_model->clear(); 0199 ui.DSLR_vendor->clear(); 0200 ui.DSLRFocalLength->setValue(24); 0201 ui.DSLRFocalRatio->setValue(2.8); 0202 ui.DSLRLensList->selectionModel()->clear(); 0203 newDSLRLens = true; 0204 } 0205 0206 ////////////////////////////////////////////////////////////////////////////////////////// 0207 /// Eyepeices 0208 ////////////////////////////////////////////////////////////////////////////////////////// 0209 0210 void EquipmentWriter::slotAddEyepiece() 0211 { 0212 KStarsData::Instance()->userdb()->AddEyepiece(ui.e_Vendor->text(), ui.e_Model->text(), ui.e_focalLength->value(), 0213 ui.Fov->value(), ui.FovUnit->currentText()); 0214 loadEquipment(); 0215 ui.e_Id->clear(); 0216 ui.e_Model->clear(); 0217 ui.e_Vendor->clear(); 0218 ui.Fov->setValue(0); 0219 ui.e_focalLength->setValue(0); 0220 } 0221 0222 void EquipmentWriter::slotRemoveEyepiece() 0223 { 0224 KStarsData::Instance()->userdb()->DeleteEquipment("eyepiece", ui.e_Id->text()); 0225 loadEquipment(); 0226 ui.e_Id->clear(); 0227 ui.e_Model->clear(); 0228 ui.e_Vendor->clear(); 0229 ui.Fov->setValue(0); 0230 ui.e_focalLength->setValue(0); 0231 ui.EyepieceList->clear(); 0232 foreach (OAL::Eyepiece *e, *(KStarsData::Instance()->logObject()->eyepieceList())) 0233 ui.EyepieceList->addItem(e->name()); 0234 } 0235 void EquipmentWriter::slotSaveEyepiece() 0236 { 0237 KStarsData::Instance()->userdb()->AddEyepiece(ui.e_Vendor->text(), ui.e_Model->text(), ui.e_focalLength->value(), 0238 ui.Fov->value(), ui.FovUnit->currentText(), ui.e_Id->text()); 0239 loadEquipment(); 0240 } 0241 0242 void EquipmentWriter::slotSetEyepiece(QString name) 0243 { 0244 //TODO: maybe this should also use the DB? ~~spacetime 0245 OAL::Eyepiece *e; 0246 e = KStarsData::Instance()->logObject()->findEyepieceByName(name); 0247 if (e) 0248 { 0249 ui.e_Id->setText(e->id()); 0250 ui.e_Model->setText(e->model()); 0251 ui.e_Vendor->setText(e->vendor()); 0252 ui.Fov->setValue(e->appFov()); 0253 ui.e_focalLength->setValue(e->focalLength()); 0254 newEyepiece = false; 0255 } 0256 } 0257 0258 void EquipmentWriter::slotNewEyepiece() 0259 { 0260 ui.e_Id->clear(); 0261 ui.e_Model->clear(); 0262 ui.e_Vendor->clear(); 0263 ui.Fov->setValue(0); 0264 ui.e_focalLength->setValue(0); 0265 ui.EyepieceList->selectionModel()->clear(); 0266 newEyepiece = true; 0267 } 0268 0269 void EquipmentWriter::slotAddLens() 0270 { 0271 KStarsData::Instance()->userdb()->AddLens(ui.l_Vendor->text(), ui.l_Model->text(), ui.l_Factor->value()); 0272 loadEquipment(); 0273 ui.l_Id->clear(); 0274 ui.l_Model->clear(); 0275 ui.l_Vendor->clear(); 0276 ui.l_Factor->setValue(0); 0277 } 0278 0279 void EquipmentWriter::slotRemoveLens() 0280 { 0281 KStarsData::Instance()->userdb()->DeleteEquipment("lens", ui.l_Id->text()); 0282 loadEquipment(); 0283 ui.l_Id->clear(); 0284 ui.l_Model->clear(); 0285 ui.l_Vendor->clear(); 0286 ui.l_Factor->setValue(0); 0287 ui.LensList->clear(); 0288 foreach (OAL::Lens *l, *(KStarsData::Instance()->logObject()->lensList())) 0289 ui.LensList->addItem(l->name()); 0290 } 0291 void EquipmentWriter::slotSaveLens() 0292 { 0293 KStarsData::Instance()->userdb()->AddLens(ui.l_Vendor->text(), ui.l_Model->text(), ui.l_Factor->value(), 0294 ui.l_Id->text()); 0295 loadEquipment(); 0296 } 0297 0298 void EquipmentWriter::slotSetLens(QString name) 0299 { 0300 OAL::Lens *l; 0301 l = KStarsData::Instance()->logObject()->findLensByName(name); 0302 if (l) 0303 { 0304 ui.l_Id->setText(l->id()); 0305 ui.l_Model->setText(l->model()); 0306 ui.l_Vendor->setText(l->vendor()); 0307 ui.l_Factor->setValue(l->factor()); 0308 newLens = false; 0309 } 0310 } 0311 0312 void EquipmentWriter::slotNewLens() 0313 { 0314 ui.l_Id->clear(); 0315 ui.l_Model->clear(); 0316 ui.l_Vendor->clear(); 0317 ui.l_Factor->setValue(0); 0318 ui.LensList->selectionModel()->clear(); 0319 newLens = true; 0320 } 0321 0322 void EquipmentWriter::slotAddFilter() 0323 { 0324 filterProperties *fp = new filterProperties(ui.f_Vendor->text(), ui.f_Model->text(), ui.f_Type->text(), 0325 ui.f_Color->text(), ui.f_Offset->value(), ui.f_Exposure->value(), ui.f_UseAutoFocus->isChecked(), 0326 ui.f_LockedFilter->text(), 0, Ekos::INVALID_VALUE, Ekos::INVALID_VALUE, ui.f_FocusTicksPerTemp->value(), 0327 ui.f_FocusTicksPerAlt->value(), ui.f_Wavelength->value()); 0328 KStarsData::Instance()->userdb()->AddFilter(fp, ui.f_Vendor->text()); 0329 0330 loadEquipment(); 0331 ui.f_Id->clear(); 0332 ui.f_Model->clear(); 0333 ui.f_Vendor->clear(); 0334 ui.f_Type->clear(); 0335 ui.f_Offset->setValue(0); 0336 ui.f_Color->clear(); 0337 ui.f_Exposure->setValue(1); 0338 ui.f_LockedFilter->setText(NULL_FILTER); 0339 ui.f_UseAutoFocus->setChecked(false); 0340 ui.f_FocusTemperature->setValue(Ekos::INVALID_VALUE); 0341 ui.f_FocusAltitude->setValue(Ekos::INVALID_VALUE); 0342 ui.f_FocusTicksPerTemp->setValue(0.0); 0343 ui.f_FocusTicksPerAlt->setValue(0.0); 0344 ui.f_Wavelength->setValue(500.0); 0345 0346 } 0347 0348 void EquipmentWriter::slotRemoveFilter() 0349 { 0350 KStarsData::Instance()->userdb()->DeleteEquipment("filter", ui.f_Id->text()); 0351 loadEquipment(); 0352 ui.f_Id->clear(); 0353 ui.f_Model->clear(); 0354 ui.f_Vendor->clear(); 0355 ui.f_Type->clear(); 0356 ui.f_Offset->setValue(0); 0357 ui.f_Color->clear(); 0358 ui.f_Exposure->setValue(0); 0359 ui.f_LockedFilter->setText(NULL_FILTER); 0360 ui.f_UseAutoFocus->setChecked(false); 0361 ui.f_FocusTemperature->setValue(Ekos::INVALID_VALUE); 0362 ui.f_FocusAltitude->setValue(Ekos::INVALID_VALUE); 0363 ui.f_FocusTicksPerTemp->setValue(0.0); 0364 ui.f_FocusTicksPerAlt->setValue(0.0); 0365 ui.f_Wavelength->setValue(500.0); 0366 ui.FilterList->clear(); 0367 foreach (OAL::Filter *f, *(KStarsData::Instance()->logObject()->filterList())) 0368 ui.FilterList->addItem(f->name()); 0369 } 0370 0371 void EquipmentWriter::slotSaveFilter() 0372 { 0373 filterProperties *fp = new filterProperties(ui.f_Vendor->text(), ui.f_Model->text(), ui.f_Type->text(), 0374 ui.f_Color->text(), ui.f_Offset->value(), ui.f_Exposure->value(), ui.f_UseAutoFocus->isChecked(), 0375 ui.f_LockedFilter->text(), ui.f_AbsoluteFocusPosition->value(), ui.f_FocusTemperature->value(), 0376 ui.f_FocusAltitude->value(), ui.f_FocusTicksPerTemp->value(), ui.f_FocusTicksPerAlt->value(), 0377 ui.f_Wavelength->value()); 0378 // Add 0379 if (ui.f_Id->text().isEmpty()) 0380 KStarsData::Instance()->userdb()->AddFilter(fp); 0381 // Update Existing 0382 else 0383 KStarsData::Instance()->userdb()->AddFilter(fp, ui.f_Id->text()); 0384 0385 loadEquipment(); 0386 } 0387 0388 void EquipmentWriter::slotSetFilter(QString name) 0389 { 0390 OAL::Filter *f; 0391 f = KStarsData::Instance()->logObject()->findFilterByName(name); 0392 if (f) 0393 { 0394 ui.f_Id->setText(f->id()); 0395 ui.f_Model->setText(f->model()); 0396 ui.f_Vendor->setText(f->vendor()); 0397 ui.f_Type->setText(f->type()); 0398 ui.f_Color->setText(f->color()); 0399 ui.f_Offset->setValue(f->offset()); 0400 ui.f_Exposure->setValue(f->exposure()); 0401 ui.f_LockedFilter->setText(f->lockedFilter()); 0402 ui.f_UseAutoFocus->setChecked(f->useAutoFocus()); 0403 ui.f_AbsoluteFocusPosition->setValue(f->absoluteFocusPosition()); 0404 ui.f_FocusTemperature->setValue(f->focusTemperature()); 0405 ui.f_FocusAltitude->setValue(f->focusAltitude()); 0406 ui.f_FocusTicksPerTemp->setValue(f->focusTicksPerTemp()); 0407 ui.f_FocusTicksPerAlt->setValue(f->focusTicksPerAlt()); 0408 ui.f_Wavelength->setValue(f->wavelength()); 0409 newFilter = false; 0410 } 0411 } 0412 0413 void EquipmentWriter::slotNewFilter() 0414 { 0415 ui.f_Id->clear(); 0416 ui.f_Model->clear(); 0417 ui.f_Vendor->clear(); 0418 ui.f_Type->clear(); 0419 ui.f_Model->clear(); 0420 ui.f_Color->clear(); 0421 ui.f_Offset->setValue(0); 0422 ui.f_Exposure->setValue(1); 0423 ui.f_LockedFilter->setText(NULL_FILTER); 0424 ui.f_UseAutoFocus->setChecked(false); 0425 ui.f_AbsoluteFocusPosition->setValue(0); 0426 ui.f_FocusTemperature->setValue(Ekos::INVALID_VALUE); 0427 ui.f_FocusAltitude->setValue(Ekos::INVALID_VALUE); 0428 ui.f_FocusTicksPerTemp->setValue(0.0); 0429 ui.f_FocusTicksPerAlt->setValue(0.0); 0430 ui.f_Wavelength->setValue(500.0); 0431 ui.FilterList->selectionModel()->clear(); 0432 newFilter = true; 0433 } 0434 0435 void EquipmentWriter::loadEquipment() 0436 { 0437 KStarsData::Instance()->logObject()->readScopes(); 0438 KStarsData::Instance()->logObject()->readEyepieces(); 0439 KStarsData::Instance()->logObject()->readLenses(); 0440 KStarsData::Instance()->logObject()->readFilters(); 0441 KStarsData::Instance()->logObject()->readDSLRLenses(); 0442 ui.ScopeList->clear(); 0443 ui.EyepieceList->clear(); 0444 ui.LensList->clear(); 0445 ui.FilterList->clear(); 0446 ui.DSLRLensList->clear(); 0447 foreach (OAL::Scope *s, *(KStarsData::Instance()->logObject()->scopeList())) 0448 ui.ScopeList->addItem(s->name()); 0449 foreach (OAL::Eyepiece *e, *(KStarsData::Instance()->logObject()->eyepieceList())) 0450 ui.EyepieceList->addItem(e->name()); 0451 foreach (OAL::Lens *l, *(KStarsData::Instance()->logObject()->lensList())) 0452 ui.LensList->addItem(l->name()); 0453 foreach (OAL::Filter *f, *(KStarsData::Instance()->logObject()->filterList())) 0454 ui.FilterList->addItem(f->name()); 0455 foreach (OAL::DSLRLens *l, *(KStarsData::Instance()->logObject()->dslrLensList())) 0456 ui.DSLRLensList->addItem(l->name()); 0457 0458 #ifdef HAVE_INDI 0459 DriverManager::Instance()->updateCustomDrivers(); 0460 #endif 0461 } 0462 0463 void EquipmentWriter::slotSave() 0464 { 0465 switch (ui.tabWidget->currentIndex()) 0466 { 0467 case 0: 0468 { 0469 if (newScope) 0470 slotAddScope(); 0471 else 0472 slotSaveScope(); 0473 ui.ScopeList->clear(); 0474 foreach (OAL::Scope *s, *(KStarsData::Instance()->logObject()->scopeList())) 0475 ui.ScopeList->addItem(s->name()); 0476 break; 0477 } 0478 case 1: 0479 { 0480 if (newEyepiece) 0481 slotAddEyepiece(); 0482 else 0483 slotSaveEyepiece(); 0484 ui.EyepieceList->clear(); 0485 foreach (OAL::Eyepiece *e, *(KStarsData::Instance()->logObject()->eyepieceList())) 0486 ui.EyepieceList->addItem(e->name()); 0487 break; 0488 } 0489 case 2: 0490 { 0491 if (newDSLRLens) 0492 slotAddDSLRLens(); 0493 else 0494 slotSaveDSLRLens(); 0495 ui.DSLRLensList->clear(); 0496 for (const auto &l : * (KStarsData::Instance()->logObject()->dslrLensList())) 0497 ui.DSLRLensList->addItem(l->name()); 0498 break; 0499 } 0500 case 3: 0501 { 0502 if (newLens) 0503 slotAddLens(); 0504 else 0505 slotSaveLens(); 0506 ui.LensList->clear(); 0507 foreach (OAL::Lens *l, *(KStarsData::Instance()->logObject()->lensList())) 0508 ui.LensList->addItem(l->name()); 0509 break; 0510 } 0511 case 4: 0512 { 0513 if (newFilter) 0514 slotAddFilter(); 0515 else 0516 slotSaveFilter(); 0517 ui.FilterList->clear(); 0518 foreach (OAL::Filter *f, *(KStarsData::Instance()->logObject()->filterList())) 0519 ui.FilterList->addItem(f->name()); 0520 break; 0521 } 0522 } 0523 } 0524 0525 void EquipmentWriter::slotClose() 0526 { 0527 hide(); 0528 }