You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/kivio/kiviopart/kivio_map.cpp

240 lines
5.0 KiB

/*
* Kivio - Visual Modelling and Flowcharting
* Copyright (C) 2000-2001 theKompany.com & Dave Marotti
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include <qprinter.h>
#include <qdom.h>
#include <qmessagebox.h>
#include <KoStore.h>
#include <KoXmlWriter.h>
#include <KoGenStyles.h>
#include "kivio_map.h"
#include "kivio_doc.h"
#include "kivio_view.h"
#include "kivio_canvas.h"
#include "kivio_page.h"
#include "KIvioMapIface.h"
#include <time.h>
#include <stdlib.h>
KivioMap::KivioMap( KivioDoc* doc, const char* name )
: QObject(doc,name)
{
m_pDoc = doc;
m_lstPages.setAutoDelete(true);
m_dcop = 0;
}
KivioMap::~KivioMap()
{
delete m_dcop;
}
void KivioMap::takePage( KivioPage* page )
{
int pos=m_lstPages.findRef(page);
m_lstPages.take( pos );
m_lstDeletedPages.append( page );
}
void KivioMap::insertPage( KivioPage* page )
{
int pos=m_lstDeletedPages.findRef(page);
if ( pos != -1 )
m_lstDeletedPages.take( pos);
m_lstPages.append(page);
}
void KivioMap::addPage( KivioPage* page )
{
m_lstPages.append(page);
}
void KivioMap::movePage( const QString& fromPageName, const QString& toPageName, bool before )
{
KivioPage* pagefrom = findPage(fromPageName);
KivioPage* pageto = findPage(toPageName);
int from = m_lstPages.find(pagefrom);
int to = m_lstPages.find(pageto);
if (!before)
++to;
if ( to > (int)m_lstPages.count() ) {
m_lstPages.append(pagefrom);
m_lstPages.take(from);
} else
if ( from < to ) {
m_lstPages.insert(to,pagefrom);
m_lstPages.take(from);
} else {
m_lstPages.take(from);
m_lstPages.insert(to,pagefrom);
}
}
QDomElement KivioMap::save( QDomDocument& doc )
{
int next = 1;
QDomElement mymap = doc.createElement("KivioMap");
// Before we save, tell all the pages/layers/stencil/targets/connectors to generate
// their ids so we can restore connections when reloaded.
QPtrListIterator<KivioPage> it2(m_lstPages);
for( ; it2.current(); ++it2 )
{
next = it2.current()->generateStencilIds( next );
}
// Now save the pages
QPtrListIterator<KivioPage> it(m_lstPages);
for( ; it.current(); ++it )
{
QDomElement e = it.current()->save(doc);
if (e.isNull())
return e;
mymap.appendChild(e);
}
return mymap;
}
void KivioMap::saveOasis(KoStore* store, KoXmlWriter* docWriter, KoGenStyles* styles)
{
QPtrListIterator<KivioPage> it(m_lstPages);
for( ; it.current(); ++it )
{
it.current()->saveOasis(store, docWriter, styles);
}
}
bool KivioMap::loadXML( const QDomElement& mymap )
{
m_lstPages.clear();
m_lstDeletedPages.clear();
// FIXME: make this load the real page units and whatever
// else
QDomNode n = mymap.firstChild();
while( !n.isNull() ) {
QDomElement e = n.toElement();
if ( !e.isNull() && e.tagName() == "KivioPage" ) {
KivioPage *t = m_pDoc->createPage();
m_pDoc->addPage( t );
if ( !t->loadXML( e ) )
return false;
}
n = n.nextSibling();
}
return true;
}
void KivioMap::update()
{
QPtrListIterator<KivioPage> it( m_lstPages );
for( ; it.current(); ++it )
it.current()->update();
}
KivioPage* KivioMap::findPage( const QString& name )
{
KivioPage *t;
for ( t = m_lstPages.first(); t; t = m_lstPages.next() ) {
if ( name == t->pageName() )
return t;
}
return 0L;
}
KivioDoc* KivioMap::doc()const
{
return m_pDoc;
}
KivioPage* KivioMap::firstPage()
{
return m_lstPages.first();
}
KivioPage* KivioMap::lastPage()
{
return m_lstPages.last();
}
KivioPage* KivioMap::nextPage()
{
return m_lstPages.next();
}
int KivioMap::count() const
{
return m_lstPages.count();
}
DCOPObject* KivioMap::dcopObject()
{
if ( !m_dcop )
m_dcop = new KIvioMapIface( this );
return m_dcop;
}
QStringList KivioMap::visiblePages() const
{
QStringList pages;
QPtrListIterator<KivioPage> it( m_lstPages );
for( ; it.current(); ++it )
{
KivioPage* page = it.current();
if( !page->isHidden() )
pages.append( page->pageName() );
}
return pages;
}
QStringList KivioMap::hiddenPages() const
{
QStringList pages;
QPtrListIterator<KivioPage> it( m_lstPages );
for( ; it.current(); ++it )
{
KivioPage* page = it.current();
if( page->isHidden() )
pages.append( page->pageName() );
}
return pages;
}
void KivioMap::clear()
{
m_lstPages.clear();
m_lstDeletedPages.clear();
}