summaryrefslogtreecommitdiff
path: root/changrp.c
diff options
context:
space:
mode:
Diffstat (limited to 'changrp.c')
-rw-r--r--changrp.c590
1 files changed, 281 insertions, 309 deletions
diff --git a/changrp.c b/changrp.c
index 7d74a8b..228843b 100644
--- a/changrp.c
+++ b/changrp.c
@@ -41,67 +41,64 @@ cChannelGroup::~cChannelGroup(void)
bool cChannelGroup::Parse(const char *s)
{
- char *line;
- char *pos;
- char *pos_next;
- int parameter = 1;
- int valuelen;
+ char *line;
+ char *pos;
+ char *pos_next;
+ int parameter = 1;
+ int valuelen;
#define MAXVALUELEN (10 * MaxFileName)
- char value[MAXVALUELEN];
-
- pos = line = strdup(s);
- pos_next = pos + strlen(pos);
- if (*pos_next == '\n') *pos_next = 0;
- while (*pos) {
- while (*pos == ' ') pos++;
- if (*pos) {
- if (*pos != '|') {
- pos_next = strchr(pos, '|');
- if (!pos_next)
- pos_next = pos + strlen(pos);
- valuelen = pos_next - pos + 1;
- if (valuelen > MAXVALUELEN)
- {
- LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
- valuelen = MAXVALUELEN;
- }
- strn0cpy(value, pos, valuelen);
- pos = pos_next;
- switch (parameter) {
- case 1: strcpy(name,value);
- break;
- default:
- {
+ char value[MAXVALUELEN];
+
+ pos = line = strdup(s);
+ pos_next = pos + strlen(pos);
+ if (*pos_next == '\n') *pos_next = 0;
+ while (*pos) {
+ while (*pos == ' ') pos++;
+ if (*pos) {
+ if (*pos != '|') {
+ pos_next = strchr(pos, '|');
+ if (!pos_next)
+ pos_next = pos + strlen(pos);
+ valuelen = pos_next - pos + 1;
+ if (valuelen > MAXVALUELEN) {
+ LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
+ valuelen = MAXVALUELEN;
+ }
+ strn0cpy(value, pos, valuelen);
+ pos = pos_next;
+ switch (parameter) {
+ case 1:
+ strcpy(name, value);
+ break;
+ default: {
#ifdef __FreeBSD__
- char *channelbuffer = MALLOC(char, 32);
- int numChannels = sscanf(value, "%31[^|]", channelbuffer);
+ char *channelbuffer = MALLOC(char, 32);
+ int numChannels = sscanf(value, "%31[^|]", channelbuffer);
#else
- char *channelbuffer = NULL;
- int numChannels = sscanf(value, "%m[^|]", &channelbuffer);
+ char *channelbuffer = NULL;
+ int numChannels = sscanf(value, "%m[^|]", &channelbuffer);
#endif
- if (numChannels == 1)
- {
- LOCK_CHANNELS_READ;
- const cChannel* channel = Channels->GetByChannelID(tChannelID::FromString(channelbuffer), true, true);
- if (channel)
- {
- cChannelGroupItem* channelitem = new cChannelGroupItem(channel);
- channels.Add(channelitem);
- }
- }
- free(channelbuffer);
- }
- break;
- } //switch
- }
- parameter++;
- }
- if (*pos) pos++;
- } //while
-
- free(line);
- return (parameter >= 1) ? true : false;
+ if (numChannels == 1) {
+ LOCK_CHANNELS_READ;
+ const cChannel* channel = Channels->GetByChannelID(tChannelID::FromString(channelbuffer), true, true);
+ if (channel) {
+ cChannelGroupItem* channelitem = new cChannelGroupItem(channel);
+ channels.Add(channelitem);
+ }
+ }
+ free(channelbuffer);
+ }
+ break;
+ } //switch
+ }
+ parameter++;
+ }
+ if (*pos) pos++;
+ } //while
+
+ free(line);
+ return (parameter >= 1) ? true : false;
}
const char *cChannelGroup::ToText(void)
@@ -109,18 +106,16 @@ const char *cChannelGroup::ToText(void)
char* channelbuffer = NULL;
cChannelGroupItem* ChannelGroupItem = channels.First();
int index = 0;
- while (ChannelGroupItem)
- {
- const cChannel* channel = ChannelGroupItem->channel;
- if (index++ == 0)
- channelbuffer = strdup(CHANNELSTRING(channel));
- else
- {
- char* temp = channelbuffer;
- msprintf(&channelbuffer, "%s|%s", channelbuffer, CHANNELSTRING(channel));
- free(temp);
- }
- ChannelGroupItem = channels.Next(ChannelGroupItem);
+ while (ChannelGroupItem) {
+ const cChannel* channel = ChannelGroupItem->channel;
+ if (index++ == 0)
+ channelbuffer = strdup(CHANNELSTRING(channel));
+ else {
+ char* temp = channelbuffer;
+ msprintf(&channelbuffer, "%s|%s", channelbuffer, CHANNELSTRING(channel));
+ free(temp);
+ }
+ ChannelGroupItem = channels.Next(ChannelGroupItem);
}
char* buffer = NULL;
msprintf(&buffer, "%s|%s", name, channelbuffer);
@@ -134,26 +129,22 @@ int* cChannelGroup::CreateChannelSel()
int* channelSel = (int*) malloc(Channels->Count() * sizeof(int));
const cChannel* channel = Channels->First();
int index = 0;
- while (channel)
- {
- if (channel->GroupSep())
- {
- channel = Channels->Next(channel);
- continue;
- }
- channelSel[index] = 0;
- cChannelGroupItem* channelInGroup = channels.First();
- while (channelInGroup)
- {
- if (channel == channelInGroup->channel)
- {
- channelSel[index] = 1;
- break;
- }
- channelInGroup = channels.Next(channelInGroup);
- }
- index++;
- channel = Channels->Next(channel);
+ while (channel) {
+ if (channel->GroupSep()) {
+ channel = Channels->Next(channel);
+ continue;
+ }
+ channelSel[index] = 0;
+ cChannelGroupItem* channelInGroup = channels.First();
+ while (channelInGroup) {
+ if (channel == channelInGroup->channel) {
+ channelSel[index] = 1;
+ break;
+ }
+ channelInGroup = channels.Next(channelInGroup);
+ }
+ index++;
+ channel = Channels->Next(channel);
}
return channelSel;
}
@@ -164,15 +155,13 @@ void cChannelGroup::CreateChannelList(int* channelSel)
LOCK_CHANNELS_READ;
const cChannel* channel = Channels->First();
int index = 0;
- while (channel)
- {
- if (!channel->GroupSep())
- {
- if (channelSel[index] == 1)
- channels.Add(new cChannelGroupItem(channel));
- index++;
- }
- channel = Channels->Next(channel);
+ while (channel) {
+ if (!channel->GroupSep()) {
+ if (channelSel[index] == 1)
+ channels.Add(new cChannelGroupItem(channel));
+ index++;
+ }
+ channel = Channels->Next(channel);
}
}
@@ -184,11 +173,10 @@ bool cChannelGroup::Save(FILE *f)
bool cChannelGroup::ChannelInGroup(const cChannel* channel)
{
cChannelGroupItem* channelInGroup = channels.First();
- while (channelInGroup)
- {
- if (channel == channelInGroup->channel)
- return true;
- channelInGroup = channels.Next(channelInGroup);
+ while (channelInGroup) {
+ if (channel == channelInGroup->channel)
+ return true;
+ channelInGroup = channels.Next(channelInGroup);
}
return false;
}
@@ -197,15 +185,14 @@ bool cChannelGroup::ChannelInGroup(const cChannel* channel)
int cChannelGroups::GetIndex(char* channelGroup)
{
if (!channelGroup)
- return -1;
+ return -1;
cChannelGroup* ChannelGroup = First();
int index = 0;
- while (ChannelGroup)
- {
- if (strcmp(channelGroup, ChannelGroup->name) == 0)
- return index;
- index++;
- ChannelGroup = Next(ChannelGroup);
+ while (ChannelGroup) {
+ if (strcmp(channelGroup, ChannelGroup->name) == 0)
+ return index;
+ index++;
+ ChannelGroup = Next(ChannelGroup);
}
return -1;
}
@@ -213,13 +200,12 @@ int cChannelGroups::GetIndex(char* channelGroup)
cChannelGroup* cChannelGroups::GetGroupByName(const char* channelGroup)
{
if (!channelGroup)
- return NULL;
+ return NULL;
cChannelGroup* ChannelGroup = First();
- while (ChannelGroup)
- {
- if (strcmp(channelGroup, ChannelGroup->name) == 0)
- return ChannelGroup;
- ChannelGroup = Next(ChannelGroup);
+ while (ChannelGroup) {
+ if (strcmp(channelGroup, ChannelGroup->name) == 0)
+ return ChannelGroup;
+ ChannelGroup = Next(ChannelGroup);
}
return NULL;
}
@@ -227,32 +213,30 @@ cChannelGroup* cChannelGroups::GetGroupByName(const char* channelGroup)
cSearchExt* cChannelGroups::Used(cChannelGroup* group)
{
if (!group)
- return NULL;
+ return NULL;
if (SearchExts.Count() == 0)
- SearchExts.Load(AddDirectory(CONFIGDIR, "epgsearch.conf"));
+ SearchExts.Load(AddDirectory(CONFIGDIR, "epgsearch.conf"));
cMutexLock SearchExtsLock(&SearchExts);
cSearchExt *SearchExt = SearchExts.First();
- while (SearchExt)
- {
- if (SearchExt->useChannel == 2 && strcmp(SearchExt->channelGroup, group->name) == 0)
- return SearchExt;
- SearchExt = SearchExts.Next(SearchExt);
+ while (SearchExt) {
+ if (SearchExt->useChannel == 2 && strcmp(SearchExt->channelGroup, group->name) == 0)
+ return SearchExt;
+ SearchExt = SearchExts.Next(SearchExt);
}
return NULL;
}
char** cChannelGroups::CreateMenuitemsList()
{
- char** menuitemsChGr = new char*[ChannelGroups.Count()+1];
+ char** menuitemsChGr = new char*[ChannelGroups.Count() + 1];
cChannelGroup* ChannelGroup = First();
menuitemsChGr[0] = strdup("");
int index = 1;
- while (ChannelGroup)
- {
- menuitemsChGr[index++] = ChannelGroup->name;
- ChannelGroup = Next(ChannelGroup);
+ while (ChannelGroup) {
+ menuitemsChGr[index++] = ChannelGroup->name;
+ ChannelGroup = Next(ChannelGroup);
}
return menuitemsChGr;
}
@@ -270,63 +254,59 @@ void cMenuChannelGroupItem::Set(void)
cChannelGroupItem* channelInGroup = group->channels.First();
int channelNr, chIntBegin = -1, chIntEnd = -1, chLast = -1;
- while (channelInGroup)
- {
- channelNr = channelInGroup->channel->Number();
- if (chIntBegin == -1)
- chIntBegin = channelNr;
- if (chIntEnd == -1)
- chIntEnd = channelNr;
-
- if (chLast == channelNr-1)
- chIntEnd = channelNr;
- else
- {
- chIntEnd = chLast;
- if(chIntBegin == chIntEnd)
- channelbuffer = cString::sprintf("%s %d", *channelbuffer?*channelbuffer:"", chIntBegin);
- else if (chIntEnd != -1)
- channelbuffer = cString::sprintf("%s %d-%d", *channelbuffer?*channelbuffer:"", chIntBegin, chIntEnd);
- chIntBegin = chIntEnd = channelNr;
- }
-
- chLast = channelNr;
- channelInGroup = group->channels.Next(channelInGroup);
- if (!channelInGroup)
- {
- if(chLast == chIntBegin)
- channelbuffer = cString::sprintf("%s %d", *channelbuffer?*channelbuffer:"", chIntBegin);
- else
- channelbuffer = cString::sprintf("%s %d-%d", *channelbuffer?*channelbuffer:"", chIntBegin, chLast);
- }
+ while (channelInGroup) {
+ channelNr = channelInGroup->channel->Number();
+ if (chIntBegin == -1)
+ chIntBegin = channelNr;
+ if (chIntEnd == -1)
+ chIntEnd = channelNr;
+
+ if (chLast == channelNr - 1)
+ chIntEnd = channelNr;
+ else {
+ chIntEnd = chLast;
+ if (chIntBegin == chIntEnd)
+ channelbuffer = cString::sprintf("%s %d", *channelbuffer ? *channelbuffer : "", chIntBegin);
+ else if (chIntEnd != -1)
+ channelbuffer = cString::sprintf("%s %d-%d", *channelbuffer ? *channelbuffer : "", chIntBegin, chIntEnd);
+ chIntBegin = chIntEnd = channelNr;
+ }
+
+ chLast = channelNr;
+ channelInGroup = group->channels.Next(channelInGroup);
+ if (!channelInGroup) {
+ if (chLast == chIntBegin)
+ channelbuffer = cString::sprintf("%s %d", *channelbuffer ? *channelbuffer : "", chIntBegin);
+ else
+ channelbuffer = cString::sprintf("%s %d-%d", *channelbuffer ? *channelbuffer : "", chIntBegin, chLast);
+ }
}
- SetText(cString::sprintf("%s\t%s", group->name, *channelbuffer?*channelbuffer:""));
+ SetText(cString::sprintf("%s\t%s", group->name, *channelbuffer ? *channelbuffer : ""));
}
// --- cMenuChannelGroups ----------------------------------------------------------
cMenuChannelGroups::cMenuChannelGroups(char** GroupName)
-:cOsdMenu(tr("Channel groups"),20)
+ : cOsdMenu(tr("Channel groups"), 20)
{
- SetMenuCategory(mcSetupPlugins);
+ SetMenuCategory(mcSetupPlugins);
groupSel = -1;
groupName = GroupName;
if (groupName && *groupName)
- groupSel = ChannelGroups.GetIndex(*groupName);
+ groupSel = ChannelGroups.GetIndex(*groupName);
cChannelGroup* ChannelGroup = ChannelGroups.First();
int index = 0;
- while (ChannelGroup)
- {
- Add(new cMenuChannelGroupItem(ChannelGroup), (index == groupSel?true:false));
- ChannelGroup = ChannelGroups.Next(ChannelGroup);
- index++;
+ while (ChannelGroup) {
+ Add(new cMenuChannelGroupItem(ChannelGroup), (index == groupSel ? true : false));
+ ChannelGroup = ChannelGroups.Next(ChannelGroup);
+ index++;
}
if (groupName && *groupName)
- SetHelp(trVDR("Button$Edit"), trVDR("Button$New"), trVDR("Button$Delete"), tr("Button$Select"));
+ SetHelp(trVDR("Button$Edit"), trVDR("Button$New"), trVDR("Button$Delete"), tr("Button$Select"));
else
- SetHelp(trVDR("Button$Edit"), trVDR("Button$New"), trVDR("Button$Delete"), NULL);
+ SetHelp(trVDR("Button$Edit"), trVDR("Button$New"), trVDR("Button$Delete"), NULL);
Sort();
Display();
}
@@ -340,29 +320,28 @@ cChannelGroup *cMenuChannelGroups::CurrentGroup(void)
eOSState cMenuChannelGroups::New(void)
{
if (HasSubMenu())
- return osContinue;
+ return osContinue;
return AddSubMenu(new cMenuEditChannelGroup(new cChannelGroup, true));
}
eOSState cMenuChannelGroups::Delete(void)
{
- cChannelGroup *curGroup = CurrentGroup();
- if (curGroup) {
- cSearchExt* search = ChannelGroups.Used(curGroup);
- if (search)
- {
- cString Message = cString::sprintf("%s %s", tr("Channel group used by:"), search->search);
- INFO(Message);
- return osContinue;
- }
- if (Interface->Confirm(tr("Edit$Delete group?"))) {
- ChannelGroups.Del(curGroup);
- ChannelGroups.Save();
- cOsdMenu::Del(Current());
- Display();
- }
- }
- return osContinue;
+ cChannelGroup *curGroup = CurrentGroup();
+ if (curGroup) {
+ cSearchExt* search = ChannelGroups.Used(curGroup);
+ if (search) {
+ cString Message = cString::sprintf("%s %s", tr("Channel group used by:"), search->search);
+ INFO(Message);
+ return osContinue;
+ }
+ if (Interface->Confirm(tr("Edit$Delete group?"))) {
+ ChannelGroups.Del(curGroup);
+ ChannelGroups.Save();
+ cOsdMenu::Del(Current());
+ Display();
+ }
+ }
+ return osContinue;
}
eOSState cMenuChannelGroups::ProcessKey(eKeys Key)
@@ -370,38 +349,39 @@ eOSState cMenuChannelGroups::ProcessKey(eKeys Key)
int GroupNumber = HasSubMenu() ? Count() : -1;
eOSState state = cOsdMenu::ProcessKey(Key);
- if (state == osUnknown)
- {
- if (HasSubMenu())
- return osContinue;
- switch (Key)
- {
- case kRed:
- if (CurrentGroup())
- state = AddSubMenu(new cMenuEditChannelGroup(CurrentGroup()));
- else
- state = osContinue;
- break;
- case kGreen: state = New(); break;
- case kYellow: state = Delete(); break;
-
- case kOk:
- case kBlue:
- if (groupName && *groupName)
- {
- free(*groupName);
- *groupName = strdup(CurrentGroup()->name);
- return osBack;
- }
- default: break;
- }
+ if (state == osUnknown) {
+ if (HasSubMenu())
+ return osContinue;
+ switch (Key) {
+ case kRed:
+ if (CurrentGroup())
+ state = AddSubMenu(new cMenuEditChannelGroup(CurrentGroup()));
+ else
+ state = osContinue;
+ break;
+ case kGreen:
+ state = New();
+ break;
+ case kYellow:
+ state = Delete();
+ break;
+
+ case kOk:
+ case kBlue:
+ if (groupName && *groupName) {
+ free(*groupName);
+ *groupName = strdup(CurrentGroup()->name);
+ return osBack;
+ }
+ default:
+ break;
+ }
}
- if (GroupNumber >= 0 && !HasSubMenu() && ChannelGroups.Get(GroupNumber))
- {
- // a newly created group was confirmed with Ok
- cChannelGroup* group = ChannelGroups.Get(GroupNumber);
- Add(new cMenuChannelGroupItem(group), true);
- Display();
+ if (GroupNumber >= 0 && !HasSubMenu() && ChannelGroups.Get(GroupNumber)) {
+ // a newly created group was confirmed with Ok
+ cChannelGroup* group = ChannelGroups.Get(GroupNumber);
+ Add(new cMenuChannelGroupItem(group), true);
+ Display();
}
return state;
@@ -409,15 +389,15 @@ eOSState cMenuChannelGroups::ProcessKey(eKeys Key)
// --- cMenuEditChannelGroup --------------------------------------------------------
cMenuEditChannelGroup::cMenuEditChannelGroup(cChannelGroup *Group, bool New)
-:cOsdMenu(tr("Edit channel group"),30)
+ : cOsdMenu(tr("Edit channel group"), 30)
{
- SetMenuCategory(mcSetupPlugins);
+ SetMenuCategory(mcSetupPlugins);
group = Group;
channelSel = group->CreateChannelSel();
strcpy(name, group->name);
addIfConfirmed = New;
if (group)
- Set();
+ Set();
}
cMenuEditChannelGroup::~cMenuEditChannelGroup()
@@ -430,19 +410,17 @@ void cMenuEditChannelGroup::Set()
int current = Current();
Clear();
- Add(new cMenuEditStrItem( tr("Group name"), name, sizeof(group->name), trVDR(FileNameChars)));
+ Add(new cMenuEditStrItem(tr("Group name"), name, sizeof(group->name), trVDR(FileNameChars)));
LOCK_CHANNELS_READ; // TODO THIS MAY LOCK Channels A LONG TIME!
const cChannel* channel = Channels->First();
int index = 0;
- while (channel)
- {
- if (channel->GroupSep())
- {
- channel = Channels->Next(channel);
- continue;
- }
- Add(new cMenuEditBoolItem( CHANNELNAME(channel), &channelSel[index++], trVDR("no"), trVDR("yes")));
- channel = Channels->Next(channel);
+ while (channel) {
+ if (channel->GroupSep()) {
+ channel = Channels->Next(channel);
+ continue;
+ }
+ Add(new cMenuEditBoolItem(CHANNELNAME(channel), &channelSel[index++], trVDR("no"), trVDR("yes")));
+ channel = Channels->Next(channel);
}
SetCurrent(Get(current));
@@ -451,84 +429,78 @@ void cMenuEditChannelGroup::Set()
eOSState cMenuEditChannelGroup::ProcessKey(eKeys Key)
{
- eOSState state = cOsdMenu::ProcessKey(Key);
-
- const char* ItemText = Get(Current())->Text();
- if (strlen(ItemText) > 0 && strstr(ItemText, tr("Group name")) != ItemText)
- SetHelp(tr("Button$Invert selection"), tr("Button$All yes"), tr("Button$All no"), NULL);
- else if (!InEditMode(ItemText, tr("Group name"), name))
- SetHelp(NULL, NULL, NULL, NULL);
-
- if (state == osUnknown) {
- switch (Key) {
- case kOk:
- if (strlen(name) == 0)
- {
- ERROR(tr("Group name is empty!"));
- return osContinue;
- }
- if (addIfConfirmed && ChannelGroups.GetGroupByName(name))
- {
- ERROR(tr("Group name already exists!"));
- return osContinue;
- }
-
- {
- bool saveSearchExts = false;
- if (strcmp(group->name, name) != 0 && !addIfConfirmed) // if group name changed, update searches
- {
- cMutexLock SearchExtsLock(&SearchExts);
- cSearchExt *SearchExt = SearchExts.First();
- while (SearchExt) {
- if (SearchExt->useChannel == 2 &&
- SearchExt->channelGroup &&
- strcmp(SearchExt->channelGroup, group->name) == 0)
- {
- free(SearchExt->channelGroup);
- SearchExt->channelGroup = strdup(name);
- }
- SearchExt = SearchExts.Next(SearchExt);
- }
- saveSearchExts = true; // save them after groups are saved!
- }
-
- strcpy(group->name, name);
- group->CreateChannelList(channelSel);
- if (addIfConfirmed)
- ChannelGroups.Add(group);
- ChannelGroups.Save();
- if (saveSearchExts)
- SearchExts.Save();
- }
- addIfConfirmed = false;
- return osBack;
- break;
- case kRed:
- case kGreen:
- case kYellow:
- {
- LOCK_CHANNELS_READ;
- const cChannel* channel = Channels->First();
- int index = 0;
- while (channel)
- {
- if (channel->GroupSep())
- {
- channel = Channels->Next(channel);
- continue;
- }
-
- channelSel[index] = (Key == kGreen?1:(Key == kRed?1-channelSel[index]:0));
- index++;
- channel = Channels->Next(channel);
- }
- Set();
- Display();
- return osContinue;
- }
-
- default: break;
- }
- }
- return state;
+ eOSState state = cOsdMenu::ProcessKey(Key);
+
+ const char* ItemText = Get(Current())->Text();
+ if (strlen(ItemText) > 0 && strstr(ItemText, tr("Group name")) != ItemText)
+ SetHelp(tr("Button$Invert selection"), tr("Button$All yes"), tr("Button$All no"), NULL);
+ else if (!InEditMode(ItemText, tr("Group name"), name))
+ SetHelp(NULL, NULL, NULL, NULL);
+
+ if (state == osUnknown) {
+ switch (Key) {
+ case kOk:
+ if (strlen(name) == 0) {
+ ERROR(tr("Group name is empty!"));
+ return osContinue;
+ }
+ if (addIfConfirmed && ChannelGroups.GetGroupByName(name)) {
+ ERROR(tr("Group name already exists!"));
+ return osContinue;
+ }
+
+ {
+ bool saveSearchExts = false;
+ if (strcmp(group->name, name) != 0 && !addIfConfirmed) { // if group name changed, update searches
+ cMutexLock SearchExtsLock(&SearchExts);
+ cSearchExt *SearchExt = SearchExts.First();
+ while (SearchExt) {
+ if (SearchExt->useChannel == 2 &&
+ SearchExt->channelGroup &&
+ strcmp(SearchExt->channelGroup, group->name) == 0) {
+ free(SearchExt->channelGroup);
+ SearchExt->channelGroup = strdup(name);
+ }
+ SearchExt = SearchExts.Next(SearchExt);
+ }
+ saveSearchExts = true; // save them after groups are saved!
+ }
+
+ strcpy(group->name, name);
+ group->CreateChannelList(channelSel);
+ if (addIfConfirmed)
+ ChannelGroups.Add(group);
+ ChannelGroups.Save();
+ if (saveSearchExts)
+ SearchExts.Save();
+ }
+ addIfConfirmed = false;
+ return osBack;
+ break;
+ case kRed:
+ case kGreen:
+ case kYellow: {
+ LOCK_CHANNELS_READ;
+ const cChannel* channel = Channels->First();
+ int index = 0;
+ while (channel) {
+ if (channel->GroupSep()) {
+ channel = Channels->Next(channel);
+ continue;
+ }
+
+ channelSel[index] = (Key == kGreen ? 1 : (Key == kRed ? 1 - channelSel[index] : 0));
+ index++;
+ channel = Channels->Next(channel);
+ }
+ Set();
+ Display();
+ return osContinue;
+ }
+
+ default:
+ break;
+ }
+ }
+ return state;
}