/* * Copyright 2008 Ben Boeckel * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ // Header include #include "ScriptWidget.h" // KDE includes #include #include #include #include #include #include #include Pokemodr::ScriptWidget::ScriptWidget(QWidget* parent, const Pokemod::Script& value) : QWidget(parent), m_value(value), m_document(NULL) { setupUi(this); QMap languages; languages["C#"] = "mono"; languages["Falcon"] = "falcon"; // No highlight rules yet languages["Java"] = "java"; languages["JavaScript"] = "kjs"; languages["Lua"] = "lua"; languages["PHP"] = "php"; languages["Python"] = "python"; languages["Ruby"] = "ruby"; QList langs = languages.keys(); foreach (QString language, langs) varInterpreter->addItem(language, languages[language]); KTextEditor::Editor* editor = KTextEditor::EditorChooser::editor(); if (!editor) { KMessageBox::error(this, "A KDE text-editor component could not be found;\nplease check your KDE installation."); Q_ASSERT(false); } m_document = editor->createDocument(NULL); m_view = m_document->createView(NULL); m_view->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); m_view->setMinimumHeight(300); // FIXME: KatePart bug here? // Stop colliding shortcuts from KateView m_view->action(KStandardAction::name(KStandardAction::Cut))->setShortcuts(QKeySequence::UnknownKey); m_view->action(KStandardAction::name(KStandardAction::Copy))->setShortcuts(QKeySequence::UnknownKey); m_view->action(KStandardAction::name(KStandardAction::PasteText))->setShortcuts(QKeySequence::UnknownKey); // FIXME: Uncomment to get copy/paste to work in KatePart (KDE 4.1) // QList collections = KActionCollection::allCollections(); // foreach (KActionCollection* collection, collections) // { // // FIXME: Nothing else should have a Preferences action right? // if (collection->action(KStandardAction::name(KStandardAction::Preferences))) // { // // TODO: Works like crap since it doesnt check to see if the widget is focused // connect(collection->action(KStandardAction::name(KStandardAction::Cut)), SIGNAL(triggered()), m_view->action(KStandardAction::name(KStandardAction::Cut)), SIGNAL(triggered())); // connect(collection->action(KStandardAction::name(KStandardAction::Copy)), SIGNAL(triggered()), m_view->action(KStandardAction::name(KStandardAction::Copy)), SIGNAL(triggered())); // connect(collection->action(KStandardAction::name(KStandardAction::PasteText)), SIGNAL(triggered()), m_view->action(KStandardAction::name(KStandardAction::PasteText)), SIGNAL(triggered())); // break; // } // } layoutScript->addWidget(m_view); connect(m_document, SIGNAL(textChanged(KTextEditor::Document*)), this, SLOT(scriptChanged())); connect(this, SIGNAL(valueChanged(Pokemod::Fraction)), SLOT(setGui())); setGui(); } Pokemodr::ScriptWidget::~ScriptWidget() { delete m_document; } Pokemod::Script Pokemodr::ScriptWidget::value() const { return m_value; } void Pokemodr::ScriptWidget::setGui() { varInterpreter->setCurrentIndex(varInterpreter->findData(m_value.interpreter())); m_document->setHighlightingMode(varInterpreter->currentText()); KTextEditor::Cursor cursor = m_view->cursorPosition(); m_document->setText(m_value.script()); m_view->setCursorPosition(cursor); } void Pokemodr::ScriptWidget::setValue(const Pokemod::Script& value) { if (m_value == value) return; m_value = value; emit(valueChanged(m_value)); } void Pokemodr::ScriptWidget::on_varInterpreter_activated() { m_value.setInterpreter(varInterpreter->itemData(varInterpreter->currentIndex()).toString()); m_document->setHighlightingMode(varInterpreter->currentText()); emit(valueChanged(m_value)); } void Pokemodr::ScriptWidget::scriptChanged() { m_value.setScript(m_document->text()); emit(valueChanged(m_value)); }