ICSharpCode.TextEditor.GutterMargin.HandleMouseDown C# (CSharp) Метод

HandleMouseDown() публичный Метод

public HandleMouseDown ( Point mousepos, MouseButtons mouseButtons ) : void
mousepos Point
mouseButtons MouseButtons
Результат void
		public override void HandleMouseDown(Point mousepos, MouseButtons mouseButtons)
		{
			TextLocation selectionStartPos;

			textArea.SelectionManager.selectFrom.where = WhereFrom.Gutter;
			int realline = textArea.TextView.GetLogicalLine(mousepos.Y);
			if (realline >= 0 && realline < textArea.Document.TotalNumberOfLines) {
				// shift-select
				if((Control.ModifierKeys & Keys.Shift) != 0) {
					if(!textArea.SelectionManager.HasSomethingSelected && realline != textArea.Caret.Position.Y) {
						if (realline >= textArea.Caret.Position.Y)
						{ // at or below starting selection, place the cursor on the next line
							// nothing is selected so make a new selection from cursor
							selectionStartPos = textArea.Caret.Position;
							// whole line selection - start of line to start of next line
							if (realline < textArea.Document.TotalNumberOfLines - 1)
							{
								textArea.SelectionManager.SetSelection(new DefaultSelection(textArea.Document, selectionStartPos, new TextLocation(0, realline + 1)));
								textArea.Caret.Position = new TextLocation(0, realline + 1);
							}
							else
							{
								textArea.SelectionManager.SetSelection(new DefaultSelection(textArea.Document, selectionStartPos, new TextLocation(textArea.Document.GetLineSegment(realline).Length + 1, realline)));
								textArea.Caret.Position = new TextLocation(textArea.Document.GetLineSegment(realline).Length + 1, realline);
							}
						}
						else
						{ // prior lines to starting selection, place the cursor on the same line as the new selection
							// nothing is selected so make a new selection from cursor
							selectionStartPos = textArea.Caret.Position;
							// whole line selection - start of line to start of next line
							textArea.SelectionManager.SetSelection(new DefaultSelection(textArea.Document, selectionStartPos, new TextLocation(selectionStartPos.X, selectionStartPos.Y)));
							textArea.SelectionManager.ExtendSelection(new TextLocation(selectionStartPos.X, selectionStartPos.Y), new TextLocation(0, realline));
							textArea.Caret.Position = new TextLocation(0, realline);
						}
					}
					else
					{
						// let MouseMove handle a shift-click in a gutter
						MouseEventArgs e = new MouseEventArgs(mouseButtons, 1, mousepos.X, mousepos.Y, 0);
						textArea.RaiseMouseMove(e);
					}
				} else { // this is a new selection with no shift-key
					// sync the textareamousehandler mouse location
					// (fixes problem with clicking out into a menu then back to the gutter whilst
					// there is a selection)
					textArea.mousepos = mousepos;

					selectionStartPos = new TextLocation(0, realline);
					textArea.SelectionManager.ClearSelection();
					// whole line selection - start of line to start of next line
					if (realline < textArea.Document.TotalNumberOfLines - 1)
					{
						textArea.SelectionManager.SetSelection(new DefaultSelection(textArea.Document, selectionStartPos, new TextLocation(selectionStartPos.X, selectionStartPos.Y + 1)));
						textArea.Caret.Position = new TextLocation(selectionStartPos.X, selectionStartPos.Y + 1);
					}
					else
					{
						textArea.SelectionManager.SetSelection(new DefaultSelection(textArea.Document, new TextLocation(0, realline), new TextLocation(textArea.Document.GetLineSegment(realline).Length + 1, selectionStartPos.Y)));
						textArea.Caret.Position = new TextLocation(textArea.Document.GetLineSegment(realline).Length + 1, selectionStartPos.Y);
					}
				}
			}
		}
	}