1// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 2// 3// Copyright (c) 2003, Haiku 4// 5// This software is part of the Haiku distribution and is covered 6// by the MIT License. 7// 8// 9// File: MediaListItem.h 10// Author: Sikosis, J��r��me Duval 11// Description: Media Preferences 12// Created : June 25, 2003 13// 14// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 15#ifndef __MEDIALISTITEM_H__ 16#define __MEDIALISTITEM_H__ 17 18 19#include <ListItem.h> 20#include <MediaAddOn.h> 21 22 23struct dormant_node_info; 24 25struct MediaIcons; 26class MediaWindow; 27 28class AudioMixerListItem; 29class DeviceListItem; 30class MidiListItem; 31class NodeListItem; 32 33 34class MediaListItem : public BListItem { 35public: 36 MediaListItem(); 37 38 virtual void AlterWindow(MediaWindow* window) = 0; 39 40 enum media_type { 41 AUDIO_TYPE, 42 VIDEO_TYPE 43 }; 44 45 virtual void Update(BView* owner, const BFont* font); 46 virtual void DrawItem(BView* owner, BRect frame, 47 bool complete = false); 48 49 virtual const char* Label() = 0; 50 51 52 static MediaIcons* Icons() {return sIcons;} 53 static void SetIcons(MediaIcons* icons) {sIcons = icons;} 54 55 struct Visitor { 56 virtual void Visit(AudioMixerListItem* item) = 0; 57 virtual void Visit(DeviceListItem* item) = 0; 58 virtual void Visit(NodeListItem* item) = 0; 59 virtual void Visit(MidiListItem* item) = 0; 60 }; 61 62 virtual void Accept(Visitor& visitor) = 0; 63 64 // use the visitor pattern for comparison, 65 // -1 : < item; 0 : == item; 1 : > item 66 virtual int CompareWith(MediaListItem* item) = 0; 67 68 static int Compare(const void* itemOne, 69 const void* itemTwo); 70 71protected: 72 struct Renderer; 73 74 virtual void SetRenderParameters(Renderer& renderer) = 0; 75 76private: 77 78 static MediaIcons* sIcons; 79}; 80 81 82class NodeListItem : public MediaListItem { 83public: 84 NodeListItem(const dormant_node_info* node, 85 media_type type); 86 87 void SetMediaType(MediaListItem::media_type type); 88 void SetDefaultOutput(bool isDefault); 89 bool IsDefaultOutput() {return fIsDefaultOutput;} 90 void SetDefaultInput(bool isDefault); 91 bool IsDefaultInput() {return fIsDefaultInput;} 92 93 virtual void AlterWindow(MediaWindow* window); 94 95 virtual const char* Label(); 96 media_type Type() {return fMediaType;} 97 98 virtual void Accept(MediaListItem::Visitor& visitor); 99 100 struct Comparator : public MediaListItem::Visitor { 101 Comparator(NodeListItem* compareOthersTo); 102 virtual void Visit(NodeListItem* item); 103 virtual void Visit(DeviceListItem* item); 104 virtual void Visit(AudioMixerListItem* item); 105 virtual void Visit(MidiListItem* item); 106 107 int result; 108 // -1 : < item; 0 : == item; 1 : > item 109 private: 110 NodeListItem* fTarget; 111 }; 112 113 // -1 : < item; 0 : == item; 1 : > item 114 virtual int CompareWith(MediaListItem* item); 115 116private: 117 118 virtual void SetRenderParameters(Renderer& renderer); 119 120 const dormant_node_info* fNodeInfo; 121 122 media_type fMediaType; 123 bool fIsDefaultInput; 124 bool fIsDefaultOutput; 125}; 126 127 128class DeviceListItem : public MediaListItem { 129public: 130 DeviceListItem(const char* title, 131 MediaListItem::media_type type); 132 133 MediaListItem::media_type Type() {return fMediaType;} 134 virtual const char* Label() {return fTitle;} 135 virtual void AlterWindow(MediaWindow* window); 136 virtual void Accept(MediaListItem::Visitor& visitor); 137 138 struct Comparator : public MediaListItem::Visitor { 139 Comparator(DeviceListItem* compareOthersTo); 140 virtual void Visit(NodeListItem* item); 141 virtual void Visit(DeviceListItem* item); 142 virtual void Visit(AudioMixerListItem* item); 143 virtual void Visit(MidiListItem* item); 144 145 int result; 146 // -1 : < item; 0 : == item; 1 : > item 147 private: 148 DeviceListItem* fTarget; 149 }; 150 151 // -1 : < item; 0 : == item; 1 : > item 152 virtual int CompareWith(MediaListItem* item); 153 154private: 155 virtual void SetRenderParameters(Renderer& renderer); 156 157 const char* fTitle; 158 media_type fMediaType; 159}; 160 161 162class AudioMixerListItem : public MediaListItem { 163public: 164 AudioMixerListItem(const char* title); 165 166 167 virtual const char* Label() {return fTitle;} 168 virtual void AlterWindow(MediaWindow* window); 169 virtual void Accept(MediaListItem::Visitor& visitor); 170 171 struct Comparator : public MediaListItem::Visitor { 172 Comparator(AudioMixerListItem* compareOthersTo); 173 virtual void Visit(NodeListItem* item); 174 virtual void Visit(DeviceListItem* item); 175 virtual void Visit(AudioMixerListItem* item); 176 virtual void Visit(MidiListItem* item); 177 178 int result; 179 // -1 : < item; 0 : == item; 1 : > item 180 private: 181 AudioMixerListItem* fTarget; 182 }; 183 184 // -1 : < item; 0 : == item; 1 : > item 185 virtual int CompareWith(MediaListItem* item); 186 187private: 188 virtual void SetRenderParameters(Renderer& renderer); 189 190 const char* fTitle; 191}; 192 193 194class MidiListItem : public MediaListItem { 195public: 196 MidiListItem(const char* title); 197 198 virtual void AlterWindow(MediaWindow* window); 199 200 virtual const char* Label(); 201 202 virtual void Accept(MediaListItem::Visitor& visitor); 203 204 struct Comparator : public MediaListItem::Visitor { 205 Comparator(MidiListItem* compareOthersTo); 206 virtual void Visit(NodeListItem* item); 207 virtual void Visit(DeviceListItem* item); 208 virtual void Visit(AudioMixerListItem* item); 209 virtual void Visit(MidiListItem* item); 210 211 int result; 212 // -1 : < item; 0 : == item; 1 : > item 213 private: 214 MidiListItem* fTarget; 215 }; 216 217 // -1 : < item; 0 : == item; 1 : > item 218 virtual int CompareWith(MediaListItem* item); 219 220private: 221 222 virtual void SetRenderParameters(Renderer& renderer); 223 224 const char* fTitle; 225}; 226#endif /* __MEDIALISTITEM_H__ */ 227