/*************************************************************************** * Copyright (C) 2008 by Pino Toscano * * Copyright (C) 2008 by Harri Porten * * * * 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 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #include "kjs_console_p.h" #include #include #include #include #include "../debug_p.h" using namespace Okular; static KJSPrototype *g_consoleProto; #ifdef OKULAR_JS_CONSOLE #include #include #include #include K_GLOBAL_STATIC( KDialog, g_jsConsoleWindow ) static QPlainTextEdit *g_jsConsoleLog = 0; static void createConsoleWindow() { if ( g_jsConsoleWindow.exists() ) return; g_jsConsoleWindow->setButtons( KDialog::Close | KDialog::User1 ); g_jsConsoleWindow->setButtonGuiItem( KDialog::User1, KStandardGuiItem::clear() ); QVBoxLayout *mainLay = new QVBoxLayout( g_jsConsoleWindow->mainWidget() ); mainLay->setMargin( 0 ); g_jsConsoleLog = new QPlainTextEdit( g_jsConsoleWindow->mainWidget() ); g_jsConsoleLog->setReadOnly( true ); mainLay->addWidget( g_jsConsoleLog ); QObject::connect( g_jsConsoleWindow, SIGNAL( closeClicked() ), g_jsConsoleWindow, SLOT( close() ) ); QObject::connect( g_jsConsoleWindow, SIGNAL( user1Clicked() ), g_jsConsoleLog, SLOT( clear() ) ); } static void showConsole() { createConsoleWindow(); g_jsConsoleWindow->show(); } static void hideConsole() { if ( !g_jsConsoleWindow.exists() ) return; g_jsConsoleWindow->hide(); } static void clearConsole() { if ( !g_jsConsoleWindow.exists() ) return; g_jsConsoleLog->clear(); } static void outputToConsole( const QString &message ) { showConsole(); g_jsConsoleLog->appendPlainText( message ); } #else /* OKULAR_JS_CONSOLE */ static void showConsole() { } static void hideConsole() { } static void clearConsole() { } static void outputToConsole( const QString &cMessage ) { kDebug(OkularDebug) << "CONSOLE:" << cMessage; } #endif /* OKULAR_JS_CONSOLE */ static KJSObject consoleClear( KJSContext *, void *, const KJSArguments & ) { clearConsole(); return KJSUndefined(); } static KJSObject consoleHide( KJSContext *, void *, const KJSArguments & ) { hideConsole(); return KJSUndefined(); } static KJSObject consolePrintln( KJSContext *ctx, void *, const KJSArguments &arguments ) { QString cMessage = arguments.at( 0 ).toString( ctx ); outputToConsole( cMessage ); return KJSUndefined(); } static KJSObject consoleShow( KJSContext *, void *, const KJSArguments & ) { showConsole(); return KJSUndefined(); } void JSConsole::initType( KJSContext *ctx ) { static bool initialized = false; if ( initialized ) return; initialized = true; g_consoleProto = new KJSPrototype(); g_consoleProto->defineFunction( ctx, "clear", consoleClear ); g_consoleProto->defineFunction( ctx, "hide", consoleHide ); g_consoleProto->defineFunction( ctx, "println", consolePrintln ); g_consoleProto->defineFunction( ctx, "hide", consoleShow ); } KJSObject JSConsole::object( KJSContext *ctx ) { return g_consoleProto->constructObject( ctx, 0 ); }