0024147: Update of CSharp sample
[occt.git] / samples / CSharp / WPF / MainWindow.xaml.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Data;
8 using System.Windows.Documents;
9 using System.Windows.Input;
10 using System.Windows.Media;
11 using System.Windows.Media.Imaging;
12 using System.Windows.Navigation;
13 using System.Windows.Shapes;
14 using System.ComponentModel;
15 using System.Windows.Forms.Integration;
16
17 namespace IE_WPF
18 {
19     /// <summary>
20     /// Interaction logic for MainWindow.xaml
21     /// </summary>
22     public partial class MainWindow : Window, INotifyPropertyChanged
23     {
24         public event PropertyChangedEventHandler PropertyChanged;
25         protected void RaisePropertyChanged( string thePropertyName )
26         {
27             if ( PropertyChanged != null )
28             {
29                 PropertyChanged( this, new PropertyChangedEventArgs( thePropertyName ) );
30             }
31         }
32
33         public MainWindow()
34         {
35             InitializeComponent();
36
37             StatusBarText = String.Empty;
38             IsHlrOffPushed = false;
39             IsHlrOnPushed = true;
40             IsZoomWinEnabled = true;
41
42             #region menu operations
43
44             CommandBinding aBind_New = new CommandBinding( IECommands.New );
45             aBind_New.Executed += NewCommand_Executed;
46             CommandBindings.Add( aBind_New );
47
48             CommandBinding aBind_Close = new CommandBinding( IECommands.Close );
49             aBind_Close.Executed += CloseCommand_Executed;
50             aBind_Close.CanExecute += CloseCommand_CanExecute;
51             CommandBindings.Add( aBind_Close );
52
53             CommandBinding aBind_Quit = new CommandBinding( IECommands.Quit );
54             aBind_Quit.Executed += QuitCommand_Executed;
55             CommandBindings.Add( aBind_Quit );
56
57             CommandBinding aBind_About = new CommandBinding( IECommands.About );
58             aBind_About.Executed += AboutCommand_Executed;
59             CommandBindings.Add( aBind_About );
60
61             # endregion
62
63             PreviewKeyDown += new KeyEventHandler( OnPreviewKeyDown );
64             PreviewKeyUp += new KeyEventHandler( OnPreviewKeyUp );
65         }
66
67         private String myStatusBarText;
68         public String StatusBarText
69         {
70             get
71             {
72                 return myStatusBarText;
73             }
74             private set
75             {
76                 myStatusBarText = value;
77                 RaisePropertyChanged( "StatusBarText" );
78             }
79         }
80
81         private bool isHlrOffPushed;
82         public Boolean IsHlrOffPushed
83         {
84             get
85             {
86                 return isHlrOffPushed;
87             }
88             set
89             {
90                 isHlrOffPushed = value;
91                 RaisePropertyChanged("isHlrOffPushed");
92             }
93         }
94
95         private bool isHlrOnPushed;
96         public Boolean IsHlrOnPushed
97         {
98             get
99             {
100                 return isHlrOnPushed;
101             }
102             set
103             {
104                 isHlrOnPushed = value;
105                 RaisePropertyChanged("IsHlrOnPushed");
106             }
107         }
108
109         private bool isZoomWinEnabled;
110         public Boolean IsZoomWinEnabled
111         {
112             get
113             {
114                 return isZoomWinEnabled;
115             }
116             set
117             {
118                 isZoomWinEnabled = value;
119                 RaisePropertyChanged("IsZoomWinEnabled");
120             }
121         }
122
123         private OCCViewer ActiveViewer
124         {
125             get
126             {
127                 if ( !IsDocumentOpen )
128                 {
129                     return null;
130                 }
131
132                 WindowsFormsHost aHost = ( ViewPanel.SelectedContent ) as WindowsFormsHost;
133                 if( aHost == null )
134                 {
135                     return null;
136                 }
137
138                 return aHost.Child as OCCViewer;
139             }
140         }
141
142         public Boolean IsDocumentOpen
143         {
144             get
145             {
146                 return ViewPanel.Items.Count > 0;
147             }
148         }
149
150         private int myDocumentCounter = 1;
151
152         private void NewCommand_Executed( object sender, ExecutedRoutedEventArgs e )
153         {
154             WindowsFormsHost aHost = new WindowsFormsHost();
155             OCCViewer aForm = new OCCViewer();
156             aForm.Show();
157             aHost.Child = aForm;
158
159             TabItem aNewTab = new TabItem();
160             aNewTab.Content = aHost;
161             aNewTab.IsSelected = true;
162             aNewTab.Header = "Document " + myDocumentCounter.ToString();
163             myDocumentCounter++;
164
165             ViewPanel.Items.Add( aNewTab );
166
167             // update XAML property
168             RaisePropertyChanged("IsDocumentOpen");
169         }
170
171         private void CloseCommand_Executed(object sender, ExecutedRoutedEventArgs e)
172         {
173             if ( ViewPanel.Items.Count > 0 )
174             {
175                 ViewPanel.Items.Remove( ViewPanel.SelectedItem );
176             }
177
178             // update XAML property
179             RaisePropertyChanged( "IsDocumentOpen" );
180         }
181
182         private void CloseCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
183         {
184             e.CanExecute = IsDocumentOpen;
185         }
186
187         private void QuitCommand_Executed( object sender, ExecutedRoutedEventArgs e )
188         {
189             this.Close();
190         }
191
192         private void ImportBRep_Click( object sender, RoutedEventArgs e )
193         {
194             if ( ActiveViewer != null )
195             {
196                 ActiveViewer.ImportModel( ModelFormat.BREP );
197             }
198         }
199
200         private void ImportIges_Click( object sender, RoutedEventArgs e )
201         {
202             if ( ActiveViewer != null )
203             {
204                 ActiveViewer.ImportModel( ModelFormat.IGES );
205             }
206         }
207
208         private void ImportStep_Click( object sender, RoutedEventArgs e )
209         {
210             if ( ActiveViewer != null )
211             {
212                 ActiveViewer.ImportModel( ModelFormat.STEP );
213             }
214         }
215
216         private void ExportBRep_Click( object sender, RoutedEventArgs e )
217         {
218             if ( ActiveViewer != null )
219             {
220                 ActiveViewer.ExportModel( ModelFormat.BREP );
221             }
222         }
223
224         private void ExportStep_Click( object sender, RoutedEventArgs e )
225         {
226             if ( ActiveViewer != null )
227             {
228                 ActiveViewer.ExportModel( ModelFormat.STEP );
229             }
230         }
231
232         private void ExportIges_Click( object sender, RoutedEventArgs e )
233         {
234             if ( ActiveViewer != null )
235             {
236                 ActiveViewer.ExportModel( ModelFormat.IGES );
237             }
238         }
239
240         private void ExportStl_Click( object sender, RoutedEventArgs e )
241         {
242             if ( ActiveViewer != null )
243             {
244                 ActiveViewer.ExportModel( ModelFormat.STL );
245             }
246         }
247
248         private void ExportVrml_Click( object sender, RoutedEventArgs e )
249         {
250             if ( ActiveViewer != null )
251             {
252                 ActiveViewer.ExportModel( ModelFormat.VRML );
253             }
254         }
255
256         private void ExportImage_Click( object sender, RoutedEventArgs e )
257         {
258             if ( ActiveViewer != null )
259             {
260                 ActiveViewer.ExportModel( ModelFormat.IMAGE );
261             }
262         }
263
264         private void FitAllBtn_Click( object sender, RoutedEventArgs e )
265         {
266             if ( ActiveViewer != null )
267             {
268                 ActiveViewer.FitAll();
269             }
270         }
271
272         private void ZoomWindowBtn_Click( object sender, RoutedEventArgs e )
273         {
274             if ( ActiveViewer != null )
275             {
276                 IsZoomWinEnabled = false;
277                 ActiveViewer.ZoomWindow();
278             }
279         }
280
281         private void DynamicZoomingBtn_Click( object sender, RoutedEventArgs e )
282         {
283             if ( ActiveViewer != null )
284             {
285                 ActiveViewer.DynamicZooming();
286             }
287         }
288
289         private void DynamicPanningBtn_Click( object sender, RoutedEventArgs e )
290         {
291             if ( ActiveViewer != null )
292             {
293                 ActiveViewer.DynamicPanning();
294             }
295         }
296
297         private void GlobalPanningBtn_Click( object sender, RoutedEventArgs e )
298         {
299             if ( ActiveViewer != null )
300             {
301                 ActiveViewer.GlobalPanning();
302             }
303         }
304
305         private void FrontBtn_Click( object sender, RoutedEventArgs e )
306         {
307             if ( ActiveViewer != null )
308             {
309                 ActiveViewer.FrontView();
310             }
311         }
312
313         private void BackBtn_Click( object sender, RoutedEventArgs e )
314         {
315             if ( ActiveViewer != null )
316             {
317                 ActiveViewer.BackView();
318             }
319         }
320
321         private void TopBtn_Click( object sender, RoutedEventArgs e )
322         {
323             if ( ActiveViewer != null )
324             {
325                 ActiveViewer.TopView();
326             }
327         }
328
329         private void BottomBtn_Click( object sender, RoutedEventArgs e )
330         {
331             if ( ActiveViewer != null )
332             {
333                 ActiveViewer.BottomView();
334             }
335         }
336
337         private void LeftBtn_Click( object sender, RoutedEventArgs e )
338         {
339             if ( ActiveViewer != null )
340             {
341                 ActiveViewer.LeftView();
342             }
343         }
344
345         private void RightBtn_Click( object sender, RoutedEventArgs e )
346         {
347             if ( ActiveViewer != null )
348             {
349                 ActiveViewer.RightView();
350             }
351         }
352
353         private void AxoBtn_Click( object sender, RoutedEventArgs e )
354         {
355             if ( ActiveViewer != null )
356             {
357                 ActiveViewer.AxoView();
358             }
359         }
360
361         private void ResetBtn_Click( object sender, RoutedEventArgs e )
362         {
363             if ( ActiveViewer != null )
364             {
365                 ActiveViewer.Reset();
366             }
367         }
368
369         private void DynamicRotationBtn_Click( object sender, RoutedEventArgs e )
370         {
371             if ( ActiveViewer != null )
372             {
373                 ActiveViewer.DynamicRotation();
374             }
375         }
376
377         private void HiddenOffBtn_Click( object sender, RoutedEventArgs e )
378         {
379             IsHlrOffPushed = true;
380             IsHlrOnPushed = false;
381             if ( ActiveViewer != null )
382             {
383                 ActiveViewer.HiddenOff();
384             }
385         }
386
387         private void HiddenOnBtn_Click( object sender, RoutedEventArgs e )
388         {
389             IsHlrOffPushed = false;
390             IsHlrOnPushed = true;
391             if (ActiveViewer != null)
392             {
393                 ActiveViewer.HiddenOn();
394             }
395         }
396
397         private void AboutCommand_Executed( object sender, ExecutedRoutedEventArgs e )
398         {
399             AboutDialog aDlg = new AboutDialog();
400             aDlg.ShowDialog();
401         }
402
403         private void ToolBar_MouseEnter( object sender, MouseEventArgs e )
404         {
405             StatusBarText = "Toolbar";
406         }
407
408         private void DocumentToolBar_MouseEnter(object sender, MouseEventArgs e)
409         {
410             StatusBarText = "Document toolbar";
411         }
412
413         private void ViewToolBar_MouseEnter(object sender, MouseEventArgs e)
414         {
415             StatusBarText = "View toolbar";
416         }
417
418         private void ToolBar_MouseLeave( object sender, MouseEventArgs e )
419         {
420             StatusBarText = "";
421         }
422
423         public void OnZoomingFinished( object sender, EventArgs e )
424         {
425             IsZoomWinEnabled = true;
426         }
427
428         public bool IsWireframeEnabled
429         {
430             get
431             {
432                 if ( ActiveViewer != null )
433                 {
434                     return ActiveViewer.IsWireframeEnabled;
435                 }
436                 return false;
437             }
438         }
439
440         private void Wireframe_Click( object sender, RoutedEventArgs e )
441         {
442             if ( ActiveViewer != null )
443             {
444                 ActiveViewer.Wireframe();
445             }
446         }
447
448         private void Shading_Click( object sender, RoutedEventArgs e )
449         {
450             if ( ActiveViewer != null )
451             {
452                 ActiveViewer.Shading();
453             }
454         }
455
456         public bool IsShadingEnabled
457         {
458             get
459             {
460                 if ( ActiveViewer != null )
461                 {
462                     return ActiveViewer.IsShadingEnabled;
463                 }
464                 return false;
465             }
466         }
467
468         private void Color_Click( object sender, RoutedEventArgs e )
469         {
470             if ( ActiveViewer != null )
471             {
472                 ActiveViewer.Color();
473             }
474         }
475
476         public bool IsColorEnabled
477         {
478             get
479             {
480                 if ( ActiveViewer != null )
481                 {
482                     return ActiveViewer.IsColorEnabled;
483                 }
484                 return false;
485             }
486         }
487
488         private void Material_Click( object sender, RoutedEventArgs e )
489         {
490             if ( ActiveViewer != null )
491             {
492                 ActiveViewer.Material();
493             }
494         }
495
496         public bool IsMaterialEnabled
497         {
498             get
499             {
500                 if ( ActiveViewer != null )
501                 {
502                     return ActiveViewer.IsMaterialEnabled;
503                 }
504                 return false;
505             }
506         }
507
508         private void Transparency_Click( object sender, RoutedEventArgs e )
509         {
510             if ( ActiveViewer != null )
511             {
512                 ActiveViewer.Transparency();
513             }
514         }
515
516         public bool IsTransparencyEnabled
517         {
518             get
519             {
520                 if ( ActiveViewer != null )
521                 {
522                     return ActiveViewer.IsTransparencyEnabled;
523                 }
524                 return false;
525             }
526         }
527
528         private void Delete_Click( object sender, RoutedEventArgs e )
529         {
530             if ( ActiveViewer != null )
531             {
532                 ActiveViewer.Delete();
533             }
534         }
535
536         public bool IsDeleteEnabled
537         {
538             get
539             {
540                 if ( ActiveViewer != null )
541                 {
542                     return ActiveViewer.IsDeleteEnabled;
543                 }
544                 return false;
545             }
546         }
547
548         private void AvaliabiltyOfOperationToolbarChanged()
549         {
550             RaisePropertyChanged( "IsWireframeEnabled" );
551             RaisePropertyChanged( "IsShadingEnabled" );
552             RaisePropertyChanged( "IsTransparencyEnabled" );
553             RaisePropertyChanged( "IsColorEnabled" );
554             RaisePropertyChanged( "IsMaterialEnabled" );
555             RaisePropertyChanged( "IsDeleteEnabled" );
556         }
557
558         public void OnAvaliabiltyOfOperationsChanged( object sender, EventArgs e )
559         {
560             AvaliabiltyOfOperationToolbarChanged();
561         }
562
563         private void OnViewerChanged( object sender, SelectionChangedEventArgs e )
564         {
565             if ( e.RemovedItems.Count > 0 )
566             {
567                 WindowsFormsHost aHost = ( ( e.RemovedItems[0] as TabItem).Content ) as WindowsFormsHost;
568                 if( aHost == null )
569                 {
570                     return;
571                 }
572                 OCCViewer aViewer = aHost.Child as OCCViewer;
573                 if( aViewer != null )
574                 {
575                     aViewer.ZoomingFinished -= new EventHandler( OnZoomingFinished );
576                     aViewer.AvaliabiltyOfOperationsChanged -= new EventHandler( OnAvaliabiltyOfOperationsChanged );
577                 }
578             }
579
580             if ( e.AddedItems.Count > 0 )
581             {
582                 WindowsFormsHost aHost = ( (e.AddedItems[0] as TabItem).Content ) as WindowsFormsHost;
583                 if ( aHost == null )
584                 {
585                     return;
586                 }
587                 OCCViewer aViewer = aHost.Child as OCCViewer;
588                 if ( aViewer != null )
589                 {
590                     aViewer.ZoomingFinished += new EventHandler( OnZoomingFinished );
591                     aViewer.AvaliabiltyOfOperationsChanged += new EventHandler( OnAvaliabiltyOfOperationsChanged );
592                 }
593             }
594
595             AvaliabiltyOfOperationToolbarChanged();
596         }
597  
598         private void OnPreviewKeyDown( object sender, KeyEventArgs args )
599         {
600             if ( ActiveViewer != null )
601             {
602                 ActiveViewer.OnKeyDown( args.Key );
603             }
604         }
605
606         private void OnPreviewKeyUp( object sender, KeyEventArgs args )
607         {
608             if ( ActiveViewer != null )
609             {
610                 ActiveViewer.OnKeyUp();
611             }
612         }
613     }
614 }