File indexing completed on 2024-05-05 03:50:41

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2012 Rene Kuettner <rene@bitkanal.net>
0004 //
0005 
0006 #include "EclipsesBrowserDialog.h"
0007 
0008 #include "MarbleModel.h"
0009 #include "MarbleClock.h"
0010 #include "MarbleDebug.h"
0011 
0012 #include "EclipsesModel.h"
0013 #include "EclipsesItem.h"
0014 
0015 #include "ui_EclipsesBrowserDialog.h"
0016 
0017 namespace Marble {
0018 
0019 EclipsesBrowserDialog::EclipsesBrowserDialog( const MarbleModel *model,
0020                                         QWidget *parent )
0021     : QDialog( parent ),
0022     m_marbleModel( model ),
0023     m_browserWidget(nullptr)
0024 {
0025     initialize();
0026 }
0027 
0028 EclipsesBrowserDialog::~EclipsesBrowserDialog()
0029 {
0030     delete m_eclModel;
0031     delete m_browserWidget;
0032 }
0033 
0034 void EclipsesBrowserDialog::setYear( int year )
0035 {
0036     m_browserWidget->spinBoxYear->setValue( year );
0037 }
0038 
0039 int EclipsesBrowserDialog::year() const
0040 {
0041     return m_browserWidget->spinBoxYear->value();
0042 }
0043 
0044 void EclipsesBrowserDialog::setWithLunarEclipses( const bool enable )
0045 {
0046     if( m_eclModel->withLunarEclipses() != enable ) {
0047         m_eclModel->setWithLunarEclipses( enable );
0048         m_eclModel->update();
0049     }
0050 }
0051 
0052 bool EclipsesBrowserDialog::withLunarEclipses() const
0053 {
0054     return m_eclModel->withLunarEclipses();
0055 }
0056 
0057 void EclipsesBrowserDialog::accept()
0058 {
0059     QItemSelectionModel *s = m_browserWidget->treeView->selectionModel();
0060     QModelIndex selected = s->currentIndex();
0061 
0062     if( selected.isValid() ) {
0063         EclipsesItem *item = static_cast<EclipsesItem*>( selected.internalPointer() );
0064         emit buttonShowClicked( m_eclModel->year(), item->index() );
0065     }
0066 
0067     QDialog::accept();
0068 }
0069 
0070 void EclipsesBrowserDialog::updateEclipsesForYear( int year )
0071 {
0072     m_eclModel->setYear( year );
0073     updateButtonStates();
0074 }
0075 
0076 void EclipsesBrowserDialog::updateButtonStates()
0077 {
0078     QItemSelectionModel *s = m_browserWidget->treeView->selectionModel();
0079     m_browserWidget->buttonShow->setEnabled( s->hasSelection() );
0080 }
0081 
0082 void EclipsesBrowserDialog::initialize()
0083 {
0084     delete m_browserWidget;
0085     m_browserWidget = new Ui::EclipsesBrowserDialog();
0086     m_browserWidget->setupUi( this );
0087 
0088     m_browserWidget->treeView->setExpandsOnDoubleClick( false );
0089 
0090     m_eclModel = new EclipsesModel( m_marbleModel );
0091     m_browserWidget->treeView->setModel( m_eclModel );
0092 
0093     connect( m_browserWidget->buttonShow, SIGNAL(clicked()),
0094              this, SLOT(accept()) );
0095     connect( m_browserWidget->buttonClose, SIGNAL(clicked()),
0096              this, SLOT(reject()) );
0097     connect( m_browserWidget->spinBoxYear, SIGNAL(valueChanged(int)),
0098              this, SLOT(updateEclipsesForYear(int)) );
0099     connect( m_browserWidget->treeView->selectionModel(),
0100              SIGNAL(selectionChanged(const QItemSelection&,
0101                                      const QItemSelection&)),
0102              this, SLOT(updateButtonStates()) );
0103     connect( m_browserWidget->buttonSettings, SIGNAL(clicked()),
0104              SIGNAL(buttonSettingsClicked()) );
0105 
0106     setYear( m_marbleModel->clock()->dateTime().date().year() );
0107 
0108     update();
0109 
0110     m_browserWidget->treeView->resizeColumnToContents(2);
0111     m_browserWidget->treeView->resizeColumnToContents(3);
0112 }
0113 
0114 } // namespace Marble
0115 
0116 #include "moc_EclipsesBrowserDialog.cpp"
0117