1 //========================================================================
5 // Copyright 2007 Brad Hards <bradh@kde.org>
6 // Copyright 2008 Carlos Garcia Campos <carlosgc@gnome.org>
7 // Copyright 2013 Albert Astals Cid <aacid@kde.org>
9 // Released under the GPL (version 2, or later, at your option)
11 //========================================================================
13 #ifndef OPTIONALCONTENT_H
14 #define OPTIONALCONTENT_H
16 #ifdef USE_GCC_PRAGMAS
21 #include "CharTypes.h"
27 class OptionalContentGroup
;
30 //------------------------------------------------------------------------
35 OCGs(Object
*ocgObject
, XRef
*xref
);
39 GBool
isOk() { return ok
; }
42 GooList
*getOCGs() const { return optionalContentGroups
; }
44 OptionalContentGroup
* findOcgByRef( const Ref
&ref
);
46 // Get the root node of the optional content group display tree
47 // (which does not necessarily include all of the OCGs).
48 OCDisplayNode
*getDisplayRoot();
50 Array
* getOrderArray()
51 { return (order
.isArray() && order
.arrayGetLength() > 0) ? order
.getArray() : NULL
; }
52 Array
* getRBGroupsArray()
53 { return (rbgroups
.isArray() && rbgroups
.arrayGetLength()) ? rbgroups
.getArray() : NULL
; }
55 bool optContentIsVisible( Object
*dictRef
);
60 GBool
evalOCVisibilityExpr(Object
*expr
, int recursion
);
61 bool allOn( Array
*ocgArray
);
62 bool allOff( Array
*ocgArray
);
63 bool anyOn( Array
*ocgArray
);
64 bool anyOff( Array
*ocgArray
);
66 GooList
*optionalContentGroups
;
71 OCDisplayNode
*display
; // root node of display tree
74 //------------------------------------------------------------------------
76 class OptionalContentGroup
{
78 enum State
{ On
, Off
};
80 // Values from the optional content usage dictionary.
87 OptionalContentGroup(Dict
*dict
);
89 OptionalContentGroup(GooString
*label
);
91 ~OptionalContentGroup();
93 GooString
* getName() const;
96 void setRef(const Ref ref
);
98 State
getState() { return m_state
; };
99 void setState(State state
) { m_state
= state
; };
101 UsageState
getViewState() { return viewState
; }
102 UsageState
getPrintState() { return printState
; }
108 UsageState viewState
; // suggested state when viewing
109 UsageState printState
; // suggested state when printing
112 //------------------------------------------------------------------------
114 class OCDisplayNode
{
117 static OCDisplayNode
*parse(Object
*obj
, OCGs
*oc
, XRef
*xref
, int recursion
= 0);
121 GooString
*getName() { return name
; }
122 OptionalContentGroup
*getOCG() { return ocg
; }
123 int getNumChildren();
124 OCDisplayNode
*getChild(int idx
);
128 OCDisplayNode(GooString
*nameA
);
129 OCDisplayNode(OptionalContentGroup
*ocgA
);
130 void addChild(OCDisplayNode
*child
);
131 void addChildren(GooList
*childrenA
);
132 GooList
*takeChildren();
134 GooString
*name
; // display name (may be NULL)
135 OptionalContentGroup
*ocg
; // NULL for display labels
136 GooList
*children
; // NULL if there are no children