File: gtkrecent-advanced.html

package info (click to toggle)
gtk%2B2.0 2.24.33-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie, trixie-proposed-updates, trixie-updates
  • size: 124,860 kB
  • sloc: ansic: 574,091; makefile: 5,171; sh: 4,618; xml: 1,193; python: 1,117; perl: 749; awk: 49; cpp: 34
file content (205 lines) | stat: -rw-r--r-- 11,927 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Advanced usage: GTK+ 2 Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="GTK+ 2 Reference Manual">
<link rel="up" href="gtk-migrating-GtkRecentChooser.html" title="Migrating from EggRecent to GtkRecentChooser">
<link rel="prev" href="gtkrecent-chooser.html" title="Displaying the Recently Used Documents">
<link rel="next" href="gtk-migrating-GtkLinkButton.html" title="Migrating from GnomeHRef to GtkLinkButton">
<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts"></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="gtk-migrating-GtkRecentChooser.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gtkrecent-chooser.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gtk-migrating-GtkLinkButton.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="gtkrecent-advanced"></a>Advanced usage</h2></div></div></div>
<p>
      The <a class="link" href="GtkRecentChooser.html" title="GtkRecentChooser"><span class="type">GtkRecentChooser</span></a> widgets might display items sorted and filtered,
      either with already supplied or custom sorting and filtering functions.
      The biggest difference from the <span class="structname">EggRecentView</span>
      widgets in EggRecent is that the <a class="link" href="GtkRecentChooser.html" title="GtkRecentChooser"><span class="type">GtkRecentChooser</span></a> widgets will use
      their own copy of the list and will apply the sorting and filtering
      functions only on the copy; this allows the creation of many viewers
      with a single controller, like using many <a class="link" href="GtkTreeView.html" title="GtkTreeView"><span class="type">GtkTreeView</span></a> with a single
      <a class="link" href="GtkTreeModel.html" title="GtkTreeModel"><span class="type">GtkTreeModel</span></a> instance.
    </p>
<p>
      Available sorting methods are:
      </p>
<div class="informalexample">
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
    <tbody>
      <tr>
        <td class="listing_lines" align="right"><pre>1
2
3
4
5
6
7
8</pre></td>
        <td class="listing_code"><pre class="programlisting"><span class="cm">/* no sorting */</span>
	<span class="n">gtk_recent_chooser_set_sort_type</span> <span class="p">(</span><span class="n">GTK_RECENT_CHOOSER</span> <span class="p">(</span><span class="n">chooser</span><span class="p">),</span> <span class="n">GTK_RECENT_SORT_NONE</span><span class="p">);</span>
	
<span class="cm">/* most recently used first */</span>
	<span class="n">gtk_recent_chooser_set_sort_type</span> <span class="p">(</span><span class="n">GTK_RECENT_CHOOSER</span> <span class="p">(</span><span class="n">chooser</span><span class="p">),</span> <span class="n">GTK_RECENT_SORT_MRU</span><span class="p">);</span>
	
	<span class="cm">/* most recently used last */</span>
	<span class="n">gtk_recent_chooser_set_sort_type</span> <span class="p">(</span><span class="n">GTK_RECENT_CHOOSER</span> <span class="p">(</span><span class="n">chooser</span><span class="p">),</span> <span class="n">GTK_RECENT_SORT_LRU</span><span class="p">);</span></pre></td>
      </tr>
    </tbody>
  </table>
</div>

<p>
      You can create your own sorting function, and the use the
      GTK_RECENT_SORT_CUSTOM method:
      </p>
