19 #include <QStandardItemModel> 
   20 #include <QSortFilterProxyModel> 
   21 #include <QHeaderView> 
   23 #include <kmessagebox.h> 
   24 #include <kstandarddirs.h> 
   44     QStringList flagNames;
 
   49     setCaption( i18n( 
"Flag manager" ) );
 
   50     setButtons( KDialog::Close );
 
   55     m_Model = 
new QStandardItemModel( 0, 5, 
this );
 
   56     m_Model->setHorizontalHeaderLabels( QStringList() << 
i18nc( 
"Right Ascension", 
"RA" ) 
 
   57             << 
i18nc( 
"Declination", 
"Dec" ) << i18n( 
"Epoch" ) 
 
   58             << i18n( 
"Icon" ) << i18n( 
"Label" ) );
 
   60     m_SortModel->setSourceModel( m_Model );
 
   61     m_SortModel->setDynamicSortFilter( 
true );
 
   62     ui->flagList->setModel( m_SortModel );
 
   63     ui->flagList->horizontalHeader()->setStretchLastSection( 
true );
 
   64     ui->flagList->horizontalHeader()->setResizeMode( QHeaderView::ResizeToContents );
 
   66     ui->saveButton->setEnabled( 
false );
 
   76         QStandardItem* labelItem = 
new QStandardItem( flags->
label( i ) );
 
   77         labelItem->setForeground( QBrush( flags->
labelColor( i ) ) );
 
   79         itemList << 
new QStandardItem( flags->
pointList().at( i )->ra0().toHMSString() )
 
   80                 << 
new QStandardItem( flags->
pointList().at( i )->dec0().toDMSString() )
 
   81                 << 
new QStandardItem( flags->
epoch( i ) )
 
   82                 << 
