5
5
using System . Windows . Input ;
6
6
using _1RM . Model ;
7
7
using _1RM . Model . Protocol . Base ;
8
- using _1RM . Service . DataSource ;
9
8
using Shawn . Utils ;
10
9
using Shawn . Utils . Wpf ;
11
10
using Shawn . Utils . Wpf . Controls ;
@@ -20,18 +19,17 @@ public partial class NoteDisplayAndEditor : UserControl
20
19
new FrameworkPropertyMetadata ( null , FrameworkPropertyMetadataOptions . BindsTwoWayByDefault , OnServerChanged ) ) ;
21
20
private static void OnServerChanged ( DependencyObject d , DependencyPropertyChangedEventArgs e )
22
21
{
23
- if ( d is NoteDisplayAndEditor control )
22
+ if ( d is not NoteDisplayAndEditor control ) return ;
23
+
24
+ control . SwitchToView ( View . Normal ) ;
25
+ if ( e . OldValue is ProtocolBase server0 )
24
26
{
25
- control . EndEdit ( ) ;
26
- if ( e . OldValue is ProtocolBase server0 )
27
- {
28
- server0 . PropertyChanged -= control . ServerOnPropertyChanged ;
29
- }
30
- if ( e . NewValue is ProtocolBase server1 )
31
- {
32
- server1 . PropertyChanged += control . ServerOnPropertyChanged ;
33
- control . EditEnable = control . EditEnable && server1 . DataSource ? . IsWritable == true ;
34
- }
27
+ server0 . PropertyChanged -= control . ServerOnPropertyChanged ;
28
+ }
29
+ if ( e . NewValue is ProtocolBase server1 )
30
+ {
31
+ server1 . PropertyChanged += control . ServerOnPropertyChanged ;
32
+ control . EditEnable = control . EditEnable && server1 . DataSource ? . IsWritable == true ;
35
33
}
36
34
}
37
35
@@ -49,36 +47,18 @@ public ProtocolBase? Server
49
47
set => SetValue ( ServerProperty , value ) ;
50
48
}
51
49
52
-
50
+ // a callback for save launcher settings
53
51
public static readonly DependencyProperty CommandOnCloseRequestProperty = DependencyProperty . Register (
54
52
"CommandOnCloseRequest" , typeof ( RelayCommand ) , typeof ( NoteDisplayAndEditor ) , new FrameworkPropertyMetadata ( default ( RelayCommand ) , FrameworkPropertyMetadataOptions . BindsTwoWayByDefault ) ) ;
55
-
56
-
57
53
public RelayCommand CommandOnCloseRequest
58
54
{
59
55
get => ( RelayCommand ) GetValue ( CommandOnCloseRequestProperty ) ;
60
56
set => SetValue ( CommandOnCloseRequestProperty , value ) ;
61
57
}
62
58
63
- public bool CloseEnable { get ; set ; }
64
-
65
- private bool _editEnable ;
66
- public bool EditEnable
67
- {
68
- get => _editEnable ;
69
- set
70
- {
71
- _editEnable = value ;
72
- if ( IsLoaded )
73
- {
74
- Execute . OnUIThreadSync ( ( ) =>
75
- {
76
- ButtonSave . IsEnabled = EditEnable ;
77
- TbMarkdown . IsReadOnly = ! EditEnable ;
78
- } ) ;
79
- }
80
- }
81
- }
59
+ public Visibility CloseButtonVisibility { get ; set ; } = Visibility . Collapsed ;
60
+ public Visibility EditButtonVisibility { get ; set ; } = Visibility . Visible ;
61
+ public bool EditEnable { get ; set ; }
82
62
83
63
public NoteDisplayAndEditor ( )
84
64
{
@@ -88,10 +68,7 @@ public NoteDisplayAndEditor()
88
68
89
69
private void NoteDisplayAndEditor_Loaded ( object sender , RoutedEventArgs e )
90
70
{
91
- ButtonSave . IsEnabled = EditEnable ;
92
- TbMarkdown . IsReadOnly = ! EditEnable ;
93
- ButtonClose . IsEnabled = CloseEnable ;
94
- ButtonClose . Visibility = CloseEnable ? Visibility . Visible : Visibility . Collapsed ;
71
+ SwitchToView ( View . Normal ) ;
95
72
}
96
73
97
74
private void OpenHyperlink ( object sender , System . Windows . Input . ExecutedRoutedEventArgs e )
@@ -112,7 +89,6 @@ private void OpenHyperlink(object sender, System.Windows.Input.ExecutedRoutedEve
112
89
113
90
private void ClickOnImage ( object sender , System . Windows . Input . ExecutedRoutedEventArgs e )
114
91
{
115
- //MessageBox.Show($"URL: {e.Parameter}");
116
92
try
117
93
{
118
94
var url = e ? . Parameter ? . ToString ( ) ;
@@ -127,40 +103,102 @@ private void ClickOnImage(object sender, System.Windows.Input.ExecutedRoutedEven
127
103
}
128
104
}
129
105
130
- private void EndEdit ( )
106
+ public enum View
131
107
{
132
- MarkdownViewer . Markdown = Server ? . Note ?? "" ;
133
- MarkdownViewer . Visibility = Visibility . Visible ;
134
- GridEditor . Visibility = Visibility . Collapsed ;
108
+ Normal ,
109
+ Editor ,
110
+ Copy
135
111
}
136
- private void StartEdit ( )
112
+ private View ? _currentView = null ;
113
+ public void SwitchToView ( NoteDisplayAndEditor . View v )
137
114
{
138
- MarkdownViewer . Visibility = Visibility . Collapsed ;
139
- GridEditor . Visibility = Visibility . Visible ;
115
+ if ( v == _currentView ) return ;
116
+ ButtonClose . Visibility = CloseButtonVisibility ;
117
+ ButtonEdit . Visibility = EditButtonVisibility ;
118
+ Execute . OnUIThreadSync ( ( ) =>
119
+ {
120
+ switch ( v )
121
+ {
122
+ case View . Normal :
123
+ MarkdownViewer . Markdown = Server ? . Note ?? "" ;
124
+ MarkdownViewer . Visibility = Visibility . Visible ;
125
+ GridEditor . Visibility = Visibility . Collapsed ;
126
+ break ;
127
+ case View . Editor :
128
+ TbMarkdown . Text = Server ? . Note ?? "" ;
129
+ GridButtons . Visibility = Visibility . Visible ;
130
+ ButtonSave . IsEnabled = true ;
131
+ TbMarkdown . IsReadOnly = false ;
132
+ MarkdownViewer . Visibility = Visibility . Collapsed ;
133
+ GridEditor . Visibility = Visibility . Visible ;
134
+ break ;
135
+ case View . Copy :
136
+ if ( _currentView == View . Normal )
137
+ {
138
+ TbMarkdown . Text = Server ? . Note ?? "" ;
139
+ // 只能拷贝,不能编辑
140
+ GridButtons . Visibility = Visibility . Hidden ;
141
+ ButtonSave . IsEnabled = false ;
142
+ TbMarkdown . IsReadOnly = true ;
143
+ MarkdownViewer . Visibility = Visibility . Collapsed ;
144
+ GridEditor . Visibility = Visibility . Visible ;
145
+ }
146
+ break ;
147
+ default :
148
+ throw new ArgumentOutOfRangeException ( nameof ( v ) , v , null ) ;
149
+ }
150
+ _currentView = v ;
151
+ } ) ;
140
152
}
141
153
142
154
private void ButtonSave_OnClick ( object sender , RoutedEventArgs e )
143
155
{
144
- if ( EditEnable && Server != null && Server . Note . Trim ( ) != TbMarkdown . Text . Trim ( ) )
156
+ if ( Server ? . DataSource ? . IsWritable == true
157
+ && Server . Note . Trim ( ) != TbMarkdown . Text . Trim ( ) )
145
158
{
146
159
Server . Note = TbMarkdown . Text . Trim ( ) ;
147
160
IoC . Get < GlobalData > ( ) . UpdateServer ( Server ) ;
148
161
}
149
- EndEdit ( ) ;
162
+ SwitchToView ( View . Normal ) ;
150
163
}
151
164
152
165
private void ButtonCancelEdit_OnClick ( object sender , RoutedEventArgs e )
153
166
{
154
- EndEdit ( ) ;
167
+ SwitchToView ( View . Normal ) ;
155
168
}
156
169
157
170
private void ButtonNoteStartEdit_OnClick ( object sender , RoutedEventArgs e )
158
171
{
159
172
TbMarkdown . Text = Server ? . Note ?? "" ;
160
- if ( MarkdownViewer . Visibility != Visibility . Collapsed )
161
- StartEdit ( ) ;
173
+ if ( Server ? . DataSource ? . IsWritable == true )
174
+ {
175
+ SwitchToView ( View . Editor ) ;
176
+ }
162
177
else
163
- EndEdit ( ) ;
178
+ {
179
+ SwitchToView ( View . Copy ) ;
180
+ }
181
+ }
182
+
183
+ private void GridEditor_OnMouseEnter ( object sender , MouseEventArgs e )
184
+ {
185
+ if ( _currentView == View . Normal )
186
+ SwitchToView ( View . Copy ) ;
187
+ }
188
+
189
+ private void GridEditor_OnMouseLeave ( object sender , MouseEventArgs e )
190
+ {
191
+ if ( _currentView == View . Copy )
192
+ SwitchToView ( View . Normal ) ;
193
+ }
194
+
195
+ private void TbMarkdown_OnPreviewMouseDown ( object sender , MouseButtonEventArgs e )
196
+ {
197
+ if ( _currentView == View . Copy
198
+ && Server ? . DataSource ? . IsWritable == true )
199
+ {
200
+ SwitchToView ( View . Editor ) ;
201
+ }
164
202
}
165
203
166
204
private void ButtonClose_OnClick ( object sender , RoutedEventArgs e )
0 commit comments