KTextEditor::View* HtmlEditor::createView( QWidget* parent ) { KTextEditor::Document *document = mEditor->createDocument( parent ); bool result = document->setHighlightingMode( "html" ); if ( result ) { kDebug() << "Syntax highlighting enabled"; } KTextEditor::View *view = document->createView( parent ); QMenu *menu = view->defaultContextMenu(); KTextEditor::ConfigInterface *interface = qobject_cast< KTextEditor::ConfigInterface* >( view ); if ( interface ) { KAction *actWordWrap = new KAction( i18n( "Dynamic Word Wrap" ), view ); actWordWrap->setCheckable( true ); connect( actWordWrap, SIGNAL(triggered(bool)), this, SLOT(toggleWordWrap()) ); KAction *actLineNumber = new KAction( i18n("Show line numbers"), view ); actLineNumber->setCheckable( true ); connect( actLineNumber, SIGNAL(triggered(bool)), this, SLOT(toggleLineNumber()) ); QMenu *options = new QMenu( i18n( "Options" ), qobject_cast< QWidget* >( view ) ); options->addAction( actWordWrap ); options->addAction( actLineNumber ); menu->addSeparator(); menu->addMenu( options ); interface->setConfigValue( "dynamic-word-wrap", true ); actWordWrap->setChecked( true ); } view->setContextMenu( menu ); return view; }
TextEditor::TextEditor(KTextEditor::Document *editorPart, PackageModel *model, QWidget *parent) : QWidget(parent) { QHBoxLayout *l = new QHBoxLayout(this); QWidget *centralWidget = editorPart->widget(); KTextEditor::View *view = qobject_cast<KTextEditor::View*>(centralWidget); if (view) { view->setContextMenu(view->defaultContextMenu()); //modify the toolbar modifyToolBar(view); KTextEditor::ConfigInterface *config = qobject_cast<KTextEditor::ConfigInterface*>(view); if (config) { config->setConfigValue("line-numbers", true); config->setConfigValue("dynamic-word-wrap", true); } config = dynamic_cast<KTextEditor::ConfigInterface*>(editorPart); if (config) { config->setConfigValue("backup-on-save-prefix", "."); } // set nice defaults for katepart KTextEditor::CommandInterface *command = dynamic_cast<KTextEditor::CommandInterface *>(editorPart->editor()); QString ret; if (command) { //generic command->queryCommand("set-indent-mode")->exec(view, "set-indent-mode normal", ret); // more friendly command->queryCommand("set-replace-tabs")->exec(view, "set-replace-tabs 1", ret);// replaces tabs with spaces???? command->queryCommand("set-indent-width")->exec(view, "set-indent-width 4", ret);//4 spaces, Plasma's general coding style } //we should be setting the specific editing indentation, highlighting based on the type of document if (model->implementationApi() == "declarativeappletscript" || model->implementationApi() == "javascript") { editorPart->setHighlightingMode("JavaScript"); } else if (model->implementationApi() == "ruby-script") { editorPart->setHighlightingMode("ruby"); if (command) { command->queryCommand("set-indent-width")->exec(view, "set-indent-width 2", ret);// 2 spaces recommended for ruby } } //there is no need for one more control. But we keep the code because it is easier to understand. //so keep the generic format. /*} else if (editorPart->setHighlightingMode() == "python") { continue; // Q: why we don't change the spaces? // A: 4 spaces are recommended for python }*/ } l->addWidget(centralWidget); }
InteractiveConsole::InteractiveConsole(QWidget *parent) : QDialog(parent), m_splitter(new QSplitter(Qt::Vertical, this)), m_editorPart(0), m_editor(0), m_output(0), m_loadAction(KStandardAction::open(this, SLOT(openScriptFile()), this)), m_saveAction(KStandardAction::saveAs(this, SLOT(saveScript()), this)), m_clearAction(KStandardAction::clear(this, SLOT(clearEditor()), this)), m_executeAction(new QAction(QIcon::fromTheme(QStringLiteral("system-run")), i18n("&Execute"), this)), m_plasmaAction(new QAction(QIcon::fromTheme(QStringLiteral("plasma")), i18nc("Toolbar Button to switch to Plasma Scripting Mode", "Plasma"), this)), m_kwinAction(new QAction(QIcon::fromTheme(QStringLiteral("kwin")), i18nc("Toolbar Button to switch to KWin Scripting Mode", "KWin"), this)), m_snippetsMenu(new QMenu(i18n("Templates"), this)), m_fileDialog(0), m_closeWhenCompleted(false), m_mode(PlasmaConsole) { addAction(KStandardAction::close(this, SLOT(close()), this)); addAction(m_saveAction); addAction(m_clearAction); setWindowTitle(i18n("Desktop Shell Scripting Console")); setAttribute(Qt::WA_DeleteOnClose); //setButtons(QDialog::None); QWidget *widget = new QWidget(m_splitter); QVBoxLayout *editorLayout = new QVBoxLayout(widget); QLabel *label = new QLabel(i18n("Editor"), widget); QFont f = label->font(); f.setBold(true); label->setFont(f); editorLayout->addWidget(label); connect(m_snippetsMenu, &QMenu::aboutToShow, this, &InteractiveConsole::populateTemplatesMenu); QToolButton *loadTemplateButton = new QToolButton(this); loadTemplateButton->setPopupMode(QToolButton::InstantPopup); loadTemplateButton->setMenu(m_snippetsMenu); loadTemplateButton->setText(i18n("Load")); connect(loadTemplateButton, &QToolButton::triggered, this, &InteractiveConsole::loadTemplate); QToolButton *useTemplateButton = new QToolButton(this); useTemplateButton->setPopupMode(QToolButton::InstantPopup); useTemplateButton->setMenu(m_snippetsMenu); useTemplateButton->setText(i18n("Use")); connect(useTemplateButton, &QToolButton::triggered, this, &InteractiveConsole::useTemplate); QActionGroup *modeGroup = new QActionGroup(this); modeGroup->addAction(m_plasmaAction); modeGroup->addAction(m_kwinAction); m_plasmaAction->setCheckable(true); m_kwinAction->setCheckable(true); m_plasmaAction->setChecked(true); connect(modeGroup, &QActionGroup::triggered, this, &InteractiveConsole::modeSelectionChanged); KToolBar *toolBar = new KToolBar(this, true, false); toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); toolBar->addAction(m_loadAction); toolBar->addAction(m_saveAction); toolBar->addAction(m_clearAction); toolBar->addAction(m_executeAction); toolBar->addAction(m_plasmaAction); toolBar->addAction(m_kwinAction); toolBar->addWidget(loadTemplateButton); toolBar->addWidget(useTemplateButton); editorLayout->addWidget(toolBar); KService::List offers = KServiceTypeTrader::self()->query(QStringLiteral("KTextEditor/Document")); foreach (const KService::Ptr service, offers) { m_editorPart = service->createInstance<KTextEditor::Document>(widget); if (m_editorPart) { m_editorPart->setHighlightingMode(QStringLiteral("JavaScript/PlasmaDesktop")); KTextEditor::View * view = m_editorPart->createView(widget); view->setContextMenu(view->defaultContextMenu()); KTextEditor::ConfigInterface *config = qobject_cast<KTextEditor::ConfigInterface*>(view); if (config) { config->setConfigValue(QStringLiteral("line-numbers"), true); config->setConfigValue(QStringLiteral("dynamic-word-wrap"), true); } editorLayout->addWidget(view); connect(m_editorPart, &KTextEditor::Document::textChanged, this, &InteractiveConsole::scriptTextChanged); break; } }