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

rocs/RocsCore

  • sources
  • kde-4.12
  • kdeedu
  • rocs
  • RocsCore
  • LoadSave
  • Plugins
  • tgfFileFormat
TgfFileFormatPlugin.cpp
Go to the documentation of this file.
1 /*
2  This file is part of Rocs.
3  Copyright 2010-2011 Tomaz Canabrava <tomaz.canabrava@gmail.com>
4  Copyright 2010 Wagner Reck <wagner.reck@gmail.com>
5  Copyright 2012 Andreas Cord-Landwehr <cola@uni-paderborn.de>
6 
7  This program is free software; you can redistribute it and/or
8  modify it under the terms of the GNU General Public License as
9  published by the Free Software Foundation; either version 2 of
10  the License, or (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #include "TgfFileFormatPlugin.h"
22 #include "Document.h"
23 #include <KAboutData>
24 #include <KGenericFactory>
25 #include <KUrl>
26 #include <QFile>
27 #include <DataStructure.h>
28 #include <Data.h>
29 #include <Pointer.h>
30 #include <Modifiers/Topology.h>
31 #include <DataStructureBackendManager.h>
32 
33 static const KAboutData aboutdata("rocs_tgffileformat",
34  0,
35  ki18nc("@title Displayed plugin name", "TGF File Backend"),
36  "0.1",
37  ki18n("Read and write Trivial Graph Format (TGF) files."),
38  KAboutData::License_GPL_V2);
39 
40 K_PLUGIN_FACTORY(FilePluginFactory, registerPlugin<TgfFileFormatPlugin>();)
41 K_EXPORT_PLUGIN(FilePluginFactory(aboutdata))
42 
43 
44 TgfFileFormatPlugin::TgfFileFormatPlugin(QObject* parent, const QList< QVariant >&) :
45  GraphFilePluginInterface(FilePluginFactory(aboutdata, 0).componentData().aboutData(), parent)
46 {
47 }
48 
49 TgfFileFormatPlugin::~TgfFileFormatPlugin()
50 {
51 }
52 
53 const QStringList TgfFileFormatPlugin::extensions() const
54 {
55  return QStringList()
56  << i18n("*.tgf|Trivial Graph Format") + '\n';
57 }
58 
59 
60 void TgfFileFormatPlugin::readFile()
61 {
62  Document * graphDoc = new Document("Untitled");
63  //TODO select graph data structure
64  DataStructureBackendManager::self().setBackend("Graph");
65  DataStructurePtr graph = graphDoc->addDataStructure();
66 
67  // map node identifier from file to created data elements
68  QMap<int,DataPtr> nodeMap;
69 
70  QFile fileHandle(file().toLocalFile());
71  if (!fileHandle.open(QFile::ReadOnly)) {
72  setError(CouldNotOpenFile, i18n("Could not open file \"%1\" in read mode: %2", file().toLocalFile(), fileHandle.errorString()));
73  delete graphDoc;
74  return;
75  }
76 
77  ReadMode mode = Nodes;
78  while (!fileHandle.atEnd()) {
79  QString line = QString(fileHandle.readLine()).trimmed();
80 
81  if (line.startsWith('#')) { // recognize separator before edge list
82  mode = Edges;
83  continue;
84  }
85 
86  if (mode == Nodes) { // read node
87  int identifier = line.section(' ', 0, 0).toInt();
88  QString label = line.section(' ', 1); // get label, everything after first space
89  DataPtr data = graph->createData(label.simplified(), 0);
90  if (nodeMap.contains(identifier)) {
91  setError(EncodingProblem, i18n("Could not parse file. Identifier \"%1\" is used more than once.", identifier));
92  return;
93  }
94  nodeMap[identifier] = data;
95  continue;
96  }
97 
98  if (mode == Edges) { // node edge
99  int from = line.section(' ', 0, 0).toInt();
100  int to = line.section(' ', 1, 1).toInt();
101  QString value = line.section(' ', 2);
102  if (!nodeMap.contains(from) || !nodeMap.contains(to)) {
103  setError(EncodingProblem, i18n("Could not parse file. Edge from \"%1\" to \"%2\" uses undefined nodes.", from, to));
104  return;
105  }
106  PointerPtr pointer = graph->createPointer(nodeMap[from], nodeMap[to], 0);
107  pointer->setProperty("value", value.simplified());
108  }
109  }
110  Topology layouter;
111  layouter.directedGraphDefaultTopology(graph);
112  setGraphDocument(graphDoc);
113  setError(None);
114 }
115 
116 void TgfFileFormatPlugin::writeFile(Document &graph )
117 {
118  // TODO allow selection which data structure shall be exported
119  QFile fileHandle(file().toLocalFile());
120  if (!fileHandle.open(QFile::WriteOnly | QFile::Text)) {
121  setError(FileIsReadOnly, i18n("Could not open file \"%1\" in write mode: %2", file().fileName(), fileHandle.errorString()));
122  return;
123  }
124 
125  QTextStream out(&fileHandle);
126  DataStructurePtr g = graph.activeDataStructure();
127  if (!g) {
128  setError(NoGraphFound, i18n("No data structure specified for output in this document."));
129  return;
130  }
131 
132  // export data elements
133  //FIXME only default data type considered
134  foreach(DataPtr n, g->dataList(0)) {
135  out << n->identifier();
136  out << " ";
137  out << n->property("name").toString(); //TODO change to selectable property
138  out << '\n';
139  }
140  out << "#\n";
141  // export pointers
142  //FIXME only default pointer type considered
143  foreach(PointerPtr e, g->pointers(0)) {
144  out << e->from()->identifier() << " " << e->to()->identifier() << " " << e->property("value").toString() <<'\n';
145  }
146  setError(None);
147 }
GraphFilePluginInterface::None
Definition: GraphFilePluginInterface.h:51
TgfFileFormatPlugin
class TgfFileFormatPlugin: Import and Export Plugin for TGF
Definition: TgfFileFormatPlugin.h:41
Topology.h
DataStructurePtr
boost::shared_ptr< DataStructure > DataStructurePtr
Definition: CoreTypes.h:38
TgfFileFormatPlugin.h
TgfFileFormatPlugin::~TgfFileFormatPlugin
~TgfFileFormatPlugin()
Definition: TgfFileFormatPlugin.cpp:49
Topology::directedGraphDefaultTopology
void directedGraphDefaultTopology(DataStructurePtr dataStructure)
applies a default topology for undirected graphs
Definition: Topology.cpp:214
TgfFileFormatPlugin::writeFile
virtual void writeFile(Document &graph)
Writes given graph document to formerly specified file.
Definition: TgfFileFormatPlugin.cpp:116
QObject
Data.h
DataStructureBackendManager::self
static DataStructureBackendManager & self()
Returns self reference to backend manager.
Definition: DataStructureBackendManager.cpp:233
Document.h
PointerPtr
boost::shared_ptr< Pointer > PointerPtr
Definition: CoreTypes.h:35
DataStructure.h
GraphFilePluginInterface::setError
void setError(Error error, QString message=QString())
Definition: GraphFilePluginInterface.cpp:83
Document::addDataStructure
DataStructurePtr addDataStructure(const QString &name=QString())
Add data structure to graph document with name name.
Definition: Document.cpp:333
TgfFileFormatPlugin::extensions
virtual const QStringList extensions() const
File extensions that are common for this file type.
Definition: TgfFileFormatPlugin.cpp:53
Document::activeDataStructure
DataStructurePtr activeDataStructure() const
Definition: Document.cpp:431
Topology
this class provides topology modifiers for data structures
Definition: Topology.h:36
GraphFilePluginInterface::NoGraphFound
Definition: GraphFilePluginInterface.h:55
Document
Definition: Document.h:41
DataStructureBackendManager::setBackend
void setBackend(const QString &pluginIdentifier)
Change the active backend.
Definition: DataStructureBackendManager.cpp:240
Pointer.h
GraphFilePluginInterface::FileIsReadOnly
Definition: GraphFilePluginInterface.h:53
TgfFileFormatPlugin::readFile
virtual void readFile()
Open given file and imports it into internal format.
Definition: TgfFileFormatPlugin.cpp:60
GraphFilePluginInterface::EncodingProblem
Definition: GraphFilePluginInterface.h:56
DataPtr
boost::shared_ptr< Data > DataPtr
Definition: CoreTypes.h:34
GraphFilePluginInterface::CouldNotOpenFile
Definition: GraphFilePluginInterface.h:54
GraphFilePluginInterface::setGraphDocument
void setGraphDocument(Document *document)
Definition: GraphFilePluginInterface.cpp:108
DataStructureBackendManager.h
GraphFilePluginInterface::file
const KUrl & file() const
Definition: GraphFilePluginInterface.cpp:120
GraphFilePluginInterface
This class provides an interface for graph file format plugins.
Definition: GraphFilePluginInterface.h:42
aboutdata
static const KAboutData aboutdata("rocs_tgffileformat", 0, ki18nc("@title Displayed plugin name","TGF File Backend"),"0.1", ki18n("Read and write Trivial Graph Format (TGF) files."), KAboutData::License_GPL_V2)
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:42:26 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

rocs/RocsCore

Skip menu "rocs/RocsCore"
  • 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