This repository has been archived by the owner on Sep 11, 2023. It is now read-only.
/
ZoomTrackBarWithMiddleSnap.cs
109 lines (89 loc) · 3.38 KB
/
ZoomTrackBarWithMiddleSnap.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Drawing;
using DevExpress.XtraEditors.Registrator;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraEditors.ViewInfo;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ZoomTrackBarControl_MiddleValue {
[UserRepositoryItem("Register")]
public class CustomRepositoryItem : RepositoryItemZoomTrackBar {
static CustomRepositoryItem() {
Register();
}
public CustomRepositoryItem() { }
internal const string EditorName = "CustomZoomTrackBar";
public static void Register() {
EditorRegistrationInfo.Default.Editors.Add(new EditorClassInfo(EditorName, typeof(CustomZoomTrackBar),
typeof(CustomRepositoryItem), typeof(CustomViewInfo),
new ZoomTrackBarPainter(), true, null, typeof(DevExpress.Accessibility.ButtonEditAccessible)));
}
public override string EditorTypeName {
get { return EditorName; }
}
private bool _SnapToMiddleValue;
public bool SnapToMiddleValue {
get { return _SnapToMiddleValue; }
set { _SnapToMiddleValue = value; }
}
private int _MiddleDistance;
public int MiddleDistance {
get {
if (_MiddleDistance > 100 || _MiddleDistance <= 0)
_MiddleDistance = 10;
return _MiddleDistance;
}
set {
_MiddleDistance = value;
}
}
public override void Assign(RepositoryItem item) {
base.Assign(item);
BeginUpdate();
try {
base.Assign(item);
CustomRepositoryItem source = item as CustomRepositoryItem;
if (source == null) return;
SnapToMiddleValue = source.SnapToMiddleValue;
MiddleDistance = source.MiddleDistance;
}
finally {
EndUpdate();
}
}
}
[ToolboxItem(true)]
public class CustomZoomTrackBar : ZoomTrackBarControl {
static CustomZoomTrackBar() {
CustomRepositoryItem.Register();
}
public CustomZoomTrackBar() {
}
public override string EditorTypeName {
get { return CustomRepositoryItem.EditorName; }
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public new CustomRepositoryItem Properties {
get { return base.Properties as CustomRepositoryItem; }
}
}
public class CustomViewInfo : ZoomTrackBarViewInfo {
public CustomViewInfo(RepositoryItem item)
: base(item) {
}
public override int ValueFromPoint(Point p) {
CustomRepositoryItem customItem = (CustomRepositoryItem)this.Item;
int middle = (customItem.AllowUseMiddleValue) ? customItem.Middle : (customItem.Minimum + customItem.Maximum) / 2;
int value = base.ValueFromPoint(p);
int middleDistance = (customItem.Minimum + customItem.Maximum) / customItem.MiddleDistance;
if (value >= middle - middleDistance && value <= middle + middleDistance)
return middle;
return value;
}
}
}