コード例 #1
0
    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();
                }
            }
        }
    }