| #include <QtGui>#include "mainwindow.h"
 #include "ui_mainwindow.h"
 #include "editor.h"
 MainWindow::MainWindow(QWidget *parent)
 : QMainWindow(parent), ui(new Ui::MainWindow)
 {
 ui->setupUi(this);
 mdiArea = new QMdiArea;
 setCentralWidget(mdiArea);
 connect(mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),this, SLOT(updateActions()));
 createActions();
 createMenus();
 createToolBars();
 createStatusBar();
 setWindowIcon(QPixmap(":/images/icon.png"));
 setWindowTitle("Killua MDI Editor");
 QTimer::singleShot(0,this,SLOT(loadFiles()));
 }
 MainWindow::~MainWindow()
 {
 delete ui;
 }
 
 
 
 void MainWindow::loadFiles()
 {
 QStringList args = QApplication::arguments();
 args.removeFirst();
 if (!args.isEmpty()) {
 foreach(QString arg,args)
 openFile(arg);
 mdiArea->cascadeSubWindows();
 } else {
 newFile();
 }
 mdiArea->activateNextSubWindow();
 }
 
 
 
 void MainWindow::newFile()
 {
 Editor *editor = new Editor;
 editor->newFile();
 addEditor(editor);
 }
 
 
 
 void MainWindow::openFile(const QString &fileName)
 {
 Editor *editor = Editor::openFile(fileName,this);
 if(editor)
 addEditor(editor);
 }
 
 
 
 void MainWindow::closeEvent(QCloseEvent *event)
 {
 mdiArea->closeAllSubWindows();
 if(!mdiArea->subWindowList().isEmpty()) {
 event->ignore();
 } else {
 event->accept();
 }
 }
 
 
 
 void MainWindow::open()
 {
 Editor *editor = Editor::open(this);
 if(editor)
 addEditor(editor);
 }
 
 
 
 void MainWindow::save()
 {
 if(activeEditor())
 activeEditor()->save();
 }
 
 
 
 void MainWindow::saveAs()
 {
 if (activeEditor())
 activeEditor()->saveAs();
 }
 
 
 
 void MainWindow::cut()
 {
 if(activeEditor())
 activeEditor()->cut();
 }
 
 
 
 void MainWindow::copy()
 {
 if(activeEditor())
 activeEditor()->copy();
 }
 
 
 
 void MainWindow::paste()
 {
 if(activeEditor())
 activeEditor()->paste();
 }
 
 
 
 void MainWindow::about()
 {
 QMessageBox::about(this,tr("About Killua MDI Editor"),
 tr("Design by Killua"));
 }
 
 
 
 void MainWindow::updateActions()
 {
 bool hasEditor = (activeEditor()!=0);
 bool hasSelection = activeEditor() && activeEditor()->textCursor().hasSelection();
 saveAction->setEnabled(hasEditor);
 saveAsAction->setEnabled(hasEditor);
 cutAction->setEnabled(hasSelection);
 copyAction->setEnabled(hasSelection);
 pasteAction->setEnabled(hasEditor);
 closeAction->setEnabled(hasEditor);
 closeAllAction->setEnabled(hasEditor);
 tileAction->setEnabled(hasEditor);
 cascadeAction->setEnabled(hasEditor);
 nextAction->setEnabled(hasEditor);
 previousAction->setEnabled(hasEditor);
 separatorAction->setEnabled(hasEditor);
 if(activeEditor())
 activeEditor()->windowMenuAction()->setChecked(true);
 }
 
 
 
 void MainWindow::createActions()
 {
 
 newAction = new QAction(tr("&New"), this);
 newAction->setIcon(QIcon(":/images/new.png"));
 newAction->setShortcut(QKeySequence::New);
 connect(newAction, SIGNAL(triggered()), this, SLOT(newFile()));
 
 openAction = new QAction(tr("&Open..."), this);
 openAction->setIcon(QIcon(":/images/open.png"));
 openAction->setShortcut(QKeySequence::Open);
 connect(openAction, SIGNAL(triggered()), this, SLOT(open()));
 
 saveAction = new QAction(tr("&Save"), this);
 saveAction->setIcon(QIcon(":/images/save.png"));
 saveAction->setShortcut(QKeySequence::Save);
 connect(saveAction, SIGNAL(triggered()), this, SLOT(save()));
 
 saveAsAction = new QAction(tr("Save &As..."), this);
 connect(saveAsAction, SIGNAL(triggered()), this, SLOT(saveAs()));
 
 exitAction = new QAction(tr("E&xit"), this);
 exitAction->setShortcut(tr("Ctrl+Q"));
 connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));
 
 cutAction = new QAction(tr("Cu&t"), this);
 cutAction->setIcon(QIcon(":/images/cut.png"));
 cutAction->setShortcut(QKeySequence::Cut);
 connect(cutAction, SIGNAL(triggered()), this, SLOT(cut()));
 
 copyAction = new QAction(tr("&Copy"), this);
 copyAction->setIcon(QIcon(":/images/copy.png"));
 copyAction->setShortcut(QKeySequence::Copy);
 connect(copyAction, SIGNAL(triggered()), this, SLOT(copy()));
 
 pasteAction = new QAction(tr("&Paste"), this);
 pasteAction->setIcon(QIcon(":/images/paste.png"));
 pasteAction->setShortcut(QKeySequence::Paste);
 connect(pasteAction, SIGNAL(triggered()), this, SLOT(paste()));
 
 closeAction = new QAction(tr("Cl&ose"), this);
 closeAction->setShortcut(QKeySequence::Close);
 connect(closeAction, SIGNAL(triggered()),mdiArea, SLOT(closeActiveSubWindow()));
 
 closeAllAction = new QAction(tr("Close &All"), this);
 connect(closeAllAction, SIGNAL(triggered()), this, SLOT(close()));
 
 tileAction = new QAction(tr("&Tile"), this);
 connect(tileAction, SIGNAL(triggered()),mdiArea, SLOT(tileSubWindows()));
 
 cascadeAction = new QAction(tr("&Cascade"), this);
 connect(cascadeAction, SIGNAL(triggered()),mdiArea, SLOT(cascadeSubWindows()));
 
 nextAction = new QAction(tr("Ne&xt"), this);
 nextAction->setShortcut(QKeySequence::NextChild);
 connect(nextAction, SIGNAL(triggered()),mdiArea, SLOT(activateNextSubWindow()));
 
 previousAction = new QAction(tr("Pre&vious"), this);
 previousAction->setShortcut(QKeySequence::PreviousChild);
 connect(previousAction, SIGNAL(triggered()),mdiArea, SLOT(activatePreviousSubWindow()));
 
 separatorAction = new QAction(this);
 separatorAction->setSeparator(true);
 
 aboutAction = new QAction(tr("&About"), this);
 aboutAction->setStatusTip(tr("Show the application's About box"));
 connect(aboutAction, SIGNAL(triggered()), this, SLOT(about()));
 
 aboutQtAction = new QAction(tr("About &Qt"), this);
 connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
 windowActionGroup = new QActionGroup(this);
 }
 
 
 
 void MainWindow::createMenus()
 {
 
 fileMenu = menuBar()->addMenu("&File");
 fileMenu->addAction(newAction);
 fileMenu->addAction(openAction);
 fileMenu->addAction(saveAction);
 fileMenu->addAction(saveAsAction);
 fileMenu->addSeparator();
 fileMenu->addAction(exitAction);
 
 editMenu = menuBar()->addMenu(tr("&Edit"));
 editMenu->addAction(cutAction);
 editMenu->addAction(copyAction);
 editMenu->addAction(pasteAction);
 windowMenu=menuBar()->addMenu(tr("&Windos"));
 windowMenu->addAction(closeAction);
 windowMenu->addAction(closeAllAction);
 windowMenu->addSeparator();
 windowMenu->addAction(tileAction);
 windowMenu->addAction(cascadeAction);
 windowMenu->addSeparator();
 windowMenu->addAction(nextAction);
 windowMenu->addAction(previousAction);
 windowMenu->addAction(separatorAction);
 menuBar()->addSeparator();
 helpMenu = menuBar()->addMenu(tr("&Help"));
 helpMenu->addAction(aboutAction);
 helpMenu->addAction(aboutQtAction);
 }
 
 
 
 void MainWindow::createToolBars()
 {
 fileToolBar = addToolBar(tr("FIle"));
 fileToolBar->addAction(newAction);
 fileToolBar->addAction(openAction);
 fileToolBar->addAction(saveAction);
 editToolBar = addToolBar(tr("Edit"));
 editToolBar->addAction(cutAction);
 editToolBar->addAction(copyAction);
 editToolBar->addAction(pasteAction);
 }
 
 
 
 void MainWindow::createStatusBar()
 {
 readyLabel = new QLabel(tr("Ready"));
 statusBar()->addWidget(readyLabel,1);
 }
 
 
 
 void MainWindow::addEditor(Editor *editor)
 {
 connect(editor,SIGNAL(copyAvailable(bool)),cutAction,SLOT(setEnabled(bool)));
 connect(editor,SIGNAL(copyAvailable(bool)),copyAction,SLOT(setEnabled(bool)));
 QMdiSubWindow *subWindow = mdiArea->addSubWindow(editor);
 windowMenu->addAction(editor->windowMenuAction());
 subWindow->show();
 }
 
 
 
 Editor *MainWindow::activeEditor()
 {
 QMdiSubWindow *subWindow = mdiArea->activeSubWindow();
 if(subWindow)
 return qobject_cast<Editor *>(subWindow->widget());
 return 0;
 }
 
 |