void roomStripControl_AddRoomToZoneSink(RaumfeldNET.WPFControls.RoomStripControl _roomStripControl, RoutedEventArgs e)
        {
            Room room = rfController.zoneManager.getRoom(_roomStripControl.RoomId);

            if (room != null)
            {
                this.showAvailableZonesPopup(_roomStripControl, room.zoneUDN);
            }
        }
        protected void menuItemRoomAdd_ClickSink(object sender, RoutedEventArgs e)
        {
            ;
            MenuItem menuItem      = (MenuItem)sender;
            Zone     zoneToAddRoom = (Zone)menuItem.DataContext;

            RaumfeldNET.WPFControls.RoomStripControl roomStripControl = (RaumfeldNET.WPFControls.RoomStripControl)menuItem.Tag;
            Room roomInfo = (Room)roomStripControl.DataContext;

            if (zoneToAddRoom.uuid == "REMOVE")
            {
                rfController.zoneManager.dropRoomFromZone(roomInfo.udn);
            }
            else if (zoneToAddRoom.uuid == "NEW")
            {
                rfController.zoneManager.connectRoomToZone(roomStripControl.RoomId, "");
            }
            else
            {
                rfController.zoneManager.connectRoomToZone(roomStripControl.RoomId, zoneToAddRoom.udn);
            }

            this.setZoneDataOnUpdate(true);
        }
        public void updateZoneControls()
        {
            List<Zone> zoneList = rfController.zoneManager.getZones();
            List<Room> roomList = rfController.zoneManager.getRooms();
            Zone zone;
            Room room;

            lock (zoneList)
            {

                // remove all prior added controls
                FlyoutZonesDockPanel.Children.RemoveRange(0, 1000);
                FlyoutUnassignedRoomsDockPanel.Children.RemoveRange(0, 1000);

                // add zone tiles
                for (int i = 0; i < zoneList.Count; i++)
                {
                    zone = (Zone)zoneList[i];
                    RaumfeldNET.WPFControls.ZoneTileControl zoneTileControl = new RaumfeldNET.WPFControls.ZoneTileControl();

                    zoneTileControl.Title = zone.name;
                    zoneTileControl.DataContext = zone.udn;
                    zoneTileControl.Background = this.Resources["AccentColorBrush"] as SolidColorBrush;

                    zoneTileControl.selected +=zoneTileControl_selectedSink;
                    zoneTileControl.roomRemoveAddButtonClicked +=zoneTileControl_MoveRemoveRoomSink;

                    foreach (var roomUdn in zone.roomUDNs)
                    {
                        room = rfController.zoneManager.getRoom(roomUdn);
                        if (room!=null)
                            zoneTileControl.AddRoomControl(room);
                    }

                    DockPanel.SetDock(zoneTileControl, Dock.Bottom);
                    FlyoutZonesDockPanel.Children.Add(zoneTileControl);

                    // reselect selected zone, if no zone was selected we select the first one his will be doen outside the for loop
                    if (!String.IsNullOrWhiteSpace(currentSelectedZoneUDN) && currentSelectedZoneUDN == zone.udn)
                        this.zoneSelected(currentSelectedZoneUDN);
                }

                // add unnasigned room tiles
                for (int i = 0; i < roomList.Count; i++)
                {
                    room = (Room)roomList[i];
                    if (String.IsNullOrWhiteSpace(room.zoneUDN))
                    {
                        RaumfeldNET.WPFControls.RoomStripControl roomStripControl = new RaumfeldNET.WPFControls.RoomStripControl();
                        roomStripControl.RoomId = room.udn;
                        roomStripControl.RoomName = room.name;
                        roomStripControl.RoomColor = (Color)ColorConverter.ConvertFromString(room.color);
                        roomStripControl.DataContext = room;

                        roomStripControl.removeAddButtonClicked += roomStripControl_AddRoomToZoneSink;

                        DockPanel.SetDock(roomStripControl, Dock.Bottom);
                        FlyoutUnassignedRoomsDockPanel.Children.Add(roomStripControl);
                    }
                }
            }

            // old selected list was not found, or its the first startup, so select first zone as selected zone!
            if (String.IsNullOrWhiteSpace(currentSelectedZoneUDN) && zoneList.Count > 0)
            {
                currentSelectedZoneUDN = zoneList[0].udn;
                this.zoneSelected(currentSelectedZoneUDN);
            }
        }
        public void updateZoneControls()
        {
            List <Zone> zoneList = rfController.zoneManager.getZones();
            List <Room> roomList = rfController.zoneManager.getRooms();
            Zone        zone;
            Room        room;

            lock (zoneList)
            {
                // remove all prior added controls
                FlyoutZonesDockPanel.Children.RemoveRange(0, 1000);
                FlyoutUnassignedRoomsDockPanel.Children.RemoveRange(0, 1000);

                // add zone tiles
                for (int i = 0; i < zoneList.Count; i++)
                {
                    zone = (Zone)zoneList[i];
                    RaumfeldNET.WPFControls.ZoneTileControl zoneTileControl = new RaumfeldNET.WPFControls.ZoneTileControl();

                    zoneTileControl.Title       = zone.name;
                    zoneTileControl.DataContext = zone.udn;
                    zoneTileControl.Background  = this.Resources["AccentColorBrush"] as SolidColorBrush;

                    zoneTileControl.selected += zoneTileControl_selectedSink;
                    zoneTileControl.roomRemoveAddButtonClicked += zoneTileControl_MoveRemoveRoomSink;

                    foreach (var roomUdn in zone.roomUDNs)
                    {
                        room = rfController.zoneManager.getRoom(roomUdn);
                        if (room != null)
                        {
                            zoneTileControl.AddRoomControl(room);
                        }
                    }

                    DockPanel.SetDock(zoneTileControl, Dock.Bottom);
                    FlyoutZonesDockPanel.Children.Add(zoneTileControl);

                    // reselect selected zone, if no zone was selected we select the first one his will be doen outside the for loop
                    if (!String.IsNullOrWhiteSpace(currentSelectedZoneUDN) && currentSelectedZoneUDN == zone.udn)
                    {
                        this.zoneSelected(currentSelectedZoneUDN);
                    }
                }

                // add unnasigned room tiles
                for (int i = 0; i < roomList.Count; i++)
                {
                    room = (Room)roomList[i];
                    if (String.IsNullOrWhiteSpace(room.zoneUDN))
                    {
                        RaumfeldNET.WPFControls.RoomStripControl roomStripControl = new RaumfeldNET.WPFControls.RoomStripControl();
                        roomStripControl.RoomId      = room.udn;
                        roomStripControl.RoomName    = room.name;
                        roomStripControl.RoomColor   = (Color)ColorConverter.ConvertFromString(room.color);
                        roomStripControl.DataContext = room;

                        roomStripControl.removeAddButtonClicked += roomStripControl_AddRoomToZoneSink;

                        DockPanel.SetDock(roomStripControl, Dock.Bottom);
                        FlyoutUnassignedRoomsDockPanel.Children.Add(roomStripControl);
                    }
                }
            }

            // old selected list was not found, or its the first startup, so select first zone as selected zone!
            if (String.IsNullOrWhiteSpace(currentSelectedZoneUDN) && zoneList.Count > 0)
            {
                currentSelectedZoneUDN = zoneList[0].udn;
                this.zoneSelected(currentSelectedZoneUDN);
            }
        }