File indexing completed on 2024-05-19 04:39:49

0001 /*
0002     SPDX-FileCopyrightText: 2006-2007 Alexander Dymo <adymo@kdevelop.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "example1main.h"
0008 
0009 #include <QMenu>
0010 #include <QMenuBar>
0011 #include <QListView>
0012 #include <QTextEdit>
0013 #include <QLayout>
0014 #include <QPushButton>
0015 #include <QUrl>
0016 #include <QDebug>
0017 
0018 #include <sublime/view.h>
0019 #include <sublime/area.h>
0020 #include <sublime/sublimedefs.h>
0021 #include <sublime/tooldocument.h>
0022 #include <sublime/urldocument.h>
0023 #include <sublime/controller.h>
0024 #include <sublime/mainwindow.h>
0025 
0026 Example1Main::Example1Main()
0027     :KXmlGuiWindow(nullptr)
0028 {
0029     //documents
0030     m_controller = new Sublime::Controller(this);
0031     Sublime::Document *doc1 = new Sublime::UrlDocument(m_controller, QUrl::fromLocalFile(QStringLiteral("~/foo.cpp")));
0032     Sublime::Document *doc2 = new Sublime::UrlDocument(m_controller, QUrl::fromLocalFile(QStringLiteral("~/boo.cpp")));
0033     Sublime::Document *doc3 = new Sublime::UrlDocument(m_controller, QUrl::fromLocalFile(QStringLiteral("~/moo.cpp")));
0034 
0035     //documents for tool views
0036     Sublime::Document *tool1 = new Sublime::ToolDocument(QStringLiteral("ListView"), m_controller,
0037         new Sublime::SimpleToolWidgetFactory<QListView>(QStringLiteral("ListView")));
0038     Sublime::Document *tool2 = new Sublime::ToolDocument(QStringLiteral("TextEdit"), m_controller,
0039         new Sublime::SimpleToolWidgetFactory<QTextEdit>(QStringLiteral("TextEdit")));
0040 
0041     //areas (aka perspectives)
0042     qDebug() << "constructing area 1";
0043     m_area1 = new Sublime::Area(m_controller, QStringLiteral("Area 1"));
0044     m_controller->addDefaultArea(m_area1);
0045     m_area1->addView(doc1->createView());
0046     m_area1->addView(doc2->createView());
0047     m_area1->addView(doc3->createView());
0048     m_area1->addToolView(tool1->createView(), Sublime::Left);
0049     m_area1->addToolView(tool2->createView(), Sublime::Bottom);
0050 
0051     qDebug() << "constructing area 2";
0052     m_area2 = new Sublime::Area(m_controller, QStringLiteral("Area 2"));
0053     m_controller->addDefaultArea(m_area2);
0054     Sublime::View *view1 = doc1->createView();
0055     m_area2->addView(view1);
0056     Sublime::View *view2 = doc2->createView();
0057     m_area2->addView(view2, view1, Qt::Vertical);
0058     m_area2->addView(doc3->createView(), view2, Qt::Horizontal);
0059     m_area2->addToolView(tool1->createView(), Sublime::Bottom);
0060     m_area2->addToolView(tool2->createView(), Sublime::Right);
0061 
0062     //example main window stuff
0063     auto* w = new QWidget(this);
0064     setCentralWidget(w);
0065     auto *l = new QVBoxLayout(w);
0066     QMenu *areaMenu = menuBar()->addMenu(QStringLiteral("Areas"));
0067     areaMenu->addAction(QStringLiteral("Area 1"), this, SLOT(selectArea1()));
0068     areaMenu->addAction(QStringLiteral("Area 2"), this, SLOT(selectArea2()));
0069     auto* b1 = new QPushButton(QStringLiteral("Area 1"), this);
0070     connect(b1, &QPushButton::clicked, this, &Example1Main::selectArea1);
0071     l->addWidget(b1);
0072     auto* b2 = new QPushButton(QStringLiteral("Area 2"), this);
0073     connect(b2, &QPushButton::clicked, this, &Example1Main::selectArea2);
0074     l->addWidget(b2);
0075 }
0076 
0077 void Example1Main::selectArea1()
0078 {
0079     auto *main = new Sublime::MainWindow(m_controller);
0080     connect(main, &Sublime::MainWindow::areaChanged, this, &Example1Main::updateTitle);
0081     m_controller->showArea(m_area1, main);
0082     main->show();
0083 }
0084 
0085 void Example1Main::selectArea2()
0086 {
0087     auto *main = new Sublime::MainWindow(m_controller);
0088     connect(main, &Sublime::MainWindow::areaChanged, this, &Example1Main::updateTitle);
0089     m_controller->showArea(m_area2, main);
0090     main->show();
0091 }
0092 
0093 void Example1Main::updateTitle(Sublime::Area *area)
0094 {
0095     auto *main = qobject_cast<Sublime::MainWindow*>(sender());
0096     main->setWindowTitle(area->objectName());
0097 }
0098 
0099 #include "moc_example1main.cpp"