source: trunk/CrypPlugins/WorkspaceManager/WorkspaceManagerSettings.cs @ 2167

Last change on this file since 2167 was 2167, checked in by kopal, 11 years ago
File size: 9.1 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Cryptool.PluginBase;
6using System.ComponentModel;
7using System.Threading;
8using System.Windows.Controls;
9using System.Windows;
10using System.Printing;
11using System.Drawing;
12using System.Windows.Media;
13using System.Windows.Documents;
14using System.Windows.Markup;
15using WorkspaceManager.View.Container;
16using WorkspaceManager.View.VisualComponents;
17using System.Windows.Xps;
18using System.Windows.Xps.Packaging;
19using System.IO;
20using System.IO.Packaging;
21using System.Windows.Media.Imaging;
22using System.Drawing.Drawing2D;
23
24namespace WorkspaceManager
25{
26    class WorkspaceManagerSettings : ISettings
27    {
28        #region ISettings Members
29        private bool hasChanges = false;
30
31        private WorkspaceManager WorkspaceManager { get; set; }
32
33        public WorkspaceManagerSettings(WorkspaceManager manager)
34        {
35            this.Threads = "" + System.Environment.ProcessorCount;
36            this.WorkspaceManager = manager;
37        }
38
39        public bool HasChanges
40        {
41            get
42            {
43                return hasChanges;
44            }
45            set
46            {
47                hasChanges = value;
48            }
49        }
50
51        private String guiUpdateInterval = "100";
52        [TaskPane("GuiUpdateInterval", "The interval the gui should be updated in miliseconds.", null, 1, false, DisplayLevel.Beginner, ControlType.TextBox)]
53        public String GuiUpdateInterval
54        {
55            get
56            {
57                return guiUpdateInterval;
58            }
59            set
60            {
61                guiUpdateInterval = value;
62                OnPropertyChanged("GuiUpdateInterval");
63            }
64        }
65
66        private String sleepTime = "0";
67        [TaskPane("SleepTime", "The time which the execution will sleep after executing a plugin.", null, 1, false, DisplayLevel.Beginner, ControlType.TextBox)]
68        public String SleepTime
69        {
70            get
71            {
72                return sleepTime;
73            }
74            set
75            {
76                sleepTime = value;
77                OnPropertyChanged("SleepTime");
78            }
79        }
80
81        private String threads = "0";
82        [TaskPane("Threads", "The amount of used threads for scheduling.", null, 1, false, DisplayLevel.Beginner, ControlType.TextBox)]
83        public String Threads
84        {
85            get
86            {
87                return threads;
88            }
89            set
90            {
91                threads = value;
92                OnPropertyChanged("Threads");
93            }
94        }
95
96        private int threadPriority = 4;
97        [TaskPane("ThreadPriority", "Should the event handling be synchronous?", null, 1, false, DisplayLevel.Beginner, ControlType.ComboBox, new String[] { "AboveNormal", "BelowNormal", "Highest", "Lowest", "Normal" })]
98        public int ThreadPriority
99        {
100            get
101            {
102                return threadPriority;
103            }
104            set
105            {
106                threadPriority = value;
107                OnPropertyChanged("ThreadPriority");
108            }
109        } 
110
111        private bool benchmarkPlugins = false;
112        [TaskPane("BenchmarkPlugins", "Should the WorkspaceManager benchmark the amount of executed plugins per second?", null, 1, false, DisplayLevel.Beginner, ControlType.CheckBox)]
113        public bool BenchmarkPlugins
114        {
115            get
116            {
117                return benchmarkPlugins;
118            }
119            set
120            {
121                benchmarkPlugins = value;
122                OnPropertyChanged("BenchmarkPlugins");
123            }
124        }
125
126        private bool synchronousEvents = false;
127        [TaskPane("SynchronousEvents", "Should the event handling be synchronous?", null, 1, false, DisplayLevel.Beginner, ControlType.CheckBox)]
128        public bool SynchronousEvents
129        {
130            get
131            {
132                return synchronousEvents;
133            }
134            set
135            {
136                synchronousEvents = value;
137                OnPropertyChanged("SynchronousEvents");
138            }
139        }
140
141        private int logLevel = 0;
142        [TaskPane("LogLevel", "Should the event handling be synchronous?", null, 1, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Debug", "Info", "Warning", "Error"})]
143        public int LogLevel
144        {
145            get
146            {
147                return logLevel;
148            }
149            set
150            {
151                logLevel = value;
152                OnPropertyChanged("LogLevel");
153            }
154        }
155
156        [TaskPane("Print Workspace", "Print the current Workspace", null, 1, false, DisplayLevel.Beginner, ControlType.Button, null)]
157        public void PrintWorkspace()
158        {
159            try
160            {
161                const int factor = 4;
162                ModifiedCanvas control = (ModifiedCanvas)((WorkSpaceEditorView)this.WorkspaceManager.Presentation).ViewBox.Content;
163                PrintDialog dialog = new PrintDialog();
164                dialog.PageRangeSelection = PageRangeSelection.AllPages;
165                dialog.UserPageRangeEnabled = true;
166
167                Nullable<Boolean> print = dialog.ShowDialog();
168                if (print == true)
169                {
170                    WorkspaceManager.GuiLogMessage("Printing document \"" + WorkspaceManager.CurrentFilename + "\" now", NotificationLevel.Info);
171                    RenderTargetBitmap bmp = new RenderTargetBitmap((int)control.ActualWidth*factor, (int)control.ActualHeight*factor, 96*factor, 96*factor, PixelFormats.Pbgra32);
172                    bmp.Render(control);
173
174                    PrintCapabilities capabilities = dialog.PrintQueue.GetPrintCapabilities(dialog.PrintTicket);
175                    System.Windows.Size pageSize = new System.Windows.Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight);
176                    System.Windows.Size visibleSize = new System.Windows.Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
177
178                    FixedDocument fixedDoc = new FixedDocument();
179                    control.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity));
180                    control.Arrange(new Rect(new System.Windows.Point(0, 0), control.DesiredSize));
181                    System.Windows.Size size = control.DesiredSize;
182                   
183                    double xOffset = 0;
184                    double yOffset = 0;
185                    while (xOffset < size.Width)
186                    {
187                        yOffset = 0;
188                        while (yOffset < size.Height)
189                        {                           
190                            PageContent pageContent = new PageContent();
191                            FixedPage page = new FixedPage();
192                            ((IAddChild)pageContent).AddChild(page);
193                            fixedDoc.Pages.Add(pageContent);
194                            page.Width = pageSize.Width;
195                            page.Height = pageSize.Height;
196                            System.Windows.Controls.Image croppedImage = new System.Windows.Controls.Image();
197                            int width = xOffset + visibleSize.Width > size.Width ? (int)(size.Width - xOffset) : (int)visibleSize.Width;
198                            int height = yOffset + visibleSize.Height > size.Height ? (int)(size.Height - yOffset) : (int)visibleSize.Height;                           
199
200                            CroppedBitmap cb = new CroppedBitmap(bmp, new Int32Rect((int)xOffset * factor, (int)yOffset * factor, width * factor, height * factor));
201                            croppedImage.Source = cb;
202                            croppedImage.Width = width;
203                            croppedImage.Height = height;
204                            page.Children.Add(croppedImage);
205                            yOffset += visibleSize.Height;
206                        }
207                        xOffset += visibleSize.Width;
208                    }                   
209                    dialog.PrintDocument(fixedDoc.DocumentPaginator, "WorkspaceManager_" + WorkspaceManager.CurrentFilename);
210                    WorkspaceManager.GuiLogMessage("Printed \"" + fixedDoc.DocumentPaginator.PageCount + "\" pages of document \"" + WorkspaceManager.CurrentFilename + "\"", NotificationLevel.Info);
211                }
212            }
213            catch (Exception ex)
214            {
215                WorkspaceManager.GuiLogMessage("Exception:" + ex.Message, NotificationLevel.Error);
216            }
217        }
218
219        #endregion
220
221        #region INotifyPropertyChanged Members
222
223        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
224       
225        private void OnPropertyChanged(string p)
226        {
227            if (PropertyChanged != null)
228                PropertyChanged(this, new PropertyChangedEventArgs(p));
229        }
230
231        #endregion
232    }
233}
Note: See TracBrowser for help on using the repository browser.