1/*
2 * Copyright 2006, Axel D��rfler, axeld@pinc-software.de. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef MIME_TYPE_LIST_VIEW_H
6#define MIME_TYPE_LIST_VIEW_H
7
8
9#include <Mime.h>
10#include <OutlineListView.h>
11#include <String.h>
12
13
14class MimeTypeItem : public BStringItem {
15	public:
16		MimeTypeItem(BMimeType& type, bool showIcon = false, bool flat = false);
17		MimeTypeItem(const char* type, bool showIcon = false, bool flat = false);
18		virtual ~MimeTypeItem();
19
20		virtual void DrawItem(BView* owner, BRect itemRect,
21			bool drawEverything = false);
22		virtual void Update(BView* owner, const BFont* font);
23
24		const char* Type() const { return fType.String(); }
25		const char* Subtype() const { return fSubtype.String(); }
26		const char* Supertype() const { return fSupertype.String(); }
27		const char* Description() const { return fDescription.String(); }
28		bool IsSupertypeOnly() const { return fIsSupertype; }
29
30		void UpdateText();
31		void AddSubtype();
32
33		void ShowIcon(bool showIcon);
34		void SetApplicationMode(bool applicationMode);
35
36		static int Compare(const BListItem* a, const BListItem* b);
37		static int CompareLabels(const BListItem* a, const BListItem* b);
38
39	private:
40		void _SetTo(BMimeType& type);
41
42		BString		fSupertype;
43		BString		fSubtype;
44		BString		fType;
45		BString		fDescription;
46		float		fBaselineOffset;
47		bool		fIsSupertype;
48		bool		fFlat;
49		bool		fShowIcon;
50		bool		fApplicationMode;
51};
52
53class MimeTypeListView : public BOutlineListView {
54	public:
55		MimeTypeListView(const char* name,
56			const char* supertype = NULL, bool showIcons = false,
57			bool applicationMode = false);
58		virtual ~MimeTypeListView();
59
60		void SelectNewType(const char* type);
61		bool SelectType(const char* type);
62
63		void SelectItem(MimeTypeItem* item);
64		MimeTypeItem* FindItem(const char* type);
65
66		void UpdateItem(MimeTypeItem* item);
67
68		void ShowIcons(bool showIcons);
69		bool IsShowingIcons() const { return fShowIcons; }
70
71	protected:
72		virtual void AttachedToWindow();
73		virtual void DetachedFromWindow();
74
75		virtual void MessageReceived(BMessage* message);
76
77	private:
78		void _CollectSubtypes(const char* supertype, MimeTypeItem* supertypeItem);
79		void _CollectTypes();
80		void _MakeTypesUnique(MimeTypeItem* underItem = NULL);
81		void _AddNewType(const char* type);
82
83		BMimeType	fSupertype;
84		BString		fSelectNewType;
85		bool		fShowIcons;
86		bool		fApplicationMode;
87};
88
89extern bool mimetype_is_application_signature(BMimeType& type);
90
91#endif	// MIME_TYPE_LIST_VIEW_H
92