git-svn-id: https://pdfsharp.svn.codeplex.com/svn@39620 56d0cb2f-6006-4f69-a5a2-94740...
[pdfsharp:pdfsharp.git] / PDFsharp / code / PdfSharp / PdfSharp.Pdf / PdfCustomValues.cs
1 #region PDFsharp - A .NET library for processing PDF\r
2 //\r
3 // Authors:\r
4 //   Stefan Lange (mailto:Stefan.Lange@pdfsharp.com)\r
5 //\r
6 // Copyright (c) 2005-2009 empira Software GmbH, Cologne (Germany)\r
7 //\r
8 // http://www.pdfsharp.com\r
9 // http://sourceforge.net/projects/pdfsharp\r
10 //\r
11 // Permission is hereby granted, free of charge, to any person obtaining a\r
12 // copy of this software and associated documentation files (the "Software"),\r
13 // to deal in the Software without restriction, including without limitation\r
14 // the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
15 // and/or sell copies of the Software, and to permit persons to whom the\r
16 // Software is furnished to do so, subject to the following conditions:\r
17 //\r
18 // The above copyright notice and this permission notice shall be included\r
19 // in all copies or substantial portions of the Software.\r
20 //\r
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
22 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
23 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
24 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
25 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r
26 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \r
27 // DEALINGS IN THE SOFTWARE.\r
28 #endregion\r
29 \r
30 using System;\r
31 using System.Diagnostics;\r
32 using System.Collections;\r
33 \r
34 namespace PdfSharp.Pdf\r
35 {\r
36   /// <summary>\r
37   /// This class is intended for empira internal use only and may change or drop in future releases.\r
38   /// </summary>\r
39   public class PdfCustomValues : PdfDictionary\r
40   {\r
41     internal PdfCustomValues()\r
42     {\r
43     }\r
44 \r
45     internal PdfCustomValues(PdfDocument document)\r
46       : base(document)\r
47     {\r
48     }\r
49 \r
50     internal PdfCustomValues(PdfDictionary dict)\r
51       : base(dict)\r
52     {\r
53     }\r
54 \r
55     /// <summary>\r
56     /// This function is intended for empira internal use only.\r
57     /// </summary>\r
58     public PdfCustomValueCompressionMode CompressionMode\r
59     {\r
60       set\r
61       {\r
62         throw new NotImplementedException();\r
63       }\r
64     }\r
65 \r
66     /// <summary>\r
67     /// This function is intended for empira internal use only.\r
68     /// </summary>\r
69     public bool Contains(string key)\r
70     {\r
71       return Elements.ContainsKey(key);\r
72     }\r
73 \r
74     /// <summary>\r
75     /// This function is intended for empira internal use only.\r
76     /// </summary>\r
77     public PdfCustomValue this[string key]\r
78     {\r
79       get\r
80       {\r
81         PdfDictionary dict = Elements.GetDictionary(key);\r
82         if (dict == null)\r
83           return null;\r
84         PdfCustomValue cust = dict as PdfCustomValue;\r
85         if (cust == null)\r
86           cust = new PdfCustomValue(dict);\r
87         return cust;\r
88       }\r
89       set\r
90       {\r
91         if (value == null)\r
92         {\r
93           Elements.Remove(key);\r
94         }\r
95         else\r
96         {\r
97           Owner.Internals.AddObject(value);\r
98           Elements.SetReference(key, value);\r
99         }\r
100       }\r
101 #if old\r
102       get\r
103       {\r
104         PdfDictionary dict = Elements.GetDictionary(key);\r
105         if (dict == null)\r
106           return null;\r
107         if (!(dict is PdfCustomValue))\r
108           dict = new PdfCustomValue(dict);\r
109         return dict.Stream.Value;\r
110       }\r
111       set\r
112       {\r
113         PdfCustomValue cust;\r
114         PdfDictionary dict = Elements.GetDictionary(key);\r
115         if (dict == null)\r
116         {\r
117           cust = new PdfCustomValue();\r
118           Owner.Internals.AddObject(cust);\r
119           Elements.Add(key, cust);\r
120         }\r
121         else\r
122         {\r
123           cust = dict as PdfCustomValue;\r
124           if (cust == null)\r
125             cust = new PdfCustomValue(dict);\r
126         }\r
127         cust.Value = value;\r
128       }\r
129 #endif\r
130     }\r
131 \r
132     /// <summary>\r
133     /// This function is intended for empira internal use only.\r
134     /// </summary>\r
135     public static void ClearAllCustomValues(PdfDocument document)\r
136     {\r
137       document.CustomValues = null;\r
138       foreach (PdfPage page in document.Pages)\r
139         page.CustomValues = null;\r
140     }\r
141 \r
142     //public static string Key = "/PdfSharp.CustomValue";\r
143 \r
144     internal static PdfCustomValues Get(DictionaryElements elem)\r
145     {\r
146       string key = elem.Owner.Owner.Internals.CustomValueKey;\r
147       PdfCustomValues customValues;\r
148       PdfDictionary dict = elem.GetDictionary(key);\r
149       if (dict == null)\r
150       {\r
151         customValues = new PdfCustomValues();\r
152         elem.Owner.Owner.Internals.AddObject(customValues);\r
153         elem.Add(key, customValues);\r
154       }\r
155       else\r
156       {\r
157         customValues = dict as PdfCustomValues;\r
158         if (customValues == null)\r
159           customValues = new PdfCustomValues(dict);\r
160       }\r
161       return customValues;\r
162     }\r
163 \r
164     internal static void Remove(DictionaryElements elem)\r
165     {\r
166       elem.Remove(elem.Owner.Owner.Internals.CustomValueKey);\r
167     }\r
168   }\r
169 }\r