You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.6 KiB
86 lines
2.6 KiB
/*************************************************************************** |
|
* Copyright (C) 2019 by João Netto <joaonetto901@gmail.com> * |
|
* * |
|
* 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_ocg_p.h" |
|
|
|
#include <kjs/kjsobject.h> |
|
#include <kjs/kjsprototype.h> |
|
#include <kjs/kjsinterpreter.h> |
|
|
|
#include <QString> |
|
#include <QAbstractItemModel> |
|
#include <QDebug> |
|
#include <QPair> |
|
|
|
using namespace Okular; |
|
|
|
static KJSPrototype *g_OCGProto; |
|
|
|
typedef QHash< QPair< int, int > *, QAbstractItemModel* > OCGCache; |
|
Q_GLOBAL_STATIC( OCGCache, g_OCGCache ) |
|
|
|
// OCG.state (getter) |
|
static KJSObject OCGGetState( KJSContext *, void *object ) |
|
{ |
|
QPair< int, int > *pair = reinterpret_cast< QPair< int, int >* > ( object ); |
|
QAbstractItemModel *model = g_OCGCache->value( pair ); |
|
|
|
const QModelIndex index = model->index( pair->first, pair->second ); |
|
|
|
const bool state = model->data( index, Qt::CheckStateRole ).toBool(); |
|
|
|
return KJSBoolean( state ); |
|
} |
|
|
|
// OCG.state (setter) |
|
static void OCGSetState( KJSContext* ctx, void* object, |
|
KJSObject value ) |
|
{ |
|
QPair< int, int > *pair = reinterpret_cast< QPair< int, int >* > ( object ); |
|
QAbstractItemModel *model = g_OCGCache->value( pair ); |
|
|
|
const QModelIndex index = model->index( pair->first, pair->second ); |
|
|
|
const bool state = value.toBoolean( ctx ); |
|
|
|
model->setData( index, QVariant( state ? Qt::Checked : Qt::Unchecked ), Qt::CheckStateRole ); |
|
} |
|
|
|
|
|
void JSOCG::initType( KJSContext *ctx ) |
|
{ |
|
static bool initialized = false; |
|
if ( initialized ) |
|
return; |
|
initialized = true; |
|
|
|
g_OCGProto = new KJSPrototype(); |
|
|
|
g_OCGProto->defineProperty( ctx, QStringLiteral("state"), OCGGetState, OCGSetState ); |
|
} |
|
|
|
KJSObject JSOCG::object( KJSContext *ctx ) |
|
{ |
|
return g_OCGProto->constructObject( ctx, nullptr ); |
|
} |
|
|
|
KJSObject JSOCG::wrapOCGObject( KJSContext *ctx, QAbstractItemModel *model, const int &i, const int &j ) |
|
{ |
|
QPair< int, int > *pair = new QPair< int ,int >( i, j ); |
|
g_OCGCache->insert( pair, model ); |
|
return g_OCGProto->constructObject( ctx, pair ); |
|
} |
|
|
|
void JSOCG::clearCachedFields() |
|
{ |
|
if ( g_OCGCache.exists() ) |
|
{ |
|
g_OCGCache->clear(); |
|
} |
|
}
|
|
|