public InterruptManagerViewModel(IGameBoy gameBoy, IDispatcher dispatcher) { _dispatcher = dispatcher; _gameBoy = gameBoy; //_gameBoy.FrameCompleted += OnFrameCompleted; InterruptList.Add(new InterruptViewModel("Vertical Blank", Interrupts.VerticalBlanking, _gameBoy)); InterruptList.Add(new InterruptViewModel("Timer Overflow", Interrupts.TimerOverflow, _gameBoy)); InterruptList.Add(new InterruptViewModel("LCD Status", Interrupts.LCDCStatus, _gameBoy)); InterruptList.Add(new InterruptViewModel("Button Pressed", Interrupts.P10to13TerminalNegativeEdge, _gameBoy)); InterruptList.Add(new InterruptViewModel("Serial Transfer Completed", Interrupts.SerialIOTransferCompleted, _gameBoy)); }
private void InterruptList_MouseMove(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { // If the mouse moves outside the rectangle, start the drag. if (dragBoxFromMouseDown != null && dragBoxFromMouseDown != Rectangle.Empty && !dragBoxFromMouseDown.Contains(e.X, e.Y)) { // Proceed with the drag and drop, passing in the list item. DragDropEffects dropEffect = InterruptList.DoDragDrop( InterruptList.Items[rowIndexFromMouseDown], DragDropEffects.Move); } } }
private void InterruptList_DragDrop(object sender, DragEventArgs e) { // グリッド内のD&Dなら並び替えをする // The mouse locations are relative to the screen, so they must be // converted to client coordinates. Point clientPoint = InterruptList.PointToClient(new Point(e.X, e.Y)); // Get the row index of the item the mouse is below. int rowIndexOfItemUnderMouseToDrop = InterruptList.IndexFromPoint(new Point(clientPoint.X, clientPoint.Y)); // If the drag operation was a move then remove and insert the row. if (e.Effect == DragDropEffects.Move && rowIndexOfItemUnderMouseToDrop != -1) { int i = 0; int k = 0; object work; if (rowIndexFromMouseDown < rowIndexOfItemUnderMouseToDrop) { while (i < InterruptList.Items.Count) { if (InterruptList.GetSelected(i) == true) { work = InterruptList.Items[i - k]; InterruptList.Items[i - k] = InterruptList.Items[rowIndexOfItemUnderMouseToDrop]; InterruptList.Items[rowIndexOfItemUnderMouseToDrop] = work; k++; } i++; } } else { i = InterruptList.Items.Count - 1; k = 0; while (i > 0) { if (InterruptList.GetSelected(i) == true) { work = InterruptList.Items[i + k]; InterruptList.Items[i + k] = InterruptList.Items[rowIndexOfItemUnderMouseToDrop]; InterruptList.Items[rowIndexOfItemUnderMouseToDrop] = work; k++; } i--; } } } }
private void InterruptList_MouseDown(object sender, MouseEventArgs e) { // Get the index of the item the mouse is below. rowIndexFromMouseDown = InterruptList.IndexFromPoint(new Point(e.X, e.Y)); if (rowIndexFromMouseDown != -1) { // Remember the point where the mouse down occurred. // The DragSize indicates the size that the mouse can move // before a drag event should be started. Size dragSize = SystemInformation.DragSize; // Create a rectangle using the DragSize, with the mouse position being // at the center of the rectangle. dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2), e.Y - (dragSize.Height / 2)), dragSize); } else { // Reset the rectangle if the mouse is not over an item in the ListBox. dragBoxFromMouseDown = Rectangle.Empty; } }