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

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • src
  • lib
  • marble
FileViewWidget.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2010 Bastian Holst <bastianholst@gmx.de>
9 //
10 
11 // Self
12 #include "FileViewWidget.h"
13 
14 // Qt
15 #include <QSortFilterProxyModel>
16 #include <QFileDialog>
17 
18 // Marble
19 #include "GeoDataContainer.h"
20 #include "GeoDataDocument.h"
21 #include "GeoDataPlacemark.h"
22 #include "GeoDataTreeModel.h"
23 #include "FileManager.h"
24 #include "MarblePlacemarkModel.h"
25 #include "MarbleModel.h"
26 #include "MarbleWidget.h"
27 #include "TreeViewDecoratorModel.h"
28 
29 using namespace Marble;
30 // Ui
31 #include "ui_FileViewWidget.h"
32 
33 namespace Marble
34 {
35 
36 class FileViewWidgetPrivate
37 {
38 
39  public:
40  FileViewWidgetPrivate( FileViewWidget *parent );
41  void setTreeModel( GeoDataTreeModel *model );
42  void setFileManager( FileManager *manager );
43 
44 
45  public Q_SLOTS:
46  void saveFile();
47  void closeFile();
48  void enableFileViewActions();
49 
50  public:
51  FileViewWidget *q;
52  Ui::FileViewWidget m_fileViewUi;
53  MarbleWidget *m_widget;
54  TreeViewDecoratorModel m_treeSortProxy;
55  FileManager *m_fileManager;
56 };
57 
58 FileViewWidgetPrivate::FileViewWidgetPrivate( FileViewWidget *parent )
59  :q( parent ),
60  m_widget( 0 ),
61  m_fileManager( 0 )
62 {
63 }
64 
65 FileViewWidget::FileViewWidget( QWidget *parent, Qt::WindowFlags f )
66  : QWidget( parent, f ),
67  d( new FileViewWidgetPrivate( this ) )
68 {
69  d->m_fileViewUi.setupUi( this );
70  layout()->setMargin( 0 );
71 }
72 
73 FileViewWidget::~FileViewWidget()
74 {
75  delete d;
76 }
77 
78 void FileViewWidget::setMarbleWidget( MarbleWidget *widget )
79 {
80  d->m_widget = widget;
81  d->setTreeModel( d->m_widget->model()->treeModel() );
82  d->setFileManager( d->m_widget->model()->fileManager() );
83 
84  connect( this, SIGNAL(centerOn(GeoDataPlacemark,bool)),
85  d->m_widget, SLOT(centerOn(GeoDataPlacemark,bool)) );
86  connect( this, SIGNAL(centerOn(GeoDataLatLonBox,bool)),
87  d->m_widget, SLOT(centerOn(GeoDataLatLonBox,bool)) );
88 }
89 
90 void FileViewWidgetPrivate::setTreeModel( GeoDataTreeModel *model )
91 {
92  m_treeSortProxy.setSourceModel( model );
93  m_treeSortProxy.setDynamicSortFilter( true );
94  m_fileViewUi.m_treeView->setModel( &m_treeSortProxy );
95  m_fileViewUi.m_treeView->setSortingEnabled( true );
96  m_fileViewUi.m_treeView->sortByColumn( 0, Qt::AscendingOrder );
97  m_fileViewUi.m_treeView->resizeColumnToContents( 0 );
98  m_fileViewUi.m_treeView->resizeColumnToContents( 1 );
99  QObject::connect( m_fileViewUi.m_treeView,
100  SIGNAL(expanded(QModelIndex)),
101  &m_treeSortProxy, SLOT(trackExpandedState(QModelIndex)) );
102  QObject::connect( m_fileViewUi.m_treeView,
103  SIGNAL(collapsed(QModelIndex)),
104  &m_treeSortProxy, SLOT(trackCollapsedState(QModelIndex)) );
105  QObject::connect( m_fileViewUi.m_treeView->selectionModel(),
106  SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
107  q, SLOT(enableFileViewActions()) );
108  QObject::connect( m_fileViewUi.m_treeView, SIGNAL(activated(QModelIndex)),
109  q, SLOT(mapCenterOnTreeViewModel(QModelIndex)) );
110 }
111 
112 void FileViewWidgetPrivate::setFileManager( FileManager *manager )
113 {
114  m_fileManager = manager;
115  QObject::connect( m_fileViewUi.m_saveButton, SIGNAL(clicked()) ,
116  q, SLOT(saveFile()) );
117  QObject::connect( m_fileViewUi.m_closeButton, SIGNAL(clicked()) ,
118  q, SLOT(closeFile()) );
119 }
120 
121 void FileViewWidgetPrivate::saveFile()
122 {
123  QModelIndex index = m_fileViewUi.m_treeView->selectionModel()->selectedRows().first();
124  GeoDataObject *object
125  = index.model()->data( index, MarblePlacemarkModel::ObjectPointerRole ).value<GeoDataObject*>();
126  GeoDataDocument *document = dynamic_cast<GeoDataDocument*>(object);
127  if ( document && !document->fileName().isEmpty() ) {
128  m_fileManager->saveFile( QFileDialog::getSaveFileName( q, "Select filename for KML document" ), document );
129  }
130 }
131 
132 void FileViewWidgetPrivate::closeFile()
133 {
134  QModelIndex index = m_fileViewUi.m_treeView->selectionModel()->selectedRows().first();
135  GeoDataObject *object
136  = index.model()->data( index, MarblePlacemarkModel::ObjectPointerRole ).value<GeoDataObject*>();
137  GeoDataDocument *document = dynamic_cast<GeoDataDocument*>(object);
138  if ( document ) {
139  m_fileManager->closeFile( document );
140  }
141 }
142 
143 void FileViewWidgetPrivate::enableFileViewActions()
144 {
145  bool tmp = false;
146  if ( !m_fileViewUi.m_treeView->selectionModel()->selectedRows().isEmpty() ) {
147  QModelIndex index = m_fileViewUi.m_treeView->selectionModel()->selectedRows().first();
148  GeoDataObject *object
149  = index.model()->data( index, MarblePlacemarkModel::ObjectPointerRole ).value<GeoDataObject*>();
150  GeoDataDocument *document = dynamic_cast<GeoDataDocument*>(object);
151  if ( document ) {
152  tmp = document->documentRole() == Marble::UserDocument;
153  }
154  }
155  m_fileViewUi.m_saveButton->setEnabled( tmp );
156  m_fileViewUi.m_closeButton->setEnabled( tmp );
157 }
158 
159 void FileViewWidget::mapCenterOnTreeViewModel( const QModelIndex &index )
160 {
161  if( !index.isValid() ) {
162  return;
163  }
164  GeoDataObject *object
165  = index.model()->data( index, MarblePlacemarkModel::ObjectPointerRole ).value<GeoDataObject*>();
166  if ( dynamic_cast<GeoDataPlacemark*>(object) )
167  {
168  GeoDataPlacemark *placemark = static_cast<GeoDataPlacemark*>(object);
169  d->m_widget->model()->placemarkSelectionModel()->select( index, QItemSelectionModel::ClearAndSelect );
170  emit centerOn( *placemark, true );
171  }
172  else if ( dynamic_cast<GeoDataContainer*>(object) ) {
173  GeoDataLatLonAltBox box = dynamic_cast<GeoDataContainer*>( object )->latLonAltBox();
174  emit centerOn( box, true );
175  }
176 }
177 
178 }
179 
180 #include "FileViewWidget.moc"
QWidget::layout
QLayout * layout() const
GeoDataDocument.h
QModelIndex
QWidget
FileManager.h
Marble::GeoDataDocument
A container for Features, Styles and in the future Schemas.
Definition: GeoDataDocument.h:65
Marble::GeoDataTreeModel
The representation of GeoData in a model This class represents all available data given by kml-data f...
Definition: GeoDataTreeModel.h:32
GeoDataContainer.h
MarbleModel.h
This file contains the headers for MarbleModel.
saveFile
void saveFile(const QString &filename, GeoDataDocument *document)
Definition: kml2cache.cpp:66
Marble::GeoDataObject
A base class for all geodata objects.
Definition: GeoDataObject.h:48
Marble::TreeViewDecoratorModel
Definition: TreeViewDecoratorModel.h:23
QVariant::value
T value() const
Marble::GeoDataContainer
A base class that can hold GeoDataFeatures.
Definition: GeoDataContainer.h:47
FileViewWidget.h
Marble::MarblePlacemarkModel::ObjectPointerRole
The pointer to a specific object.
Definition: MarblePlacemarkModel.h:62
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:104
TreeViewDecoratorModel.h
QModelIndex::isValid
bool isValid() const
Marble::UserDocument
Definition: GeoDataDocument.h:42
Marble::FileManager
This class is responsible for loading the different files into Geodata model.
Definition: FileManager.h:36
Marble::GeoDataDocument::documentRole
DocumentRole documentRole() const
Definition: GeoDataDocument.cpp:81
QAbstractItemModel::data
virtual QVariant data(const QModelIndex &index, int role) const =0
MarblePlacemarkModel.h
GeoDataPlacemark.h
QLayout::setMargin
void setMargin(int margin)
GeoDataTreeModel.h
Marble::FileViewWidget::FileViewWidget
FileViewWidget(QWidget *parent=0, Qt::WindowFlags f=0)
Definition: FileViewWidget.cpp:65
Marble::FileViewWidget
Definition: FileViewWidget.h:33
QItemSelection
Marble::FileViewWidget::~FileViewWidget
~FileViewWidget()
Definition: FileViewWidget.cpp:73
QModelIndex::model
const QAbstractItemModel * model() const
Marble::FileViewWidget::centerOn
void centerOn(const GeoDataPlacemark &, bool animated)
QFileDialog::getSaveFileName
QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFlags< QFileDialog::Option > options)
MarbleWidget.h
This file contains the headers for MarbleWidget.
Qt::WindowFlags
typedef WindowFlags
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::GeoDataPlacemark
a class representing a point of interest on the map
Definition: GeoDataPlacemark.h:54
Marble::GeoDataLatLonAltBox
A class that defines a 3D bounding box for geographic data.
Definition: GeoDataLatLonAltBox.h:49
Marble::GeoDataLatLonBox
A class that defines a 2D bounding box for geographic data.
Definition: GeoDataLatLonBox.h:51
Marble::FileViewWidget::setMarbleWidget
void setMarbleWidget(MarbleWidget *widget)
Definition: FileViewWidget.cpp:78
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:39 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • 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
  • 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