/*
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) version 3.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with the program; if not, see <http://www.gnu.org/licenses/>
 *
 *
 * Authors:
 *		Jeffrey Stedfast <fejj@ximian.com>
 *
 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
 *
 */

#ifndef EM_FOLDER_TREE_H
#define EM_FOLDER_TREE_H

#include <gtk/gtk.h>
#include <camel/camel.h>
#include <mail/em-folder-tree-model.h>

/* Standard GObject macros */
#define EM_TYPE_FOLDER_TREE \
	(em_folder_tree_get_type ())
#define EM_FOLDER_TREE(obj) \
	(G_TYPE_CHECK_INSTANCE_CAST \
	((obj), EM_TYPE_FOLDER_TREE, EMFolderTree))
#define EM_FOLDER_TREE_CLASS(cls) \
	(G_TYPE_CHECK_CLASS_CAST \
	((cls), EM_TYPE_FOLDER_TREE, EMFolderTreeClass))
#define EM_IS_FOLDER_TREE(obj) \
	(G_TYPE_CHECK_INSTANCE_TYPE  \
	((obj), EM_TYPE_FOLDER_TREE))
#define EM_IS_FOLDER_TREE_CLASS(cls) \
	(G_TYPE_CHECK_CLASS_TYPE \
	((cls), EM_TYPE_FOLDER_TREE))
#define EM_FOLDER_TREE_GET_CLASS(obj) \
	(G_TYPE_INSTANCE_GET_CLASS \
	((obj), EM_TYPE_FOLDER_TREE, EMFolderTreeClass))

G_BEGIN_DECLS

typedef struct _EMFolderTree EMFolderTree;
typedef struct _EMFolderTreeClass EMFolderTreeClass;
typedef struct _EMFolderTreePrivate EMFolderTreePrivate;

#define STATE_KEY_EXPANDED	"Expanded"

/* XXX Not sure this api is the best, but its the easiest
 *     to implement and will cover what we need. */
#define EMFT_EXCLUDE_NOSELECT CAMEL_FOLDER_NOSELECT
#define EMFT_EXCLUDE_NOINFERIORS CAMEL_FOLDER_NOINFERIORS
#define EMFT_EXCLUDE_VIRTUAL CAMEL_FOLDER_VIRTUAL
#define EMFT_EXCLUDE_SYSTEM CAMEL_FOLDER_SYSTEM
#define EMFT_EXCLUDE_VTRASH CAMEL_FOLDER_VTRASH

typedef gboolean	(*EMFTExcludeFunc)	(EMFolderTree *folder_tree,
						 GtkTreeModel *model,
						 GtkTreeIter *iter,
						 gpointer user_data);

struct _EMFolderTree {
	GtkTreeView parent;
	EMFolderTreePrivate *priv;
};

struct _EMFolderTreeClass {
	GtkTreeViewClass parent_class;

	/* signals */
	void		(*folder_activated)	(EMFolderTree *folder_tree,
						 const gchar *full_name,
						 const gchar *uri);
	void		(*folder_selected)	(EMFolderTree *folder_tree,
						 const gchar *full_name,
						 const gchar *uri,
						 guint32 flags);
	void		(*popup_event)		(EMFolderTree *folder_tree);
	void		(*hidden_key_event)	(EMFolderTree *emft, GdkEvent *event);
};

GType		em_folder_tree_get_type		(void);
GtkWidget *	em_folder_tree_new		(void);
void		em_folder_tree_enable_drag_and_drop
						(EMFolderTree *folder_tree);
void		em_folder_tree_set_excluded	(EMFolderTree *folder_tree,
						 guint32 flags);
void		em_folder_tree_set_excluded_func (EMFolderTree *folder_tree,
						 EMFTExcludeFunc exclude,
						 gpointer data);
void		em_folder_tree_set_selected_list (EMFolderTree *folder_tree,
						 GList *list,
						 gboolean expand_only);
GList *		em_folder_tree_get_selected_uris (EMFolderTree *folder_tree);
GList *		em_folder_tree_get_selected_paths
						(EMFolderTree *folder_tree);
void		em_folder_tree_set_selected	(EMFolderTree *folder_tree,
						 const gchar *uri,
						 gboolean expand_only);
void		em_folder_tree_select_next_path	(EMFolderTree *folder_tree,
						 gboolean skip_read_folders);
void		em_folder_tree_select_prev_path	(EMFolderTree *folder_tree,
						 gboolean skip_read_folders);
void		em_folder_tree_edit_selected	(EMFolderTree *folder_tree);
gchar *		em_folder_tree_get_selected_uri	(EMFolderTree *folder_tree);
gchar *		em_folder_tree_get_selected_path (EMFolderTree *folder_tree);
CamelFolder *	em_folder_tree_get_selected_folder
						(EMFolderTree *folder_tree);
CamelFolderInfo *
		em_folder_tree_get_selected_folder_info
						(EMFolderTree *folder_tree);
gboolean	em_folder_tree_create_folder	(EMFolderTree *folder_tree,
						 const gchar *full_name,
						 const gchar *uri);
void		em_folder_tree_set_skip_double_click
						(EMFolderTree *folder_tree,
						 gboolean skip);

void		em_folder_tree_restore_state	(EMFolderTree *folder_tree,
						 GKeyFile *key_file);

void		em_folder_tree_set_selectable_widget
						(EMFolderTree *folder_tree,
						 GtkWidget *selectable);
G_END_DECLS

