source: trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/LogPresentation.xaml.cs @ 2118

Last change on this file since 2118 was 2118, checked in by matkovic, 11 years ago

-LogPresentation completely new designed
-Usability improved
-Style Changed

File size: 7.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6using System.Windows.Controls;
7using System.Windows.Data;
8using System.Windows.Documents;
9using System.Windows.Input;
10using System.Windows.Media;
11using System.Windows.Media.Imaging;
12using System.Windows.Navigation;
13using System.Windows.Shapes;
14using System.Collections.ObjectModel;
15using Cryptool.PluginBase;
16using WorkspaceManager.Model;
17using System.ComponentModel;
18using System.Windows.Controls.Primitives;
19
20namespace WorkspaceManager.View.VisualComponents
21{
22    /// <summary>
23    /// Interaction logic for LogPresentation.xaml
24    /// </summary>
25    public partial class LogPresentation : UserControl
26    {
27        private ObservableCollection<CollectionElement> valueCollection;
28
29        public ObservableCollection<CollectionElement> ValueCollection
30        {
31            get { return valueCollection; }
32            set { valueCollection = value; }
33        }
34
35        private List<NotificationLevel> listFilter;
36
37        public int ErrorCount { get; set; }
38
39        public int WarningCount { get; set; }
40
41        public int DebugCount { get; set; }
42
43        public int InfoCount { get; set; }
44
45        public event EventHandler<LogUpdated> LogUpdated;
46
47        public LogPresentation()
48        {
49            InitializeComponent();
50            valueCollection = new ObservableCollection<CollectionElement>();
51            listViewLogList.DataContext = ValueCollection;
52            DataContext = this;
53            listFilter = new List<NotificationLevel>();
54            listFilter.Add(NotificationLevel.Info);
55            listFilter.Add(NotificationLevel.Warning);
56            listFilter.Add(NotificationLevel.Error);
57            valueCollection.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(valueCollection_CollectionChanged);
58        }
59
60        void valueCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
61        {
62            ErrorCount = 0;
63            WarningCount = 0;
64            DebugCount = 0;
65            InfoCount = 0;
66            foreach (CollectionElement element in ValueCollection)
67            {
68                if (element.Level == NotificationLevel.Debug)
69                    DebugCount++;
70                if (element.Level == NotificationLevel.Info)
71                    InfoCount++;
72                if (element.Level == NotificationLevel.Error)
73                    ErrorCount++;
74                if (element.Level == NotificationLevel.Warning)
75                    WarningCount++;
76            }
77
78            textBlockDebugsCount.Text = DebugCount.ToString();
79            textBlockErrosCount.Text = ErrorCount.ToString();
80            textBlockInfosCount.Text = InfoCount.ToString();
81            textBlockWarningsCount.Text = WarningCount.ToString();
82           
83        }
84
85        public void AddLogList(List<GuiLogEventArgs> list)
86        {   
87            try
88            {
89                foreach (GuiLogEventArgs element in list)
90                {
91                    ValueCollection.Add(new CollectionElement(element));
92
93                    if (this.LogUpdated != null)
94                        this.LogUpdated.Invoke(this, new LogUpdated { log = element });
95                }
96                list.Clear();
97            }
98            catch (Exception e)
99            {
100                Console.Out.WriteLine(e.ToString());
101            }
102        }
103
104        private bool FilterCallback(object item)
105        {
106            return listFilter.Contains(((CollectionElement)item).Level);
107        }
108
109        private void buttonError_Click(object sender, RoutedEventArgs e)
110        {
111            ICollectionView view = CollectionViewSource.GetDefaultView(listViewLogList.ItemsSource);
112            if (listFilter.Contains(NotificationLevel.Error)) listFilter.Remove(NotificationLevel.Error);
113            else listFilter.Add(NotificationLevel.Error);
114            view.Filter = new Predicate<object>(FilterCallback);
115
116            ToggleButton tb = sender as ToggleButton;
117            if (tb != null)
118            {
119                if (tb.IsChecked == true) tb.ToolTip = "Hide Errors";
120                else tb.ToolTip = "Show Errors";
121            }
122        }
123
124        private void buttonWarning_Click(object sender, RoutedEventArgs e)
125        {
126            ICollectionView view = CollectionViewSource.GetDefaultView(listViewLogList.ItemsSource);
127            if (listFilter.Contains(NotificationLevel.Warning)) listFilter.Remove(NotificationLevel.Warning);
128            else listFilter.Add(NotificationLevel.Warning);
129            view.Filter = new Predicate<object>(FilterCallback);
130
131            ToggleButton tb = sender as ToggleButton;
132            if (tb != null)
133            {
134                if (tb.IsChecked == true) tb.ToolTip = "Hide Warnings";
135                else tb.ToolTip = "Show Warnings";
136            }
137        }
138
139        private void buttonInfo_Click(object sender, RoutedEventArgs e)
140        {
141            ICollectionView view = CollectionViewSource.GetDefaultView(listViewLogList.ItemsSource);
142            if (listFilter.Contains(NotificationLevel.Info)) listFilter.Remove(NotificationLevel.Info);
143            else listFilter.Add(NotificationLevel.Info);
144            view.Filter = new Predicate<object>(FilterCallback);
145
146            ToggleButton tb = sender as ToggleButton;
147            if (tb != null)
148            {
149                if (tb.IsChecked == true) tb.ToolTip = "Hide Infos";
150                else tb.ToolTip = "Show Infos";
151            }
152        }
153
154        private void buttonDebug_Click(object sender, RoutedEventArgs e)
155        {
156            ICollectionView view = CollectionViewSource.GetDefaultView(listViewLogList.ItemsSource);
157            if (listFilter.Contains(NotificationLevel.Debug)) listFilter.Remove(NotificationLevel.Debug);
158            else listFilter.Add(NotificationLevel.Debug);
159            view.Filter = new Predicate<object>(FilterCallback);
160
161            ToggleButton tb = sender as ToggleButton;
162            if (tb != null)
163            {
164                if (tb.IsChecked == true) tb.ToolTip = "Hide Debugs";
165                else tb.ToolTip = "Show Debugs";
166            }
167        }
168
169        private void buttonBalloon_Click(object sender, RoutedEventArgs e)
170        {
171            ICollectionView view = CollectionViewSource.GetDefaultView(listViewLogList.ItemsSource);
172            if (listFilter.Contains(NotificationLevel.Balloon)) listFilter.Remove(NotificationLevel.Balloon);
173            else listFilter.Add(NotificationLevel.Balloon);
174            view.Filter = new Predicate<object>(FilterCallback);
175
176            ToggleButton tb = sender as ToggleButton;
177            if (tb != null)
178            {
179                if (tb.IsChecked == true) tb.ToolTip = "Hide Balloons";
180                else tb.ToolTip = "Show Balloons";
181            }
182        }
183
184        public class CollectionElement
185        {
186            private GuiLogEventArgs element;
187
188            public String Message { get; set; }
189            public NotificationLevel Level { get; set; }
190            public String Date { get; set; }
191            public String ID { get; set; }
192
193            public CollectionElement(GuiLogEventArgs element)
194            {
195                Message = element.Message;
196                Level = element.NotificationLevel;
197                Date = element.DateTime.ToString("dd.MM.yyyy, H:mm:ss");
198            }
199        }
200
201        private void ButtonDeleteMessages_Click(object sender, RoutedEventArgs e)
202        {
203            valueCollection.Clear();
204        }
205    }
206}
Note: See TracBrowser for help on using the repository browser.