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)