Mercurial > projects > qtd
diff examples/mainwindows/dockwidgets/mainwindow.d @ 1:e78566595089
initial import
author | mandel |
---|---|
date | Mon, 11 May 2009 16:01:50 +0000 |
parents | |
children | a2871e6b8b15 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/mainwindows/dockwidgets/mainwindow.d Mon May 11 16:01:50 2009 +0000 @@ -0,0 +1,358 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the example classes of the Qt Toolkit. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License versions 2.0 or 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 GNU General Public Licensing requirements will be met: +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. In addition, as a special +** exception, Nokia gives you certain additional rights. These rights +** are described in the Nokia Qt GPL Exception version 1.3, included in +** the file GPL_EXCEPTION.txt in this package. +** +** Qt for Windows(R) Licensees +** As a special exception, Nokia, as the sole copyright holder for Qt +** Designer, grants users of the Qt/Eclipse Integration plug-in the +** right for the Qt/Eclipse Integration to link to functionality +** provided by Qt Designer and its related libraries. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** +****************************************************************************/ + + +import qt.gui.QMainWindow; + +import qt.gui.QListWidget; +import qt.gui.QMenu; +import qt.gui.QToolBar; +import qt.gui.QDockWidget; +import qt.gui.QListWidget; +import qt.gui.QMessageBox; +import qt.gui.QTextEdit; +import qt.gui.QTextCursor; +import qt.gui.QTextFrame; +import qt.gui.QTextFrameFormat; +import qt.gui.QTextCharFormat; +import qt.gui.QTextTableFormat; +import qt.gui.QAction; +import qt.gui.QStatusBar; +import qt.gui.QFont; +import qt.gui.QIcon; + +import qt.core.QDate; +/*import qt.gui. +import qt.gui. +import qt.gui. +import qt.gui. +import qt.gui. +import qt.gui. +*/ +import tango.text.Util; +import tango.io.Stdout; + +class MainWindow : public QMainWindow +{ +// Q_OBJECT + + public: + this() + { + textEdit = new QTextEdit; + setCentralWidget(textEdit); + + createActions(); + createMenus(); + createToolBars(); + createStatusBar(); + createDockWindows(); + + setWindowTitle(tr("Dock Widgets")); + newLetter(); + } + + private : //slots: + void newLetter() + { + textEdit.clear(); + + scope cursor = textEdit.textCursor; + cursor.movePosition(QTextCursor.Start); + QTextFrame topFrame = cursor.currentFrame(); + QTextFrameFormat topFrameFormat = topFrame.frameFormat(); + topFrameFormat.setPadding(16); + topFrame.setFrameFormat(topFrameFormat); + + scope textFormat = new QTextCharFormat; + scope boldFormat = new QTextCharFormat; + scope italicFormat = new QTextCharFormat; + boldFormat.setFontWeight(QFont.Bold); + italicFormat.setFontItalic(true); + + scope tableFormat = new QTextTableFormat; + tableFormat.setBorder(1); + tableFormat.setCellPadding(16); + tableFormat.setAlignment(Qt.AlignRight); + cursor.insertTable(1, 1, tableFormat); + cursor.insertText("The Firm", boldFormat); + cursor.insertBlock(); + cursor.insertText("321 City Street", textFormat); + cursor.insertBlock(); + cursor.insertText("Industry Park"); + cursor.insertBlock(); + cursor.insertText("Some Country"); + cursor.setPosition(topFrame.lastPosition()); + cursor.insertText(QDate.currentDate.toString("d MMMM yyyy"), textFormat); + cursor.insertBlock(); + cursor.insertBlock(); + cursor.insertText("Dear ", textFormat); + cursor.insertText("NAME", italicFormat); + cursor.insertText(",", textFormat); + for (int i = 0; i < 3; ++i) + cursor.insertBlock(); + cursor.insertText(tr("Yours sincerely,"), textFormat); + for (int i = 0; i < 3; ++i) + cursor.insertBlock(); + cursor.insertText("The Boss", textFormat); + cursor.insertBlock(); + cursor.insertText("ADDRESS", italicFormat); + } +/* + void save() + { + char[] fileName = QFileDialog.getSaveFileName(this, + tr("Choose a file name"), ".", + tr("HTML (*.html *.htm)")); + if (fileName.isEmpty()) + return; + scope file = new QFile(fileName); + if (!file.open(QFile.WriteOnly | QFile.Text)) { + QMessageBox.warning(this, tr("Dock Widgets"), + tr(layout("Cannot write file %1:\n%2.", fileName, file.errorString)) + return; + } + + scope outStream = new QTextStream(file); + QApplication.setOverrideCursor(Qt.WaitCursor); + outStream << textEdit.toHtml(); + QApplication.restoreOverrideCursor(); + + statusBar.showMessage(layout("Saved '%1'", fileName), 2000); + }*/ + + void print() { } + + void undo() { + auto document = textEdit.document(); + document.undo(); + } + + void insertCustomer(char[] customer) + { + if (customer == "") + return; + char[][] customerList = customer.split(", "); + auto document = textEdit.document(); + QTextCursor cursor = document.find("NAME"); + if (!cursor.isNull) { + cursor.beginEditBlock(); + cursor.insertText(customerList[0]); + scope oldcursor = new QTextCursor(cursor); + cursor = document.find("ADDRESS"); + if (!cursor.isNull) { + for (int i = 1; i < customerList.length; ++i) { + cursor.insertBlock(); + cursor.insertText(customerList[i]); + } + cursor.endEditBlock(); + } + else + oldcursor.endEditBlock(); + } + } + + void addParagraph(char[] paragraph) + { + if (paragraph == "") + return; + auto document = textEdit.document(); + scope cursor = document.find(tr("Yours sincerely,")); + if (cursor.isNull) + return; + cursor.beginEditBlock(); + cursor.movePosition(QTextCursor.PreviousBlock, QTextCursor.MoveAnchor, 2); + cursor.insertBlock(); + cursor.insertText(paragraph); + cursor.insertBlock(); + cursor.endEditBlock(); + + } + + void about() + { + QMessageBox.about(this, "About Dock Widgets", + "The <b>Dock Widgets</b> example demonstrates how to " + "use Qt's dock widgets. You can enter your own text, " + "click a customer to add a customer name and " + "address, and click standard paragraphs to add them."); + } + + private: + void createActions() + { + newLetterAct = new QAction(new QIcon("images/new.png"), tr("&New Letter"), this); + newLetterAct.setShortcut(tr("Ctrl+N")); + newLetterAct.setStatusTip(tr("Create a new form letter")); + newLetterAct.triggered.connect(&this.newLetter); + + saveAct = new QAction(new QIcon("images/save.png"), tr("&Save..."), this); + saveAct.setShortcut(tr("Ctrl+S")); + saveAct.setStatusTip(tr("Save the current form letter")); + // saveAct.triggered.connect(&save); + + printAct = new QAction(new QIcon("images/print.png"), tr("&Print..."), this); + printAct.setShortcut(tr("Ctrl+P")); + printAct.setStatusTip(tr("Print the current form letter")); + // printAct.triggered.connect(&print); + + undoAct = new QAction(new QIcon("images/undo.png"), tr("&Undo"), this); + undoAct.setShortcut(tr("Ctrl+Z")); + undoAct.setStatusTip(tr("Undo the last editing action")); + undoAct.triggered.connect(&undo); + + quitAct = new QAction(tr("&Quit"), this); + quitAct.setShortcut(tr("Ctrl+Q")); + quitAct.setStatusTip(tr("Quit the application")); + quitAct.triggered.connect(&this.close); + + aboutAct = new QAction(tr("&About"), this); + aboutAct.setStatusTip(tr("Show the application's About box")); + aboutAct.triggered.connect(&about); + + aboutQtAct = new QAction(tr("About &Qt"), this); + aboutQtAct.setStatusTip(tr("Show the Qt library's About box")); + // aboutQtAct.triggered(&aboutQt); + } + + void createMenus() + { + fileMenu = menuBar.addMenu(tr("&File")); + fileMenu.addAction(newLetterAct); + fileMenu.addAction(saveAct); + fileMenu.addAction(printAct); + fileMenu.addSeparator(); + fileMenu.addAction(quitAct); + + editMenu = menuBar.addMenu(tr("&Edit")); + editMenu.addAction(undoAct); + + viewMenu = menuBar.addMenu(tr("&View")); + + menuBar().addSeparator(); + + helpMenu = menuBar.addMenu(tr("&Help")); + helpMenu.addAction(aboutAct); + helpMenu.addAction(aboutQtAct); + } + + void createToolBars() + { + fileToolBar = addToolBar(tr("File")); + fileToolBar.addAction(newLetterAct); + fileToolBar.addAction(saveAct); + fileToolBar.addAction(printAct); + + editToolBar = addToolBar(tr("Edit")); + editToolBar.addAction(undoAct); + } + + void createStatusBar() + { + statusBar.showMessage(tr("Ready")); + } + + void createDockWindows() + { + QDockWidget dock = new QDockWidget(tr("Customers"), this); + dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea); + customerList = new QListWidget(dock); + customerList.addItems([ + "John Doe, Harmony Enterprises, 12 Lakeside, Ambleton", + "Jane Doe, Memorabilia, 23 Watersedge, Beaton", + "Tammy Shea, Tiblanka, 38 Sea Views, Carlton", + "Tim Sheen, Caraba Gifts, 48 Ocean Way, Deal", + "Sol Harvey, Chicos Coffee, 53 New Springs, Eccleston", + "Sally Hobart, Tiroli Tea, 67 Long River, Fedula"]); + dock.setWidget(customerList); + addDockWidget(Qt.RightDockWidgetArea, dock); + viewMenu.addAction(dock.toggleViewAction()); + + dock = new QDockWidget(tr("Paragraphs"), this); + paragraphsList = new QListWidget(dock); + paragraphsList.addItems([ + "Thank you for your payment which we have received today.", + "Your order has been dispatched and should be with you " + "within 28 days.", + + "We have dispatched those items that were in stock. The " + "rest of your order will be dispatched once all the " + "remaining items have arrived at our warehouse. No " + "additional shipping charges will be made.", + + "You made a small overpayment (less than $5) which we " + "will keep on account for you, or return at your request.", + + "You made a small underpayment (less than $1), but we have " + "sent your order anyway. We'll add this underpayment to " + "your next bill.", + + "Unfortunately you did not send enough money. Please remit " + "an additional $. Your order will be dispatched as soon as " + "the complete amount has been received.", + + "You made an overpayment (more than $5). Do you wish to " + "buy more items, or should we return the excess to you?"]); + dock.setWidget(paragraphsList); + addDockWidget(Qt.RightDockWidgetArea, dock); + viewMenu.addAction(dock.toggleViewAction()); + + customerList.currentTextChanged.connect(&this.insertCustomer); + paragraphsList.currentTextChanged.connect(&this.addParagraph); + } + + QTextEdit textEdit; + QListWidget customerList; + QListWidget paragraphsList; + + QMenu fileMenu; + QMenu editMenu; + QMenu viewMenu; + QMenu helpMenu; + QToolBar fileToolBar; + QToolBar editToolBar; + QAction newLetterAct; + QAction saveAct; + QAction printAct; + QAction undoAct; + QAction aboutAct; + QAction aboutQtAct; + QAction quitAct; +} + + +//! [9]