Mega Code Archive

 
Categories / C++ / Qt
 

QTextList and QTextListFormat

/**************************************************************************** ** ** 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 <QMainWindow> #include <QTextDocumentFragment> class QAction; class QTextDocument; class QTextEdit; class MainWindow : public QMainWindow {     Q_OBJECT public:     MainWindow(); public slots:     void cutSelection();     void copySelection();     void insertList();     void pasteSelection();     void selectWord();     void selectLine();     void selectBlock();     void selectFrame();     void updateMenus(); private:     QAction *cutAction;     QAction *copyAction;     QAction *pasteAction;     QString currentFile;     QTextEdit *editor;     QTextDocument *document;     QTextDocumentFragment selection; }; #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 *editMenu = new QMenu(tr("&Edit"));     cutAction = editMenu->addAction(tr("Cu&t"), this, SLOT(cutSelection()),         QKeySequence(tr("Ctrl+X", "Edit|Cut")));     copyAction = editMenu->addAction(tr("&Copy"), this, SLOT(copySelection()),         QKeySequence(tr("Ctrl+C", "Edit|Copy")));     pasteAction = editMenu->addAction(tr("&Paste"), this,         SLOT(pasteSelection()), QKeySequence(tr("Ctrl+V", "Edit|Paste")));     QMenu *selectMenu = new QMenu(tr("&Select"));     selectMenu->addAction(tr("&Word"), this, SLOT(selectWord()));     selectMenu->addAction(tr("&Line"), this, SLOT(selectLine()));     selectMenu->addAction(tr("&Block"), this, SLOT(selectBlock()));     selectMenu->addAction(tr("&Frame"), this, SLOT(selectFrame()));     QMenu *insertMenu = new QMenu(tr("&Insert"));     insertMenu->addAction(tr("&List"), this, SLOT(insertList()),         QKeySequence(tr("Ctrl+L", "Insert|List")));     menuBar()->addMenu(fileMenu);     menuBar()->addMenu(editMenu);     menuBar()->addMenu(selectMenu);     menuBar()->addMenu(insertMenu);     editor = new QTextEdit(this);     document = new QTextDocument(this);     editor->setDocument(document);     connect(editor, SIGNAL(selectionChanged()), this, SLOT(updateMenus()));     updateMenus();     setCentralWidget(editor);     setWindowTitle(tr("Text Document Writer")); } void MainWindow::cutSelection() {     QTextCursor cursor = editor->textCursor();     if (cursor.hasSelection()) {         selection = cursor.selection();         cursor.removeSelectedText();     } } void MainWindow::copySelection() {     QTextCursor cursor = editor->textCursor();     if (cursor.hasSelection()) {         selection = cursor.selection();         cursor.clearSelection();     } } void MainWindow::pasteSelection() {     QTextCursor cursor = editor->textCursor();     cursor.insertFragment(selection); } void MainWindow::selectWord() {     QTextCursor cursor = editor->textCursor();     QTextBlock block = cursor.block();     cursor.beginEditBlock();     cursor.movePosition(QTextCursor::StartOfWord);     cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);     cursor.endEditBlock();     editor->setTextCursor(cursor); } void MainWindow::selectLine() {     QTextCursor cursor = editor->textCursor();     QTextBlock block = cursor.block();     cursor.beginEditBlock();     cursor.movePosition(QTextCursor::StartOfLine);     cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);     cursor.endEditBlock();     editor->setTextCursor(cursor); } void MainWindow::selectBlock() {     QTextCursor cursor = editor->textCursor();     QTextBlock block = cursor.block();     cursor.beginEditBlock();     cursor.movePosition(QTextCursor::StartOfBlock);     cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);     cursor.endEditBlock();     editor->setTextCursor(cursor); } void MainWindow::selectFrame() {     QTextCursor cursor = editor->textCursor();     QTextFrame *frame = cursor.currentFrame();     cursor.beginEditBlock();     cursor.setPosition(frame->firstPosition());     cursor.setPosition(frame->lastPosition(), QTextCursor::KeepAnchor);     cursor.endEditBlock();     editor->setTextCursor(cursor); } void MainWindow::insertList() {     QTextCursor cursor = editor->textCursor();     cursor.beginEditBlock();     QTextList *list = cursor.currentList();     QTextListFormat listFormat;     if (list) {         listFormat = list->format();         listFormat.setIndent(listFormat.indent() + 1);     }     listFormat.setStyle(QTextListFormat::ListDisc);     cursor.insertList(listFormat);     cursor.endEditBlock(); } void MainWindow::updateMenus() {     QTextCursor cursor = editor->textCursor();     cutAction->setEnabled(cursor.hasSelection());     copyAction->setEnabled(cursor.hasSelection());     pasteAction->setEnabled(!selection.isEmpty()); } #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(); }