Mega Code Archive

 
Categories / C++ / Qt
 

Using QTextList

/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the documentation of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file.  Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights.  These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file.  Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef WINDOW_H #define WINDOW_H #include <QList> #include <QMainWindow> #include <QString> class QAction; class QTextDocument; class QTextEdit; class QTextList; class QTreeWidgetItem; class MainWindow : public QMainWindow {     Q_OBJECT public:     MainWindow(); public slots:     void insertList();     void highlightListItems();     void showList(); private:     QString currentFile;     QTextEdit *editor;     QTextDocument *document;     QList<QTextList*> listStructures;     QList<QTreeWidgetItem*> previousItems;     QList<QTreeWidgetItem*> parentItems; }; #endif #include <QtGui> #include "mainwindow.h" MainWindow::MainWindow() {     QMenu *fileMenu = new QMenu(tr("&File"));     fileMenu->addAction(tr("E&xit"), this, SLOT(close()),         QKeySequence(tr("Ctrl+Q", "File|Exit")));     QMenu *actionsMenu = new QMenu(tr("&Actions"));     actionsMenu->addAction(tr("&Highlight List Items"),                         this, SLOT(highlightListItems()));     actionsMenu->addAction(tr("&Show Current List"), this, SLOT(showList()));     QMenu *insertMenu = new QMenu(tr("&Insert"));     insertMenu->addAction(tr("&List"), this, SLOT(insertList()),         QKeySequence(tr("Ctrl+L", "Insert|List")));     menuBar()->addMenu(fileMenu);     menuBar()->addMenu(insertMenu);     menuBar()->addMenu(actionsMenu);     editor = new QTextEdit(this);     document = new QTextDocument(this);     editor->setDocument(document);     setCentralWidget(editor);     setWindowTitle(tr("Text Document List Items")); } void MainWindow::highlightListItems() {     QTextCursor cursor = editor->textCursor();     QTextList *list = cursor.currentList();     if (!list)         return;     cursor.beginEditBlock();     for (int index = 0; index < list->count(); ++index) {         QTextBlock listItem = list->item(index);         QTextBlockFormat newBlockFormat = listItem.blockFormat();         newBlockFormat.setBackground(Qt::lightGray);         QTextCursor itemCursor = cursor;         itemCursor.setPosition(listItem.position());         //itemCursor.movePosition(QTextCursor::StartOfBlock);         itemCursor.movePosition(QTextCursor::EndOfBlock,                                 QTextCursor::KeepAnchor);         itemCursor.setBlockFormat(newBlockFormat);         /*         processListItem(listItem);         */     }     cursor.endEditBlock(); } void MainWindow::showList() {     QTextCursor cursor = editor->textCursor();     QTextFrame *frame = cursor.currentFrame();     if (!frame)         return;     QTreeWidget *treeWidget = new QTreeWidget;     treeWidget->setColumnCount(1);     QStringList headerLabels;     headerLabels << tr("Lists");     treeWidget->setHeaderLabels(headerLabels);     QTreeWidgetItem *parentItem = 0;     QTreeWidgetItem *item;     QTreeWidgetItem *lastItem = 0;     parentItems.clear();     previousItems.clear();     QTextFrame::iterator it;     for (it = frame->begin(); !(it.atEnd()); ++it) {         QTextBlock block = it.currentBlock();         if (block.isValid()) {             QTextList *list = block.textList();             if (list) {                 int index = list->itemNumber(block);                 if (index == 0) {                     parentItems.append(parentItem);                     previousItems.append(lastItem);                     listStructures.append(list);                     parentItem = lastItem;                     lastItem = 0;                     if (parentItem != 0)                         item = new QTreeWidgetItem(parentItem, lastItem);                     else                         item = new QTreeWidgetItem(treeWidget, lastItem);                 } else {                     while (parentItem != 0 && listStructures.last() != list) {                         listStructures.pop_back();                         parentItem = parentItems.takeLast();                         lastItem = previousItems.takeLast();                     }                     if (parentItem != 0)                         item = new QTreeWidgetItem(parentItem, lastItem);                     else                         item = new QTreeWidgetItem(treeWidget, lastItem);                 }                 item->setText(0, block.text());                 lastItem = item;             }           }       }     treeWidget->setWindowTitle(tr("List Contents"));     treeWidget->show(); } void MainWindow::insertList() {     QTextCursor cursor = editor->textCursor();     cursor.beginEditBlock();     QTextList *list = cursor.currentList();     QTextListFormat listFormat;     if (list)         listFormat = list->format();     listFormat.setStyle(QTextListFormat::ListDisc);     listFormat.setIndent(listFormat.indent() + 1);     cursor.insertList(listFormat);     cursor.endEditBlock(); } #include <QtGui> #include "mainwindow.h" int main(int argc, char *argv[]) {     QApplication app(argc, argv);     MainWindow *window = new MainWindow;     window->resize(640, 480);     window->show();     return app.exec(); }