xref: /haiku/src/apps/cortex/RouteApp/NodeSetIOContext.h (revision fc75f2df0c666dcc61be83c4facdd3132340c2fb)
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 
56 class NodeSetIOContext {
57 public:														// *** dtor/ctor
58 	virtual ~NodeSetIOContext();
59 	NodeSetIOContext();
60 
61 public:														// *** hooks
62 	virtual void importUIState(
63 		const BMessage*							archive) {}
64 
65 	virtual void exportUIState(
66 		BMessage*										archive) {}
67 
68 public:														// *** 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 
98 private:													// 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