mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2025-04-10 19:15:13 +00:00
118 lines
3.1 KiB
Plaintext
118 lines
3.1 KiB
Plaintext
//========================================================================
|
|
//
|
|
// OptionalContent.h
|
|
//
|
|
// Copyright 2007 Brad Hards <bradh@kde.org>
|
|
// Copyright 2008 Carlos Garcia Campos <carlosgc@gnome.org>
|
|
// Copyright 2013, 2018, 2019, 2021 Albert Astals Cid <aacid@kde.org>
|
|
// Copyright 2018 Adam Reichold <adam.reichold@t-online.de>
|
|
// Copyright 2019 Oliver Sander <oliver.sander@tu-dresden.de>
|
|
//
|
|
// Released under the GPL (version 2, or later, at your option)
|
|
//
|
|
//========================================================================
|
|
|
|
#ifndef OPTIONALCONTENT_H
|
|
#define OPTIONALCONTENT_H
|
|
|
|
#include "Object.h"
|
|
#include "CharTypes.h"
|
|
#include "poppler_private_export.h"
|
|
#include <unordered_map>
|
|
#include <memory>
|
|
|
|
class GooString;
|
|
class XRef;
|
|
|
|
class OptionalContentGroup;
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
class POPPLER_PRIVATE_EXPORT OCGs
|
|
{
|
|
public:
|
|
OCGs(Object *ocgObject, XRef *xref);
|
|
|
|
OCGs(const OCGs &) = delete;
|
|
OCGs &operator=(const OCGs &) = delete;
|
|
|
|
// Is OCGS valid?
|
|
bool isOk() const { return ok; }
|
|
|
|
bool hasOCGs() const;
|
|
const std::unordered_map<Ref, std::unique_ptr<OptionalContentGroup>> &getOCGs() const { return optionalContentGroups; }
|
|
|
|
OptionalContentGroup *findOcgByRef(const Ref ref);
|
|
|
|
Array *getOrderArray() { return (order.isArray() && order.arrayGetLength() > 0) ? order.getArray() : nullptr; }
|
|
Array *getRBGroupsArray() { return (rbgroups.isArray() && rbgroups.arrayGetLength()) ? rbgroups.getArray() : nullptr; }
|
|
|
|
bool optContentIsVisible(const Object *dictRef);
|
|
|
|
private:
|
|
bool ok;
|
|
|
|
bool evalOCVisibilityExpr(const Object *expr, int recursion);
|
|
bool allOn(Array *ocgArray);
|
|
bool allOff(Array *ocgArray);
|
|
bool anyOn(Array *ocgArray);
|
|
bool anyOff(Array *ocgArray);
|
|
|
|
std::unordered_map<Ref, std::unique_ptr<OptionalContentGroup>> optionalContentGroups;
|
|
|
|
Object order;
|
|
Object rbgroups;
|
|
XRef *m_xref;
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
class POPPLER_PRIVATE_EXPORT OptionalContentGroup
|
|
{
|
|
public:
|
|
enum State
|
|
{
|
|
On,
|
|
Off
|
|
};
|
|
|
|
// Values from the optional content usage dictionary.
|
|
enum UsageState
|
|
{
|
|
ocUsageOn,
|
|
ocUsageOff,
|
|
ocUsageUnset
|
|
};
|
|
|
|
explicit OptionalContentGroup(Dict *dict);
|
|
|
|
explicit OptionalContentGroup(GooString *label);
|
|
|
|
~OptionalContentGroup();
|
|
|
|
OptionalContentGroup(const OptionalContentGroup &) = delete;
|
|
OptionalContentGroup &operator=(const OptionalContentGroup &) = delete;
|
|
|
|
const GooString *getName() const;
|
|
|
|
Ref getRef() const;
|
|
void setRef(const Ref ref);
|
|
|
|
State getState() const { return m_state; };
|
|
void setState(State state) { m_state = state; };
|
|
|
|
UsageState getViewState() const { return viewState; }
|
|
UsageState getPrintState() const { return printState; }
|
|
|
|
private:
|
|
GooString *m_name;
|
|
Ref m_ref;
|
|
State m_state;
|
|
UsageState viewState; // suggested state when viewing
|
|
UsageState printState; // suggested state when printing
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
#endif
|