#endif /* EM_FOLDER_TREE_H */
'>branches/2020Q2</option>
<option value='branches/2020Q3'>branches/2020Q3</option>
<option value='branches/2020Q4'>branches/2020Q4</option>
<option value='branches/2021Q1'>branches/2021Q1</option>
<option value='branches/RELEASE_8_4_0'>branches/RELEASE_8_4_0</option>
<option value='branches/RELENG_2_1_0'>branches/RELENG_2_1_0</option>
<option value='branches/RELENG_2_2'>branches/RELENG_2_2</option>
<option value='branches/RELENG_9_1_0'>branches/RELENG_9_1_0</option>
<option value='branches/RELENG_9_2_0'>branches/RELENG_9_2_0</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/eslint-utils-1.4.3'>dependabot/npm_and_yarn/devel/electron4/files/eslint-utils-1.4.3</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/lodash-4.17.15'>dependabot/npm_and_yarn/devel/electron4/files/lodash-4.17.15</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/lodash.merge-4.6.2'>dependabot/npm_and_yarn/devel/electron4/files/lodash.merge-4.6.2</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/lodash.template-4.5.0'>dependabot/npm_and_yarn/devel/electron4/files/lodash.template-4.5.0</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/minimist-1.2.2'>dependabot/npm_and_yarn/devel/electron4/files/minimist-1.2.2</option>
<option value='dependabot/npm_and_yarn/devel/electron4/files/mixin-deep-1.3.2'>dependabot/npm_and_yarn/devel/electron4/files/mixin-deep-1.3.2</option>
<option value='main' selected='selected'>main</option>
<option value='master'>master</option>
<option value='svn_head'>svn_head</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>FreeBSD Ports (https://github.com/freebsd/freebsd-ports)</td><td class='sub right'></td></tr></table>
<table class='tabs'><tr><td>
<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/about/'>about</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/'>summary</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/refs/?id=7a184841104c44983d74c45e0484b7a27fd8b5d5'>refs</a><a class='active' href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/editors/libreoffice-kk'>log</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/tree/editors/libreoffice-kk?id=7a184841104c44983d74c45e0484b7a27fd8b5d5'>tree</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/editors/libreoffice-kk?id=7a184841104c44983d74c45e0484b7a27fd8b5d5'>commit</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/diff/editors/libreoffice-kk?id=7a184841104c44983d74c45e0484b7a27fd8b5d5'>diff</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/stats/editors/libreoffice-kk'>stats</a></td><td class='form'><form class='right' method='get' action='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/editors/libreoffice-kk'>
<input type='hidden' name='id' value='7a184841104c44983d74c45e0484b7a27fd8b5d5'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/?id=7a184841104c44983d74c45e0484b7a27fd8b5d5'>root</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/editors?id=7a184841104c44983d74c45e0484b7a27fd8b5d5'>editors</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/editors/libreoffice-kk?id=7a184841104c44983d74c45e0484b7a27fd8b5d5'>libreoffice-kk</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th></th><th class='left'>Commit message (<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/editors/libreoffice-kk?id=7a184841104c44983d74c45e0484b7a27fd8b5d5&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Age</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/editors/libreoffice-kk?id=1fc4b7db57ed8620821a80c6041faced6146d19f'>editors/libreoffice: update to 7.4.0 release (+)</a></td><td>Dima Panov</td><td><span title='2022-08-18 20:25:31 +0800'>2022-08-18</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/editors/libreoffice-kk?id=d31904329b2ded753a718cac418dfab1e766fb2d'>editors/libreoffice: update to 7.3.5 release (+)</a></td><td>Dima Panov</td><td><span title='2022-07-24 05:53:32 +0800'>2022-07-24</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/editors/libreoffice-kk?id=4821e83c2e5b16a156aa92900ee5ddbea6bef24f'>*/libreoffice*: update to 7.3.4 release (+)</a></td><td>Dima Panov</td><td><span title='2022-06-10 05:36:21 +0800'>2022-06-10</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/editors/libreoffice-kk?id=b305ea3361859bddd115ea9748fb89fbc85f20a8'>editors/libreoffice: update to 7.3.3 release (+)</a></td><td>Dima Panov</td><td><span title='2022-05-07 19:27:17 +0800'>2022-05-07</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/editors/libreoffice-kk?id=8cee3a0fa6b7dc5405c48abf188e2bc0774e0abf'>*/libreoffice*: update to 7.3.2 release (+)</a></td><td>Dima Panov</td><td><span title='2022-04-01 01:49:20 +0800'>2022-04-01</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/editors/libreoffice-kk?id=07ca0beba339b3972452ca663115007e45c4e3ed'>LibreOffice 7.3.1 Community, the first minor release of the LibreOffice 7.3 f...</a></td><td>Dima Panov</td><td><span title='2022-03-05 13:49:48 +0800'>2022-03-05</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/editors/libreoffice-kk?id=33a790e8a22a2ec08a49e135b40a11e1ca29cbf2'>Please welcome new generation release of LibreOffice suite - 7.3.0! (+)</a></td><td>Dima Panov</td><td><span title='2022-02-17 07:02:03 +0800'>2022-02-17</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/editors/libreoffice-kk?id=97dcd5109929e7de1da3be782a8658bf771902f9'>Please welcome LibreOffice suite 7.2.5 release! (+)</a></td><td>Dima Panov</td><td><span title='2022-01-06 21:07:48 +0800'>2022-01-06</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/editors/libreoffice-kk?id=aad581d3bf8997bf849108333650efa2af3b877e'>LibreOffice 7.2.4 Community release available ahead of schedule to provide an...</a></td><td>Dima Panov</td><td><span title='2021-12-10 17:29:08 +0800'>2021-12-10</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>