private void processScrollEvent(ConvertMode convertMode, Boolean isSend) { // String textviewString = null; Gtk.ScrolledWindow scrolledWindow = null; Gtk.TextView textView = null; ScrolledTextViewMover mover = null; // int offset = 0; if (isSend) { switch (convertMode) { case ConvertMode.Text: scrolledWindow = GtkScrolledWindowTextS; textView = textviewTextS; mover = moverTextS; break; case ConvertMode.Hex: scrolledWindow = GtkScrolledWindowHexS; textView = textviewHexS; mover = moverHexS; break; case ConvertMode.Dec: scrolledWindow = GtkScrolledWindowDecS; textView = textviewDecS; mover = moverDecS; break; } } else { switch (convertMode) { case ConvertMode.Text: scrolledWindow = GtkScrolledWindowText; textView = textviewText; // offset = textviewTextOffset; // textviewString = textviewTextString; mover = moverText; break; case ConvertMode.Hex: scrolledWindow = GtkScrolledWindowHex; textView = textviewHex; // offset = textviewHexOffset; // textviewString = textviewHexString; mover = moverHex; break; case ConvertMode.Dec: scrolledWindow = GtkScrolledWindowDec; textView = textviewDec; // offset = textviewDecOffset; // textviewString = textviewDecString; mover = moverDec; break; } } double vadjustmentLower = scrolledWindow.Vadjustment.Lower; double vadjustmentUpper = scrolledWindow.Vadjustment.Upper; double vadjustmentValue = scrolledWindow.Vadjustment.Value; double vadjustmentPageSize = scrolledWindow.Vadjustment.PageSize; double vadjustmentPosition = (vadjustmentValue - vadjustmentLower) / (vadjustmentUpper - vadjustmentPageSize - vadjustmentLower); //Console.WriteLine ("VADJ:" + vadjustmentPosition); // if (textviewString.Length < 3 * textViewDataBytesMaxCount) { // int forwardBytes = textviewString.Length - offset; // if (forwardBytes > 0) { // TextIter iter = textView.Buffer.EndIter; // textView.Buffer.Insert (ref iter, textviewString.Substring (offset, forwardBytes)); // offset += forwardBytes; // // if (textviewText.Buffer.CharCount > 2 * textViewDataBytesMaxCount) { // // TextIter iterStart = textviewText.Buffer.StartIter; // // TextIter iterEnd = textviewText.Buffer.StartIter; // // if (iterEnd.ForwardChars (textviewText.Buffer.CharCount - textViewDataBytesMaxCount)) { // // textviewText.Buffer.Delete (ref iterStart, ref iterEnd); // // textviewTextOffset += textviewText.Buffer.CharCount - textViewDataBytesMaxCount; // // } // // } // } // // } else { // if (vadjustmentPosition > 0.9) { // Console.WriteLine ("Count:" + textView.Buffer.CharCount.ToString ()); // int forwardBytes = textviewString.Length - offset; // if (forwardBytes > textViewDataBytesMaxCount) { // forwardBytes = textViewDataBytesMaxCount; // } // if (forwardBytes > 0) { // TextIter iter = textView.Buffer.EndIter; // textView.Buffer.Insert (ref iter, textviewString.Substring (offset, forwardBytes)); // offset += forwardBytes; // int deleteBytes = textView.Buffer.CharCount - 3 * textViewDataBytesMaxCount; // // if (deleteBytes > 0) { // Console.WriteLine ("Delete:" + deleteBytes.ToString ()); // TextIter iterStart = textView.Buffer.StartIter; // TextIter iterEnd = textView.Buffer.StartIter; // if (iterEnd.ForwardChars (deleteBytes)) { // textView.Buffer.Delete (ref iterStart, ref iterEnd); // } // } // } // } // if (vadjustmentPosition < 0.1) { // Console.WriteLine ("Delete:" + textView.Buffer.CharCount.ToString ()); // if (offset >= textViewDataBytesMaxCount * 3) { // int offsetEnd = offset - textViewDataBytesMaxCount * 3; // int offsetStart = offsetEnd - textViewDataBytesMaxCount; // if (offsetStart < 0) { // offsetStart = 0; // } // int backwardBytes = offsetEnd - offsetStart; // if (backwardBytes > 0) { // TextIter iter = textView.Buffer.StartIter; // textView.Buffer.Insert (ref iter, textviewString.Substring (offsetStart, backwardBytes)); // offset -= backwardBytes; // } // } // } // } // if (isSend) { // switch (convertMode) { // case ConvertMode.Text: // break; // case ConvertMode.Hex: // break; // case ConvertMode.Dec: // break; // } // } else { // switch (convertMode) { // case ConvertMode.Text: // break; // case ConvertMode.Hex: // //textviewHexOffset = offset; // break; // case ConvertMode.Dec: // //textviewDecOffset = offset; // break; // } // } bool isAutoScroll = false; if (isSend) { isAutoScroll = checkbuttonAutoScrollSend.Active; } else { isAutoScroll = checkbuttonAutoScrollReceive.Active; } if (isAutoScroll) { if (scrolledWindow.VScrollbar.Visible == false || vadjustmentPosition > 0.98) { if (mover != null) { mover.StepSize = mover.WindowSize / 10; mover.MoveDown(); TextIter iter = textView.Buffer.EndIter; textView.Buffer.CreateMark("EndMark", iter, false); textView.ScrollToMark(textView.Buffer.CreateMark("EndMark", iter, false), 0, false, 0, 0); textView.Buffer.DeleteMark("EndMark"); } } else if (vadjustmentPosition < 0.02) { if (mover != null) { mover.StepSize = mover.WindowSize / 10; mover.MoveUp(); TextIter iter = textView.Buffer.StartIter; textView.Buffer.CreateMark("StartMark", iter, false); textView.ScrollToMark(textView.Buffer.CreateMark("StartMark", iter, false), 0, false, 0, 0); textView.Buffer.DeleteMark("StartMark"); } } else if (vadjustmentPosition > 0.7) { if (mover != null) { mover.StepSize = mover.WindowSize / 100; mover.MoveDown(); TextIter iter = textView.Buffer.EndIter; } } else if (vadjustmentPosition < 0.3) { if (mover != null) { mover.StepSize = mover.WindowSize / 100; mover.MoveUp(); TextIter iter = textView.Buffer.StartIter; } } else if (vadjustmentPosition > 0.55) { if (mover != null) { mover.StepSize = mover.WindowSize / 300; mover.MoveDown(); TextIter iter = textView.Buffer.EndIter; } } else if (vadjustmentPosition < 0.45) { if (mover != null) { mover.StepSize = mover.WindowSize / 300; mover.MoveUp(); TextIter iter = textView.Buffer.StartIter; } } } else { if (vadjustmentPosition > 0.9) { if (mover != null) { mover.StepSize = mover.WindowSize / 100; mover.MoveDown(); } } else if (vadjustmentPosition < 0.1) { if (mover != null) { mover.StepSize = mover.WindowSize / 100; mover.MoveUp(); } } } }