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

marble

  • sources
  • kde-4.12
  • 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 
17 // Marble
18 #include "GeoDataContainer.h"
19 #include "GeoDataDocument.h"
20 #include "GeoDataPlacemark.h"
21 #include "GeoDataTreeModel.h"
22 #include "FileManager.h"
23 #include "MarblePlacemarkModel.h"
24 #include "MarbleModel.h"
25 #include "MarbleWidget.h"
26 
27 using namespace Marble;
28 // Ui
29 #include "ui_FileViewWidget.h"
30 
31 namespace Marble
32 {
33 
34 class FileViewWidgetPrivate
35 {
36 
37  public:
38  FileViewWidgetPrivate( FileViewWidget *parent );
39  void setTreeModel( GeoDataTreeModel *model );
40  void setFileManager( FileManager *manager );
41 
42 
43  public Q_SLOTS:
44  void saveFile();
45  void closeFile();
46  void enableFileViewActions();
47 
48  public:
49  FileViewWidget *q;
50  Ui::FileViewWidget m_fileViewUi;
51  MarbleWidget *m_widget;
52  QSortFilterProxyModel m_treeSortProxy;
53  FileManager *m_fileManager;
54 };
55 
56 FileViewWidgetPrivate::FileViewWidgetPrivate( FileViewWidget *parent )
57  :q( parent ) {
58 }
59 
60 FileViewWidget::FileViewWidget( QWidget *parent, Qt::WindowFlags f )
61  : QWidget( parent, f ),
62  d( new FileViewWidgetPrivate( this ) )
63 {
64  d->m_fileViewUi.setupUi( this );
65  layout()->setMargin( 0 );
66 }
67 
68 FileViewWidget::~FileViewWidget()
69 {
70  delete d;
71 }
72 
73 void FileViewWidget::setMarbleWidget( MarbleWidget *widget )
74 {
75  d->m_widget = widget;
76  d->setTreeModel( d->m_widget->model()->treeModel() );
77  d->setFileManager( d->m_widget->model()->fileManager() );
78 
79  connect( this, SIGNAL(centerOn(GeoDataPlacemark,bool)),
80  d->m_widget, SLOT(centerOn(GeoDataPlacemark,bool)) );
81  connect( this, SIGNAL(centerOn(GeoDataLatLonBox,bool)),
82  d->m_widget, SLOT(centerOn(GeoDataLatLonBox,bool)) );
83 }
84 
85 void FileViewWidgetPrivate::setTreeModel( GeoDataTreeModel *model )
86 {
87  m_treeSortProxy.setSourceModel( model );
88  m_treeSortProxy.setDynamicSortFilter( true );
89  m_fileViewUi.m_treeView->setModel( &m_treeSortProxy );
90  m_fileViewUi.m_treeView->setSortingEnabled( true );
91  m_fileViewUi.m_treeView->sortByColumn( 0, Qt::AscendingOrder );
92  m_fileViewUi.m_treeView->resizeColumnToContents( 0 );
93  m_fileViewUi.m_treeView->resizeColumnToContents( 1 );
94  QObject::connect( m_fileViewUi.m_treeView->selectionModel(),
95  SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
96  q, SLOT(enableFileViewActions()) );
97  QObject::connect( m_fileViewUi.m_treeView, SIGNAL(activated(QModelIndex)),
98  q, SLOT(mapCenterOnTreeViewModel(QModelIndex)) );
99 }
100 
101 void FileViewWidgetPrivate::setFileManager( FileManager *manager )
102 {
103  m_fileManager = manager;
104  QObject::connect( m_fileViewUi.m_saveButton, SIGNAL(clicked()) ,
105  q, SLOT(saveFile()) );
106  QObject::connect( m_fileViewUi.m_closeButton, SIGNAL(clicked()) ,
107  q, SLOT(closeFile()) );
108 }
109 
110 void FileViewWidgetPrivate::saveFile()
111 {
112  QModelIndex index = m_fileViewUi.m_treeView->selectionModel()->selectedRows().first();
113  GeoDataObject *object
114  = index.model()->data( index, MarblePlacemarkModel::ObjectPointerRole ).value<GeoDataObject*>();
115  GeoDataDocument *document = dynamic_cast<GeoDataDocument*>(object);
116  if ( document ) {
117  m_fileManager->saveFile( document );
118  }
119 }
120 
121 void FileViewWidgetPrivate::closeFile()
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 ) {
128  m_fileManager->closeFile( document );
129  }
130 }
131 
132 void FileViewWidgetPrivate::enableFileViewActions()
133 {
134  bool tmp = false;
135  if ( !m_fileViewUi.m_treeView->selectionModel()->selectedRows().isEmpty() ) {
136  QModelIndex index = m_fileViewUi.m_treeView->selectionModel()->selectedRows().first();
137  GeoDataObject *object
138  = index.model()->data( index, MarblePlacemarkModel::ObjectPointerRole ).value<GeoDataObject*>();
139  GeoDataDocument *document = dynamic_cast<GeoDataDocument*>(object);
140  if ( document ) {
141  tmp = document->documentRole() == Marble::UserDocument;
142  }
143  }
144  m_fileViewUi.m_saveButton->setEnabled( tmp );
145  m_fileViewUi.m_closeButton->setEnabled( tmp );
146 }
147 
148 void FileViewWidget::mapCenterOnTreeViewModel( const QModelIndex &index )
149 {
150  if( !index.isValid() ) {
151  return;
152  }
153  GeoDataObject *object
154  = index.model()->data( index, MarblePlacemarkModel::ObjectPointerRole ).value<GeoDataObject*>();
155  if ( dynamic_cast<GeoDataPlacemark*>(object) )
156  {
157  GeoDataPlacemark *placemark = static_cast<GeoDataPlacemark*>(object);
158  d->m_widget->model()->placemarkSelectionModel()->select( index, QItemSelectionModel::ClearAndSelect );
159  emit centerOn( *placemark, true );
160  }
161  else if ( dynamic_cast<GeoDataContainer*>(object) ) {
162  GeoDataLatLonAltBox box = dynamic_cast<GeoDataContainer*>( object )->latLonAltBox();
163  emit centerOn( box, true );
164  }
165 }
166 
167 }
168 
169 #include "FileViewWidget.moc"
GeoDataDocument.h
FileManager.h
Marble::GeoDataDocument
A container for Features, Styles and in the future Schemas.
Definition: GeoDataDocument.h:64
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.
Marble::GeoDataObject
A base class for all geodata objects.
Definition: GeoDataObject.h:48
QWidget
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::GeoDataContainer::first
GeoDataFeature & first()
return the reference of the last element for convenience
Definition: GeoDataContainer.cpp:206
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:102
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:57
MarblePlacemarkModel.h
GeoDataPlacemark.h
GeoDataTreeModel.h
Marble::FileViewWidget::FileViewWidget
FileViewWidget(QWidget *parent=0, Qt::WindowFlags f=0)
Definition: FileViewWidget.cpp:60
Marble::FileViewWidget
Definition: FileViewWidget.h:33
Marble::FileViewWidget::~FileViewWidget
~FileViewWidget()
Definition: FileViewWidget.cpp:68
Marble::FileViewWidget::centerOn
void centerOn(const GeoDataPlacemark &, bool animated)
MarbleWidget.h
This file contains the headers for MarbleWidget.
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:73
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:49 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
  • 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