Пример #1
0
        private void Control_Click(object sender, EventArgs e)
        {
            this.Focus();
            int index = Controls.IndexOf((Control)sender);

            if (index == m_Selected && ToggleSelection)
            {
                index = -1;
            }
            SelectedIndex = index;
            UserSelected?.Invoke(this, EventArgs.Empty);
        }
Пример #2
0
        private void SelectionPanel_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
            case Keys.Left:
            case Keys.Up:
                if (m_Selected == -1)
                {
                    SelectedIndex = Controls.Count - 1;
                    UserSelected?.Invoke(this, EventArgs.Empty);
                }
                else if (m_Selected > 0)
                {
                    int newSelection = m_Selected - 1;
                    while (newSelection > 0 && Controls[m_Selected].Visible == false)
                    {
                        newSelection -= 1;
                    }
                    if (Controls[newSelection].Visible == false)
                    {
                        return;                                 // failed to find any visible control in this direction
                    }
                    SelectedIndex = newSelection;
                    UserSelected?.Invoke(this, EventArgs.Empty);
                    // If m_Selected = 0 then no change
                }
                break;

            case Keys.Right:
            case Keys.Down:
                if (m_Selected == -1)
                {
                    SelectedIndex = 0;
                    UserSelected?.Invoke(this, EventArgs.Empty);
                }
                else if (m_Selected < Controls.Count - 1)
                {
                    int newSelection = m_Selected + 1;
                    while (newSelection < Controls.Count - 1 && Controls[newSelection].Visible == false)
                    {
                        newSelection += 1;
                    }
                    if (Controls[newSelection].Visible == false)
                    {
                        return;                                 // failed to find any visible control in this direction
                    }
                    SelectedIndex = newSelection;
                    UserSelected?.Invoke(this, EventArgs.Empty);
                }
                break;
            }
        }
Пример #3
0
        private void TimerProc(object state)
        {
            // The state object is the Timer object.
            Timer t = (Timer)state;

            t.Dispose();
            Console.WriteLine("The timer callback executes.");

            //-----------------------------------------
            // INVOKE A EVENT
            //-----------------------------------------
            UserSelected?.Invoke(this, "User1");
        }
Пример #4
0
        private void SurfaceOnMouseLeftButtonDown(object sender, MouseEventArgs e)
        {
            _mouseDownPosition = e.GetPosition(null);
            _mouseMoved        = false;

            var time = DateTime.UtcNow.TimeOfDay;

            if ((time - _lastMouseDownTime).TotalMilliseconds < DoubleClickDelay)
            {
                _mouseMoved = true;

                var surface = (FrameworkElement)sender;
                var point   = e.GetPosition(surface);

                var origin = _position + new Vector2(
                    (float)((point.X / surface.ActualWidth * 2 - 1) / _scale * Aspect),
                    (float)((1 - point.Y / surface.ActualHeight * 2) / _scale))
                             .Rotate(-_rotation);

                var minDistance = float.PositiveInfinity;
                _selectedUserId = -1;
                var nodes = _nodesBuffer.GetData();
                for (var i = 0; i < _users.Length; i++)
                {
                    var distance = (nodes[i].Position - origin).Length();
                    if (distance < PhotoRadius && distance < minDistance)
                    {
                        minDistance     = distance;
                        _selectedUserId = i;
                    }
                }

                if (_selectedUserId != -1)
                {
                    var user = _users[_selectedUserId].Model;
                    UserSelected?.Invoke(user);
                    UserNavigated?.Invoke(user);
                }
            }
            _lastMouseDownTime = time;
        }
Пример #5
0
 private void ResultUser_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 {
     UserSelected?.Invoke(null, ((ResultUser)sender).Mid);
 }
Пример #6
0
        private void SurfaceOnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            if (_mouseMoved)
            {
                return;
            }

            var surface = (FrameworkElement)sender;
            var point   = e.GetPosition(surface);

            var origin = _position + new Vector2(
                (float)((point.X / surface.ActualWidth * 2 - 1) / _scale * Aspect),
                (float)((1 - point.Y / surface.ActualHeight * 2) / _scale))
                         .Rotate(-_rotation);

            var prevSelectedId = _selectedUserId;

            var minDistance = float.PositiveInfinity;

            _selectedUserId = -1;
            var nodes = _nodesBuffer.GetData();

            for (var i = 0; i < _users.Length; i++)
            {
                var distance = (nodes[i].Position - origin).Length();
                if (distance < PhotoRadius && distance < minDistance)
                {
                    minDistance     = distance;
                    _selectedUserId = i;
                }
            }

            if (prevSelectedId == _selectedUserId)
            {
                return;
            }

            for (var i = 0; i < _users.Length; i++)
            {
                nodes[i].Width = 1f;
            }

            _selectedEdgesBuffer?.Dispose();
            _selectedEdgesBuffer = null;

            if (_selectedUserId != -1)
            {
                nodes[_selectedUserId].Width = SelectedPhotoWidth;
                foreach (var friend in _users[_selectedUserId].AllFriends)
                {
                    nodes[friend].Width = SelectedFriendsPhotoWidth;
                }

                var edges = _users[_selectedUserId].AllFriends.Select(i => new EdgeVertex(_selectedUserId, i)).ToArray();
                if (edges.Length != 0)
                {
                    _selectedEdgesBuffer = Buffer.Structured.New(GraphicsDevice, edges);
                }

                UserSelected?.Invoke(_users[_selectedUserId].Model);
            }

            _nodesBuffer.SetData(nodes);
            _newNodesBuffer.SetData(nodes);
        }