1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module atk.HypertextT;
26 
27 public  import atk.Hyperlink;
28 public  import gobject.ObjectG;
29 public  import gobject.Signals;
30 public  import gtkc.atk;
31 public  import gtkc.atktypes;
32 public  import std.algorithm;
33 
34 
35 /**
36  * An interface used for objects which implement linking between
37  * multiple resource or content locations, or multiple 'markers'
38  * within a single document.  A Hypertext instance is associated with
39  * one or more Hyperlinks, which are associated with particular
40  * offsets within the Hypertext's included content.  While this
41  * interface is derived from Text, there is no requirement that
42  * Hypertext instances have textual content; they may implement Image
43  * as well, and Hyperlinks need not have non-zero text offsets.
44  */
45 public template HypertextT(TStruct)
46 {
47 	/** Get the main Gtk struct */
48 	public AtkHypertext* getHypertextStruct(bool transferOwnership = false)
49 	{
50 		if (transferOwnership)
51 			ownedRef = false;
52 		return cast(AtkHypertext*)getStruct();
53 	}
54 
55 
56 	/**
57 	 * Gets the link in this hypertext document at index
58 	 * @link_index
59 	 *
60 	 * Params:
61 	 *     linkIndex = an integer specifying the desired link
62 	 *
63 	 * Returns: the link in this hypertext document at
64 	 *     index @link_index
65 	 */
66 	public Hyperlink getLink(int linkIndex)
67 	{
68 		auto p = atk_hypertext_get_link(getHypertextStruct(), linkIndex);
69 		
70 		if(p is null)
71 		{
72 			return null;
73 		}
74 		
75 		return ObjectG.getDObject!(Hyperlink)(cast(AtkHyperlink*) p);
76 	}
77 
78 	/**
79 	 * Gets the index into the array of hyperlinks that is associated with
80 	 * the character specified by @char_index.
81 	 *
82 	 * Params:
83 	 *     charIndex = a character index
84 	 *
85 	 * Returns: an index into the array of hyperlinks in @hypertext,
86 	 *     or -1 if there is no hyperlink associated with this character.
87 	 */
88 	public int getLinkIndex(int charIndex)
89 	{
90 		return atk_hypertext_get_link_index(getHypertextStruct(), charIndex);
91 	}
92 
93 	/**
94 	 * Gets the number of links within this hypertext document.
95 	 *
96 	 * Returns: the number of links within this hypertext document
97 	 */
98 	public int getNLinks()
99 	{
100 		return atk_hypertext_get_n_links(getHypertextStruct());
101 	}
102 
103 	protected class OnLinkSelectedDelegateWrapper
104 	{
105 		void delegate(int, HypertextIF) dlg;
106 		gulong handlerId;
107 		
108 		this(void delegate(int, HypertextIF) dlg)
109 		{
110 			this.dlg = dlg;
111 			onLinkSelectedListeners ~= this;
112 		}
113 		
114 		void remove(OnLinkSelectedDelegateWrapper source)
115 		{
116 			foreach(index, wrapper; onLinkSelectedListeners)
117 			{
118 				if (wrapper.handlerId == source.handlerId)
119 				{
120 					onLinkSelectedListeners[index] = null;
121 					onLinkSelectedListeners = std.algorithm.remove(onLinkSelectedListeners, index);
122 					break;
123 				}
124 			}
125 		}
126 	}
127 	OnLinkSelectedDelegateWrapper[] onLinkSelectedListeners;
128 
129 	/**
130 	 * The "link-selected" signal is emitted by an AtkHyperText
131 	 * object when one of the hyperlinks associated with the object
132 	 * is selected.
133 	 *
134 	 * Params:
135 	 *     arg1 = the index of the hyperlink which is selected
136 	 */
137 	gulong addOnLinkSelected(void delegate(int, HypertextIF) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)
138 	{
139 		auto wrapper = new OnLinkSelectedDelegateWrapper(dlg);
140 		wrapper.handlerId = Signals.connectData(
141 			this,
142 			"link-selected",
143 			cast(GCallback)&callBackLinkSelected,
144 			cast(void*)wrapper,
145 			cast(GClosureNotify)&callBackLinkSelectedDestroy,
146 			connectFlags);
147 		return wrapper.handlerId;
148 	}
149 	
150 	extern(C) static void callBackLinkSelected(AtkHypertext* hypertextStruct, int arg1, OnLinkSelectedDelegateWrapper wrapper)
151 	{
152 		wrapper.dlg(arg1, wrapper.outer);
153 	}
154 	
155 	extern(C) static void callBackLinkSelectedDestroy(OnLinkSelectedDelegateWrapper wrapper, GClosure* closure)
156 	{
157 		wrapper.remove(wrapper);
158 	}
159 }