From 53f687587b49e7af79376ecf4142b6cbd4d075eb Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 4 Oct 2016 15:35:48 +0200 Subject: [PATCH] Add support for attaching a Python console in DebugWindow. Also add support for showing module type/interface. Also minor layout improvements. --- src/libcalamaresui/utils/DebugWindow.cpp | 88 ++++++++++++++++++++++-- src/libcalamaresui/utils/DebugWindow.ui | 44 ++++++++++-- 2 files changed, 122 insertions(+), 10 deletions(-) diff --git a/src/libcalamaresui/utils/DebugWindow.cpp b/src/libcalamaresui/utils/DebugWindow.cpp index 879ef3e46..5e41e732d 100644 --- a/src/libcalamaresui/utils/DebugWindow.cpp +++ b/src/libcalamaresui/utils/DebugWindow.cpp @@ -26,6 +26,12 @@ #include "modulesystem/ModuleManager.h" #include "modulesystem/Module.h" +#ifdef WITH_PYTHONQT +#include +#include "ViewManager.h" +#include "viewpages/PythonQtViewStep.h" +#endif + #include #include #include @@ -68,11 +74,6 @@ DebugWindow::DebugWindow() } ); // Modules page - QSplitter* splitter = new QSplitter( modulesTab ); - modulesTab->layout()->addWidget( splitter ); - splitter->addWidget( modulesListView ); - splitter->addWidget( moduleConfigView ); - QStringListModel* modulesModel = new QStringListModel( ModuleManager::instance()->loadedInstanceKeys() ); modulesListView->setModel( modulesModel ); modulesListView->setSelectionMode( QAbstractItemView::SingleSelection ); @@ -80,8 +81,76 @@ DebugWindow::DebugWindow() QJsonModel* moduleConfigModel = new QJsonModel( this ); moduleConfigView->setModel( moduleConfigModel ); +#ifdef WITH_PYTHONQT + QPushButton* pythonConsoleButton = new QPushButton; + pythonConsoleButton->setText( "Attach Python console" ); + modulesVerticalLayout->insertWidget( 1, pythonConsoleButton ); + pythonConsoleButton->hide(); + + QObject::connect( pythonConsoleButton, &QPushButton::clicked, + this, [ this, moduleConfigModel ] + { + QString moduleName = modulesListView->currentIndex().data().toString(); + Module* module = ModuleManager::instance()->moduleInstance( moduleName ); + if ( module->interface() != Module::PythonQtInterface || + module->type() != Module::View ) + return; + + for ( ViewStep* step : ViewManager::instance()->viewSteps() ) + { + if ( step->moduleInstanceKey() == module->instanceKey() ) + { + PythonQtViewStep* pqvs = + qobject_cast< PythonQtViewStep* >( step ); + if ( pqvs ) + { + QWidget* consoleWindow = new QWidget; + + QWidget* console = pqvs->createScriptingConsole(); + console->setParent( consoleWindow ); + + QVBoxLayout* layout = new QVBoxLayout; + consoleWindow->setLayout( layout ); + layout->addWidget( console ); + + QHBoxLayout* bottomLayout = new QHBoxLayout; + layout->addLayout( bottomLayout ); + + QLabel* bottomLabel = new QLabel( consoleWindow ); + bottomLayout->addWidget( bottomLabel ); + QString line = + QString( "Module: %1
" + "Python class: %2" ) + .arg( module->instanceKey() ) + .arg( console->property( "classname" ).toString() ); + bottomLabel->setText( line ); + + QPushButton* closeButton = new QPushButton( consoleWindow ); + closeButton->setText( "&Close" ); + QObject::connect( closeButton, &QPushButton::clicked, + [ consoleWindow ] + { + consoleWindow->close(); + } ); + bottomLayout->addWidget( closeButton ); + bottomLabel->setSizePolicy( QSizePolicy::Expanding, + QSizePolicy::Preferred ); + + consoleWindow->setParent( this ); + consoleWindow->setWindowFlags( Qt::Window ); + consoleWindow->setWindowTitle( "Calamares Python console" ); + consoleWindow->setAttribute( Qt::WA_DeleteOnClose, true ); + consoleWindow->showNormal(); + break; + } + } + } + } ); + +#endif + connect( modulesListView->selectionModel(), &QItemSelectionModel::selectionChanged, - this, [ this, moduleConfigModel ] + this, [ this, moduleConfigModel, pythonConsoleButton ] { QString moduleName = modulesListView->currentIndex().data().toString(); Module* module = ModuleManager::instance()->moduleInstance( moduleName ); @@ -89,6 +158,13 @@ DebugWindow::DebugWindow() { moduleConfigModel->loadJson( QJsonDocument::fromVariant( module->configurationMap() ).toJson() ); moduleConfigView->expandAll(); + moduleTypeLabel->setText( module->typeString() ); + moduleInterfaceLabel->setText( module->interfaceString() ); +#ifdef WITH_PYTHONQT + pythonConsoleButton->setVisible( + module->interface() == Module::PythonQtInterface && + module->type() == Module::View ); +#endif } } ); diff --git a/src/libcalamaresui/utils/DebugWindow.ui b/src/libcalamaresui/utils/DebugWindow.ui index fa6b28acf..eb6d5c3e7 100644 --- a/src/libcalamaresui/utils/DebugWindow.ui +++ b/src/libcalamaresui/utils/DebugWindow.ui @@ -6,8 +6,8 @@ 0 0 - 632 - 497 + 962 + 651 @@ -17,7 +17,7 @@ - 0 + 2 @@ -48,7 +48,43 @@ - + + + + + + + Type: + + + + + + + none + + + + + + + Interface: + + + + + + + none + + + + + + + + +