internal Group DeserialiseGroup(group grp, int id) { if (grp == null) return null; var ret = new Group { Id = (byte)id, Name = grp.name, Background = grp.background == null ? null : Path.Combine(directory, grp.background), BackgroundStyle = grp.backgroundStyle.ToString(), Collapsed = bool.Parse(grp.collapsed.ToString()), Height = Int32.Parse(grp.height), Width = Int32.Parse(grp.width), Icon = grp.icon == null ? null : Path.Combine(directory, grp.icon), Ordered = bool.Parse(grp.ordered.ToString()), Shortcut = grp.shortcut, MoveTo = bool.Parse(grp.moveto.ToString()), CardActions = new List<IGroupAction>(), GroupActions = new List<IGroupAction>() }; if (ret.Width == 0) { ret.Width = 1; } if (ret.Height == 0) { ret.Height = 1; } if (grp.Items != null) { foreach (var item in grp.Items) { if (item is action) { var i = item as action; var to = new GroupAction { Name = i.menu, Shortcut = i.shortcut, ShowIf = i.showIf, BatchExecute = i.batchExecute, Execute = i.execute, DefaultAction = bool.Parse([email protected]()) }; if (item is cardAction) { to.IsGroup = false; (ret.CardActions as List<IGroupAction>).Add(to); } else if (item is groupAction) { to.IsGroup = true; (ret.GroupActions as List<IGroupAction>).Add(to); } } else if (item is actionSubmenu) { var i = item as actionSubmenu; var to = new GroupActionGroup { Children = new List<IGroupAction>(), Name = i.menu, ShowIf = i.showIf, }; if (item is cardActionSubmenu) { to.IsGroup = false; to.Children = this.DeserializeGroupActionGroup(i, false); (ret.CardActions as List<IGroupAction>).Add(to); } else if (item is groupActionSubmenu) { to.IsGroup = true; to.Children = this.DeserializeGroupActionGroup(i, true); (ret.GroupActions as List<IGroupAction>).Add(to); } } else if (item is actionSeparator) { var separator = new GroupActionSeparator { ShowIf = item.showIf, }; if (item is groupActionSeparator) { separator.IsGroup = true; (ret.GroupActions as List<IGroupAction>).Add(separator); } else if (item is cardActionSeparator) { separator.IsGroup = false; (ret.CardActions as List<IGroupAction>).Add(separator); } } } } switch (grp.visibility) { case groupVisibility.none: ret.Visibility = GroupVisibility.Nobody; break; case groupVisibility.me: ret.Visibility = GroupVisibility.Owner; break; case groupVisibility.all: ret.Visibility = GroupVisibility.Everybody; break; case groupVisibility.undefined: ret.Visibility = GroupVisibility.Undefined; break; default: throw new ArgumentOutOfRangeException(); } return ret; }
internal IEnumerable<IGroupAction> DeserializeGroupActionGroup(actionSubmenu actiongroup, bool isGroup) { var ret = new List<IGroupAction>(); foreach (var item in actiongroup.Items) { if (item is action) { var i = item as action; var add = new GroupAction { Name = i.menu, Shortcut = i.shortcut, Execute = i.execute, BatchExecute = i.batchExecute, ShowExecute = i.showIf, HeaderExecute = i.getName, DefaultAction = bool.Parse([email protected]()) }; add.IsGroup = isGroup; ret.Add(add); } if (item is actionSubmenu) { var i = item as actionSubmenu; var addgroup = new GroupActionGroup { Children = new List<IGroupAction>(), Name = i.menu, IsGroup = isGroup, ShowExecute = i.showIf, HeaderExecute = i.getName }; addgroup.Children = this.DeserializeGroupActionGroup(i, isGroup); ret.Add(addgroup); } if (item is actionSeparator) { var i = item as actionSeparator; var add = new GroupActionSeparator(); add.IsGroup = isGroup; add.ShowExecute = i.showIf; ret.Add(add); } } return ret; }