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_doc.h

261 lines
7.2 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.
*/
#ifndef __kivio_doc_h__
#define __kivio_doc_h__
#include "kivio_grid_data.h"
#include <tqptrlist.h>
#include <tqobject.h>
#include <KoDocument.h>
#include <KoMainWindow.h>
#include <KoGlobal.h>
#include "kivio_config.h"
#include <koffice_export.h>
class KivioDoc;
class KivioView;
class KivioMap;
class KivioPage;
class ExportPageDialog;
class KivioGroupStencil;
class KivioStencilSpawner;
class KivioStencilSpawnerSet;
class KivioStackBar;
class KivioPainter;
class KivioStencil;
namespace Kivio {
class DragBarButton;
}
class KoStore;
class TQDomDocument;
class DCOPObject;
class KoCommandHistory;
class TQPainter;
class KPrinter;
class KCommand;
class KoZoomHandler;
class TQFont;
#define MIME_TYPE "application/x-kivio"
using namespace Kivio;
class KIVIO_EXPORT KivioDoc : public KoDocument
{
TQ_OBJECT
friend class KivioPage;
public:
KivioDoc( TQWidget *parentWidget = 0, const char* widgetName = 0, TQObject* parent = 0, const char* name = 0, bool singleViewMode = false );
~KivioDoc();
virtual DCOPObject* dcopObject();
virtual TQDomDocument saveXML();
virtual bool saveOasis(KoStore* store, KoXmlWriter* manifestWriter);
virtual bool loadXML( TQIODevice *, const TQDomDocument& doc );
virtual bool loadOasis( const TQDomDocument& doc, KoOasisStyles& oasisStyles, const TQDomDocument& settings, KoStore* );
virtual bool initDoc(InitDocFlags flags, TQWidget* parentWidget=0);
virtual TQCString mimeType() const { return MIME_TYPE; }
/**
* @return a pointer to a new KivioPage. The KivioPage is not added to the map nor added to the GUI.
*/
KivioPage* createPage();
/**
* Adds a KivioPage to the GUI and makes it active. In addition the KivioPage is
* added to the map.
*
* @see KivioView
* @see KivioMap
*/
void addPage( KivioPage* page );
/**
* Adds a KivioStencilSpawnerSet to the list of spawner sets and make it active.
*
*/
void addSpawnerSet( const TQString& );
void addSpawnerSetDuringLoad(const TQString& dirName, bool hidden);
bool removeSpawnerSet( KivioStencilSpawnerSet * );
TQPtrList<KivioStencilSpawnerSet> *spawnerSets()const { return m_pLstSpawnerSets; }
KivioStencilSpawner *findStencilSpawner( const TQString& setId, const TQString& stencilId );
KivioStencilSpawner *findInternalStencilSpawner( const TQString& title );
void addInternalStencilSpawner(KivioStencilSpawner* spawner);
KivioStencilSpawnerSet* internalSpawnerSet() { return m_pInternalSet; }
KivioMap* map() const { return m_pMap; }
/**
* @return true if the document is currently loading.
*/
bool isLoading()const { return m_bLoading; }
virtual void paintContent( TQPainter& painter, const TQRect& rect, bool transparent = false, double zoomX = 1.0, double zoomY = 1.0 );
void paintContent(KivioPainter& painter, const TQRect& rect, bool transparent, KivioPage* page,
TQPoint, KoZoomHandler*, bool, bool);
void printContent( KPrinter& prn );
static TQPtrList<KivioDoc>& documents();
KivioGridData grid() { return Kivio::Config::grid(); }
void initConfig();
void saveConfig();
void updateButton();
void addCommand( KCommand * cmd );
int undoRedoLimit() const;
void setUndoRedoLimit(int val);
KoCommandHistory * commandHistory()const { return m_commandHistory; }
void insertPage( KivioPage * page );
void takePage( KivioPage * page );
void resetLayerPanel();
void updateProtectPanelCheckBox();
TQFont defaultFont() const { return m_font; }
public slots:
void updateView(KivioPage*);
void slotDeleteStencilSet( DragBarButton *, TQWidget *, KivioStackBar * );
void slotSelectionChanged();
void setDefaultFont(const TQFont& f) { m_font = f; }
void updateGuideLines(KoView* sender);
void updateGuideLines(KivioPage* page);
virtual void initEmpty();
protected slots:
void slotDocumentRestored();
void slotCommandExecuted();
void loadStencil();
virtual void openExistingFile( const TQString& file );
virtual void openTemplate( const TQString& file );
signals:
void sig_selectionChanged();
void sig_addPage(KivioPage*);
void sig_addSpawnerSet( KivioStencilSpawnerSet * );
void sig_updateView(KivioPage*);
void sig_pageNameChanged(KivioPage*, const TQString&);
void sig_deleteStencilSet( DragBarButton*, TQWidget *, KivioStackBar * );
void sig_updateGrid();
void initProgress();
void progress(int);
void endProgress();
void loadingFinished();
protected:
bool checkStencilsForSpawnerSet(KivioStencilSpawnerSet *);
bool checkGroupForSpawnerSet(KivioStencil *, KivioStencilSpawnerSet *);
KivioStencilSpawnerSet* findSpawnerSet(const TQString& dirName, const TQString& name);
void saveOasisSettings( KoXmlWriter &/*settingsWriter*/ );
void loadOasisSettings( const TQDomDocument&settingsDoc );
KoView* createViewInstance( TQWidget* parent, const char* name );
/**
* List of stencil spawner sets
*/
TQPtrList <KivioStencilSpawnerSet> *m_pLstSpawnerSets;
/**
* Loads a KivioStencilSpawnerSet based on it's id
*/
bool loadStencilSpawnerSet(const TQString &id, bool hidden);
/**
* Overloaded function of @ref KoDocument.
*/
virtual bool completeLoading( KoStore* );
/**
* Pointer to the map that holds all the pages.
*/
KivioMap *m_pMap;
/**
* This variable is used to give every KivioPage a unique default name.
*
* @see #newKivioPage
*/
int m_iPageId;
/**
* The URL of the this part. This variable is only set if the @ref #load function
* had been called with an URL as argument.
*
* @see #load
*/
TQString m_strFileURL;
/**
* true if loading is in process, otherwise false.
* This flag is used to avoid updates etc. during loading.
*
* @see #isLoading
*/
bool m_bLoading;
static TQPtrList<KivioDoc>* s_docs;
static int s_docId;
KivioStencilSpawnerSet* m_pInternalSet;
KivioGridData gridData;
DCOPObject *dcop;
KoCommandHistory * m_commandHistory;
TQFont m_font;
TQTimer* m_loadTimer;
unsigned int m_currentFile;
KivioStencilSpawnerSet* m_currentSet;
TQValueList<KivioStencilSpawnerSet*> m_stencilSetLoadQueue;
bool m_docOpened; // Used to for a hack that make kivio not crash if you cancel startup dialog.
};
#endif