new QStandardItem( QIcon( pixmap.fromImage( flags->
image( i ) ) ), flags->
imageName( i ) )
 
   84         m_Model->appendRow( itemList );
 
   89     for ( i=0; i< imageList.size(); ++i ) {
 
   90         ui->flagCombobox->addItem( QIcon( pixmap.fromImage( flags->
imageList( i ) ) ), flagNames.at( i ), flagNames.at( i ) );
 
   94     connect( ui->addButton, SIGNAL( clicked() ), 
this, SLOT( 
slotAddFlag() ) );
 
   95     connect( ui->delButton, SIGNAL( clicked() ), 
this, SLOT( 
slotDeleteFlag() ) );
 
   96     connect( ui->CenterButton, SIGNAL( clicked() ), 
this, SLOT( 
slotCenterFlag() ) );
 
   97     connect( ui->flagList, SIGNAL( clicked(QModelIndex) ), 
this, SLOT( slotSetShownFlag(QModelIndex) ) );
 
   98     connect( ui->flagList, SIGNAL( doubleClicked( 
const QModelIndex& ) ), 
this, SLOT( 
slotCenterFlag() ) );
 
  100     connect( ui->saveButton, SIGNAL( clicked() ), 
this, SLOT( slotSaveChanges() ) );
 
  109     ui->raBox->show( ra, 
false );
 
  110     ui->decBox->show( dec, 
true );
 
  117     ui->epochBox->setText( 
"2000.0" );
 
  118     ui->flagLabel->clear();
 
  119     ui->flagLabel->setFocus();
 
  122     ui->saveButton->setEnabled( 
false );
 
  125     ui->flagList->clearSelection();
 
  130     if ( flagIdx < 0 || flagIdx >= m_Model->rowCount() ) {
 
  135         ui->raBox->setText( m_Model->data( m_Model->index( flagIdx, 0) ).toString() );
 
  136         ui->decBox->setText( m_Model->data( m_Model->index( flagIdx, 1) ).toString() );
 
  137         ui->epochBox->setText( m_Model->data( m_Model->index( flagIdx, 2) ).toString() );
 
  139         ui->flagCombobox->setCurrentItem( m_Model->data( m_Model->index( flagIdx, 3) ).toString() );
 
  140         ui->flagLabel->setText( m_Model->data( m_Model->index( flagIdx, 4) ).toString() );
 
  142         QColor labelColor = m_Model->item( flagIdx, 4 )->foreground().color();
 
  143         ui->labelColorcombo->setColor( labelColor );
 
  146     ui->flagList->selectRow( flagIdx );
 
  147     ui->saveButton->setEnabled( 
true );
 
  151     bool raOk(
false), decOk(
false);
 
  152     dms ra( ui->raBox->createDms( 
false, &raOk ) ); 
 
  153     dms dec( ui->decBox->createDms( 
true, &decOk ) );
 
  158     if ( !raOk || !decOk ) {
 
  163     if ( ra.Hours() < 0.0 || ra.Hours() > 24.0 )
 
  164         message = i18n( 
"The Right Ascension value must be between 0.0 and 24.0." );
 
  165     if ( dec.Degrees() < -90.0 || dec.Degrees() > 90.0 )
 
  166         message += 
'\n' + i18n( 
"The Declination value must be between -90.0 and 90.0." );
 
  167     if ( ! message.isEmpty() ) {
 
  168         KMessageBox::sorry( 0, message, i18n( 
"Invalid Coordinate Data" ) );
 
  177     if ( flagIdx < m_Model->rowCount() ) {
 
  178         m_Model->removeRow( flagIdx );
 
  183     dms ra( ui->raBox->createDms( 
false) ); 
 
  184     dms dec( ui->decBox->createDms( 
true ) );
 
  189     FlagComponent *flags = m_Ks->data()->skyComposite()->flags();
 
  191     flags->
add( flagPoint, ui->epochBox->text(), ui->flagCombobox->currentText(), ui->flagLabel->text(), ui->labelColorcombo->color() );
 
  193     ui->flagList->selectRow( m_Model->rowCount() - 1 );
 
  194     ui->saveButton->setEnabled( 
true );
 
  199     m_Ks->map()->forceUpdate(
false);
 
  204     int flag = ui->flagList->currentIndex().row();
 
  207     m_Ks->data()->skyComposite()->flags()->remove( flag );
 
  210     m_Model->removeRow( flag );
 
  216     m_Ks->data()->skyComposite()->flags()->saveToFile();
 
  219     m_Ks->map()->forceUpdate(
false);
 
  223     if ( ui->flagList->currentIndex().isValid() ) {
 
  224         m_Ks->map()->setClickedObject( 0 );
 
  225         m_Ks->map()->setClickedPoint( m_Ks->data()->skyComposite()->flags()->pointList().at( ui->flagList->currentIndex().row() ) );
 
  226         m_Ks->map()->slotCenter();
 
  230 void FlagManager::slotSaveChanges() {
 
  231     int row = ui->flagList->currentIndex().row();
 
  235     insertFlag( 
false, row );
 
  237     m_Ks->map()->forceUpdate();
 
  239     dms ra( ui->raBox->createDms( 
false) ); 
 
  240     dms dec( ui->decBox->createDms( 
true ) );
 
  245     m_Ks->data()->skyComposite()->flags()->updateFlag( row, flagPoint, ui->epochBox->text(), ui->flagCombobox->currentText(),
 
  246                                                        ui->flagLabel->text(), ui->labelColorcombo->color() );
 
  249     m_Ks->data()->skyComposite()->flags()->saveToFile();
 
  252 void FlagManager::slotSetShownFlag( QModelIndex idx ) {
 
  253     showFlag ( idx.row() );
 
  256 void FlagManager::insertFlag( 
bool isNew, 
int row ) {
 
  257     dms ra( ui->raBox->createDms( 
false) ); 
 
  258     dms dec( ui->decBox->createDms( 
true ) );
 
  264     QStandardItem* labelItem = 
new QStandardItem( ui->flagLabel->text() );
 
  265     labelItem->setForeground( QBrush( ui->labelColorcombo->color() ) );
 
  267     FlagComponent *flags = m_Ks->data()->skyComposite()->flags();
 
  270     itemList << 
new QStandardItem( flagPoint->ra0().toHMSString() )
 
  271             << 
new QStandardItem( flagPoint->dec0().toDMSString() )
 
  272             << 
new QStandardItem( ui->epochBox->text() )
 
  273             << 
new QStandardItem( QIcon( pixmap.fromImage( flags->
imageList( ui->flagCombobox->currentIndex() ) ) ),
 
  274                                   ui->flagCombobox->currentText() )
 
  278         m_Model->appendRow(itemList);
 
  282         for( 
int i = 0; i < m_Model->columnCount(); i++ ) {
 
  283             m_Model->setItem( row, i , itemList.at( i ) );
 
  288 #include "flagmanager.moc" 
int size()
Return the numbers of flags. 
 
QString imageName(int index)
Get image name. 
 
void slotDeleteFlag()
Delete a flag. 
 
QStringList getNames()
Return image names. 
 
Represents a flag on the sky map. 
 
void deleteFlagItem(int flagIdx)
 
void slotAddFlag()
Verify coordinates and add a flag. 
 
static KStars * Instance()
 
QImage image(int index)
Get image. 
 
The sky coordinates of a point in the sky. 
 
void slotCenterFlag()
Center the selected object in the display. 
 
FlagManagerUI(QWidget *parent)
Constructor. 
 
QString label(int index)
Get label. 
 
void add(SkyPoint *flagPoint, QString epoch, QString image, QString label, QColor labelColor)
Add a flag. 
 
i18nc("string from libindi, used in the config dialog","100x")
 
void setRaDec(const dms &ra, const dms &dec)
 
SkyMapComposite * skyComposite()
 
An angle, stored as degrees, but expressible in many ways. 
 
QList< SkyPoint * > & pointList()
 
void saveToFile()
Save flags to flags.dat file. 
 
~FlagManager()
Destructor. 
 
QColor labelColor(int index)
Get label color. 
 
KStarsData * data() const 
 
FlagManager(QWidget *ks)
Constructor. 
 
QList< QImage > imageList()
Get images. 
 
QString epoch(int index)
Get epoch. 
 
void showFlag(const int flagIdx)