markus / KCOM / Controls / Symbol.xaml.cs @ c8e9b3e4
이력 | 보기 | 이력해설 | 다운로드 (19.2 KB)
1 |
using KCOM.Common; |
---|---|
2 |
using KCOM.Events; |
3 |
using KCOMDataModel.Common; |
4 |
using KCOMDataModel.DataModel; |
5 |
using System; |
6 |
using System.Collections.Generic; |
7 |
using System.Linq; |
8 |
using System.Text; |
9 |
using System.Windows; |
10 |
using System.Windows.Controls; |
11 |
using System.Windows.Data; |
12 |
using System.Windows.Documents; |
13 |
using System.Windows.Input; |
14 |
using System.Windows.Media; |
15 |
using System.Windows.Media.Imaging; |
16 |
using System.Windows.Navigation; |
17 |
using System.Windows.Shapes; |
18 |
using Telerik.Windows.Controls; |
19 |
using Telerik.Windows.Controls.DragDrop; |
20 |
|
21 |
namespace KCOM.Controls |
22 |
{ |
23 |
public class Symbol_Custom |
24 |
{ |
25 |
public string ID { get; set; } |
26 |
public string Name { get; set; } |
27 |
public string ImageUri { get; set; } |
28 |
} |
29 |
|
30 |
/// <summary> |
31 |
/// Symbol.xaml에 대한 상호 작용 논리 |
32 |
/// </summary> |
33 |
public partial class Symbol : UserControl |
34 |
{ |
35 |
AdornerFinal finalItem; |
36 |
bool IsMouseDown = false; |
37 |
string moveItem_id = ""; |
38 |
public string filename { get; set; } |
39 |
MarkupToPDF.Controls.Parsing.LayerControl layer = new MarkupToPDF.Controls.Parsing.LayerControl(); |
40 |
|
41 |
public Symbol() |
42 |
{ |
43 |
InitializeComponent(); |
44 |
|
45 |
RadDragAndDropManager.AddDragInfoHandler(lstSymbolPrivate, OnDragPrivateInfo); |
46 |
RadDragAndDropManager.AddDragQueryHandler(lstSymbolPrivate, OnDragPrivateQuery); |
47 |
RadDragAndDropManager.SetAllowDrag(lstSymbolPrivate, true); |
48 |
|
49 |
DataBind(); |
50 |
} |
51 |
|
52 |
private void OnDragPrivateInfo(object sender, DragDropEventArgs e) |
53 |
{ |
54 |
} |
55 |
|
56 |
private void OnDragPrivateQuery(object sender, DragDropQueryEventArgs e) |
57 |
{ |
58 |
if (e.Options.Status == DragStatus.DragQuery) |
59 |
{ |
60 |
//var draggedListBoxItem = (e.Options.Source as System.Windows.Controls.ListBox).SelectedItem; |
61 |
//BitmapImage im = new BitmapImage(new Uri((draggedListBoxItem as DeepView.ServiceDeepView_Symbol.SymbolPrivate).ImageUri)); |
62 |
//ImageSource _source = im; |
63 |
//Image img = new Image(); |
64 |
//img.Source = _source; |
65 |
|
66 |
//e.Options.Payload = im; |
67 |
//var dragCue = new Image(); |
68 |
//dragCue.Source = img.Source; |
69 |
//dragCue.Width = 0; |
70 |
//dragCue.Height = 0; |
71 |
//e.Options.DragCue = dragCue; |
72 |
|
73 |
|
74 |
//PayLoadAdorner = new AdornerFinal(); |
75 |
//DeepView.ServiceDeepView_Symbol.SymbolPrivate tempDragableControl = (e.Options.Source as System.Windows.Controls.ListBox).SelectedItem as DeepView.ServiceDeepView_Symbol.SymbolPrivate; |
76 |
//var xamldata = tempDragableControl.Data; |
77 |
////this.DeepLayer.markupParse(xamldata, this.DeepLayer._TempLayer, "복사된 데이터_이름으로 수정해야함"); |
78 |
//PayLoadAdorner = this.DeepLayer.markupParseToAdorner(xamldata, this.DeepLayer._SelectLayer, ""); |
79 |
//this.DeepLayer._SelectLayer.Children.Add(PayLoadAdorner); |
80 |
} |
81 |
|
82 |
e.QueryResult = true; |
83 |
e.Handled = true; |
84 |
} |
85 |
|
86 |
private void DataBind() |
87 |
{ |
88 |
//lstSymbolPrivate.ItemsSource = null; |
89 |
//lstSymbolPublic.ItemsSource = null; |
90 |
|
91 |
Symbol_Custom Custom = new Symbol_Custom(); |
92 |
List<Symbol_Custom> Custom_List = new List<Symbol_Custom>(); |
93 |
ServiceDeepView.ServiceDeepViewClient client = new ServiceDeepView.ServiceDeepViewClient(App._binding, App._EndPoint); |
94 |
var symbol_Private = client.GetSymbolList(App.ViewInfo.UserID); |
95 |
foreach (var item in symbol_Private) |
96 |
{ |
97 |
Custom.Name = item.NAME; |
98 |
Custom.ImageUri = item.IMAGE_URL; |
99 |
Custom.ID = item.ID; |
100 |
Custom_List.Add(Custom); |
101 |
Custom = new Symbol_Custom(); |
102 |
} |
103 |
lstSymbolPrivate.ItemsSource = Custom_List; |
104 |
|
105 |
Custom = new Symbol_Custom(); |
106 |
Custom_List = new List<Symbol_Custom>(); |
107 |
|
108 |
deptlist.ItemsSource = client.GetPublicSymbolDeptList(); |
109 |
|
110 |
List<SYMBOL_PUBLIC> symbol_Public; |
111 |
|
112 |
|
113 |
if (deptlist.SelectedValue != null) |
114 |
{ |
115 |
symbol_Public = client.GetPublicSymbolList(deptlist.SelectedValue.ToString()); |
116 |
} |
117 |
else |
118 |
{ |
119 |
symbol_Public = client.GetPublicSymbolList(null); |
120 |
} |
121 |
foreach (var item in symbol_Public) |
122 |
{ |
123 |
Custom.Name = item.NAME; |
124 |
Custom.ImageUri = item.IMAGE_URL; |
125 |
Custom.ID = item.ID; |
126 |
Custom_List.Add(Custom); |
127 |
Custom = new Symbol_Custom(); |
128 |
} |
129 |
lstSymbolPublic.ItemsSource = Custom_List; |
130 |
client.Close(); |
131 |
} |
132 |
|
133 |
public PngBitmapEncoder symImage(string data) |
134 |
{ |
135 |
|
136 |
Canvas _canvas = new Canvas(); |
137 |
_canvas.Background = Brushes.White; |
138 |
_canvas.Width = finalItem.BorderSize.Width; |
139 |
_canvas.Height = finalItem.BorderSize.Height; |
140 |
layer.markupParse(data, _canvas, "#FFFF0000", ""); |
141 |
|
142 |
BitmapEncoder encoder = new PngBitmapEncoder(); |
143 |
|
144 |
|
145 |
RenderTargetBitmap renderBitmap = new RenderTargetBitmap((int)_canvas.Width + 50, (int)_canvas.Height + 50, 96d, 96d, PixelFormats.Pbgra32); |
146 |
|
147 |
DrawingVisual dv = new DrawingVisual(); |
148 |
|
149 |
_canvas.Measure(new System.Windows.Size(finalItem.BorderSize.Width + 50, finalItem.BorderSize.Height + 50)); |
150 |
//_canvas.Arrange(new Rect(new System.Windows.Point { X = -finalItem.BorderSize.X - 50, Y = -finalItem.BorderSize.Y - 50 }, new Point(finalItem.BorderSize.Width + 20, finalItem.BorderSize.Height + 20))); |
151 |
_canvas.Arrange(new Rect(new System.Windows.Point { X = -finalItem.BorderSize.X - 20, Y = -finalItem.BorderSize.Y - 20 }, new Point(finalItem.BorderSize.Width + 20, finalItem.BorderSize.Height + 20))); |
152 |
|
153 |
using (DrawingContext ctx = dv.RenderOpen()) |
154 |
{ |
155 |
VisualBrush vb = new VisualBrush(_canvas); |
156 |
//ctx.DrawRectangle(vb, null, new Rect(new System.Windows.Point { X = -finalItem.BorderSize.X - 20, Y = -finalItem.BorderSize.Y - 20 }, new Point(finalItem.BorderSize.Width + 20, finalItem.BorderSize.Height + 20))); |
157 |
ctx.DrawRectangle(vb, null, new Rect(new System.Windows.Point { X = -finalItem.BorderSize.X, Y = -finalItem.BorderSize.Y }, new Point(finalItem.BorderSize.Width + 20, finalItem.BorderSize.Height + 20))); |
158 |
} |
159 |
|
160 |
try |
161 |
{ |
162 |
renderBitmap.Render(dv); |
163 |
|
164 |
GC.Collect(); |
165 |
GC.WaitForPendingFinalizers(); |
166 |
GC.Collect(); |
167 |
//bitmap.Render(controlToConvert); |
168 |
// encode png data |
169 |
PngBitmapEncoder pngEncoder = new PngBitmapEncoder(); |
170 |
// puch rendered bitmap into it |
171 |
pngEncoder.Interlace = PngInterlaceOption.Off; |
172 |
pngEncoder.Frames.Add(BitmapFrame.Create(renderBitmap)); |
173 |
return pngEncoder; |
174 |
|
175 |
} |
176 |
catch (Exception ex) |
177 |
{ |
178 |
return null; |
179 |
} |
180 |
|
181 |
} |
182 |
|
183 |
public void DialogMessage_Alert(string content, string header) |
184 |
{ |
185 |
var box = new TextBlock(); |
186 |
box.MinWidth = 400; |
187 |
box.FontSize = 11; |
188 |
//box.FontSize = 12; |
189 |
box.Text = content; |
190 |
box.TextWrapping = System.Windows.TextWrapping.Wrap; |
191 |
|
192 |
DialogParameters parameters = new DialogParameters() |
193 |
{ |
194 |
Content = box, |
195 |
Header = header, |
196 |
Theme = new VisualStudio2013Theme(), |
197 |
ModalBackground = new SolidColorBrush { Color = Colors.Black, Opacity = 0.6 }, |
198 |
}; |
199 |
RadWindow.Alert(parameters); |
200 |
} |
201 |
|
202 |
#region Event |
203 |
|
204 |
#region Symbol Add Event |
205 |
private void Create_Symbol(object sender, RoutedEventArgs e) |
206 |
{ |
207 |
MarkupToPDF.Controls.Parsing.LayerControl.MarkupReturn markupReturn = new MarkupToPDF.Controls.Parsing.LayerControl.MarkupReturn(); |
208 |
|
209 |
if (Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.SelectLayer.Children.Count < 1) //선택된 것이 없으면 |
210 |
{ |
211 |
DialogMessage_Alert("Please Select Controls", "Alert"); |
212 |
} |
213 |
else //선택된 것이 있으면 |
214 |
{ |
215 |
string MarkupData = ""; |
216 |
finalItem = new AdornerFinal(); |
217 |
|
218 |
foreach (var item in Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.SelectLayer.Children) |
219 |
{ |
220 |
if (item.GetType().Name == "AdornerFinal") |
221 |
{ |
222 |
finalItem = (item as Controls.AdornerFinal); |
223 |
foreach (var InnerItem in (item as Controls.AdornerFinal).MemberSet.Cast<Controls.AdornerMember>()) |
224 |
{ |
225 |
if (!ViewerDataModel.Instance.MarkupControls.Contains(InnerItem.DrawingData)) |
226 |
{ |
227 |
markupReturn = layer.MarkupToString(InnerItem.DrawingData as MarkupToPDF.Common.CommentUserInfo, App.ViewInfo.UserID); |
228 |
MarkupData += markupReturn.ConvertData; |
229 |
} |
230 |
} |
231 |
} |
232 |
} |
233 |
DialogParameters parameters = new DialogParameters() |
234 |
{ |
235 |
Closed = (obj, args) => this.MarkupNamePromptClose(MarkupData, args), |
236 |
DefaultPromptResultValue = "Custom State", |
237 |
Content = "Name :", |
238 |
Header = "Insert Custom Symbol Name", |
239 |
Theme = new VisualStudio2013Theme(), |
240 |
ModalBackground = new SolidColorBrush { Color = Colors.Black, Opacity = 0.6 }, |
241 |
}; |
242 |
RadWindow.Prompt(parameters); |
243 |
} |
244 |
|
245 |
} |
246 |
#endregion |
247 |
|
248 |
#region Symbol Add Close Event |
249 |
private void MarkupNamePromptClose(string data, WindowClosedEventArgs args) |
250 |
{ |
251 |
Save save = new Save(); |
252 |
|
253 |
if (args.DialogResult.Value) |
254 |
{ |
255 |
PngBitmapEncoder _Encoder = symImage(data); |
256 |
|
257 |
System.IO.MemoryStream fs = new System.IO.MemoryStream(); |
258 |
_Encoder.Save(fs); |
259 |
System.Drawing.Image ImgOut = System.Drawing.Image.FromStream(fs); |
260 |
|
261 |
byte[] Img_byte = fs.ToArray(); |
262 |
|
263 |
kr.co.devdoftech.cloud.FileUpload fileUploader = new kr.co.devdoftech.cloud.FileUpload(); |
264 |
filename = fileUploader.Run(App.ViewInfo.ProjectNO, Common.ViewerDataModel.Instance.SystemMain.dzMainMenu._DocItem.DOCUMENT_NO, App.ViewInfo.UserID, Save.shortGuid() + ".png", Img_byte); |
265 |
|
266 |
save.SymbolSave(args.PromptResult, filename, data); |
267 |
|
268 |
DataBind(); |
269 |
} |
270 |
} |
271 |
#endregion |
272 |
|
273 |
#region Symbol Delete Event |
274 |
private void Remove_Symbol(object sender, RoutedEventArgs e) |
275 |
{ |
276 |
if (lstSymbolPrivate.SelectedItem == null) |
277 |
{ |
278 |
DialogMessage_Alert("Please Select Symbol", "Alert"); |
279 |
return; |
280 |
} |
281 |
string delItem_ID = (lstSymbolPrivate.SelectedItem as Symbol_Custom).ID; |
282 |
|
283 |
Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.BaseClient.DeleteSymbolCompleted += BaseClient_DeleteSymbolCompleted; |
284 |
Logger.sendReqLog("DeleteSymbolAsync: ", delItem_ID, 1); |
285 |
Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.BaseClient.DeleteSymbolAsync(delItem_ID); |
286 |
|
287 |
} |
288 |
|
289 |
private void BaseClient_DeleteSymbolCompleted(object sender, ServiceDeepView.DeleteSymbolCompletedEventArgs e) |
290 |
{ |
291 |
Logger.sendResLog("DeleteSymbolCompleted", "UserState : " + e.UserState + "\r Result :" + e.Result + "\r Cancelled :" + e.Cancelled + "\r Error :" + e.Error, 1); |
292 |
DataBind(); |
293 |
} |
294 |
#endregion |
295 |
|
296 |
/// <summary> |
297 |
/// place symbol which has given id to original position which is created |
298 |
/// </summary> |
299 |
/// <date>2018.06.14</date> |
300 |
/// <param name="id"></param> |
301 |
private void PlaceSymbol(string id) |
302 |
{ |
303 |
string Data_ = ""; |
304 |
|
305 |
try |
306 |
{ |
307 |
Logger.sendReqLog("GetSymbolData: ", id + "," + RadTab.SelectedIndex, 1); |
308 |
Data_ = Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.BaseClient.GetSymbolData(id, RadTab.SelectedIndex); |
309 |
if (Data_ != null || Data_ != "") |
310 |
{ |
311 |
Logger.sendResLog("GetSymbolData", "TRUE", 1); |
312 |
} |
313 |
else |
314 |
{ |
315 |
Logger.sendResLog("GetSymbolData", "FALSE", 1); |
316 |
} |
317 |
|
318 |
if (Data_.Contains("|DZ|")) |
319 |
{ |
320 |
List<MarkupToPDF.Common.CommentUserInfo> adornerSet = new List<MarkupToPDF.Common.CommentUserInfo>(); |
321 |
|
322 |
string[] delimiterChars = { "|DZ|" }; |
323 |
string[] data = Data_.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries); |
324 |
|
325 |
foreach (string parse in data) |
326 |
{ |
327 |
if (parse != "") |
328 |
{ |
329 |
System.Windows.Controls.Control item = layer.markupParse_Paste(parse, ViewerDataModel.Instance.MarkupControls_USER); |
330 |
(item as MarkupToPDF.Common.CommentUserInfo).CommentID = Events.Save.shortGuid(); |
331 |
(item as MarkupToPDF.Common.CommentUserInfo).SymbolID = id; |
332 |
ViewerDataModel.Instance.MarkupControls.Remove(item as MarkupToPDF.Common.CommentUserInfo); |
333 |
ViewerDataModel.Instance.MarkupControls_USER.Remove(item as MarkupToPDF.Common.CommentUserInfo); |
334 |
|
335 |
adornerSet.Add(item as MarkupToPDF.Common.CommentUserInfo); |
336 |
} |
337 |
} |
338 |
Controls.AdornerFinal final = new Controls.AdornerFinal(adornerSet); |
339 |
|
340 |
ViewerDataModel.Instance.SystemMain.dzMainMenu.SelectLayer.Children.Add(final); |
341 |
} |
342 |
} |
343 |
catch(Exception ex) |
344 |
{ |
345 |
this.ParentOfType<MainWindow>().dzMainMenu.DialogMessage_Alert(ex.Message, "Error"); |
346 |
} |
347 |
} |
348 |
|
349 |
#region Symbol DoubleClick Event |
350 |
private void Move_Symbol(object sender, MouseButtonEventArgs e) |
351 |
{ |
352 |
string id = ((e.OriginalSource as Image).DataContext as Symbol_Custom).ID; |
353 |
IsMouseDown = true; |
354 |
if (e.ClickCount > 1) |
355 |
{ |
356 |
this.PlaceSymbol(id); |
357 |
} |
358 |
} |
359 |
#endregion |
360 |
|
361 |
#region Symbol Rename Event |
362 |
private void Rename_Symbol(object sender, RoutedEventArgs e) |
363 |
{ |
364 |
if (lstSymbolPrivate.SelectedItem == null) |
365 |
{ |
366 |
DialogMessage_Alert("Please Select Symbol", "Alert"); |
367 |
return; |
368 |
} |
369 |
|
370 |
DialogParameters parameters = new DialogParameters() |
371 |
{ |
372 |
Closed = (obj, args) => this.MarkupReNamePromptClose("", args), |
373 |
//DefaultPromptResultValue = "Custom State", |
374 |
DefaultPromptResultValue = (lstSymbolPrivate.SelectedItem as Symbol_Custom).Name, |
375 |
Content = "Name :", |
376 |
Header = "Update Custom Symbol Name", |
377 |
Theme = new VisualStudio2013Theme(), |
378 |
ModalBackground = new SolidColorBrush { Color = Colors.Black, Opacity = 0.6 }, |
379 |
}; |
380 |
RadWindow.Prompt(parameters); |
381 |
|
382 |
} |
383 |
#endregion |
384 |
|
385 |
#region Symbol Rename Close Event |
386 |
private void MarkupReNamePromptClose(string data, WindowClosedEventArgs args) |
387 |
{ |
388 |
if (args.DialogResult != null && args.DialogResult.Value) |
389 |
{ |
390 |
string _id = (lstSymbolPrivate.SelectedItem as Symbol_Custom).ID; |
391 |
string _name = args.PromptResult; |
392 |
|
393 |
Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.BaseClient.RenameSymbolCompleted += BaseClient_RenameSymbolCompleted; |
394 |
|
395 |
Logger.sendReqLog("RenameSymbolAsync: ", _id + "," + _name, 1); |
396 |
Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.BaseClient.RenameSymbolAsync(_id, _name); |
397 |
} |
398 |
} |
399 |
|
400 |
private void BaseClient_RenameSymbolCompleted(object sender, ServiceDeepView.RenameSymbolCompletedEventArgs e) |
401 |
{ |
402 |
Logger.sendResLog("RenameSymbolCompleted", "UserState : " + e.UserState + "\r Result :" + e.Result + "\r Cancelled :" + e.Cancelled + "\r Error :" + e.Error, 1); |
403 |
DataBind(); |
404 |
} |
405 |
#endregion |
406 |
|
407 |
#region Wheel Event |
408 |
private void lstSymbolPrivate_PreviewMouseWheel(object sender, MouseWheelEventArgs e) |
409 |
{ |
410 |
ScView.ScrollToVerticalOffset(ScView.ContentVerticalOffset - (e.Delta / 2)); |
411 |
} |
412 |
private void lstSymbolPublic_PreviewMouseWheel(object sender, MouseWheelEventArgs e) |
413 |
{ |
414 |
ScView_Public.ScrollToVerticalOffset(ScView_Public.ContentVerticalOffset - (e.Delta / 2)); |
415 |
} |
416 |
#endregion |
417 |
|
418 |
#region Tab Selection Event |
419 |
private void RadTabControl_PreviewSelectionChanged(object sender, RadSelectionChangedEventArgs e) |
420 |
{ |
421 |
foreach (var item in (e.OriginalSource as RadTabControl).Items) |
422 |
{ |
423 |
(item as RadTabItem).FontWeight = FontWeights.Normal; |
424 |
} |
425 |
((e.OriginalSource as RadTabControl).SelectedItem as RadTabItem).FontWeight = FontWeights.Bold; |
426 |
} |
427 |
#endregion |
428 |
|
429 |
#region Department Selection Event |
430 |
private void deptlist_SelectionChanged(object sender, SelectionChangedEventArgs e) |
431 |
{ |
432 |
DataBind(); |
433 |
} |
434 |
#endregion |
435 |
|
436 |
#endregion |
437 |
|
438 |
private void lstSymbolPrivate_PreviewMouseUp(object sender, MouseButtonEventArgs e) |
439 |
{ |
440 |
|
441 |
} |
442 |
|
443 |
private void lstSymbolPrivate_MouseLeave(object sender, MouseEventArgs e) |
444 |
{ |
445 |
|
446 |
} |
447 |
|
448 |
private void lstSymbolPrivate_MouseDown(object sender, MouseButtonEventArgs e) |
449 |
{ |
450 |
|
451 |
} |
452 |
|
453 |
private void StackPanel_MouseLeave(object sender, MouseEventArgs e) |
454 |
{ |
455 |
if(IsMouseDown && e.LeftButton == MouseButtonState.Pressed) |
456 |
{ |
457 |
ViewerDataModel.Instance.SystemMain.dzMainMenu.Symbol_ID = moveItem_id; |
458 |
} |
459 |
else |
460 |
{ |
461 |
IsMouseDown = false; |
462 |
} |
463 |
} |
464 |
|
465 |
private void StackPanel_MouseUp(object sender, MouseButtonEventArgs e) |
466 |
{ |
467 |
IsMouseDown = false; |
468 |
} |
469 |
|
470 |
/// <summary> |
471 |
/// place symbol which user select |
472 |
/// </summary> |
473 |
/// <author>humkyung</author> |
474 |
/// <date>2018.06.14</date> |
475 |
/// <param name="sender"></param> |
476 |
/// <param name="e"></param> |
477 |
private void Place_Symbol(object sender, RoutedEventArgs e) |
478 |
{ |
479 |
if (lstSymbolPrivate.SelectedItem == null) |
480 |
{ |
481 |
DialogMessage_Alert("Please Select Symbol", "Alert"); |
482 |
return; |
483 |
} |
484 |
|
485 |
string id = (lstSymbolPrivate.SelectedItem as Symbol_Custom).ID; |
486 |
this.PlaceSymbol(id); |
487 |
} |
488 |
} |
489 |
} |