2 // C++ Implementation: doctreeviewimpl
7 // Author: Robert Vogl <voglrobe@lapislazuli>, (C) 2004
9 // Copyright: See COPYING file that comes with this distribution
12 #include <stdlib.h> // getenv
15 #include <QtCore/QFile>
16 #include <QtGui/QWidget>
17 #include <QtCore/QTextStream>
18 #include <Qt3Support/Q3CString>
19 #include <QtCore/QRegExp>
20 #include <QtCore/QDateTime>
21 #include <QtGui/QColor>
22 #include <Qt3Support/Q3ListView>
23 #include <QtGui/QContextMenuEvent>
29 #include <kfiledialog.h>
30 #include <kmessagebox.h>
31 #include <kinputdialog.h>
33 // App specific includes
34 #include "doctreeviewimpl.h"
35 #include "contextmenuhandler.h"
36 #include "parasaxparser.h"
37 #include "docbookclasses.h"
39 //////////////////////////////////////
40 // TreeView Implementation
41 //////////////////////////////////////
42 DocTreeViewImpl::DocTreeViewImpl(QWidget
* parent
, const char* name
, Qt::WFlags fl
)
43 : DocTreeView(parent
, name
, fl
)
47 // the hidden formated id to set a sort order
48 listView
->setSorting(3, true);
49 listView
->setColumnText(0, i18n("Chapter"));
50 listView
->setColumnText(1, i18n("Info"));
51 listView
->setColumnText(2, i18n("Page"));
52 listView
->setColumnText(3, "");
53 listView
->setResizeMode( K3ListView::NoColumn
);
54 listView
->setColumnWidthMode(0, K3ListView::Maximum
);
55 listView
->setColumnWidthMode(1, K3ListView::Maximum
);
56 listView
->setColumnWidthMode(2, K3ListView::Maximum
);
57 listView
->setColumnWidthMode(3, K3ListView::Manual
);
58 listView
->setColumnWidth(3, 0);
59 listView
->setAlternateBackground( QColor(230, 230, 240) );
60 listView
->setSelectionModeExt( K3ListView::Single
);
62 m_idCounter
= KSayItGlobal::item_initial_id
;
64 m_currentItem
= m_rootItem
;
65 m_parasaxparser
= ParaSaxParser::Instance();
67 m_changedContent
.clear();
69 m_contextmenuhandler
= NULL
;
74 DocTreeViewImpl::~DocTreeViewImpl()
78 delete m_parasaxparser
;
79 if ( m_contextmenuhandler
)
80 delete m_contextmenuhandler
;
84 void DocTreeViewImpl::enableContextMenus( bool enabled
)
87 m_contextmenuhandler
= new ContextMenuHandler(this, "contextmenuhandler");
89 if ( m_contextmenuhandler
)
90 delete m_contextmenuhandler
;
91 m_contextmenuhandler
= NULL
;
96 void DocTreeViewImpl::clear()
98 kDebug(100200) << "DocTreeViewImpl::clear()";
105 // inform BookmarkHandler
107 emit
signalSetBookmarkFilename( QString() );
110 m_rootItem
= new RobDocument( listView
, i18n("unnamed") );
111 m_idCounter
= KSayItGlobal::item_initial_id
;
113 m_currentItem
= static_cast<ListViewInterface
*>(m_rootItem
);
117 void DocTreeViewImpl::createEmptyDocument()
119 kDebug(100200) << "DocTreeViewImpl::createEmptyDocument()";
120 // create empty document
122 QTextStream
wrapped(data
, QIODevice::ReadWrite
);
123 wrapped
.setEncoding(QTextStream::UnicodeUTF8
);
125 wrapped
<< "<?xml version=\"1.0\" ?>" << endl
;
126 wrapped
<< "<!--" << endl
;
127 wrapped
<< "!DOCTYPE book PUBLIC \"-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN\" \"dtd/kdex.dtd\"" << endl
;
128 wrapped
<< "-->" << endl
;
130 QString
header(data
);
131 m_parasaxparser
->setProcessingInstruction( header
);
133 wrapped
<< "<book>" << endl
;
134 wrapped
<< "<bookinfo>" << endl
;
135 wrapped
<< "<title><![CDATA[" << i18n("Empty Document") << "]]></title>" << endl
;
136 wrapped
<< "<authorgroup>" << endl
;
137 wrapped
<< "<author>" << endl
;
138 wrapped
<< "<firstname>KSayIt</firstname>" << endl
;
139 wrapped
<< "<surname>Wrapper</surname>" << endl
;
140 wrapped
<< "</author>" << endl
;
141 wrapped
<< "</authorgroup>" << endl
;
142 wrapped
<< "<copyright>" << endl
;
143 wrapped
<< "<year>2005</year>" << endl
;
144 wrapped
<< "<holder>Robert Vogl</holder>" << endl
;
145 wrapped
<< "</copyright>" << endl
;
146 wrapped
<< "</bookinfo>" << endl
;
147 wrapped
<< "<chapter>" << endl
;
148 wrapped
<< "<title><![CDATA[" << i18n("Untitled") << "]]></title>" << endl
;
149 wrapped
<< "<para>" << endl
;
151 wrapped
<< "</para>" << endl
;
152 wrapped
<< "</chapter>" << endl
;
153 wrapped
<< "</book>" << endl
;
155 if ( !m_domTree
.setContent( data
) ){
156 kDebug(100200) << "Kein gueltiges Dokument!!";
158 // inform BookmarkHandler
159 emit
signalSetBookmarkFilename( i18n("Untitled") );
161 QDomElement root
= m_domTree
.documentElement();
163 if( root
.tagName().toLower() == "book" ){ // DocBook
164 parseBook(root
, m_rootItem
); // we parse only ONE Book
168 m_currentItem
= static_cast<ListViewInterface
*>( listView
->lastItem() );
169 listView
->setSelected( m_currentItem
, true );
170 listView
->ensureItemVisible( m_currentItem
);
171 slotItemClicked( m_currentItem
);
175 void DocTreeViewImpl::openFile(const KUrl
&url
)
177 kDebug(100200) << "DocTreeViewImpl::openFile(" << url
.path() << ")";
182 QFile
file( url
.path() );
183 if( !file
.open(QIODevice::ReadOnly
) ){
184 err
= i18n("Unable to open File.");
189 if( m_domTree
.setContent(&file
) ){
192 QString header
= QString();
195 line
= file
.readLine();
196 while( !file
.atEnd() && (offset
= line
.find("<book", 0, false)) < 0 ){
198 line
= file
.readLine();
201 header
+= line
.left( offset
);
202 kDebug(100200) << "### Header: "<< header
;
203 m_parasaxparser
->setProcessingInstruction( header
);
204 // inform BookmarkHandler about the opened file
205 emit
signalSetBookmarkFilename( url
.fileName() );
207 // File is not a valid XML-File. Wrap it
210 QTextStream
wrapped(data
, QIODevice::ReadWrite
);
211 wrapped
.setEncoding(QTextStream::UnicodeUTF8
);
213 wrapped
<< "<?xml version=\"1.0\" ?>" << endl
;
214 wrapped
<< "<!--" << endl
;
215 wrapped
<< "!DOCTYPE book PUBLIC \"-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN\" \"dtd/kdex.dtd\"" << endl
;
216 wrapped
<< "-->" << endl
;
218 QString
header(data
);
219 kDebug(100200) << "Header (Wrapper): "<< header
;
220 m_parasaxparser
->setProcessingInstruction( header
);
222 wrapped
<< "<book>" << endl
;
223 wrapped
<< "<bookinfo>" << endl
;
224 wrapped
<< "<title><![CDATA[" << url
.path() << "]]></title>" << endl
;
225 wrapped
<< "<authorgroup>" << endl
;
226 wrapped
<< "<author>" << endl
;
227 wrapped
<< "<firstname>KSayIt</firstname>" << endl
;
228 wrapped
<< "<surname>Wrapper</surname>" << endl
;
229 wrapped
<< "</author>" << endl
;
230 wrapped
<< "</authorgroup>" << endl
;
231 wrapped
<< "<copyright>" << endl
;
232 wrapped
<< "<year>2005</year>" << endl
;
233 wrapped
<< "<holder>Robert Vogl</holder>" << endl
;
234 wrapped
<< "</copyright>" << endl
;
235 wrapped
<< "</bookinfo>" << endl
;
236 wrapped
<< "<chapter>" << endl
;
237 wrapped
<< "<title><![CDATA[" << i18n("Plain File") << "]]></title>" << endl
;
238 wrapped
<< "<para><![CDATA[";
239 wrapped
<< QString( file
.readAll() );
240 wrapped
<< "]]></para>" << endl
;
241 wrapped
<< "</chapter>" << endl
;
242 wrapped
<< "</book>" << endl
;
246 if (!m_domTree
.setContent(data
)){
247 err
= i18n("Failed wrapping the file into XML.");
251 emit
signalSetBookmarkFilename( i18n("Plain File") );
254 // check if correct document type
255 QDomElement root
= m_domTree
.documentElement();
256 if( root
.tagName().toLower() == "book" ){ // DocBook
257 parseBook(root
, m_rootItem
); // we parse only ONE Book
259 listView
->setSelected( m_rootItem
, true );
260 slotItemClicked( m_rootItem
);
262 err
= i18n("The file is of type %1, 'book' expected.", root
.tagName() );
270 void DocTreeViewImpl::saveFile()
272 kDebug(100200) << "DocTreeViewImpl::saveFile()";
274 makeCurrentNodePersistent();
278 if ( m_url
.isEmpty() ){ // file has no name, ask user
279 QString
usershome( getenv("HOME") );
280 m_url
= KFileDialog::getSaveUrl(usershome
, "*.docbook", this, i18n("Save File"));
282 if ( m_url
.isEmpty() ) // dialog cancelled
284 if ( !m_url
.isValid() ){
285 err
= i18n("The given URL is invalid. Try 'File save as...' instead.");
289 if ( m_url
.isLocalFile() ){
290 QFile
file( m_url
.path() );
291 if ( !file
.open(QIODevice::WriteOnly
) ){
292 err
= i18n("Unable open file to write.");
296 QTextStream
out(&file
);
297 out
.setEncoding(QTextStream::UnicodeUTF8
);
298 m_domTree
.save( out
, 0 );
299 m_rootItem
->setText(0, m_url
.path() );
301 // inform BookmarkHandler
302 emit
signalChangeBookmarkFilename( m_url
.fileName() );
303 slotItemClicked( m_currentItem
);
306 err
= i18n("Save operation currently works on local files only.");
314 void DocTreeViewImpl::saveFileAs()
316 kDebug(100200) << "DocTreeViewImpl::saveFileAs()";
319 makeCurrentNodePersistent();
321 m_url
= KFileDialog::getSaveUrl(QString(), "*.docbook", this, i18n("Save File As"));
322 if ( m_url
.isEmpty() ) // dialog cancelled
324 if ( !m_url
.isValid() ){
325 err
= i18n("The given URL is invalid.");
329 if ( m_url
.isLocalFile() ){
330 QFile
file( m_url
.path() );
331 if ( !file
.open(QIODevice::WriteOnly
) ){
332 err
= i18n("Unable open file to write.");
336 QTextStream
out(&file
);
337 out
.setEncoding(QTextStream::UnicodeUTF8
);
338 m_domTree
.save( out
, 0 );
339 m_rootItem
->setText(0, m_url
.path() );
341 // inform BookmarkHandler
342 emit
signalChangeBookmarkFilename( m_url
.fileName() );
343 slotItemClicked( m_currentItem
);
346 err
= i18n("Save operation currently works on local files only.");
354 void DocTreeViewImpl::setEditMode(bool mode
)
357 if ( (m_currentItem
->isEditable()) && mode
){
358 emit
signalEnableTextedit( true );
359 slotItemClicked( m_currentItem
);
363 makeCurrentNodePersistent();
364 slotItemClicked( m_currentItem
);
366 emit
signalEnableTextedit( false );
370 QString
DocTreeViewImpl::selectItemByID(const QString
&ID
, const QString title
)
372 kDebug(100200) << "DocTreeViewImpl::selectItemByID(" << ID
<< ")";
377 QString err
= QString();
380 * Search on structure (URL)
381 * e.g. 1=RobDokument|1=BookInfo|1=KeywordSet|2=Keyword
383 QStringList partList
;
384 partList
= ID
.split( "|");
385 QStringList::Iterator it
= partList
.begin();
386 it
++; // skip first element (always RobDocument)
388 QString childType
= QString();
389 ListViewInterface
*item
= m_rootItem
;
392 for (; it
!=partList
.end(); ++it
){
393 kDebug(100200) << "Part: " << (*it
);
395 break; // expected item does not exist
396 item
= static_cast<ListViewInterface
*>( item
->firstChild() );
398 childNum
= ((*it
).section('=', 0, 0)).toInt();
399 childType
= (*it
).section('=', 1, 1);
400 for (int i
=1; i
<childNum
; i
++){
401 item
= static_cast<ListViewInterface
*>( item
->nextSibling() );
403 break; // expected item does not exist
406 break; // expected item does not exist
407 QString type
= item
->getXmlContextName();
408 if ( childType
!= item
->getXmlContextName() )
409 break; // structure has been changed
414 QString itemTitle
= getItemTitle( item
);
415 if ( title
.left(itemTitle
.length()) == itemTitle
)
416 // Title made unique by KDE by appending "(2)", "(3)"...
422 * Not found, search on title
424 // walk trough the entire tree and try to find an item
425 // with the given title.
427 Q3ListViewItemIterator
sit( m_rootItem
);
428 QString itemTitle
= QString();
429 while ( sit
.current() ) {
430 item
= static_cast<ListViewInterface
*>(sit
.current());
432 break; // expected item does not exist
433 itemTitle
= getItemTitle( item
);
434 if ( title
.left(itemTitle
.length()) == itemTitle
){
436 err
= i18n("Maybe the structure of the document has been changed. Please check if this bookmark is still valid.");
443 // still not found => Failure
445 err
= i18n("Bookmark not found. Maybe the file content or the bookmark URL has been changed.");
450 if ( item
->isEditable() )
451 makeCurrentNodePersistent();
453 listView
->setSelected( item
, true );
454 listView
->ensureItemVisible(item
);
455 slotItemClicked( item
);
460 void DocTreeViewImpl::slotItemClicked(Q3ListViewItem
*item
)
462 kDebug(100200) << "DocTreeViewImpl::slotItemClicked()";
464 if ( item
!= m_currentItem
){
465 makeCurrentNodePersistent();
469 m_currentItem
= static_cast<ListViewInterface
*>(item
);
470 QString str
=QString();
471 QTextStream
msg(&str
, QIODevice::ReadWrite
);
472 msg
.setEncoding(QTextStream::UnicodeUTF8
);
474 // check if item has a child and check state
476 bool editable
= (m_currentItem
->isEditable()) && m_editMode
;
478 emit
signalEnableTextedit( editable
);
479 recursiveTextCollector( m_currentItem
, msg
, !editable
);
480 emit
signalContentChanged( str
);
482 // Create Bookmark-ID depending on the location of the item
484 QString idstring
= QString();
485 QTextStream
id(&idstring
, QIODevice::ReadWrite
);
486 id
.setEncoding(QTextStream::UnicodeUTF8
);
487 id
<< "1=RobDocument";
488 recursiveBuildItemIdentifier( m_currentItem
, id
);
490 // inform the Bookmark Manager about the new item.
491 QString title
= getItemTitle( m_currentItem
);
492 emit
signalNotifyBookmarkManager(idstring
, title
);
497 void DocTreeViewImpl::recursiveBuildItemIdentifier(ListViewInterface
* item
, QTextStream
&idstring
)
499 kDebug(100200) << "DocTreeViewImpl::recursiveBuildItemIdentifier()";
504 // 1. Do we have a parent (=parentItem)?
505 // If no -> return, if yes -> recursive call
506 ListViewInterface
*parentItem
= NULL
;
507 parentItem
= static_cast<ListViewInterface
*>( item
->parent() );
509 recursiveBuildItemIdentifier( parentItem
, idstring
);
515 // 2. Which child of the parentItem are we? Append no. to idstring.
517 QString itemID
= item
->text(3);
518 ListViewInterface
*i
= static_cast<ListViewInterface
*>( parentItem
->firstChild() );
521 if ( i
->text(3) == itemID
)
523 i
= static_cast<ListViewInterface
*>( i
->nextSibling() );
525 idstring
<< "|" << childno
;
527 // 3. Who are we? Append ID to idstring.
528 QString itemType
= item
->getXmlContextName();
529 idstring
<< "=" << itemType
;
533 QString
DocTreeViewImpl::getItemTitle( ListViewInterface
*item
)
538 QString col0
= item
->text(0);
539 QString title
= QString();
540 if ( col0
== i18n("Paragraph") ){
541 title
= (item
->getData()).left(32);
543 title
.replace( QRegExp("^( |\t|\n)+"), "");
544 title
.replace( QRegExp("( |\t|\n)$+"), "");
546 title
= col0
.left(32);
552 void DocTreeViewImpl::recursiveTextCollector(ListViewInterface
* item
, QTextStream
&msg
, bool header
)
554 kDebug(100200) << "DocTreeViewImpl::recursiveTextCollector()";
558 // if header==true get Headers
559 msg
<< item
->getRTFHeader();
560 text
= item
->getRTFData();
562 // get raw data (Edit Mode)
563 text
= item
->getRawData();
565 if ( !text
.isNull() )
568 // check if current item has a child
569 ListViewInterface
*i
= static_cast<ListViewInterface
*>(item
->firstChild());
572 recursiveTextCollector( i
, msg
, header
);
573 i
= static_cast<ListViewInterface
*>(i
->nextSibling());
578 void DocTreeViewImpl::sayActiveNodeAndChilds()
580 kDebug(100200) << "DocTreeViewImpl::sayActiveNodeAndChilds()";
583 if ( !(m_currentItem
->firstChild()) ){
584 // current item has no childs. It may be changed.
585 makeCurrentNodePersistent();
588 recursiveSayNodes( m_currentItem
);
589 emit
signalAllNodesProcessed();
593 void DocTreeViewImpl::recursiveSayNodes(ListViewInterface
* item
)
595 kDebug(100200) << "DocTreeViewImpl::recursiveSayNodes()";
598 QTextStream
msg(&str
, QIODevice::ReadWrite
);
599 msg
.setEncoding(QTextStream::UnicodeUTF8
);
601 // write Text of item (heading)
602 msg
<< item
->getHeader();
604 // get data of current item
605 msg
<< item
->getData() << "\n" << endl
;
609 emit
signalSetText( str
);
614 // check if current item has a child
615 ListViewInterface
*i
= static_cast<ListViewInterface
*>(item
->firstChild());
617 recursiveSayNodes( i
);
618 i
= static_cast<ListViewInterface
*>(i
->nextSibling());
623 void DocTreeViewImpl::stop()
625 kDebug(100200) << "DocTreeViewImpl::stop()";
630 void DocTreeViewImpl::setNodeContent(QString
&text
)
632 kDebug(100200) << "DocTreeViewImpl::setNodeContent()";
633 m_changedContent
= text
;
637 void DocTreeViewImpl::makeCurrentNodePersistent()
639 kDebug(100200) << "DocTreeViewImpl::slotMakeCurrentNodePersistent()";
640 if ( m_changedContent
.isNull() )
641 return; // no changes were happen
643 // TODO: Exceptions not supported.
645 m_currentItem
->setData(m_changedContent
, m_domTree
);
646 m_changedContent
.clear();
648 // catch(QString err){
649 // KMessageBox::error( this, err, i18n("XML-Error") );
650 // m_changedContent.clear();
655 void DocTreeViewImpl::contextMenuEvent(QContextMenuEvent
*e
)
657 kDebug(100200) << "DocTreeViewImpl::contextMenuEvent()";
659 if ( !m_currentItem
)
662 m_contextmenu
= m_contextmenuhandler
->getPopupMenu( m_currentItem
);
663 if ( !m_contextmenu
)
666 m_contextmenu
->exec( e
->globalPos() );
670 /******************************************
671 * Context-Menu functions
672 ******************************************/
674 void DocTreeViewImpl::slotRenameItem()
676 kDebug(100200) << "DocTreeViewImpl::slotRenameItem()";
681 // get node of current TreeView item
682 QDomNode thisNode
= QDomNode();
685 m_currentItem
->getNodes( list
);
686 thisNode
= list
.front();
688 if ( thisNode
.isNull() )
693 newname
= KInputDialog::getText(
695 i18n("Please enter the new name of the item:"),
696 m_currentItem
->text(0),
699 "queryNewItemName" */
705 QDomElement newTitle
= m_domTree
.createElement("Title");
706 QDomText textOfTitle
= m_domTree
.createTextNode(newname
);
707 newTitle
.appendChild( textOfTitle
);
709 // find Title-element, a child of thisNode
710 QDomNode oldTitle
= thisNode
.firstChild();
711 while( !oldTitle
.isNull() ){
712 if( oldTitle
.isElement() && oldTitle
.nodeName().toLower()=="title" ){
714 thisNode
.replaceChild(newTitle
, oldTitle
);
717 oldTitle
= oldTitle
.nextSibling();
721 m_currentItem
->setText(0, newname
);
725 void DocTreeViewImpl::slotDeleteItem()
727 kDebug(100200) << "DocTreeViewImpl::slotDeleteItem()";
729 ListViewInterface
*itemToDelete
= m_currentItem
;
730 ListViewInterface
*parentItem
= NULL
;
731 parentItem
= static_cast<ListViewInterface
*>(itemToDelete
->parent());
733 return; // delete only items with parent
738 NodeList_type::iterator it
;
740 itemToDelete
->getNodes( nodes
);
741 for ( it
=nodes
.begin(); it
!=nodes
.end(); ++it
){
742 parentNode
= (*it
).parentNode();
743 if ( !parentNode
.isNull() ){
744 kDebug(100200) << "remove node...";
745 parentNode
.removeChild( *it
);
749 // try to delete bookmark
750 QString url
=QString();
751 QTextStream
id(&url
, QIODevice::ReadWrite
);
752 id
.setEncoding(QTextStream::UnicodeUTF8
);
753 id
<< "ksayit://1=RobDocument";
754 recursiveBuildItemIdentifier( itemToDelete
, id
);
755 QString title
= getItemTitle( itemToDelete
);
756 emit
signalDeleteBookmark( url
, title
);
758 // remove TreeView item
761 // reindex entire remaining tree
762 ListViewInterface
*item
= NULL
;
763 m_idCounter
= KSayItGlobal::item_initial_id
;
764 Q3ListViewItemIterator
itr( m_rootItem
);
765 while ( itr
.current() ) {
766 item
= static_cast<ListViewInterface
*>(itr
.current());
767 item
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
773 listView
->setSelected( parentItem
, true );
774 listView
->ensureItemVisible( parentItem
);
775 slotItemClicked( parentItem
);
779 void DocTreeViewImpl::slotNewBookInfo()
781 if ( m_currentItem
->getXmlContextName() == "RobDocument" ){
782 int newIndex
= newIndexFirstChild();
783 Overview
*overview
= new Overview( m_currentItem
, NULL
, i18n("Overview") );
784 overview
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
788 m_currentItem
->getNodes( list
);
789 QDomElement parentElement
= (list
.front()).toElement();
791 if ( parentElement
.isElement() ){
792 QDomElement newChild
= m_domTree
.createElement("BookInfo");
793 newNode
= parentElement
.appendChild( newChild
);
796 if ( !newNode
.isNull() ){
798 list
.push_back( newNode
);
799 overview
->setNodes( list
);
800 m_contextmenuhandler
->registerPopupMenu( overview
);
806 void DocTreeViewImpl::slotNewChapter()
808 if ( m_currentItem
->getXmlContextName() == "RobDocument" ){
809 int newIndex
= newIndexLastChild();
810 Chapter
*chapter
= new Chapter( m_currentItem
, NULL
, i18n("Chapter") );
811 chapter
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
812 chapter
->setText(0, i18n("New Chapter Title") );
817 m_currentItem
->getNodes( list
);
818 QDomElement parentElement
= (list
.front()).toElement();
820 if ( parentElement
.isElement() ){
821 QDomElement newChild
= m_domTree
.createElement("Chapter");
822 QDomElement newTitle
= m_domTree
.createElement("Title");
823 QDomText textOfTitle
= m_domTree
.createTextNode( i18n("New Chapter Title") );
825 newTitle
.appendChild( textOfTitle
);
826 newChild
.appendChild( newTitle
);
827 newNode
= parentElement
.appendChild( newChild
);
830 if ( !newNode
.isNull() ){
832 list
.push_back( newNode
);
833 chapter
->setNodes( list
);
834 m_contextmenuhandler
->registerPopupMenu( chapter
);
840 void DocTreeViewImpl::slotNewKeywordSet()
842 if ( m_currentItem
->getXmlContextName() == "BookInfo" ){
844 int newIndex
= newIndexFirstChild();
845 KeywordSet
*keywordset
= new KeywordSet(m_currentItem
, NULL
, i18n("Keywords"));
846 keywordset
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
851 m_currentItem
->getNodes( list
);
852 QDomElement parentElement
= (list
.front()).toElement();
854 if ( parentElement
.isElement() ){
855 QDomElement newChild
= m_domTree
.createElement("KeywordSet");
856 newNode
= parentElement
.appendChild( newChild
);
859 if ( !newNode
.isNull() ){
861 list
.push_back( newNode
);
862 keywordset
->setNodes( list
);
863 m_contextmenuhandler
->registerPopupMenu( keywordset
);
869 void DocTreeViewImpl::slotNewKeyword()
871 if ( m_currentItem
->getXmlContextName() == "KeywordSet" ){
873 int newIndex
= newIndexLastChild();
874 Keyword
*keyword
= new Keyword(m_currentItem
, NULL
, i18n("Keyword"));
875 keyword
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
876 keyword
->setText(0, i18n("New Keyword") );
881 m_currentItem
->getNodes( list
);
882 QDomElement parentElement
= (list
.front()).toElement();
885 if ( parentElement
.isElement() ){
886 QDomElement newChild
= m_domTree
.createElement("Keyword");
887 newText
= m_domTree
.createTextNode( i18n("New Keyword") );
888 newChild
.appendChild( newText
);
889 newNode
= parentElement
.appendChild( newChild
);
892 if ( !newText
.isNull() ){
894 list
.push_back( newText
);
895 keyword
->setNodes( list
);
896 m_contextmenuhandler
->registerPopupMenu( keyword
);
902 void DocTreeViewImpl::slotNewAbstract()
904 if ( m_currentItem
->getXmlContextName() == "BookInfo" ){
906 int newIndex
= newIndexLastChild();
907 Abstract
*abstract
= new Abstract(m_currentItem
, NULL
, i18n("Abstract"));
908 abstract
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
913 m_currentItem
->getNodes( list
);
914 QDomElement parentElement
= (list
.front()).toElement();
916 if ( parentElement
.isElement() ){
917 QDomElement newAbstract
= m_domTree
.createElement("Abstract");
918 // QDomElement newPara = m_domTree.createElement("Para");
919 // newAbstract.appendChild( newPara );
920 newNode
= parentElement
.appendChild( newAbstract
);
923 if ( !newNode
.isNull() ){
925 list
.push_back( newNode
);
926 abstract
->setNodes( list
);
927 m_contextmenuhandler
->registerPopupMenu( abstract
);
929 // add a new Para-Element
930 ListViewInterface
*backup
= m_currentItem
;
931 m_currentItem
= abstract
;
933 m_currentItem
= backup
;
938 void DocTreeViewImpl::slotNewAuthorGroup()
940 if ( m_currentItem
->getXmlContextName() == "BookInfo" ){
942 int newIndex
= newIndexFirstChild();
943 AuthorGroup
*authorgroup
= new AuthorGroup(m_currentItem
, NULL
, i18n("Author(s)"));
944 authorgroup
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
949 m_currentItem
->getNodes( list
);
950 QDomElement parentElement
= (list
.front()).toElement();
952 if ( parentElement
.isElement() ){
953 QDomElement newAuthorGroup
= m_domTree
.createElement("AuthorGroup");
954 newNode
= parentElement
.appendChild( newAuthorGroup
);
957 if ( !newNode
.isNull() ){
959 list
.push_back( newNode
);
960 authorgroup
->setNodes( list
);
961 m_contextmenuhandler
->registerPopupMenu( authorgroup
);
963 // add a new Author-Element
964 ListViewInterface
*backup
= m_currentItem
;
965 m_currentItem
= authorgroup
;
967 m_currentItem
= backup
;
972 void DocTreeViewImpl::slotNewAuthor()
974 if ( m_currentItem
->getXmlContextName() == "AuthorGroup" ){
976 int newIndex
= newIndexLastChild();
977 Author
*author
= new Author(m_currentItem
);
978 author
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
979 author
->setText(0, i18n("Author") );
980 author
->setText(1, i18n("Firstname Surname") );
985 m_currentItem
->getNodes( list
);
986 QDomElement parentElement
= (list
.front()).toElement();
987 QDomText firstname
= QDomText();
988 QDomText surname
= QDomText();
990 if ( parentElement
.isElement() ){
991 QDomElement newAuthor
= m_domTree
.createElement("Author");
992 QDomElement newFirstname
= m_domTree
.createElement("Firstname");
993 firstname
= m_domTree
.createTextNode( i18n("Firstname") );
994 newFirstname
.appendChild( firstname
);
996 QDomElement newSurname
= m_domTree
.createElement("Surname");
997 surname
= m_domTree
.createTextNode( i18n("Surname") );
998 newSurname
.appendChild( surname
);
1000 newAuthor
.appendChild( newFirstname
);
1001 newAuthor
.appendChild( newSurname
);
1003 parentElement
.appendChild( newAuthor
);
1006 if ( ! (firstname
.isNull() || surname
.isNull()) ){
1008 list
.push_back( firstname
);
1009 list
.push_back( surname
);
1010 author
->setNodes( list
);
1011 m_contextmenuhandler
->registerPopupMenu( author
);
1017 void DocTreeViewImpl::slotNewDate()
1019 if ( m_currentItem
->getXmlContextName() == "BookInfo" ){
1020 // New TreeView item
1021 int newIndex
= newIndexLastChild();
1022 Date
*date
= new Date(m_currentItem
, NULL
, i18n("Date"));
1023 date
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
1026 today
= KGlobal::locale()->formatDate(QDate::currentDate(Qt::LocalTime
), KLocale::ShortDate
);
1027 date
->setText( 1, today
);
1032 m_currentItem
->getNodes( list
);
1033 QDomElement parentElement
= (list
.front()).toElement();
1035 if ( parentElement
.isElement() ){
1036 QDomElement newDate
= m_domTree
.createElement("Date");
1037 dateToday
= m_domTree
.createTextNode( today
);
1038 newDate
.appendChild( dateToday
);
1039 parentElement
.appendChild( newDate
);
1042 if ( !dateToday
.isNull() ){
1044 list
.push_back( dateToday
);
1045 date
->setNodes( list
);
1046 m_contextmenuhandler
->registerPopupMenu( date
);
1052 void DocTreeViewImpl::slotNewReleaseInfo()
1054 if ( m_currentItem
->getXmlContextName() == "BookInfo" ){
1055 // New TreeView item
1056 int newIndex
= newIndexLastChild();
1057 ReleaseInfo
*relinfo
= new ReleaseInfo(m_currentItem
, NULL
, i18n("Release"));
1058 relinfo
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
1059 relinfo
->setText( 1, "0.0.0" );
1064 m_currentItem
->getNodes( list
);
1065 QDomElement parentElement
= (list
.front()).toElement();
1066 QDomText releaseText
;
1067 if ( parentElement
.isElement() ){
1068 QDomElement newRelease
= m_domTree
.createElement("ReleaseInfo");
1069 releaseText
= m_domTree
.createTextNode("0.0.0");
1070 newRelease
.appendChild( releaseText
);
1071 parentElement
.appendChild( newRelease
);
1074 if ( !releaseText
.isNull() ){
1076 list
.push_back( releaseText
);
1077 relinfo
->setNodes( list
);
1078 m_contextmenuhandler
->registerPopupMenu( relinfo
);
1084 void DocTreeViewImpl::slotNewTitle()
1089 void DocTreeViewImpl::slotNewParagraph()
1091 // Create Null element
1092 QDomElement parentElement
= QDomElement();
1096 m_currentItem
->getNodes( list
);
1097 parentElement
= (list
.front()).toElement();
1099 if ( parentElement
.isNull() )
1102 // New TreeView item
1103 int newIndex
= newIndexLastChild();
1104 Para
*para
= new Para(m_currentItem
, NULL
, i18n("Paragraph"));
1105 para
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
1109 if ( parentElement
.isElement() ){
1110 QDomElement newChild
= m_domTree
.createElement("Para");
1111 newNode
= parentElement
.appendChild( newChild
);
1114 if ( !newNode
.isNull() ){
1116 list
.push_back( newNode
);
1117 para
->setNodes( list
);
1118 m_contextmenuhandler
->registerPopupMenu( para
);
1123 void DocTreeViewImpl::slotNewSection_1()
1125 if ( m_currentItem
->getXmlContextName() == "Chapter" ){
1126 int newIndex
= newIndexLastChild();
1127 Sect1
*sect1
= new Sect1(m_currentItem
, NULL
, i18n("Section Level 1"));
1128 sect1
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
1133 m_currentItem
->getNodes( list
);
1134 QDomElement parentElement
= (list
.front()).toElement();
1136 if ( parentElement
.isElement() ){
1137 QDomElement newSect
= m_domTree
.createElement("Sect1");
1138 QDomElement newTitle
= m_domTree
.createElement("Title");
1139 QDomText textOfTitle
= m_domTree
.createTextNode( i18n("New Section Title") );
1141 newTitle
.appendChild( textOfTitle
);
1142 newSect
.appendChild( newTitle
);
1143 newNode
= parentElement
.appendChild( newSect
);
1146 if ( !newNode
.isNull() ){
1148 list
.push_back( newNode
);
1149 sect1
->setNodes( list
);
1150 m_contextmenuhandler
->registerPopupMenu( sect1
);
1156 void DocTreeViewImpl::slotNewSection_2()
1158 if ( m_currentItem
->getXmlContextName() == "Sect1" ){
1159 int newIndex
= newIndexLastChild();
1160 Sect2
*sect2
= new Sect2(m_currentItem
, NULL
, i18n("Section Level 2"));
1161 sect2
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
1166 m_currentItem
->getNodes( list
);
1167 QDomElement parentElement
= (list
.front()).toElement();
1169 if ( parentElement
.isElement() ){
1170 QDomElement newSect
= m_domTree
.createElement("Sect2");
1171 QDomElement newTitle
= m_domTree
.createElement("Title");
1172 QDomText textOfTitle
= m_domTree
.createTextNode( i18n("New Section Title") );
1174 newTitle
.appendChild( textOfTitle
);
1175 newSect
.appendChild( newTitle
);
1176 newNode
= parentElement
.appendChild( newSect
);
1179 if ( !newNode
.isNull() ){
1181 list
.push_back( newNode
);
1182 sect2
->setNodes( list
);
1183 m_contextmenuhandler
->registerPopupMenu( sect2
);
1189 void DocTreeViewImpl::slotNewSection_3()
1191 if ( m_currentItem
->getXmlContextName() == "Sect2" ){
1192 int newIndex
= newIndexLastChild();
1193 Sect3
*sect3
= new Sect3(m_currentItem
, NULL
, i18n("Section Level 3"));
1194 sect3
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
1199 m_currentItem
->getNodes( list
);
1200 QDomElement parentElement
= (list
.front()).toElement();
1202 if ( parentElement
.isElement() ){
1203 QDomElement newSect
= m_domTree
.createElement("Sect3");
1204 QDomElement newTitle
= m_domTree
.createElement("Title");
1205 QDomText textOfTitle
= m_domTree
.createTextNode( i18n("New Section Title") );
1207 newTitle
.appendChild( textOfTitle
);
1208 newSect
.appendChild( newTitle
);
1209 newNode
= parentElement
.appendChild( newSect
);
1212 if ( !newNode
.isNull() ){
1214 list
.push_back( newNode
);
1215 sect3
->setNodes( list
);
1216 m_contextmenuhandler
->registerPopupMenu( sect3
);
1222 void DocTreeViewImpl::slotNewSection_4()
1224 if ( m_currentItem
->getXmlContextName() == "Sect3" ){
1225 int newIndex
= newIndexLastChild();
1226 Sect4
*sect4
= new Sect4(m_currentItem
, NULL
, i18n("Section Level 4"));
1227 sect4
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
1232 m_currentItem
->getNodes( list
);
1233 QDomElement parentElement
= (list
.front()).toElement();
1235 if ( parentElement
.isElement() ){
1236 QDomElement newSect
= m_domTree
.createElement("Sect4");
1237 QDomElement newTitle
= m_domTree
.createElement("Title");
1238 QDomText textOfTitle
= m_domTree
.createTextNode( i18n("New Section Title") );
1240 newTitle
.appendChild( textOfTitle
);
1241 newSect
.appendChild( newTitle
);
1242 newNode
= parentElement
.appendChild( newSect
);
1245 if ( !newNode
.isNull() ){
1247 list
.push_back( newNode
);
1248 sect4
->setNodes( list
);
1249 m_contextmenuhandler
->registerPopupMenu( sect4
);
1255 void DocTreeViewImpl::slotNewSection_5()
1257 if ( m_currentItem
->getXmlContextName() == "Sect4" ){
1258 int newIndex
= newIndexLastChild();
1259 Sect5
*sect5
= new Sect5(m_currentItem
, NULL
, i18n("Section Level 5"));
1260 sect5
->setText(3, QString("%1").arg(newIndex
).rightJustified(8,'0') );
1265 m_currentItem
->getNodes( list
);
1266 QDomElement parentElement
= (list
.front()).toElement();
1268 if ( parentElement
.isElement() ){
1269 QDomElement newSect
= m_domTree
.createElement("Sect5");
1270 QDomElement newTitle
= m_domTree
.createElement("Title");
1271 QDomText textOfTitle
= m_domTree
.createTextNode( i18n("New Section Title") );
1273 newTitle
.appendChild( textOfTitle
);
1274 newSect
.appendChild( newTitle
);
1275 newNode
= parentElement
.appendChild( newSect
);
1278 if ( !newNode
.isNull() ){
1280 list
.push_back( newNode
);
1281 sect5
->setNodes( list
);
1282 m_contextmenuhandler
->registerPopupMenu( sect5
);
1288 int DocTreeViewImpl::newIndexFirstChild()
1290 kDebug(100200) << "DocTreeViewImpl::newIndexFirstChild()";
1292 int currentIndex
= (m_currentItem
->text(3)).toInt();
1294 // walk trough the entire tree and increment all
1295 // indices greater than currentIndex
1296 ListViewInterface
*item
= NULL
;
1298 Q3ListViewItemIterator
it( m_rootItem
);
1299 while ( it
.current() ) {
1300 item
= static_cast<ListViewInterface
*>(it
.current());
1301 itemIndex
= (item
->text(3)).toInt();
1302 if ( itemIndex
> currentIndex
){
1303 item
->setText(3, QString("%1").arg(itemIndex
+1).rightJustified(8,'0') );;
1310 return currentIndex
;
1314 int DocTreeViewImpl::newIndexLastChild()
1316 kDebug(100200) << "DocTreeViewImpl::newIndexLastChild()";
1318 // find highest index of the subtree with
1319 // m_currentItem as root
1321 findHighestIndex( m_currentItem
, lastIndex
);
1322 kDebug(100200) << "Letzter Index: " << lastIndex
;
1324 // walk trough the entire tree and increment all
1325 // indices greater than lastIndex
1327 ListViewInterface
*item
;
1328 Q3ListViewItemIterator
it( m_rootItem
);
1329 while ( it
.current() ) {
1330 item
= static_cast<ListViewInterface
*>(it
.current());
1331 itemIndex
= (item
->text(3)).toInt();
1332 if ( itemIndex
> lastIndex
){
1333 item
->setText(3, QString("%1").arg(itemIndex
+1).rightJustified(8,'0') );
1344 void DocTreeViewImpl::findHighestIndex(ListViewInterface
* item
, int &index
)
1346 int currentIndex
= (item
->text(3)).toInt();
1347 index
= currentIndex
> index
? currentIndex
: index
;
1349 ListViewInterface
*i
= static_cast<ListViewInterface
*>(item
->firstChild());
1351 findHighestIndex(i
, index
);
1352 i
= static_cast<ListViewInterface
*>(i
->nextSibling());
1358 /******************************************
1359 * XML-Parser functions
1360 ******************************************/
1364 void DocTreeViewImpl::parseBook(const QDomElement
&element
, ListViewInterface
*item
)
1366 kDebug(100200) << "+++ entering parseBook()";
1367 item
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1369 NodeList_type nodelist
;
1371 nodelist
.push_back(element
);
1372 item
->setNodes( nodelist
);
1373 // register Popup menu
1374 m_contextmenuhandler
->registerPopupMenu( item
);
1376 // TODO: Attributes Id, Lang
1378 // Elements (parse BookInfo before Chapter)
1379 QDomNode node
= element
.firstChild();
1380 while( !node
.isNull() ){
1381 if( node
.isElement() && node
.nodeName().toLower()=="bookinfo" ){
1382 parseBookInfo( node
.toElement(), item
);
1385 node
= node
.nextSibling();
1387 node
= element
.firstChild();
1388 while( !node
.isNull() ){
1389 if ( node
.isElement() && node
.nodeName().toLower()=="chapter" ){
1390 parseChapter( node
.toElement(), item
);
1392 node
= node
.nextSibling();
1394 kDebug(100200) << "--- leaving parseBook()";
1398 void DocTreeViewImpl::parseBookInfo(const QDomElement
&element
, ListViewInterface
*item
)
1400 kDebug(100200) << "+++ entering parseBookInfo()";
1402 Overview
*overview
= new Overview(item
, NULL
, i18n("Overview"));
1403 overview
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1407 list
.push_back( element
);
1408 overview
->setNodes(list
);
1409 // register Popup menu
1410 m_contextmenuhandler
->registerPopupMenu( overview
);
1413 QDomNode node
= element
.firstChild();
1415 while( !node
.isNull() ){
1416 if( node
.isElement() && node
.nodeName().toLower()=="title" ){
1417 data
= node
.firstChild().toText();
1418 if( !data
.isNull() ){
1419 item
->setText( 0, data
.nodeValue() ); // assign title to RootItem
1423 node
= node
.nextSibling();
1425 node
= element
.firstChild();
1426 while( !node
.isNull() ){
1427 if ( node
.isElement() && node
.nodeName().toLower()=="authorgroup" ){
1428 parseAuthorGroup( node
.toElement(), overview
);
1430 node
= node
.nextSibling();
1432 node
= element
.firstChild();
1433 while( !node
.isNull() ){
1434 if ( node
.isElement() && node
.nodeName().toLower()=="date" ){
1435 data
= node
.firstChild().toText();
1436 if( !data
.isNull() ){
1437 Date
*date
= new Date(overview
, NULL
, i18n("Date"));
1438 date
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1439 date
->setText( 1, data
.nodeValue() );
1442 list
.push_back( data
);
1443 date
->setNodes(list
);
1444 // register Popup menu
1445 m_contextmenuhandler
->registerPopupMenu( date
);
1448 node
= node
.nextSibling();
1450 node
= element
.firstChild();
1451 while( !node
.isNull() ){
1452 if ( node
.isElement() && node
.nodeName().toLower()=="releaseinfo" ){
1453 data
= node
.firstChild().toText();
1454 if( !data
.isNull() ){
1455 ReleaseInfo
*relinfo
= new ReleaseInfo(overview
, NULL
, i18n("Release"));
1456 relinfo
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1457 relinfo
->setText( 1, data
.nodeValue() );
1460 list
.push_back( data
);
1461 relinfo
->setNodes( list
);
1462 // register Popup menu
1463 m_contextmenuhandler
->registerPopupMenu( relinfo
);
1466 node
= node
.nextSibling();
1468 node
= element
.firstChild();
1469 while( !node
.isNull() ){
1470 if ( node
.isElement() && node
.nodeName().toLower()=="keywordset" ){
1471 parseKeywordSet( node
.toElement(), overview
);
1473 node
= node
.nextSibling();
1475 node
= element
.firstChild();
1476 while( !node
.isNull() ){
1477 if ( node
.isElement() && node
.nodeName().toLower()=="abstract" ){
1478 parseAbstract( node
.toElement(), overview
);
1480 node
= node
.nextSibling();
1482 kDebug(100200) << "--- leaving parseBookInfo()";
1486 void DocTreeViewImpl::parseAuthorGroup(const QDomElement
&element
, ListViewInterface
*item
)
1488 kDebug(100200) << "+++ entering parseAuthorGroup()";
1491 AuthorGroup
*authorgroup
= new AuthorGroup(item
, NULL
, i18n("Author(s)"));
1492 authorgroup
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1496 list
.push_back( element
);
1497 authorgroup
->setNodes( list
);
1498 // register Popup menu
1499 m_contextmenuhandler
->registerPopupMenu( authorgroup
);
1501 QDomNode node
= element
.firstChild();
1502 while( !node
.isNull() ){
1503 if( node
.isElement() && node
.nodeName().toLower()=="author" ){
1504 parseAuthor( node
.toElement(), authorgroup
);
1506 node
= node
.nextSibling();
1508 kDebug(100200) << "--- leaving parseAuthorGroup()";
1512 void DocTreeViewImpl::parseAuthor(const QDomElement
&element
, ListViewInterface
*item
)
1514 kDebug(100200) << "+++ entering parseAuthor()";
1516 // item = authorgroup
1518 QDomText firstname
= QDomText();
1519 QDomText surname
= QDomText();
1520 QString s_firstname
= QString();
1521 QString s_surname
= QString();
1523 Author
*author
= new Author(item
);
1524 author
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1526 QDomNode node
= element
.firstChild();
1527 while( !node
.isNull() ){
1528 if( node
.isElement() && node
.nodeName().toLower()=="firstname" ){
1529 data
= node
.firstChild().toText();
1530 if( !data
.isNull() ){
1531 s_firstname
= data
.nodeValue();
1534 } else if ( node
.isElement() && node
.nodeName().toLower()=="surname" ){
1535 data
= node
.firstChild().toText();
1536 if( !data
.isNull() ){
1537 s_surname
= data
.nodeValue();
1541 node
= node
.nextSibling();
1546 list
.push_back( firstname
);
1547 list
.push_back( surname
);
1548 author
->setNodes( list
);
1549 // register Popup menu
1550 m_contextmenuhandler
->registerPopupMenu( author
);
1552 author
->setText(0, i18n("Author") );
1553 author
->setText(1, s_firstname
+ ' ' + s_surname
);
1555 kDebug(100200) << "--- leaving parseAuthor()";
1559 void DocTreeViewImpl::parseKeywordSet(const QDomElement
&element
, ListViewInterface
*item
)
1561 kDebug(100200) << "+++ entering parseKeywordSet()";
1564 KeywordSet
*keywordset
= new KeywordSet(item
, NULL
, i18n("Keywords"));
1565 keywordset
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1569 list
.push_back( element
);
1570 keywordset
->setNodes( list
);
1571 // register Popup menu
1572 m_contextmenuhandler
->registerPopupMenu( keywordset
);
1575 QDomNode node
= element
.firstChild();
1576 while( !node
.isNull() ){
1577 if( node
.isElement() && node
.nodeName().toLower()=="keyword" ){
1578 data
= node
.firstChild().toText();
1579 if( !data
.isNull() ){
1580 Keyword
*keyword
= new Keyword(keywordset
);
1581 keyword
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1582 keyword
->setText(0, data
.nodeValue() );
1585 list
.push_back( data
);
1586 keyword
->setNodes( list
);
1587 // register Popup menu
1588 m_contextmenuhandler
->registerPopupMenu( keyword
);
1591 node
= node
.nextSibling();
1593 kDebug(100200) << "--- leaving parseKeywordSet()";
1597 void DocTreeViewImpl::parseAbstract(const QDomElement
&element
, ListViewInterface
*item
)
1599 kDebug(100200) << "+++ entering parseAbstract()";
1603 Abstract
*abstract
= new Abstract(item
, NULL
, i18n("Abstract"));
1604 abstract
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1608 list
.push_back( element
);
1609 abstract
->setNodes( list
);
1610 // register Popup menu
1611 m_contextmenuhandler
->registerPopupMenu( abstract
);
1613 QDomNode node
= element
.firstChild();
1614 while( !node
.isNull() ){
1615 if( node
.isElement() && node
.nodeName().toLower()=="para" ){
1616 parsePara( node
.toElement(), abstract
);
1618 node
= node
.nextSibling();
1620 kDebug(100200) << "--- leaving parseAbstract()";
1624 void DocTreeViewImpl::parseChapter(const QDomElement
&element
, ListViewInterface
*item
)
1626 kDebug(100200) << "+++ entering parseChapter()";
1629 Chapter
*chapter
= new Chapter(item
, NULL
, i18n("Chapter"));
1630 chapter
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1634 list
.push_back( element
);
1635 chapter
->setNodes( list
);
1636 // register Popup menu
1637 m_contextmenuhandler
->registerPopupMenu( chapter
);
1639 QDomNode node
= element
.firstChild();
1640 while( !node
.isNull() ){
1641 if( node
.isElement() && node
.nodeName().toLower()=="title" ){
1642 data
= node
.firstChild().toText();
1643 if( !data
.isNull() ){
1644 chapter
->setText( 0, data
.nodeValue() );
1646 } else if ( node
.isElement() && node
.nodeName().toLower()=="para" ){
1647 parsePara( node
.toElement(), chapter
);
1648 } else if ( node
.isElement() && node
.nodeName().toLower()=="sect1" ){
1649 parseSect1( node
.toElement(), chapter
);
1651 node
= node
.nextSibling();
1653 kDebug(100200) << "--- leaving parseChapter()";
1657 void DocTreeViewImpl::parseSect1(const QDomElement
&element
, ListViewInterface
*item
)
1659 kDebug(100200) << "+++ entering parseSect1()";
1662 Sect1
*sect1
= new Sect1(item
, NULL
, i18n("Section Level 1"));
1663 sect1
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1667 list
.push_back( element
);
1668 sect1
->setNodes( list
);
1669 // register Popup menu
1670 m_contextmenuhandler
->registerPopupMenu( sect1
);
1672 QDomNode node
= element
.firstChild();
1673 while( !node
.isNull() ){
1674 if( node
.isElement() && node
.nodeName().toLower()=="title" ){
1675 data
= node
.firstChild().toText();
1676 if( !data
.isNull() ){
1677 sect1
->setText( 0, data
.nodeValue() );
1679 } else if ( node
.isElement() && node
.nodeName().toLower()=="para" ){
1680 parsePara( node
.toElement(), sect1
);
1681 } else if ( node
.isElement() && node
.nodeName().toLower()=="sect2" ){
1682 parseSect2( node
.toElement(), sect1
);
1684 node
= node
.nextSibling();
1686 kDebug(100200) << "--- leaving parseSect1()";
1690 void DocTreeViewImpl::parseSect2(const QDomElement
&element
, ListViewInterface
*item
)
1692 kDebug(100200) << "+++ entering parseSect2()";
1695 Sect2
*sect2
= new Sect2(item
, NULL
, i18n("Section Level 2"));
1696 sect2
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1700 list
.push_back( element
);
1701 sect2
->setNodes( list
);
1702 // register Popup menu
1703 m_contextmenuhandler
->registerPopupMenu( sect2
);
1705 QDomNode node
= element
.firstChild();
1706 while( !node
.isNull() ){
1707 if( node
.isElement() && node
.nodeName().toLower()=="title" ){
1708 data
= node
.firstChild().toText();
1709 if( !data
.isNull() ){
1710 sect2
->setText( 0, data
.nodeValue() );
1712 } else if ( node
.isElement() && node
.nodeName().toLower()=="para" ){
1713 parsePara( node
.toElement(), sect2
);
1714 } else if ( node
.isElement() && node
.nodeName().toLower()=="sect3" ){
1715 parseSect3( node
.toElement(), sect2
);
1717 node
= node
.nextSibling();
1719 kDebug(100200) << "--- leaving parseSect2()";
1723 void DocTreeViewImpl::parseSect3(const QDomElement
&element
, ListViewInterface
*item
)
1725 kDebug(100200) << "+++ entering parseSect3()";
1728 Sect3
*sect3
= new Sect3(item
, NULL
, i18n("Section Level 3"));
1729 sect3
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1733 list
.push_back( element
);
1734 sect3
->setNodes( list
);
1735 // register Popup menu
1736 m_contextmenuhandler
->registerPopupMenu( sect3
);
1738 QDomNode node
= element
.firstChild();
1739 while( !node
.isNull() ){
1740 if( node
.isElement() && node
.nodeName().toLower()=="title" ){
1741 data
= node
.firstChild().toText();
1742 if( !data
.isNull() ){
1743 sect3
->setText( 0, data
.nodeValue() );
1745 } else if ( node
.isElement() && node
.nodeName().toLower()=="para" ){
1746 parsePara( node
.toElement(), sect3
);
1747 } else if ( node
.isElement() && node
.nodeName().toLower()=="sect4" ){
1748 parseSect4( node
.toElement(), sect3
);
1750 node
= node
.nextSibling();
1752 kDebug(100200) << "--- leaving parseSect3()";
1756 void DocTreeViewImpl::parseSect4(const QDomElement
&element
, ListViewInterface
*item
)
1758 kDebug(100200) << "+++ entering parseSect4()";
1761 Sect4
*sect4
= new Sect4(item
, NULL
, i18n("Section Level 4"));
1762 sect4
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1766 list
.push_back( element
);
1767 sect4
->setNodes( list
);
1768 // register Popup menu
1769 m_contextmenuhandler
->registerPopupMenu( sect4
);
1771 QDomNode node
= element
.firstChild();
1772 while( !node
.isNull() ){
1773 if( node
.isElement() && node
.nodeName().toLower()=="title" ){
1774 data
= node
.firstChild().toText();
1775 if( !data
.isNull() ){
1776 sect4
->setText( 0, data
.nodeValue() );
1778 } else if ( node
.isElement() && node
.nodeName().toLower()=="para" ){
1779 parsePara( node
.toElement(), sect4
);
1780 } else if ( node
.isElement() && node
.nodeName().toLower()=="sect5" ){
1781 parseSect5( node
.toElement(), sect4
);
1783 node
= node
.nextSibling();
1785 kDebug(100200) << "--- leaving parseSect4()";
1789 void DocTreeViewImpl::parseSect5(const QDomElement
&element
, ListViewInterface
*item
)
1791 kDebug(100200) << "+++ entering parseSect5()";
1794 Sect5
*sect5
= new Sect5(item
, NULL
, i18n("Section Level 4"));
1795 sect5
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1799 list
.push_back( element
);
1800 sect5
->setNodes( list
);
1801 // register Popup menu
1802 m_contextmenuhandler
->registerPopupMenu( sect5
);
1804 QDomNode node
= element
.firstChild();
1805 while( !node
.isNull() ){
1806 if( node
.isElement() && node
.nodeName().toLower()=="title" ){
1807 data
= node
.firstChild().toText();
1808 if( !data
.isNull() ){
1809 sect5
->setText( 0, data
.nodeValue() );
1811 } else if ( node
.isElement() && node
.nodeName().toLower()=="para" ){
1812 parsePara( node
.toElement(), sect5
);
1814 node
= node
.nextSibling();
1816 kDebug(100200) << "--- leaving parseSect5()";
1820 void DocTreeViewImpl::parsePara(const QDomElement
&element
, ListViewInterface
*item
)
1822 kDebug(100200) << "+++ entering parsePara()";
1824 Para
*para
= new Para(item
, NULL
, i18n("Paragraph"));
1825 para
->setText(3, QString("%1").arg(++m_idCounter
).rightJustified(8,'0') );
1829 list
.push_back( element
);
1830 para
->setNodes( list
);
1831 // register Popup menu
1832 m_contextmenuhandler
->registerPopupMenu( para
);
1834 kDebug(100200) << "--- leaving parsePara()";