<div class="informalexample">
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
    <tbody>
      <tr>
        <td class="listing_lines" align="right"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30</pre></td>
        <td class="listing_code"><pre class="programlisting"><span class="cm">/* custom sorting function, based on the registration count</span>
<span class="cm"> * (most used first)</span>
<span class="cm"> */</span>
<span class="k">static</span> <span class="kt">void</span>
<span class="nf">sort_by_usage_count</span> <span class="p">(</span><span class="n">GtkRecentInfo</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span>
                             <span class="n">GtkRecentInfo</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span>
                             <span class="n">gpointer</span>       <span class="n">data</span><span class="p">)</span>
        <span class="p">{</span>
  <span class="n">gint</span> <span class="n">count_a</span><span class="p">,</span> <span class="n">count_b</span><span class="p">;</span>

  <span class="n">count_a</span> <span class="o">=</span> <span class="n">count_b</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>

  <span class="k">if</span> <span class="p">(</span><span class="n">gtk_recent_info_has_application</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">APP_NAME</span><span class="p">))</span>
    <span class="n">gtk_recent_info_get_application_info</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">APP_NAME</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">count_a</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span>

  <span class="k">if</span> <span class="p">(</span><span class="n">gtk_recent_info_has_application</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">APP_NAME</span><span class="p">))</span>
    <span class="n">gtk_recent_info_get_application_info</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">APP_NAME</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">count_b</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span>

  <span class="k">return</span> <span class="n">count_a</span> <span class="o">&lt;</span> <span class="n">count_b</span><span class="p">;</span>
<span class="p">}</span>

<span class="p">...</span>

  <span class="cm">/* set custom sorting and set the custom sorting function */</span>
  <span class="n">gtk_recent_chooser_set_sort_type</span> <span class="p">(</span><span class="n">GTK_RECENT_CHOOSER</span> <span class="p">(</span><span class="n">chooser</span><span class="p">),</span>
                                    <span class="n">GTK_RECENT_SORT_CUSTOM</span><span class="p">);</span>
  <span class="n">gtk_recent_chooser_set_sort_func</span> <span class="p">(</span><span class="n">GTK_RECENT_CHOOSER</span><span class="p">,</span>
                                    <span class="n">sort_by_usage_count</span><span class="p">,</span>
		  		    <span class="nb">NULL</span><span class="p">,</span> <span class="cm">/* sort function data */</span>
				    <span class="nb">NULL</span>  <span class="cm">/* destroy notify for the data */</span><span class="p">);</span></pre></td>
      </tr>
    </tbody>
  </table>
</div>

<p>
    </p>
<p>
      Filtering is done using the <a class="link" href="GtkRecentFilter.html" title="GtkRecentFilter"><span class="type">GtkRecentFilter</span></a> object, similar to the
      <a class="link" href="gtk2-gtkfilefilter.html#GtkFileFilter"><span class="type">GtkFileFilter</span></a> object used by the <a class="link" href="GtkFileChooser.html" title="GtkFileChooser"><span class="type">GtkFileChooser</span></a> widgets. The
      <a class="link" href="GtkRecentFilter.html" title="GtkRecentFilter"><span class="type">GtkRecentFilter</span></a> object has a set of pre-defined options based on the
      meta-data exposed by the <a class="link" href="GtkRecentManager.html#GtkRecentInfo" title="GtkRecentInfo"><span class="type">GtkRecentInfo</span></a> object. It also allows custom
      filtering function:
      </p>
<div class="informalexample">
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
    <tbody>
      <tr>
        <td class="listing_lines" align="right"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21</pre></td>
        <td class="listing_code"><pre class="programlisting"><span class="n">GtkRecentFilter</span> <span class="o">*</span><span class="n">filter</span><span class="p">;</span>

	<span class="n">filter</span> <span class="o">=</span> <span class="n">gtk_recent_filter_new</span> <span class="p">();</span>
	
	<span class="cm">/* set the user visible name of the filter */</span>
	<span class="n">gtk_recent_filter_set_name</span> <span class="p">(</span><span class="n">filter</span><span class="p">,</span> <span class="s">&quot;Since Last Month&quot;</span><span class="p">);</span>

	<span class="cm">/* set the maximum age of a recently used document */</span>
	<span class="n">gtk_recent_filter_set_age</span> <span class="p">(</span><span class="n">filter</span><span class="p">,</span> <span class="mi">31</span><span class="p">);</span>

	<span class="cm">/* the chooser takes the ownership of the object */</span>
	<span class="n">gtk_recent_chooser_add_filter</span> <span class="p">(</span><span class="n">GTK_RECENT_CHOOSER</span> <span class="p">(</span><span class="n">chooser</span><span class="p">),</span> <span class="n">filter</span><span class="p">);</span>

	<span class="cm">/* set the currently used filter */</span>
	<span class="n">gtk_recent_chooser_set_filter</span> <span class="p">(</span><span class="n">GTK_RECENT_CHOOSER</span> <span class="p">(</span><span class="n">chooser</span><span class="p">),</span> <span class="n">filter</span><span class="p">);</span>

	<span class="n">filter</span> <span class="o">=</span> <span class="n">gtk_recent_filter_new</span> <span class="p">();</span>
	<span class="n">gtk_recent_filter_set_name</span> <span class="p">(</span><span class="n">filter</span><span class="p">,</span> <span class="s">&quot;Every text file&quot;</span><span class="p">);</span>
	<span class="n">gtk_recent_filter_set_mime_type</span> <span class="p">(</span><span class="n">filter</span><span class="p">,</span> <span class="s">&quot;text/plain&quot;</span><span class="p">);</span>

	<span class="n">gtk_recent_chooser_add_filter</span> <span class="p">(</span><span class="n">GTK_RECENT_CHOOSER</span> <span class="p">(</span><span class="n">chooser</span><span class="p">),</span> <span class="n">filter</span><span class="p">);</span></pre></td>
      </tr>
    </tbody>
  </table>
</div>

<p>
      The <a class="link" href="GtkRecentChooserWidget.html" title="GtkRecentChooserWidget"><span class="type">GtkRecentChooserWidget</span></a> and <a class="link" href="GtkRecentChooserDialog.html" title="GtkRecentChooserDialog"><span class="type">GtkRecentChooserDialog</span></a> widgets allow
      multiple filters and the selection of an appropriate one; the
      <a class="link" href="GtkRecentChooserMenu.html" title="GtkRecentChooserMenu"><span class="type">GtkRecentChooserMenu</span></a> widget allows just a single filter object.
    </p>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.33.0</div>
</body>
</html>