source: trunk/CrypPlugins/P2PEditor/GUI/P2PEditorPresentation.xaml.cs @ 2390

Last change on this file since 2390 was 2390, checked in by kopal, 11 years ago
  • created new view for activating email address
File size: 7.0 KB
Line 
1/*
2   Copyright 2010 Paul Lelgemann, University of Duisburg-Essen
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8       http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15*/
16
17using System;
18using System.Collections.Generic;
19using System.Windows;
20using System.Windows.Threading;
21using Cryptool.P2P;
22using Cryptool.P2P.Internal;
23using Cryptool.P2PEditor.Distributed;
24using System.Threading;
25using System.Windows.Media.Animation;
26
27namespace Cryptool.P2PEditor.GUI
28{
29    /// <summary>
30    /// Interaction logic for P2PEditorPresentation.xaml
31    /// </summary>
32    public partial class P2PEditorPresentation
33    {
34        public static readonly DependencyProperty JobsProperty = DependencyProperty.Register("Jobs",
35                                                                                             typeof (
36                                                                                                 List<DistributedJob>),
37                                                                                             typeof (
38                                                                                                 P2PEditorPresentation));
39
40        public static readonly DependencyProperty IsP2PConnectedProperty =
41            DependencyProperty.Register("IsP2PConnected",
42                                        typeof (
43                                            Boolean),
44                                        typeof (
45                                            P2PEditorPresentation), new PropertyMetadata(false));
46
47        public static readonly DependencyProperty IsP2PConnectingProperty =
48            DependencyProperty.Register("IsP2PConnecting",
49                                        typeof(
50                                            Boolean),
51                                        typeof(
52                                            P2PEditorPresentation), new PropertyMetadata(false));
53
54        public P2PEditorPresentation(P2PEditor p2PEditor, JobListManager jobListManager)
55        {
56            P2PEditor = p2PEditor;
57            JobListManager = jobListManager;
58            P2PEditorPresentation = this;
59
60            P2PManager.ConnectionManager.OnP2PConnectionStateChangeOccurred += HandleChangedPeerToPeerConnectionState;
61
62            //We need this, because for a strange reason, the OnP2PConnectionStateChangeOccurred event is not triggered when reconnecting:
63            P2PManager.P2PBase.OnSystemJoined += new P2PBase.SystemJoined(delegate
64                                                                              {
65                                                                                  HandleChangedPeerToPeerConnectionState
66                                                                                      (null, true);
67                                                                              });
68
69            InitializeComponent();
70
71            UpdateDisplay();
72
73            this.Connect.P2PEditorPresentation = this;
74            this.GetNewCertificate.P2PEditorPresentation = this;
75            this.JobCreation.P2PEditorPresentation = this;
76            this.JobDisplay.P2PEditorPresentation = this;
77
78            if (this.IsP2PConnecting || !this.IsP2PConnected)
79            {
80                ShowConnectView();
81            }
82            else
83            {
84                ShowActiveJobsView();
85            }
86        }
87
88        private void HandleChangedPeerToPeerConnectionState(object sender, bool newState)
89        {
90            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(UpdateConnectionState));
91
92            if (P2PManager.IsConnected)
93            {
94                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(ShowActiveJobsView));
95            }
96            else
97            {
98                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(ShowConnectView));
99            }
100        }
101
102        public List<DistributedJob> Jobs
103        {
104            get { return (List<DistributedJob>) GetValue(JobsProperty); }
105            set { SetValue(JobsProperty, value); }
106        }
107
108        public Boolean IsP2PConnected
109        {
110            get { return (Boolean) GetValue(IsP2PConnectedProperty); }
111            set { SetValue(IsP2PConnectedProperty, value); }
112        }
113
114        public Boolean IsP2PConnecting
115        {
116            get { return (Boolean)GetValue(IsP2PConnectingProperty); }
117            set { SetValue(IsP2PConnectingProperty, value); }
118        }
119
120        private void UpdateDisplay()
121        {
122            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(UpdateConnectionState));
123            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(JobDisplay.UpdateJobList));
124        }
125
126        internal void UpdateConnectionState()
127        {
128            IsP2PConnected = P2PManager.IsConnected;
129            IsP2PConnecting = P2PManager.IsConnecting;
130        }
131
132
133        internal void hideAllViews()
134        {
135            this.JobCreation.Visibility = Visibility.Hidden;
136            this.JobDisplay.Visibility = Visibility.Hidden;
137            this.Connect.Visibility = Visibility.Hidden;
138            this.GetNewCertificate.Visibility = Visibility.Hidden;
139            this.ActivateEmailView.Visibility = Visibility.Hidden;
140        }
141
142        internal void ShowGetNewCertificateView()
143        {
144            hideAllViews();
145            this.GetNewCertificate.Visibility = Visibility.Visible;           
146        }
147
148        internal void ShowActivateEmailView()
149        {
150            hideAllViews();
151            this.ActivateEmailView.Visibility = Visibility.Visible;
152        }
153
154        internal void ShowJobCreationView()
155        {
156            hideAllViews();
157            this.JobCreation.Visibility = Visibility.Visible;
158        }
159
160        internal void ShowActiveJobsView()
161        {
162            hideAllViews();
163            this.JobDisplay.Visibility = Visibility.Visible;
164            UpdateDisplay();
165        }
166
167        internal void ShowConnectView()
168        {
169            hideAllViews();
170            this.Connect.Visibility = Visibility.Visible;         
171        }
172
173        internal void ShowHelp()
174        {         
175            //to be implemented
176        }
177
178        private void P2PEditorControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
179        {
180            if (this.IsP2PConnecting || !this.IsP2PConnected)
181            {
182                ShowConnectView();
183            }
184            else
185            {
186               ShowActiveJobsView();
187            }
188        }
189    }
190}
Note: See TracBrowser for help on using the repository browser.