Mercurial > dwindows
comparison android/DWindows.kt @ 2720:9ce1649b0fbd
Android: Fix vertical sliders/scrollbars by creating a DWSlider class to
encapsulate the SeekBar... then override the measurements and adjust the width.
The width on the SeekBar needs to be set to the height after rotation...
Since that is not the actually correct width, we need to wrap it in a frame.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Thu, 09 Dec 2021 01:57:52 +0000 |
parents | 6754e8f70142 |
children | cacde852e2db |
comparison
equal
deleted
inserted
replaced
2719:6754e8f70142 | 2720:9ce1649b0fbd |
---|---|
63 import android.content.Intent | 63 import android.content.Intent |
64 import android.util.* | 64 import android.util.* |
65 import android.util.Base64 | 65 import android.util.Base64 |
66 import kotlin.math.* | 66 import kotlin.math.* |
67 import android.content.ContentUris | 67 import android.content.ContentUris |
68 | 68 import androidx.appcompat.widget.AppCompatSeekBar |
69 | |
70 | 69 |
71 | 70 |
72 // Color Wheel section | 71 // Color Wheel section |
73 private val HUE_COLORS = intArrayOf( | 72 private val HUE_COLORS = intArrayOf( |
74 Color.RED, | 73 Color.RED, |
941 } | 940 } |
942 | 941 |
943 external fun eventHandlerHTMLChanged(obj1: View, message: Int, URI: String, status: Int) | 942 external fun eventHandlerHTMLChanged(obj1: View, message: Int, URI: String, status: Int) |
944 } | 943 } |
945 | 944 |
945 class DWSlider | |
946 @JvmOverloads constructor(context: Context): FrameLayout(context) { | |
947 val slider: SeekBar = SeekBar(context) | |
948 | |
949 init { | |
950 slider.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, | |
951 LayoutParams.WRAP_CONTENT, Gravity.CENTER) | |
952 addView(slider) | |
953 } | |
954 | |
955 @Synchronized | |
956 override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { | |
957 if(slider.rotation == 90F || slider.rotation == 270F) { | |
958 val layoutHeight = MeasureSpec.getSize(heightMeasureSpec) | |
959 // set slider width to layout heigth | |
960 slider.layoutParams.width = layoutHeight | |
961 } | |
962 super.onMeasure(widthMeasureSpec, heightMeasureSpec) | |
963 if(slider.rotation == 90F || slider.rotation == 270F) { | |
964 // update layout width to the rotated height of the slider | |
965 // otherwise the layout remains quadratic | |
966 setMeasuredDimension(slider.measuredHeight, measuredHeight) | |
967 } | |
968 } | |
969 } | |
970 | |
946 class DWSpinButton(context: Context) : AppCompatEditText(context), OnTouchListener { | 971 class DWSpinButton(context: Context) : AppCompatEditText(context), OnTouchListener { |
947 var value: Long = 0 | 972 var value: Long = 0 |
948 var minimum: Long = 0 | 973 var minimum: Long = 0 |
949 var maximum: Long = 65535 | 974 var maximum: Long = 65535 |
950 | 975 |
3550 constraintSet.applyTo(splitbar) | 3575 constraintSet.applyTo(splitbar) |
3551 } | 3576 } |
3552 } | 3577 } |
3553 } | 3578 } |
3554 | 3579 |
3555 fun scrollBarNew(vertical: Int, cid: Int): SeekBar? | 3580 fun scrollBarNew(vertical: Int, cid: Int): DWSlider? |
3556 { | 3581 { |
3557 var slider: SeekBar? = null | 3582 var scrollbar: DWSlider? = null |
3558 | 3583 |
3559 waitOnUiThread { | 3584 waitOnUiThread { |
3560 val dataArrayMap = SimpleArrayMap<String, Long>() | 3585 val dataArrayMap = SimpleArrayMap<String, Long>() |
3561 | 3586 |
3562 slider = SeekBar(this) | 3587 scrollbar = DWSlider(this) |
3588 scrollbar!!.tag = dataArrayMap | |
3589 scrollbar!!.id = cid | |
3590 scrollbar!!.slider.max = 1 | |
3591 scrollbar!!.slider.progressTintList = null | |
3592 scrollbar!!.slider.progressBackgroundTintList = null | |
3593 if (vertical != 0) { | |
3594 scrollbar!!.slider.rotation = 90F | |
3595 } | |
3596 scrollbar!!.slider.setOnSeekBarChangeListener(object : OnSeekBarChangeListener { | |
3597 override fun onStopTrackingTouch(seekBar: SeekBar) { | |
3598 } | |
3599 | |
3600 override fun onStartTrackingTouch(seekBar: SeekBar) { | |
3601 } | |
3602 | |
3603 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { | |
3604 eventHandlerInt(scrollbar as View, DWEvent.VALUE_CHANGED, scrollbar!!.slider.progress, 0, 0, 0) | |
3605 } | |
3606 }) | |
3607 } | |
3608 return scrollbar | |
3609 } | |
3610 | |
3611 fun sliderNew(vertical: Int, increments: Int, cid: Int): DWSlider? | |
3612 { | |
3613 var slider: DWSlider? = null | |
3614 | |
3615 waitOnUiThread { | |
3616 val dataArrayMap = SimpleArrayMap<String, Long>() | |
3617 | |
3618 slider = DWSlider(this) | |
3563 slider!!.tag = dataArrayMap | 3619 slider!!.tag = dataArrayMap |
3564 slider!!.id = cid | 3620 slider!!.id = cid |
3565 slider!!.max = 1 | 3621 slider!!.slider.max = increments |
3566 slider!!.progressTintList = null | |
3567 slider!!.progressBackgroundTintList = null | |
3568 if (vertical != 0) { | 3622 if (vertical != 0) { |
3569 slider!!.rotation = 90F | 3623 slider!!.slider.rotation = 90F |
3570 } | 3624 } |
3571 slider!!.setOnSeekBarChangeListener(object : OnSeekBarChangeListener { | 3625 slider!!.slider.setOnSeekBarChangeListener(object : OnSeekBarChangeListener { |
3572 override fun onStopTrackingTouch(seekBar: SeekBar) { | 3626 override fun onStopTrackingTouch(seekBar: SeekBar) { |
3573 } | 3627 } |
3574 | 3628 |
3575 override fun onStartTrackingTouch(seekBar: SeekBar) { | 3629 override fun onStartTrackingTouch(seekBar: SeekBar) { |
3576 } | 3630 } |
3577 | 3631 |
3578 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { | 3632 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { |
3579 eventHandlerInt(slider as View, DWEvent.VALUE_CHANGED, slider!!.progress, 0, 0, 0) | 3633 eventHandlerInt(slider as View, DWEvent.VALUE_CHANGED, slider!!.slider.progress, 0, 0, 0) |
3580 } | |
3581 }) | |
3582 } | |
3583 return slider | |
3584 } | |
3585 | |
3586 fun sliderNew(vertical: Int, increments: Int, cid: Int): SeekBar? | |
3587 { | |
3588 var slider: SeekBar? = null | |
3589 | |
3590 waitOnUiThread { | |
3591 val dataArrayMap = SimpleArrayMap<String, Long>() | |
3592 | |
3593 slider = SeekBar(this) | |
3594 slider!!.tag = dataArrayMap | |
3595 slider!!.id = cid | |
3596 slider!!.max = increments | |
3597 if (vertical != 0) { | |
3598 slider!!.rotation = 90F | |
3599 } | |
3600 slider!!.setOnSeekBarChangeListener(object : OnSeekBarChangeListener { | |
3601 override fun onStopTrackingTouch(seekBar: SeekBar) { | |
3602 } | |
3603 | |
3604 override fun onStartTrackingTouch(seekBar: SeekBar) { | |
3605 } | |
3606 | |
3607 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { | |
3608 eventHandlerInt(slider as View, DWEvent.VALUE_CHANGED, slider!!.progress, 0, 0, 0) | |
3609 } | 3634 } |
3610 }) | 3635 }) |
3611 } | 3636 } |
3612 return slider | 3637 return slider |
3613 } | 3638 } |
3625 percent!!.max = 100 | 3650 percent!!.max = 100 |
3626 } | 3651 } |
3627 return percent | 3652 return percent |
3628 } | 3653 } |
3629 | 3654 |
3630 fun percentGetPos(percent: ProgressBar): Int | 3655 fun percentGetPos(percent: View): Int |
3631 { | 3656 { |
3632 var retval = 0 | 3657 var retval = 0 |
3633 | 3658 |
3634 waitOnUiThread { | 3659 waitOnUiThread { |
3635 retval = percent.progress | 3660 var progress: ProgressBar |
3661 | |
3662 if(percent is ProgressBar) { | |
3663 progress = percent as ProgressBar | |
3664 } else { | |
3665 val slider = percent as DWSlider | |
3666 progress = slider.slider | |
3667 } | |
3668 retval = progress.progress | |
3636 } | 3669 } |
3637 return retval | 3670 return retval |
3638 } | 3671 } |
3639 | 3672 |
3640 fun percentSetPos(percent: ProgressBar, position: Int) | 3673 fun percentSetPos(percent: View, position: Int) |
3641 { | 3674 { |
3642 waitOnUiThread { | 3675 waitOnUiThread { |
3643 percent.progress = position | 3676 var progress: ProgressBar |
3644 } | 3677 |
3645 } | 3678 if(percent is ProgressBar) { |
3646 | 3679 progress = percent as ProgressBar |
3647 fun percentSetRange(percent: ProgressBar, range: Int) | 3680 } else { |
3648 { | 3681 val slider = percent as DWSlider |
3649 waitOnUiThread { | 3682 progress = slider.slider |
3650 percent.max = range | 3683 } |
3684 progress.progress = position | |
3685 } | |
3686 } | |
3687 | |
3688 fun percentSetRange(percent: View, range: Int) | |
3689 { | |
3690 waitOnUiThread { | |
3691 var progress: ProgressBar | |
3692 | |
3693 if(percent is ProgressBar) { | |
3694 progress = percent as ProgressBar | |
3695 } else { | |
3696 val slider = percent as DWSlider | |
3697 progress = slider.slider | |
3698 } | |
3699 progress.max = range | |
3651 } | 3700 } |
3652 } | 3701 } |
3653 | 3702 |
3654 fun htmlNew(cid: Int): WebView? | 3703 fun htmlNew(cid: Int): WebView? |
3655 { | 3704 { |