1/*
2 * Copyright (c) 1999-2000, Eric Moon.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions, and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions, and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 *
16 * 3. The name of the author may not be used to endorse or promote products
17 *    derived from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
27 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31
32// NodeSetIOContext.h
33// * PURPOSE
34//   Store state info for import & export of a set
35//   of media node descriptions.  Provide hooks for
36//   import/export of associated UI state info.
37//   To be used as a mix-in w/ derived ImportContext
38//   and ExportContext classes.
39//
40// * HISTORY
41//   e.moon			7dec99		Begun
42
43#ifndef __NodeSetIOContext_H__
44#define __NodeSetIOContext_H__
45
46#include "NodeKey.h"
47
48#include <MediaDefs.h>
49#include <vector>
50#include <utility>
51
52#include "cortex_defs.h"
53__BEGIN_CORTEX_NAMESPACE
54
55
56class NodeSetIOContext {
57public:														// *** dtor/ctor
58	virtual ~NodeSetIOContext();
59	NodeSetIOContext();
60
61public:														// *** hooks
62	virtual void importUIState(
63		const BMessage*							archive) {}
64
65	virtual void exportUIState(
66		BMessage*										archive) {}
67
68public:														// *** operations
69	// The node must be valid (!= media_node::null.node).
70	// If no key is given, a new one will be generated.
71	status_t addNode(
72		media_node_id									node,
73		const char*										key=0);
74
75	status_t removeNode(
76		media_node_id									node);
77
78	status_t removeNodeAt(
79		uint32												index);
80
81	uint32 countNodes() const;
82
83	// returns 0 if out of range
84	media_node_id nodeAt(
85		uint32												index) const;
86
87	const char* keyAt(
88		uint32												index) const;
89
90	status_t getKeyFor(
91		media_node_id									node,
92		const char**									outKey) const;
93
94	status_t getNodeFor(
95		const char*										key,
96		media_node_id*								outNode) const;
97
98private:													// implementation
99
100	// the node/key set
101	typedef std::pair<BString,media_node_id> node_entry;
102	typedef std::vector<node_entry>		node_set;
103	node_set												m_nodes;
104
105	// next node key value
106	int16														m_nodeKeyIndex;
107};
108
109__END_CORTEX_NAMESPACE
110#endif /*__NodeSetIOContext_H__*/
111