• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

kstars

  • sources
  • kde-4.12
  • kdeedu
  • kstars
  • kstars
  • tools
flagmanager.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  flagmanager.cpp - Flags manager
3  -------------------
4  begin : Mon Feb 01 2009
5  copyright : (C) 2009 by Jerome SONRIER
6  email : jsid@emor3j.fr.eu.org
7  ***************************************************************************/
8 /***************************************************************************
9  * *
10  * This program is free software; you can redistribute it and/or modify *
11  * it under the terms of the GNU General Public License as published by *
12  * the Free Software Foundation; either version 2 of the License, or *
13  * (at your option) any later version. *
14  * *
15  ***************************************************************************/
16 
17 #include "flagmanager.h"
18 
19 #include <QStandardItemModel>
20 #include <QSortFilterProxyModel>
21 #include <QHeaderView>
22 
23 #include <kmessagebox.h>
24 #include <kstandarddirs.h>
25 
26 #include "Options.h"
27 #include "kstars.h"
28 #include "kstarsdata.h"
29 #include "skymap.h"
30 #include "skycomponents/flagcomponent.h"
31 #include "skycomponents/skymapcomposite.h"
32 
33 
34 FlagManagerUI::FlagManagerUI( QWidget *p ) : QFrame( p ) {
35  setupUi( this );
36 }
37 
38 
39 FlagManager::FlagManager( QWidget *ks )
40  : KDialog( ks )
41 {
42  QList<QStandardItem*> itemList;
43  QList<QImage> imageList;
44  QStringList flagNames;
45  int i;
46 
47  ui = new FlagManagerUI( this );
48  setMainWidget( ui );
49  setCaption( i18n( "Flag manager" ) );
50  setButtons( KDialog::Close );
51 
52  m_Ks = KStars::Instance();
53 
54  //Set up the Table Views
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" ) );
59  m_SortModel = new QSortFilterProxyModel( this );
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 );
65 
66  ui->saveButton->setEnabled( false );
67 
68  //Fill the list
69  imageList = m_Ks->data()->skyComposite()->flags()->imageList();
70  flagNames = m_Ks->data()->skyComposite()->flags()->getNames();
71 
72  FlagComponent *flags = m_Ks->data()->skyComposite()->flags();
73  QPixmap pixmap;
74 
75  for ( i=0; i<m_Ks->data()->skyComposite()->flags()->size(); ++i ) {
76  QStandardItem* labelItem = new QStandardItem( flags->label( i ) );
77  labelItem->setForeground( QBrush( flags->labelColor( i ) ) );
78 
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 ) )
83  << labelItem;
84  m_Model->appendRow( itemList );
85  itemList.clear();
86  }
87 
88  //Fill the combobox
89  for ( i=0; i< imageList.size(); ++i ) {
90  ui->flagCombobox->addItem( QIcon( pixmap.fromImage( flags->imageList( i ) ) ), flagNames.at( i ), flagNames.at( i ) );
91  }
92 
93  //Connect buttons
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() ) );
99 
100  connect( ui->saveButton, SIGNAL( clicked() ), this, SLOT( slotSaveChanges() ) );
101 }
102 
103 FlagManager::~FlagManager()
104 {
105 }
106 
107 void FlagManager::setRaDec( const dms &ra, const dms &dec )
108 {
109  ui->raBox->show( ra, false );
110  ui->decBox->show( dec, true );
111 }
112 
113 void FlagManager::clearFields() {
114  ui->raBox->clear();
115  ui->decBox->clear();
116 
117  ui->epochBox->setText( "2000.0" );
118  ui->flagLabel->clear();
119  ui->flagLabel->setFocus();
120 
121  //disable "Save changes" button
122  ui->saveButton->setEnabled( false );
123 
124  //unselect item from flagList
125  ui->flagList->clearSelection();
126 }
127 
128 void FlagManager::showFlag( int flagIdx )
129 {
130  if ( flagIdx < 0 || flagIdx >= m_Model->rowCount() ) {
131  return;
132  }
133 
134  else {
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() );
138 
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() );
141 
142  QColor labelColor = m_Model->item( flagIdx, 4 )->foreground().color();
143  ui->labelColorcombo->setColor( labelColor );
144  }
145 
146  ui->flagList->selectRow( flagIdx );
147  ui->saveButton->setEnabled( true );
148 }
149 
150 bool FlagManager::validatePoint() {
151  bool raOk(false), decOk(false);
152  dms ra( ui->raBox->createDms( false, &raOk ) ); //false means expressed in hours
153  dms dec( ui->decBox->createDms( true, &decOk ) );
154 
155  QString message;
156 
157  //check if ra & dec values were successfully converted
158  if ( !raOk || !decOk ) {
159  return false;
160  }
161 
162  //make sure values are in valid range
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" ) );
169  return false;
170  }
171 
172  //all checks passed
173  return true;
174 }
175 
176 void FlagManager::deleteFlagItem( int flagIdx ) {
177  if ( flagIdx < m_Model->rowCount() ) {
178  m_Model->removeRow( flagIdx );
179  }
180 }
181 
182 void FlagManager::slotAddFlag() {
183  dms ra( ui->raBox->createDms( false) ); //false means expressed in hours
184  dms dec( ui->decBox->createDms( true ) );
185  SkyPoint* flagPoint = new SkyPoint( ra, dec );
186 
187  insertFlag( true );
188 
189  FlagComponent *flags = m_Ks->data()->skyComposite()->flags();
190  //Add flag in FlagComponent
191  flags->add( flagPoint, ui->epochBox->text(), ui->flagCombobox->currentText(), ui->flagLabel->text(), ui->labelColorcombo->color() );
192 
193  ui->flagList->selectRow( m_Model->rowCount() - 1 );
194  ui->saveButton->setEnabled( true );
195 
196  flags->saveToFile();
197 
198  //Redraw map
199  m_Ks->map()->forceUpdate(false);
200 }
201 
202 
203 void FlagManager::slotDeleteFlag() {
204  int flag = ui->flagList->currentIndex().row();
205 
206  //Remove from FlagComponent
207  m_Ks->data()->skyComposite()->flags()->remove( flag );
208 
209  //Remove from list
210  m_Model->removeRow( flag );
211 
212  //Clear form fields
213  clearFields();
214 
215  //Remove from file
216  m_Ks->data()->skyComposite()->flags()->saveToFile();
217 
218  //Redraw map
219  m_Ks->map()->forceUpdate(false);
220 }
221 
222 void FlagManager::slotCenterFlag() {
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();
227  }
228 }
229 
230 void FlagManager::slotSaveChanges() {
231  int row = ui->flagList->currentIndex().row();
232 
233  validatePoint();
234 
235  insertFlag( false, row );
236 
237  m_Ks->map()->forceUpdate();
238 
239  dms ra( ui->raBox->createDms( false) ); //false means expressed in hours
240  dms dec( ui->decBox->createDms( true ) );
241 
242  SkyPoint* flagPoint = new SkyPoint( ra, dec );
243 
244  //Update FlagComponent
245  m_Ks->data()->skyComposite()->flags()->updateFlag( row, flagPoint, ui->epochBox->text(), ui->flagCombobox->currentText(),
246  ui->flagLabel->text(), ui->labelColorcombo->color() );
247 
248  //Save changes to file
249  m_Ks->data()->skyComposite()->flags()->saveToFile();
250 }
251 
252 void FlagManager::slotSetShownFlag( QModelIndex idx ) {
253  showFlag ( idx.row() );
254 }
255 
256 void FlagManager::insertFlag( bool isNew, int row ) {
257  dms ra( ui->raBox->createDms( false) ); //false means expressed in hours
258  dms dec( ui->decBox->createDms( true ) );
259  SkyPoint *flagPoint = new SkyPoint( ra, dec );
260 
261  // Add flag in the list
262  QList<QStandardItem*> itemList;
263 
264  QStandardItem* labelItem = new QStandardItem( ui->flagLabel->text() );
265  labelItem->setForeground( QBrush( ui->labelColorcombo->color() ) );
266 
267  FlagComponent *flags = m_Ks->data()->skyComposite()->flags();
268 
269  QPixmap pixmap;
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() )
275  << labelItem;
276 
277  if (isNew) {
278  m_Model->appendRow(itemList);
279  }
280 
281  else {
282  for( int i = 0; i < m_Model->columnCount(); i++ ) {
283  m_Model->setItem( row, i , itemList.at( i ) );
284  }
285  }
286 }
287 
288 #include "flagmanager.moc"
FlagComponent::size
int size()
Return the numbers of flags.
Definition: flagcomponent.cpp:213
FlagComponent::imageName
QString imageName(int index)
Get image name.
Definition: flagcomponent.cpp:253
FlagManager::slotDeleteFlag
void slotDeleteFlag()
Delete a flag.
Definition: flagmanager.cpp:203
FlagComponent::getNames
QStringList getNames()
Return image names.
Definition: flagcomponent.cpp:209
FlagComponent
Represents a flag on the sky map.
Definition: flagcomponent.h:44
FlagManager::deleteFlagItem
void deleteFlagItem(int flagIdx)
Definition: flagmanager.cpp:176
QWidget
FlagManager::slotAddFlag
void slotAddFlag()
Verify coordinates and add a flag.
Definition: flagmanager.cpp:182
KStars::Instance
static KStars * Instance()
Definition: kstars.h:125
KDialog
FlagComponent::image
QImage image(int index)
Get image.
Definition: flagcomponent.cpp:241
FlagManagerUI
Definition: flagmanager.h:30
SkyPoint
The sky coordinates of a point in the sky.
Definition: skypoint.h:50
SkyMapComposite::flags
FlagComponent * flags()
Definition: skymapcomposite.cpp:605
FlagManager::slotCenterFlag
void slotCenterFlag()
Center the selected object in the display.
Definition: flagmanager.cpp:222
skymapcomposite.h
FlagManagerUI::FlagManagerUI
FlagManagerUI(QWidget *parent)
Constructor.
Definition: flagmanager.cpp:34
FlagComponent::label
QString label(int index)
Get label.
Definition: flagcomponent.cpp:225
FlagComponent::add
void add(SkyPoint *flagPoint, QString epoch, QString image, QString label, QColor labelColor)
Add a flag.
Definition: flagcomponent.cpp:131
skymap.h
i18nc
i18nc("string from libindi, used in the config dialog","100x")
FlagManager::setRaDec
void setRaDec(const dms &ra, const dms &dec)
Definition: flagmanager.cpp:107
KStarsData::skyComposite
SkyMapComposite * skyComposite()
Definition: kstarsdata.h:146
dms
An angle, stored as degrees, but expressible in many ways.
Definition: dms.h:42
QSortFilterProxyModel
PointListComponent::pointList
QList< SkyPoint * > & pointList()
Definition: pointlistcomponent.h:58
FlagComponent::saveToFile
void saveToFile()
Save flags to flags.dat file.
Definition: flagcomponent.cpp:114
FlagManager::clearFields
void clearFields()
Definition: flagmanager.cpp:113
Options.h
FlagManager::~FlagManager
~FlagManager()
Destructor.
Definition: flagmanager.cpp:103
FlagComponent::labelColor
QColor labelColor(int index)
Get label color.
Definition: flagcomponent.cpp:233
KStars::data
KStarsData * data() const
Definition: kstars.h:131
FlagManager::FlagManager
FlagManager(QWidget *ks)
Constructor.
Definition: flagmanager.cpp:39
kstarsdata.h
FlagManager::validatePoint
bool validatePoint()
Definition: flagmanager.cpp:150
flagmanager.h
QFrame
flagcomponent.h
kstars.h
FlagComponent::imageList
QList< QImage > imageList()
Get images.
Definition: flagcomponent.cpp:265
FlagComponent::epoch
QString epoch(int index)
Get epoch.
Definition: flagcomponent.cpp:217
FlagManager::showFlag
void showFlag(const int flagIdx)
Definition: flagmanager.cpp:128
QList
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:36:19 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kstars

Skip menu "kstars"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal