git-svn-id: https://pdfsharp.svn.codeplex.com/svn@39620 56d0cb2f-6006-4f69-a5a2-94740...
[pdfsharp:pdfsharp.git] / PDFsharp / code / PdfSharp / PdfSharp.Pdf.Annotations / PdfRubberStampAnnotation.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.Globalization;\r
32 using System.Diagnostics;\r
33 using System.Collections;\r
34 using PdfSharp.Internal;\r
35 using PdfSharp.Drawing;\r
36 using PdfSharp.Pdf;\r
37 using PdfSharp.Pdf.IO;\r
38 using PdfSharp.Pdf.Internal;\r
39 \r
40 namespace PdfSharp.Pdf.Annotations\r
41 {\r
42   /// <summary>\r
43   /// Represents a rubber stamp annotation.\r
44   /// </summary>\r
45   public sealed class PdfRubberStampAnnotation : PdfAnnotation\r
46   {\r
47     /// <summary>\r
48     /// Initializes a new instance of the <see cref="PdfRubberStampAnnotation"/> class.\r
49     /// </summary>\r
50     public PdfRubberStampAnnotation()\r
51     {\r
52       Initialize();\r
53     }\r
54 \r
55     /// <summary>\r
56     /// Initializes a new instance of the <see cref="PdfRubberStampAnnotation"/> class.\r
57     /// </summary>\r
58     /// <param name="document">The document.</param>\r
59     public PdfRubberStampAnnotation(PdfDocument document)\r
60       : base(document)\r
61     {\r
62       Initialize();\r
63     }\r
64 \r
65     void Initialize()\r
66     {\r
67       Elements.SetName(Keys.Subtype, "/Stamp");\r
68       Color = XColors.Yellow;\r
69     }\r
70 \r
71     /// <summary>\r
72     /// Gets or sets an icon to be used in displaying the annotation.\r
73     /// </summary>\r
74     public PdfRubberStampAnnotationIcon Icon\r
75     {\r
76       get\r
77       {\r
78         string value = Elements.GetName(Keys.Name);\r
79         if (value == "")\r
80           return PdfRubberStampAnnotationIcon.NoIcon;\r
81         value = value.Substring(1);\r
82         if (!Enum.IsDefined(typeof(PdfRubberStampAnnotationIcon), value))\r
83           return PdfRubberStampAnnotationIcon.NoIcon;\r
84         return (PdfRubberStampAnnotationIcon)Enum.Parse(typeof(PdfRubberStampAnnotationIcon), value, false);\r
85       }\r
86       set\r
87       {\r
88         if (Enum.IsDefined(typeof(PdfRubberStampAnnotationIcon), value) &&\r
89           PdfRubberStampAnnotationIcon.NoIcon != value)\r
90         {\r
91           Elements.SetName(Keys.Name, "/" + value.ToString());\r
92         }\r
93         else\r
94           Elements.Remove(Keys.Name);\r
95       }\r
96     }\r
97 \r
98     /// <summary>\r
99     /// Predefined keys of this dictionary.\r
100     /// </summary>\r
101     internal new class Keys : PdfAnnotation.Keys\r
102     {\r
103       /// <summary>\r
104       /// (Optional) The name of an icon to be used in displaying the annotation. Viewer\r
105       /// applications should provide predefined icon appearances for at least the following\r
106       /// standard names:\r
107       ///   Approved\r
108       ///   AsIs\r
109       ///   Confidential\r
110       ///   Departmental\r
111       ///   Draft\r
112       ///   Experimental\r
113       ///   Expired\r
114       ///   Final\r
115       ///   ForComment\r
116       ///   ForPublicRelease\r
117       ///   NotApproved\r
118       ///   NotForPublicRelease\r
119       ///   Sold\r
120       ///   TopSecret\r
121       /// </summary>\r
122       [KeyInfo(KeyType.Name | KeyType.Optional)]\r
123       public const string Name = "/Name";\r
124 \r
125       public static DictionaryMeta Meta\r
126       {\r
127         get\r
128         {\r
129           if (Keys.meta == null)\r
130             Keys.meta = CreateMeta(typeof(Keys));\r
131           return Keys.meta;\r
132         }\r
133       }\r
134       static DictionaryMeta meta;\r
135     }\r
136 \r
137     /// <summary>\r
138     /// Gets the KeysMeta of this dictionary type.\r
139     /// </summary>\r
140     internal override DictionaryMeta Meta\r
141     {\r
142       get { return Keys.Meta; }\r
143     }\r
144   }\r
145 }\r