|
|
|
/***************************************************************************
|
|
|
|
kxmleditorpart.h - description
|
|
|
|
-------------------
|
|
|
|
begin : Wed Sep 19 2001
|
|
|
|
copyright : (C) 2001, 2002, 2003 by The KXMLEditor Team
|
|
|
|
email : OleBowle@gmx.de
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* 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. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#ifndef KXMLEDITORPART_H
|
|
|
|
#define KXMLEDITORPART_H
|
|
|
|
|
|
|
|
#include <tdeparts/part.h>
|
|
|
|
#include <tdeparts/browserextension.h>
|
|
|
|
|
|
|
|
#include <tqdom.h>
|
|
|
|
#include <tqptrlist.h>
|
|
|
|
|
|
|
|
#include "kxe_treeview.h"
|
|
|
|
|
|
|
|
#define FILE_DIALOG_FILTER "*.xml|XML files\n*.xsl|XSL files\n*.xslt|XSLT files\n*.svg|SVG files\n*.xul|XUL files\n*.rc|Resource UI files\n*.ui|User Interface UI files\n*|All files"
|
|
|
|
|
|
|
|
class TQTabWidget;
|
|
|
|
class KXE_ViewElement;
|
|
|
|
class KXESearchDialog;
|
|
|
|
class TQTextEdit;
|
|
|
|
class TDEAction;
|
|
|
|
class TDEToolBarPopupAction;
|
|
|
|
class KXmlEditorComboAction;
|
|
|
|
class TQDomNode;
|
|
|
|
class TQKeyEvent;
|
|
|
|
class KXMLEditorPartIfaceReadOnly; // DCOP interface
|
|
|
|
class KCommandHistory;
|
|
|
|
class KPrinter;
|
|
|
|
class TQSplitter;
|
|
|
|
class KXEDocument;
|
|
|
|
|
|
|
|
|
|
|
|
/** @short This is the KPart of KXMLEditor. */
|
|
|
|
class KXMLEditorPart : public KParts::ReadWritePart
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
/** @short Constructor
|
|
|
|
|
|
|
|
Creates the actions, the view (widgets) and changes to "begin state".
|
|
|
|
*/
|
|
|
|
KXMLEditorPart( bool fReadWrite, KXEDocument* pDocument, TQWidget * pParent, const char * pszName );
|
|
|
|
|
|
|
|
/** @short Destructor */
|
|
|
|
virtual ~KXMLEditorPart();
|
|
|
|
|
|
|
|
/** @short Changes the behaviour of this part to readonly or readwrite. */
|
|
|
|
virtual void setReadWrite( bool fReadWrite = true );
|
|
|
|
|
|
|
|
/** @short Returns the selected XML object's path or an empty string, if no object is selected. */
|
|
|
|
TQString getSelectedPath() const { return m_pViewTree->getSelectedPath(); }
|
|
|
|
|
|
|
|
/** @short Copy XML node into clipboard */
|
|
|
|
TQTextDrag * copyNode(TQDomNode *);
|
|
|
|
|
|
|
|
/** @short Paste XML node from clipboard into document */
|
|
|
|
bool pasteNode(TQDomNode *, TQMimeSource *);
|
|
|
|
|
|
|
|
/** @short Drag&Drop move */
|
|
|
|
bool dropMoveNode(TQDomElement &, TQDomNode &);
|
|
|
|
|
|
|
|
/** @short Prints the document on specified printer.
|
|
|
|
@param pPrinter printer which will be used for printing. */
|
|
|
|
virtual void print(KPrinter* pPrinter);
|
|
|
|
|
|
|
|
/** @short Returns underlying document. */
|
|
|
|
KXEDocument* document() { return m_pDocument; }
|
|
|
|
|
|
|
|
/** @short Changes underlying document object */
|
|
|
|
void setDocument(KXEDocument *pDocument);
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
/**
|
|
|
|
* Reimplemented from @ref KParts::KReadWritePart::setModified.
|
|
|
|
*
|
|
|
|
* Alters the window caption according to the given flag and
|
|
|
|
* calls the base functionality.
|
|
|
|
*/
|
|
|
|
virtual void setModified( bool fModified );
|
|
|
|
|
|
|
|
/** @short Updates tree view after creating new element */
|
|
|
|
void updateNodeCreated(const TQDomNode & node);
|
|
|
|
|
|
|
|
/** @short Updates tree view after deleting new element */
|
|
|
|
void updateNodeDeleted(const TQDomNode & node);
|
|
|
|
|
|
|
|
/** @short Updates tree view after change element properties */
|
|
|
|
void updateNodeChanged( const TQDomElement & domElement );
|
|
|
|
|
|
|
|
/** @short Updates tree view after change char. data properties */
|
|
|
|
void updateNodeChanged( const TQDomCharacterData & node ) ;
|
|
|
|
|
|
|
|
/** @short Updates tree view after change proc. instr. properties */
|
|
|
|
void updateNodeChanged( const TQDomProcessingInstruction &domProcInstr );
|
|
|
|
|
|
|
|
/** @short Updates tree view after move node */
|
|
|
|
void updateNodeMoved( const TQDomNode & node );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @short Reimplemented from @ref KParts::KReadWritePart::setModified.
|
|
|
|
*/
|
|
|
|
virtual void setModified() { setModified(true); }
|
|
|
|
|
|
|
|
/** @short Slot connected to File->Save As action. */
|
|
|
|
bool slotFileSaveAs();
|
|
|
|
|
|
|
|
/** @short Inserts special proc.instruction into document. */
|
|
|
|
void slotActVersionEncoding();
|
|
|
|
|
|
|
|
/** @short Called on user's action response.
|
|
|
|
Creates <?xml-stylesheet ...?> processing instruction
|
|
|
|
with reference to specified stylesheet URI.
|
|
|
|
*/
|
|
|
|
void slotActAttachStylesheet();
|
|
|
|
|
|
|
|
/** @short Called on user's action response. */
|
|
|
|
void slotActDetachStylesheet();
|
|
|
|
|
|
|
|
/** @short Called on user's action response */
|
|
|
|
void slotActDetachSchema();
|
|
|
|
|
|
|
|
/** @short Called on user's action response */
|
|
|
|
void slotActAttachSchema();
|
|
|
|
|
|
|
|
/** @short Cut the marked text/object into the clipboard */
|
|
|
|
void slotEditCut();
|
|
|
|
|
|
|
|
/** @short Copy the marked text/object into the clipboard */
|
|
|
|
void slotEditCopy();
|
|
|
|
|
|
|
|
/** @short Paste the clipboard into the document */
|
|
|
|
void slotEditPaste();
|
|
|
|
|
|
|
|
/** @short Displays search dialog and finds string in this tree view */
|
|
|
|
void slotEditFind();
|
|
|
|
|
|
|
|
/** @short Finds next occurence of string in this tree view */
|
|
|
|
void slotEditFindNext();
|
|
|
|
|
|
|
|
/** @short Deselects currently selected item */
|
|
|
|
void slotEditDeselect() { m_pViewTree->editDeselect(); }
|
|
|
|
|
|
|
|
/** @short Selects the selected item's parent item. */
|
|
|
|
void slotViewNodeUp() { m_pViewTree->viewNodeUp(); }
|
|
|
|
|
|
|
|
/** @short Expands the selected tree item's subtree. */
|
|
|
|
void slotViewExpNode() { m_pViewTree->viewExpNode(-1); }
|
|
|
|
|
|
|
|
/** @short Expands the selected tree item's subtree to the given level. */
|
|
|
|
void slotViewExpNode( int nLevel ) { m_pViewTree->viewExpNode(nLevel); }
|
|
|
|
|
|
|
|
/** @short Collapses the selected tree item's subtree. */
|
|
|
|
void slotViewColNode() { m_pViewTree->viewColNode(0); }
|
|
|
|
|
|
|
|
/** @short Collapses the selected tree item's subtree to the given level. */
|
|
|
|
void slotViewColNode( int nLevel ) { m_pViewTree->viewColNode(nLevel); }
|
|
|
|
|
|
|
|
/** @short Insert XML element into document */
|
|
|
|
void slotXmlElementInsert();
|
|
|
|
|
|
|
|
/** @short Edit XML element */
|
|
|
|
void slotXmlElementEdit();
|
|
|
|
|
|
|
|
/** @short Add attribute to an XML element. */
|
|
|
|
void slotXmlAttributesAdd();
|
|
|
|
|
|
|
|
/** @short Delete all attributes of an XML element. */
|
|
|
|
void slotXmlAttributesDel();
|
|
|
|
|
|
|
|
/** @short Delete an attribute of an XML element. */
|
|
|
|
void slotXmlAttributeDel();
|
|
|
|
|
|
|
|
/** @short Insert proc.instruction into document */
|
|
|
|
void slotXmlProcInstrInsert();
|
|
|
|
|
|
|
|
/** @short Edit proc.instruction */
|
|
|
|
void slotXmlProcInstrEdit();
|
|
|
|
|
|
|
|
/* @short Insert text into element. */
|
|
|
|
void slotActInsertText();
|
|
|
|
|
|
|
|
/* @short Insert CDATA section. */
|
|
|
|
void slotActInsertCDATA();
|
|
|
|
|
|
|
|
/* @short Insert comment to element. */
|
|
|
|
void slotActInsertComment();
|
|
|
|
|
|
|
|
/* @short Edit character data */
|
|
|
|
void slotXmlCharDataEdit();
|
|
|
|
|
|
|
|
/* @short Moves a node up (change its position with its prev. siblings position) */
|
|
|
|
void slotXmlMoveNodeUp();
|
|
|
|
|
|
|
|
/* @short Moves a node down (change its position with its next siblings position) */
|
|
|
|
void slotXmlMoveNodeDown();
|
|
|
|
|
|
|
|
/** @short toggles bookmark on the selected item */
|
|
|
|
void slotBookmarksToggle();
|
|
|
|
|
|
|
|
/** @short Searches for the previous bookmarked item */
|
|
|
|
void slotBookmarksPrev() { m_pViewTree->bookmarksPrev(); }
|
|
|
|
|
|
|
|
/** @short Searches for the next bookmarked item */
|
|
|
|
void slotBookmarksNext() { m_pViewTree->bookmarksNext(); }
|
|
|
|
|
|
|
|
/** @short Shows configuration dialog (@ref OptionsDialog) */
|
|
|
|
void slotConfigure();
|
|
|
|
|
|
|
|
void slotPathSelected( const TQString & szPath );
|
|
|
|
void slotPathSelected();
|
|
|
|
void slotPathClear();
|
|
|
|
|
|
|
|
/** @short Called when a tree view items text was changed via inplace-renaming. */
|
|
|
|
void slotItemRenamedInplace( TQListViewItem * pItem );
|
|
|
|
|
|
|
|
/** @short Called whan an attributes name was changed via inplace editing. */
|
|
|
|
void slotAttributeNameChangedInplace( const TQDomAttr &, const TQString );
|
|
|
|
|
|
|
|
/** @short Called whan an attributes value was changed via inplace editing. */
|
|
|
|
void slotAttributeValueChangedInplace( const TQDomAttr &, const TQString );
|
|
|
|
|
|
|
|
/** @short Called when File->Print or icon from the toolbar is selected. */
|
|
|
|
void slotActPrint();
|
|
|
|
|
|
|
|
/** @short Slot for editing node properties. */
|
|
|
|
void slotActProperties();
|
|
|
|
|
|
|
|
/** @short Slot for editing xml as a text in separate dialog window. */
|
|
|
|
void slotActEditRawXml();
|
|
|
|
|
|
|
|
/** @short Slot for removing XML nodes. */
|
|
|
|
void slotActDelete();
|
|
|
|
|
|
|
|
void slotTreeViewKeyPressed(TQKeyEvent *e);
|
|
|
|
|
|
|
|
/** @short Slot that performs redo function. */
|
|
|
|
void slotActRedo();
|
|
|
|
|
|
|
|
/** @short Slot that performs undo function. */
|
|
|
|
void slotActUndo();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
void updateActions();
|
|
|
|
|
|
|
|
/** @short Opens the file @ref KParts::ReadOnlyPart::m_file. */
|
|
|
|
virtual bool openFile();
|
|
|
|
|
|
|
|
/** @short Saves the file @ref KParts::ReadOnlyPart::m_file. */
|
|
|
|
virtual bool saveFile();
|
|
|
|
|
|
|
|
/** @short Draws header for printouts (made of file name).
|
|
|
|
@param painter a painter to use for drawing
|
|
|
|
@param pageNumber number of currently drawn page counted from 0
|
|
|
|
@param ypos y coordinate of upper border of the header
|
|
|
|
@sa printPage() @sa printFooter()
|
|
|
|
*/
|
|
|
|
void printHeader(TQPainter* painter, int pageNumber, int ypos, int width);
|
|
|
|
|
|
|
|
/** @short Draws footer for printouts (page number).
|
|
|
|
@param painter a painter to use for drawing
|
|
|
|
@param pageNumber number of currently drawn page counted from 0
|
|
|
|
@param ypos y coordinate of upper border of the footer
|
|
|
|
@sa printHeader() @sa printFooter()
|
|
|
|
*/
|
|
|
|
void printFooter(TQPainter* painter,int pageNumber, int ypos, int width);
|
|
|
|
|
|
|
|
/** @short Draws page for printing purposes.
|
|
|
|
|
|
|
|
If there are more pages to print, method
|
|
|
|
returns true. Otherwise returns false.
|
|
|
|
@param painter a painter to use for srawing
|
|
|
|
@param pageNumber number of currently drawn page counted from 0
|
|
|
|
@param top y coordinate of upper edge from where page should be drawn
|
|
|
|
@param width,height size of the medium (e.g. paper)
|
|
|
|
@sa printPage() @sa printHeader()
|
|
|
|
*/
|
|
|
|
bool printPage(TQPainter* painter,int pageNumber, int top, int width, int height);
|
|
|
|
|
|
|
|
/** @short Used in printing function printPage(). */
|
|
|
|
unsigned int m_printLineNumber;
|
|
|
|
|
|
|
|
/** @short Used in printing function printPage(). */
|
|
|
|
TQStringList m_printLines;
|
|
|
|
|
|
|
|
// the actions
|
|
|
|
TDEAction * m_pActEditFind;
|
|
|
|
TDEAction * m_pActEditFindNext;
|
|
|
|
TDEAction * m_pActEditDeselect;
|
|
|
|
TDEAction * m_pActViewNodeUp;
|
|
|
|
TDEToolBarPopupAction * m_pActViewExpNode;
|
|
|
|
TDEToolBarPopupAction * m_pActViewColNode;
|
|
|
|
TDEAction * m_pActXmlElementInsert;
|
|
|
|
TDEAction * m_pActXmlAttributesAdd;
|
|
|
|
TDEAction * m_pActXmlAttributesDel;
|
|
|
|
TDEAction * m_pActXmlAttributeDel;
|
|
|
|
TDEAction * m_pActXmlProcInstrInsert;
|
|
|
|
TDEAction * m_pActInsertText;
|
|
|
|
TDEAction * m_pActInsertCDATA;
|
|
|
|
TDEAction * m_pActInsertComment;
|
|
|
|
TDEAction * m_pActXmlMoveNodeUp;
|
|
|
|
TDEAction * m_pActXmlMoveNodeDown;
|
|
|
|
TDEAction * m_pActBookmarksToggle;
|
|
|
|
TDEAction * m_pActBookmarksPrev;
|
|
|
|
TDEAction * m_pActBookmarksNext;
|
|
|
|
KXmlEditorComboAction * m_pActPathCombo;
|
|
|
|
|
|
|
|
protected slots:
|
|
|
|
void started();
|
|
|
|
void completed();
|
|
|
|
void canceled();
|
|
|
|
|
|
|
|
/** @short Enables/disables actions and changes views */
|
|
|
|
void slotSelectionCleared(bool);
|
|
|
|
|
|
|
|
/** @short Enables/disables actions depending on the given XML element and changes views */
|
|
|
|
void slotSelectionChanged( const TQDomElement & );
|
|
|
|
|
|
|
|
/** @short Enables/disables actions and changes views */
|
|
|
|
void slotSelectionChanged( const TQDomCharacterData & );
|
|
|
|
|
|
|
|
/** @short Enables/disables actions and changes views */
|
|
|
|
void slotSelectionChanged( const TQDomProcessingInstruction & );
|
|
|
|
|
|
|
|
/** @short Shows the requested context menu at the given position. */
|
|
|
|
void slotContextMenuRequested( const TQString & szMenuName, const TQPoint & pos );
|
|
|
|
|
|
|
|
/** @short Invoked everytime document has new content */
|
|
|
|
void slotDocOpened();
|
|
|
|
|
|
|
|
private:
|
|
|
|
/** this view displays the XML-document's tree structure */
|
|
|
|
KXE_TreeView * m_pViewTree;
|
|
|
|
|
|
|
|
/** the tab widget, contains: m_pViewElement, m_pViewContents */
|
|
|
|
TQTabWidget * m_pTabWidget;
|
|
|
|
|
|
|
|
/** widget to display XML element */
|
|
|
|
KXE_ViewElement * m_pViewElement;
|
|
|
|
|
|
|
|
/** edit widget for contents */
|
|
|
|
TQTextEdit * m_pViewContents;
|
|
|
|
|
|
|
|
/** widget to display a proc.instr. */
|
|
|
|
TQTextEdit * m_pViewProcInstr;
|
|
|
|
|
|
|
|
/** the search dialog, used for find action */
|
|
|
|
KXESearchDialog * m_pDlgSearch;
|
|
|
|
|
|
|
|
/** DCOP object having access to XML document. It may by NULL if no DCOP inteface is provided
|
|
|
|
or read only privided by @ref KXMLEditorPartReadOnlyIface or full read-write @ref KXMLEditorPartIface .*/
|
|
|
|
KXMLEditorPartIfaceReadOnly * m_pDCOPIface;
|
|
|
|
|
|
|
|
bool m_bAlreadyModified;
|
|
|
|
|
|
|
|
/** our browser extension */
|
|
|
|
KParts::BrowserExtension * m_pBrowserExt;
|
|
|
|
|
|
|
|
/** @short Stores pointer to command history list, which provide undo/redo functionality */
|
|
|
|
KCommandHistory* m_pCmdHistory;
|
|
|
|
|
|
|
|
/** @short Action for cutting nodes to clipboard.*/
|
|
|
|
TDEAction* m_pActEditCut;
|
|
|
|
|
|
|
|
/** @short Action for copying nodes to clipboard.*/
|
|
|
|
TDEAction* m_pActEditCopy;
|
|
|
|
|
|
|
|
/** @short Action for pasting nodes from clipboard.*/
|
|
|
|
TDEAction* m_pActEditPaste;
|
|
|
|
|
|
|
|
/** Action for editing properties of currently selected node. */
|
|
|
|
TDEAction* m_pActProperties;
|
|
|
|
|
|
|
|
/** Action for editing raw XML of currently selected node. */
|
|
|
|
TDEAction* m_pActEditRawXml;
|
|
|
|
|
|
|
|
/** Action for deleting currently selected node. */
|
|
|
|
TDEAction* m_pActDelete;
|
|
|
|
|
|
|
|
/** @short Action for changing version and encoding of XM file. */
|
|
|
|
TDEAction* m_pActVersionEncoding;
|
|
|
|
|
|
|
|
/** @short Action for attaching stylehseets to xml files. */
|
|
|
|
TDEAction* m_pActAttachStylesheet;
|
|
|
|
|
|
|
|
/** @short Action for detaching stylehseets from xml files. */
|
|
|
|
TDEAction* m_pActDetachStylesheet;
|
|
|
|
|
|
|
|
/** @short Action for attaching schemas to xml files. */
|
|
|
|
TDEAction* m_pActAttachSchema;
|
|
|
|
|
|
|
|
/** @short Action for detaching schemas from xml files. */
|
|
|
|
TDEAction* m_pActDetachSchema;
|
|
|
|
|
|
|
|
/** Printer object. */
|
|
|
|
KPrinter *m_pPrinter;
|
|
|
|
|
|
|
|
/** spitter - main widget in the part */
|
|
|
|
TQSplitter *pSplitter;
|
|
|
|
|
|
|
|
/** Pointer to underlying KXEDocument object */
|
|
|
|
KXEDocument* m_pDocument;
|
|
|
|
|
|
|
|
signals:
|
|
|
|
// Add URL to recent file list
|
|
|
|
void sigAddRecentURL(const KURL &);
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The browser extension for our part (@ref KXMLEditorPart).
|
|
|
|
*/
|
|
|
|
class KXMLEditorBrowserExtension : public KParts::BrowserExtension
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
/** @short Constructor */
|
|
|
|
KXMLEditorBrowserExtension( KXMLEditorPart * pParent, const char * pszName = "KXMLEditorBrowserExtension" )
|
|
|
|
: KParts::BrowserExtension( pParent, pszName ),
|
|
|
|
m_pPart(pParent)
|
|
|
|
{ emit enableAction("print", true); }
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
void slotEditCut() { m_pPart->slotEditCut(); }
|
|
|
|
void slotEditCopy() { m_pPart->slotEditCopy(); }
|
|
|
|
void slotEditPaste() { m_pPart->slotEditPaste(); }
|
|
|
|
void print() { m_pPart->slotActPrint(); }
|
|
|
|
|
|
|
|
protected:
|
|
|
|
/** @short Stores pointer to the part. */
|
|
|
|
KXMLEditorPart * m_pPart;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|