├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── WinCCFlexArchViewer
├── About.Designer.cs
├── About.cs
├── About.resx
├── License-LGPL.txt
├── Main.Designer.cs
├── Main.cs
├── Main.resx
├── NumTextBox.cs
├── Program.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── Resources
│ ├── fullscreen2.png
│ └── save_64.png
├── WinCCFlexArchViewer.ico
├── WinCCFlexLogViewer.csproj
├── YScaleSettings.Designer.cs
├── YScaleSettings.cs
├── YScaleSettings.resx
├── app.config
├── app.manifest
├── bin
│ └── Release
│ │ ├── System.Data.SQLite.dll
│ │ ├── WinCCFlexLogViewer.exe
│ │ ├── ZedGraph.dll
│ │ ├── x64
│ │ └── SQLite.Interop.dll
│ │ └── x86
│ │ └── SQLite.Interop.dll
└── packages.config
├── WinCCFlexLogViewer.sln
└── changelog.txt
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | !*.exe
11 | !*.dll
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Build results
17 | [Dd]ebug/
18 | [Dd]ebugPublic/
19 | [Rr]elease/
20 | [Rr]eleases/
21 | [Xx]64/
22 | [Xx]86/
23 | [Bb]uild/
24 | bld/
25 | [Bb]in/
26 | [Oo]bj/
27 |
28 |
29 |
30 | # Visual Studio 2015 cache/options directory
31 | .vs/
32 | # Uncomment if you have tasks that create the project's static files in wwwroot
33 | #wwwroot/
34 |
35 | # MSTest test Results
36 | [Tt]est[Rr]esult*/
37 | [Bb]uild[Ll]og.*
38 |
39 | # NUNIT
40 | *.VisualState.xml
41 | TestResult.xml
42 |
43 | # Build Results of an ATL Project
44 | [Dd]ebugPS/
45 | [Rr]eleasePS/
46 | dlldata.c
47 |
48 | # DNX
49 | project.lock.json
50 | artifacts/
51 |
52 | *_i.c
53 | *_p.c
54 | *_i.h
55 | *.ilk
56 | *.meta
57 | *.obj
58 | *.pch
59 | *.pdb
60 | *.pgc
61 | *.pgd
62 | *.rsp
63 | *.sbr
64 | *.tlb
65 | *.tli
66 | *.tlh
67 | *.tmp
68 | *.tmp_proj
69 | *.log
70 | *.vspscc
71 | *.vssscc
72 | .builds
73 | *.pidb
74 | *.svclog
75 | *.scc
76 |
77 | # Chutzpah Test files
78 | _Chutzpah*
79 |
80 | # Visual C++ cache files
81 | ipch/
82 | *.aps
83 | *.ncb
84 | *.opendb
85 | *.opensdf
86 | *.sdf
87 | *.cachefile
88 | *.VC.db
89 |
90 | # Visual Studio profiler
91 | *.psess
92 | *.vsp
93 | *.vspx
94 | *.sap
95 |
96 | # TFS 2012 Local Workspace
97 | $tf/
98 |
99 | # Guidance Automation Toolkit
100 | *.gpState
101 |
102 | # ReSharper is a .NET coding add-in
103 | _ReSharper*/
104 | *.[Rr]e[Ss]harper
105 | *.DotSettings.user
106 |
107 | # JustCode is a .NET coding add-in
108 | .JustCode
109 |
110 | # TeamCity is a build add-in
111 | _TeamCity*
112 |
113 | # DotCover is a Code Coverage Tool
114 | *.dotCover
115 |
116 | # NCrunch
117 | _NCrunch_*
118 | .*crunch*.local.xml
119 | nCrunchTemp_*
120 |
121 | # MightyMoose
122 | *.mm.*
123 | AutoTest.Net/
124 |
125 | # Web workbench (sass)
126 | .sass-cache/
127 |
128 | # Installshield output folder
129 | [Ee]xpress/
130 |
131 | # DocProject is a documentation generator add-in
132 | DocProject/buildhelp/
133 | DocProject/Help/*.HxT
134 | DocProject/Help/*.HxC
135 | DocProject/Help/*.hhc
136 | DocProject/Help/*.hhk
137 | DocProject/Help/*.hhp
138 | DocProject/Help/Html2
139 | DocProject/Help/html
140 |
141 | # Click-Once directory
142 | publish/
143 |
144 | # Publish Web Output
145 | *.[Pp]ublish.xml
146 | *.azurePubxml
147 |
148 | # TODO: Un-comment the next line if you do not want to checkin
149 | # your web deploy settings because they may include unencrypted
150 | # passwords
151 | #*.pubxml
152 | *.publishproj
153 |
154 | # NuGet Packages
155 | *.nupkg
156 | # The packages folder can be ignored because of Package Restore
157 | **/packages/*
158 | # except build/, which is used as an MSBuild target.
159 | !**/packages/build/
160 | # Uncomment if necessary however generally it will be regenerated when needed
161 | #!**/packages/repositories.config
162 | # NuGet v3's project.json files produces more ignoreable files
163 | *.nuget.props
164 | *.nuget.targets
165 |
166 | # Microsoft Azure Build Output
167 | csx/
168 | *.build.csdef
169 |
170 | # Microsoft Azure Emulator
171 | ecf/
172 | rcf/
173 |
174 | # Windows Store app package directory
175 | AppPackages/
176 | BundleArtifacts/
177 |
178 | # Visual Studio cache files
179 | # files ending in .cache can be ignored
180 | *.[Cc]ache
181 | # but keep track of directories ending in .cache
182 | !*.[Cc]ache/
183 |
184 | # Others
185 | ClientBin/
186 | [Ss]tyle[Cc]op.*
187 | ~$*
188 | *~
189 | *.dbmdl
190 | *.dbproj.schemaview
191 | *.pfx
192 | *.publishsettings
193 | node_modules/
194 | orleans.codegen.cs
195 |
196 | # RIA/Silverlight projects
197 | Generated_Code/
198 |
199 | # Backup & report files from converting an old project file
200 | # to a newer Visual Studio version. Backup files are not needed,
201 | # because we have git ;-)
202 | _UpgradeReport_Files/
203 | Backup*/
204 | UpgradeLog*.XML
205 | UpgradeLog*.htm
206 |
207 | # SQL Server files
208 | *.mdf
209 | *.ldf
210 |
211 | # Business Intelligence projects
212 | *.rdl.data
213 | *.bim.layout
214 | *.bim_*.settings
215 |
216 | # Microsoft Fakes
217 | FakesAssemblies/
218 |
219 | # GhostDoc plugin setting file
220 | *.GhostDoc.xml
221 |
222 | # Node.js Tools for Visual Studio
223 | .ntvs_analysis.dat
224 |
225 | # Visual Studio 6 build log
226 | *.plg
227 |
228 | # Visual Studio 6 workspace options file
229 | *.opt
230 |
231 | # Visual Studio LightSwitch build output
232 | **/*.HTMLClient/GeneratedArtifacts
233 | **/*.DesktopClient/GeneratedArtifacts
234 | **/*.DesktopClient/ModelManifest.xml
235 | **/*.Server/GeneratedArtifacts
236 | **/*.Server/ModelManifest.xml
237 | _Pvt_Extensions
238 |
239 | # LightSwitch generated files
240 | GeneratedArtifacts/
241 | ModelManifest.xml
242 |
243 | # Paket dependency manager
244 | .paket/paket.exe
245 |
246 | # FAKE - F# Make
247 | .fake/
248 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 yur
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # WinCCflexLogViewer
2 |
3 | WinCCflexLogViewer is a lightweight and simple-to-use archive Data log Viewer / Analyzer.
4 |
5 | It is compatible with archives created with the WinCC (TIA Portal) Panel or PC Runtime as well as with the WinCC flexible Panel or PC Runtime.
6 |
7 | Supports CSV (*.csv, *.txt) and SQLite (*.rdb) Siemens data log formats.
8 |
9 | Allows to export parsed log data to CSV file (for further analysis, printing e.g.), print selected curves.
10 |
11 | The tool is a stand-alone GUI application developed in C# language and requires .Net Framework 3.5 or higher.
12 |
13 | ## Thanks to
14 | **plc2k** http://plc2k.com/wincc-flexible-tia-portal-archive-viewer
15 |
16 | **ZedGraph** https://github.com/ZedGraph/ZedGraph
17 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/About.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace WinCCFlexLogViewer
2 | {
3 | public partial class About : System.Windows.Forms.Form
4 | {
5 | protected override void Dispose(bool disposing)
6 | {
7 | if (disposing && components != null)
8 | {
9 | components.Dispose();
10 | }
11 | base.Dispose(disposing);
12 | }
13 |
14 | private void InitializeComponent()
15 | {
16 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(About));
17 | this.pictureBox1 = new System.Windows.Forms.PictureBox();
18 | this.label1 = new System.Windows.Forms.Label();
19 | this.label3 = new System.Windows.Forms.Label();
20 | this.label4 = new System.Windows.Forms.Label();
21 | this.linkLabel1 = new System.Windows.Forms.LinkLabel();
22 | this.button1 = new System.Windows.Forms.Button();
23 | this.linkLabel2 = new System.Windows.Forms.LinkLabel();
24 | this.lblBuild = new System.Windows.Forms.Label();
25 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
26 | this.SuspendLayout();
27 | //
28 | // pictureBox1
29 | //
30 | this.pictureBox1.BackgroundImage = global::WinCCFlexLogViewer.Properties.Resources.logo;
31 | this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
32 | this.pictureBox1.Location = new System.Drawing.Point(12, 12);
33 | this.pictureBox1.Name = "pictureBox1";
34 | this.pictureBox1.Size = new System.Drawing.Size(110, 110);
35 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
36 | this.pictureBox1.TabIndex = 0;
37 | this.pictureBox1.TabStop = false;
38 | //
39 | // label1
40 | //
41 | this.label1.AutoSize = true;
42 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
43 | this.label1.Location = new System.Drawing.Point(151, 6);
44 | this.label1.Name = "label1";
45 | this.label1.Size = new System.Drawing.Size(225, 16);
46 | this.label1.TabIndex = 1;
47 | this.label1.Text = "WinCC flexible Log Viewer 1.9.1";
48 | //
49 | // label3
50 | //
51 | this.label3.AutoSize = true;
52 | this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
53 | this.label3.Location = new System.Drawing.Point(155, 28);
54 | this.label3.Name = "label3";
55 | this.label3.Size = new System.Drawing.Size(129, 26);
56 | this.label3.TabIndex = 3;
57 | this.label3.Text = "Copyright (C) 2016 plc2k\r\nCopyright (C) 2018 yur";
58 | //
59 | // label4
60 | //
61 | this.label4.AutoSize = true;
62 | this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
63 | this.label4.Location = new System.Drawing.Point(154, 62);
64 | this.label4.Name = "label4";
65 | this.label4.Size = new System.Drawing.Size(233, 165);
66 | this.label4.TabIndex = 4;
67 | this.label4.Text = resources.GetString("label4.Text");
68 | //
69 | // linkLabel1
70 | //
71 | this.linkLabel1.AutoSize = true;
72 | this.linkLabel1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
73 | this.linkLabel1.Location = new System.Drawing.Point(282, 28);
74 | this.linkLabel1.Name = "linkLabel1";
75 | this.linkLabel1.Size = new System.Drawing.Size(87, 13);
76 | this.linkLabel1.TabIndex = 6;
77 | this.linkLabel1.TabStop = true;
78 | this.linkLabel1.Text = "http://plc2k.com";
79 | this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
80 | //
81 | // button1
82 | //
83 | this.button1.Location = new System.Drawing.Point(189, 235);
84 | this.button1.Name = "button1";
85 | this.button1.Size = new System.Drawing.Size(75, 23);
86 | this.button1.TabIndex = 7;
87 | this.button1.Text = "OK";
88 | this.button1.UseVisualStyleBackColor = true;
89 | this.button1.Click += new System.EventHandler(this.button1_Click);
90 | //
91 | // linkLabel2
92 | //
93 | this.linkLabel2.AutoSize = true;
94 | this.linkLabel2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
95 | this.linkLabel2.Location = new System.Drawing.Point(270, 41);
96 | this.linkLabel2.Name = "linkLabel2";
97 | this.linkLabel2.Size = new System.Drawing.Size(140, 13);
98 | this.linkLabel2.TabIndex = 8;
99 | this.linkLabel2.TabStop = true;
100 | this.linkLabel2.Text = "https://github.com/yuriqdev";
101 | this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel2_LinkClicked);
102 | //
103 | // lblBuild
104 | //
105 | this.lblBuild.AutoSize = true;
106 | this.lblBuild.Location = new System.Drawing.Point(13, 129);
107 | this.lblBuild.Name = "lblBuild";
108 | this.lblBuild.Size = new System.Drawing.Size(91, 13);
109 | this.lblBuild.TabIndex = 9;
110 | //
111 | // About
112 | //
113 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
114 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
115 | this.ClientSize = new System.Drawing.Size(453, 265);
116 | this.Controls.Add(this.lblBuild);
117 | this.Controls.Add(this.linkLabel2);
118 | this.Controls.Add(this.button1);
119 | this.Controls.Add(this.linkLabel1);
120 | this.Controls.Add(this.label4);
121 | this.Controls.Add(this.label3);
122 | this.Controls.Add(this.label1);
123 | this.Controls.Add(this.pictureBox1);
124 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
125 | this.MaximizeBox = false;
126 | this.MinimizeBox = false;
127 | this.Name = "About";
128 | this.ShowIcon = false;
129 | this.ShowInTaskbar = false;
130 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
131 | this.Text = "About WinCC flex Log Viewer";
132 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
133 | this.ResumeLayout(false);
134 | this.PerformLayout();
135 |
136 | }
137 | //
138 | private System.ComponentModel.IContainer components;
139 | private System.Windows.Forms.PictureBox pictureBox1;
140 | private System.Windows.Forms.Label label1;
141 | private System.Windows.Forms.Label label3;
142 | private System.Windows.Forms.Label label4;
143 | private System.Windows.Forms.LinkLabel linkLabel1;
144 | private System.Windows.Forms.Button button1;
145 | private System.Windows.Forms.LinkLabel linkLabel2;
146 | private System.Windows.Forms.Label lblBuild;
147 | }
148 | }
149 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/About.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.Windows.Forms;
4 | //using WinCCFlexLogViewer.Properties;
5 |
6 | namespace WinCCFlexLogViewer
7 | {
8 | public partial class About : Form
9 | {
10 | public About()
11 | {
12 | InitializeComponent();
13 | var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
14 | DateTime buildDate = new DateTime(2000, 1, 1).AddDays(version.Build).AddSeconds(version.Revision * 2);
15 | lblBuild.Text = buildDate.ToString();
16 | }
17 |
18 | private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
19 | {
20 | linkLabel1.LinkVisited = true;
21 | Process.Start("http://plc2k.com");
22 | }
23 |
24 | private void button1_Click(object sender, EventArgs e)
25 | {
26 | Close();
27 | }
28 |
29 | private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
30 | {
31 | linkLabel1.LinkVisited = true;
32 | Process.Start("https://github.com/yuriqdev/WinCCflexLogViewer");
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/About.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | Mouse Controls:
122 | Pan: mouse wheel button
123 | Zoom In/Out: mouse wheel
124 | Zoom Selection: mouse left
125 | Menu: mouse right button
126 |
127 | Command line arguments:
128 | -f "filename" open specified file
129 | -fullscreen start in fullscreen mode
130 | -nofilebutton hide openfile button
131 | -noprintbutton hide print button
132 |
133 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/License-LGPL.txt:
--------------------------------------------------------------------------------
1 | GNU LESSER GENERAL PUBLIC LICENSE
2 | Version 2.1, February 1999
3 |
4 | Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5 | 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6 | Everyone is permitted to copy and distribute verbatim copies
7 | of this license document, but changing it is not allowed.
8 |
9 | [This is the first released version of the Lesser GPL. It also counts
10 | as the successor of the GNU Library Public License, version 2, hence
11 | the version number 2.1.]
12 |
13 | Preamble
14 |
15 | The licenses for most software are designed to take away your
16 | freedom to share and change it. By contrast, the GNU General Public
17 | Licenses are intended to guarantee your freedom to share and change
18 | free software--to make sure the software is free for all its users.
19 |
20 | This license, the Lesser General Public License, applies to some
21 | specially designated software packages--typically libraries--of the
22 | Free Software Foundation and other authors who decide to use it. You
23 | can use it too, but we suggest you first think carefully about whether
24 | this license or the ordinary General Public License is the better
25 | strategy to use in any particular case, based on the explanations below.
26 |
27 | When we speak of free software, we are referring to freedom of use,
28 | not price. Our General Public Licenses are designed to make sure that
29 | you have the freedom to distribute copies of free software (and charge
30 | for this service if you wish); that you receive source code or can get
31 | it if you want it; that you can change the software and use pieces of
32 | it in new free programs; and that you are informed that you can do
33 | these things.
34 |
35 | To protect your rights, we need to make restrictions that forbid
36 | distributors to deny you these rights or to ask you to surrender these
37 | rights. These restrictions translate to certain responsibilities for
38 | you if you distribute copies of the library or if you modify it.
39 |
40 | For example, if you distribute copies of the library, whether gratis
41 | or for a fee, you must give the recipients all the rights that we gave
42 | you. You must make sure that they, too, receive or can get the source
43 | code. If you link other code with the library, you must provide
44 | complete object files to the recipients, so that they can relink them
45 | with the library after making changes to the library and recompiling
46 | it. And you must show them these terms so they know their rights.
47 |
48 | We protect your rights with a two-step method: (1) we copyright the
49 | library, and (2) we offer you this license, which gives you legal
50 | permission to copy, distribute and/or modify the library.
51 |
52 | To protect each distributor, we want to make it very clear that
53 | there is no warranty for the free library. Also, if the library is
54 | modified by someone else and passed on, the recipients should know
55 | that what they have is not the original version, so that the original
56 | author's reputation will not be affected by problems that might be
57 | introduced by others.
58 |
59 | Finally, software patents pose a constant threat to the existence of
60 | any free program. We wish to make sure that a company cannot
61 | effectively restrict the users of a free program by obtaining a
62 | restrictive license from a patent holder. Therefore, we insist that
63 | any patent license obtained for a version of the library must be
64 | consistent with the full freedom of use specified in this license.
65 |
66 | Most GNU software, including some libraries, is covered by the
67 | ordinary GNU General Public License. This license, the GNU Lesser
68 | General Public License, applies to certain designated libraries, and
69 | is quite different from the ordinary General Public License. We use
70 | this license for certain libraries in order to permit linking those
71 | libraries into non-free programs.
72 |
73 | When a program is linked with a library, whether statically or using
74 | a shared library, the combination of the two is legally speaking a
75 | combined work, a derivative of the original library. The ordinary
76 | General Public License therefore permits such linking only if the
77 | entire combination fits its criteria of freedom. The Lesser General
78 | Public License permits more lax criteria for linking other code with
79 | the library.
80 |
81 | We call this license the "Lesser" General Public License because it
82 | does Less to protect the user's freedom than the ordinary General
83 | Public License. It also provides other free software developers Less
84 | of an advantage over competing non-free programs. These disadvantages
85 | are the reason we use the ordinary General Public License for many
86 | libraries. However, the Lesser license provides advantages in certain
87 | special circumstances.
88 |
89 | For example, on rare occasions, there may be a special need to
90 | encourage the widest possible use of a certain library, so that it becomes
91 | a de-facto standard. To achieve this, non-free programs must be
92 | allowed to use the library. A more frequent case is that a free
93 | library does the same job as widely used non-free libraries. In this
94 | case, there is little to gain by limiting the free library to free
95 | software only, so we use the Lesser General Public License.
96 |
97 | In other cases, permission to use a particular library in non-free
98 | programs enables a greater number of people to use a large body of
99 | free software. For example, permission to use the GNU C Library in
100 | non-free programs enables many more people to use the whole GNU
101 | operating system, as well as its variant, the GNU/Linux operating
102 | system.
103 |
104 | Although the Lesser General Public License is Less protective of the
105 | users' freedom, it does ensure that the user of a program that is
106 | linked with the Library has the freedom and the wherewithal to run
107 | that program using a modified version of the Library.
108 |
109 | The precise terms and conditions for copying, distribution and
110 | modification follow. Pay close attention to the difference between a
111 | "work based on the library" and a "work that uses the library". The
112 | former contains code derived from the library, whereas the latter must
113 | be combined with the library in order to run.
114 |
115 | GNU LESSER GENERAL PUBLIC LICENSE
116 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117 |
118 | 0. This License Agreement applies to any software library or other
119 | program which contains a notice placed by the copyright holder or
120 | other authorized party saying it may be distributed under the terms of
121 | this Lesser General Public License (also called "this License").
122 | Each licensee is addressed as "you".
123 |
124 | A "library" means a collection of software functions and/or data
125 | prepared so as to be conveniently linked with application programs
126 | (which use some of those functions and data) to form executables.
127 |
128 | The "Library", below, refers to any such software library or work
129 | which has been distributed under these terms. A "work based on the
130 | Library" means either the Library or any derivative work under
131 | copyright law: that is to say, a work containing the Library or a
132 | portion of it, either verbatim or with modifications and/or translated
133 | straightforwardly into another language. (Hereinafter, translation is
134 | included without limitation in the term "modification".)
135 |
136 | "Source code" for a work means the preferred form of the work for
137 | making modifications to it. For a library, complete source code means
138 | all the source code for all modules it contains, plus any associated
139 | interface definition files, plus the scripts used to control compilation
140 | and installation of the library.
141 |
142 | Activities other than copying, distribution and modification are not
143 | covered by this License; they are outside its scope. The act of
144 | running a program using the Library is not restricted, and output from
145 | such a program is covered only if its contents constitute a work based
146 | on the Library (independent of the use of the Library in a tool for
147 | writing it). Whether that is true depends on what the Library does
148 | and what the program that uses the Library does.
149 |
150 | 1. You may copy and distribute verbatim copies of the Library's
151 | complete source code as you receive it, in any medium, provided that
152 | you conspicuously and appropriately publish on each copy an
153 | appropriate copyright notice and disclaimer of warranty; keep intact
154 | all the notices that refer to this License and to the absence of any
155 | warranty; and distribute a copy of this License along with the
156 | Library.
157 |
158 | You may charge a fee for the physical act of transferring a copy,
159 | and you may at your option offer warranty protection in exchange for a
160 | fee.
161 |
162 | 2. You may modify your copy or copies of the Library or any portion
163 | of it, thus forming a work based on the Library, and copy and
164 | distribute such modifications or work under the terms of Section 1
165 | above, provided that you also meet all of these conditions:
166 |
167 | a) The modified work must itself be a software library.
168 |
169 | b) You must cause the files modified to carry prominent notices
170 | stating that you changed the files and the date of any change.
171 |
172 | c) You must cause the whole of the work to be licensed at no
173 | charge to all third parties under the terms of this License.
174 |
175 | d) If a facility in the modified Library refers to a function or a
176 | table of data to be supplied by an application program that uses
177 | the facility, other than as an argument passed when the facility
178 | is invoked, then you must make a good faith effort to ensure that,
179 | in the event an application does not supply such function or
180 | table, the facility still operates, and performs whatever part of
181 | its purpose remains meaningful.
182 |
183 | (For example, a function in a library to compute square roots has
184 | a purpose that is entirely well-defined independent of the
185 | application. Therefore, Subsection 2d requires that any
186 | application-supplied function or table used by this function must
187 | be optional: if the application does not supply it, the square
188 | root function must still compute square roots.)
189 |
190 | These requirements apply to the modified work as a whole. If
191 | identifiable sections of that work are not derived from the Library,
192 | and can be reasonably considered independent and separate works in
193 | themselves, then this License, and its terms, do not apply to those
194 | sections when you distribute them as separate works. But when you
195 | distribute the same sections as part of a whole which is a work based
196 | on the Library, the distribution of the whole must be on the terms of
197 | this License, whose permissions for other licensees extend to the
198 | entire whole, and thus to each and every part regardless of who wrote
199 | it.
200 |
201 | Thus, it is not the intent of this section to claim rights or contest
202 | your rights to work written entirely by you; rather, the intent is to
203 | exercise the right to control the distribution of derivative or
204 | collective works based on the Library.
205 |
206 | In addition, mere aggregation of another work not based on the Library
207 | with the Library (or with a work based on the Library) on a volume of
208 | a storage or distribution medium does not bring the other work under
209 | the scope of this License.
210 |
211 | 3. You may opt to apply the terms of the ordinary GNU General Public
212 | License instead of this License to a given copy of the Library. To do
213 | this, you must alter all the notices that refer to this License, so
214 | that they refer to the ordinary GNU General Public License, version 2,
215 | instead of to this License. (If a newer version than version 2 of the
216 | ordinary GNU General Public License has appeared, then you can specify
217 | that version instead if you wish.) Do not make any other change in
218 | these notices.
219 |
220 | Once this change is made in a given copy, it is irreversible for
221 | that copy, so the ordinary GNU General Public License applies to all
222 | subsequent copies and derivative works made from that copy.
223 |
224 | This option is useful when you wish to copy part of the code of
225 | the Library into a program that is not a library.
226 |
227 | 4. You may copy and distribute the Library (or a portion or
228 | derivative of it, under Section 2) in object code or executable form
229 | under the terms of Sections 1 and 2 above provided that you accompany
230 | it with the complete corresponding machine-readable source code, which
231 | must be distributed under the terms of Sections 1 and 2 above on a
232 | medium customarily used for software interchange.
233 |
234 | If distribution of object code is made by offering access to copy
235 | from a designated place, then offering equivalent access to copy the
236 | source code from the same place satisfies the requirement to
237 | distribute the source code, even though third parties are not
238 | compelled to copy the source along with the object code.
239 |
240 | 5. A program that contains no derivative of any portion of the
241 | Library, but is designed to work with the Library by being compiled or
242 | linked with it, is called a "work that uses the Library". Such a
243 | work, in isolation, is not a derivative work of the Library, and
244 | therefore falls outside the scope of this License.
245 |
246 | However, linking a "work that uses the Library" with the Library
247 | creates an executable that is a derivative of the Library (because it
248 | contains portions of the Library), rather than a "work that uses the
249 | library". The executable is therefore covered by this License.
250 | Section 6 states terms for distribution of such executables.
251 |
252 | When a "work that uses the Library" uses material from a header file
253 | that is part of the Library, the object code for the work may be a
254 | derivative work of the Library even though the source code is not.
255 | Whether this is true is especially significant if the work can be
256 | linked without the Library, or if the work is itself a library. The
257 | threshold for this to be true is not precisely defined by law.
258 |
259 | If such an object file uses only numerical parameters, data
260 | structure layouts and accessors, and small macros and small inline
261 | functions (ten lines or less in length), then the use of the object
262 | file is unrestricted, regardless of whether it is legally a derivative
263 | work. (Executables containing this object code plus portions of the
264 | Library will still fall under Section 6.)
265 |
266 | Otherwise, if the work is a derivative of the Library, you may
267 | distribute the object code for the work under the terms of Section 6.
268 | Any executables containing that work also fall under Section 6,
269 | whether or not they are linked directly with the Library itself.
270 |
271 | 6. As an exception to the Sections above, you may also combine or
272 | link a "work that uses the Library" with the Library to produce a
273 | work containing portions of the Library, and distribute that work
274 | under terms of your choice, provided that the terms permit
275 | modification of the work for the customer's own use and reverse
276 | engineering for debugging such modifications.
277 |
278 | You must give prominent notice with each copy of the work that the
279 | Library is used in it and that the Library and its use are covered by
280 | this License. You must supply a copy of this License. If the work
281 | during execution displays copyright notices, you must include the
282 | copyright notice for the Library among them, as well as a reference
283 | directing the user to the copy of this License. Also, you must do one
284 | of these things:
285 |
286 | a) Accompany the work with the complete corresponding
287 | machine-readable source code for the Library including whatever
288 | changes were used in the work (which must be distributed under
289 | Sections 1 and 2 above); and, if the work is an executable linked
290 | with the Library, with the complete machine-readable "work that
291 | uses the Library", as object code and/or source code, so that the
292 | user can modify the Library and then relink to produce a modified
293 | executable containing the modified Library. (It is understood
294 | that the user who changes the contents of definitions files in the
295 | Library will not necessarily be able to recompile the application
296 | to use the modified definitions.)
297 |
298 | b) Use a suitable shared library mechanism for linking with the
299 | Library. A suitable mechanism is one that (1) uses at run time a
300 | copy of the library already present on the user's computer system,
301 | rather than copying library functions into the executable, and (2)
302 | will operate properly with a modified version of the library, if
303 | the user installs one, as long as the modified version is
304 | interface-compatible with the version that the work was made with.
305 |
306 | c) Accompany the work with a written offer, valid for at
307 | least three years, to give the same user the materials
308 | specified in Subsection 6a, above, for a charge no more
309 | than the cost of performing this distribution.
310 |
311 | d) If distribution of the work is made by offering access to copy
312 | from a designated place, offer equivalent access to copy the above
313 | specified materials from the same place.
314 |
315 | e) Verify that the user has already received a copy of these
316 | materials or that you have already sent this user a copy.
317 |
318 | For an executable, the required form of the "work that uses the
319 | Library" must include any data and utility programs needed for
320 | reproducing the executable from it. However, as a special exception,
321 | the materials to be distributed need not include anything that is
322 | normally distributed (in either source or binary form) with the major
323 | components (compiler, kernel, and so on) of the operating system on
324 | which the executable runs, unless that component itself accompanies
325 | the executable.
326 |
327 | It may happen that this requirement contradicts the license
328 | restrictions of other proprietary libraries that do not normally
329 | accompany the operating system. Such a contradiction means you cannot
330 | use both them and the Library together in an executable that you
331 | distribute.
332 |
333 | 7. You may place library facilities that are a work based on the
334 | Library side-by-side in a single library together with other library
335 | facilities not covered by this License, and distribute such a combined
336 | library, provided that the separate distribution of the work based on
337 | the Library and of the other library facilities is otherwise
338 | permitted, and provided that you do these two things:
339 |
340 | a) Accompany the combined library with a copy of the same work
341 | based on the Library, uncombined with any other library
342 | facilities. This must be distributed under the terms of the
343 | Sections above.
344 |
345 | b) Give prominent notice with the combined library of the fact
346 | that part of it is a work based on the Library, and explaining
347 | where to find the accompanying uncombined form of the same work.
348 |
349 | 8. You may not copy, modify, sublicense, link with, or distribute
350 | the Library except as expressly provided under this License. Any
351 | attempt otherwise to copy, modify, sublicense, link with, or
352 | distribute the Library is void, and will automatically terminate your
353 | rights under this License. However, parties who have received copies,
354 | or rights, from you under this License will not have their licenses
355 | terminated so long as such parties remain in full compliance.
356 |
357 | 9. You are not required to accept this License, since you have not
358 | signed it. However, nothing else grants you permission to modify or
359 | distribute the Library or its derivative works. These actions are
360 | prohibited by law if you do not accept this License. Therefore, by
361 | modifying or distributing the Library (or any work based on the
362 | Library), you indicate your acceptance of this License to do so, and
363 | all its terms and conditions for copying, distributing or modifying
364 | the Library or works based on it.
365 |
366 | 10. Each time you redistribute the Library (or any work based on the
367 | Library), the recipient automatically receives a license from the
368 | original licensor to copy, distribute, link with or modify the Library
369 | subject to these terms and conditions. You may not impose any further
370 | restrictions on the recipients' exercise of the rights granted herein.
371 | You are not responsible for enforcing compliance by third parties with
372 | this License.
373 |
374 | 11. If, as a consequence of a court judgment or allegation of patent
375 | infringement or for any other reason (not limited to patent issues),
376 | conditions are imposed on you (whether by court order, agreement or
377 | otherwise) that contradict the conditions of this License, they do not
378 | excuse you from the conditions of this License. If you cannot
379 | distribute so as to satisfy simultaneously your obligations under this
380 | License and any other pertinent obligations, then as a consequence you
381 | may not distribute the Library at all. For example, if a patent
382 | license would not permit royalty-free redistribution of the Library by
383 | all those who receive copies directly or indirectly through you, then
384 | the only way you could satisfy both it and this License would be to
385 | refrain entirely from distribution of the Library.
386 |
387 | If any portion of this section is held invalid or unenforceable under any
388 | particular circumstance, the balance of the section is intended to apply,
389 | and the section as a whole is intended to apply in other circumstances.
390 |
391 | It is not the purpose of this section to induce you to infringe any
392 | patents or other property right claims or to contest validity of any
393 | such claims; this section has the sole purpose of protecting the
394 | integrity of the free software distribution system which is
395 | implemented by public license practices. Many people have made
396 | generous contributions to the wide range of software distributed
397 | through that system in reliance on consistent application of that
398 | system; it is up to the author/donor to decide if he or she is willing
399 | to distribute software through any other system and a licensee cannot
400 | impose that choice.
401 |
402 | This section is intended to make thoroughly clear what is believed to
403 | be a consequence of the rest of this License.
404 |
405 | 12. If the distribution and/or use of the Library is restricted in
406 | certain countries either by patents or by copyrighted interfaces, the
407 | original copyright holder who places the Library under this License may add
408 | an explicit geographical distribution limitation excluding those countries,
409 | so that distribution is permitted only in or among countries not thus
410 | excluded. In such case, this License incorporates the limitation as if
411 | written in the body of this License.
412 |
413 | 13. The Free Software Foundation may publish revised and/or new
414 | versions of the Lesser General Public License from time to time.
415 | Such new versions will be similar in spirit to the present version,
416 | but may differ in detail to address new problems or concerns.
417 |
418 | Each version is given a distinguishing version number. If the Library
419 | specifies a version number of this License which applies to it and
420 | "any later version", you have the option of following the terms and
421 | conditions either of that version or of any later version published by
422 | the Free Software Foundation. If the Library does not specify a
423 | license version number, you may choose any version ever published by
424 | the Free Software Foundation.
425 |
426 | 14. If you wish to incorporate parts of the Library into other free
427 | programs whose distribution conditions are incompatible with these,
428 | write to the author to ask for permission. For software which is
429 | copyrighted by the Free Software Foundation, write to the Free
430 | Software Foundation; we sometimes make exceptions for this. Our
431 | decision will be guided by the two goals of preserving the free status
432 | of all derivatives of our free software and of promoting the sharing
433 | and reuse of software generally.
434 |
435 | NO WARRANTY
436 |
437 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438 | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440 | OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441 | KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444 | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446 |
447 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448 | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449 | AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450 | FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451 | CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452 | LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454 | FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456 | DAMAGES.
457 |
458 | END OF TERMS AND CONDITIONS
459 |
460 | How to Apply These Terms to Your New Libraries
461 |
462 | If you develop a new library, and you want it to be of the greatest
463 | possible use to the public, we recommend making it free software that
464 | everyone can redistribute and change. You can do so by permitting
465 | redistribution under these terms (or, alternatively, under the terms of the
466 | ordinary General Public License).
467 |
468 | To apply these terms, attach the following notices to the library. It is
469 | safest to attach them to the start of each source file to most effectively
470 | convey the exclusion of warranty; and each file should have at least the
471 | "copyright" line and a pointer to where the full notice is found.
472 |
473 |
474 | Copyright (C)
475 |
476 | This library is free software; you can redistribute it and/or
477 | modify it under the terms of the GNU Lesser General Public
478 | License as published by the Free Software Foundation; either
479 | version 2.1 of the License, or (at your option) any later version.
480 |
481 | This library is distributed in the hope that it will be useful,
482 | but WITHOUT ANY WARRANTY; without even the implied warranty of
483 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484 | Lesser General Public License for more details.
485 |
486 | You should have received a copy of the GNU Lesser General Public
487 | License along with this library; if not, write to the Free Software
488 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
489 |
490 | Also add information on how to contact you by electronic and paper mail.
491 |
492 | You should also get your employer (if you work as a programmer) or your
493 | school, if any, to sign a "copyright disclaimer" for the library, if
494 | necessary. Here is a sample; alter the names:
495 |
496 | Yoyodyne, Inc., hereby disclaims all copyright interest in the
497 | library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498 |
499 | , 1 April 1990
500 | Ty Coon, President of Vice
501 |
502 | That's all there is to it!
503 |
504 |
505 |
506 |
507 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/Main.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace WinCCFlexLogViewer
2 | {
3 | public partial class Main : System.Windows.Forms.Form
4 | {
5 | protected override void Dispose(bool disposing)
6 | {
7 | if (disposing && components != null)
8 | {
9 | components.Dispose();
10 | }
11 | base.Dispose(disposing);
12 | }
13 | //
14 | private void InitializeComponent()
15 | {
16 | this.components = new System.ComponentModel.Container();
17 | this.menuStrip1 = new System.Windows.Forms.MenuStrip();
18 | this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
19 | this.togleTableToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
20 | this.hideshowcurveMenuItem = new System.Windows.Forms.ToolStripMenuItem();
21 | this.printMenuItem = new System.Windows.Forms.ToolStripMenuItem();
22 | this.lockunlockvzoomMenuItem = new System.Windows.Forms.ToolStripMenuItem();
23 | this.ExitStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
24 | this.aboutMenuItem = new System.Windows.Forms.ToolStripMenuItem();
25 | this.ControlsStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
26 | this.fullscreenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
27 | this.SaveCSVMenuItem = new System.Windows.Forms.ToolStripMenuItem();
28 | this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
29 | this.splitContainer1 = new System.Windows.Forms.SplitContainer();
30 | this.controlPanel = new System.Windows.Forms.Panel();
31 | this.button_loclunlockvzoom = new System.Windows.Forms.Button();
32 | this.button_panright = new System.Windows.Forms.Button();
33 | this.button_zoomin = new System.Windows.Forms.Button();
34 | this.button_panbottom = new System.Windows.Forms.Button();
35 | this.button_resetzoompan = new System.Windows.Forms.Button();
36 | this.button_pantop = new System.Windows.Forms.Button();
37 | this.button_zoomout = new System.Windows.Forms.Button();
38 | this.button_panleft = new System.Windows.Forms.Button();
39 | this.button_print = new System.Windows.Forms.Button();
40 | this.panel1 = new System.Windows.Forms.Panel();
41 | this.loadingpanel = new System.Windows.Forms.Panel();
42 | this.progress_counter_textlabel = new System.Windows.Forms.Label();
43 | this.loadingpictureBox = new System.Windows.Forms.PictureBox();
44 | this.DTrend = new ZedGraph.ZedGraphControl();
45 | this.dataGridView_data = new System.Windows.Forms.DataGridView();
46 | this.progress_timer = new System.Windows.Forms.Timer(this.components);
47 | this.printDlg = new System.Windows.Forms.PrintDialog();
48 | this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
49 | this.menuStrip1.SuspendLayout();
50 | this.splitContainer1.Panel1.SuspendLayout();
51 | this.splitContainer1.Panel2.SuspendLayout();
52 | this.splitContainer1.SuspendLayout();
53 | this.controlPanel.SuspendLayout();
54 | this.panel1.SuspendLayout();
55 | this.loadingpanel.SuspendLayout();
56 | ((System.ComponentModel.ISupportInitialize)(this.loadingpictureBox)).BeginInit();
57 | ((System.ComponentModel.ISupportInitialize)(this.dataGridView_data)).BeginInit();
58 | this.SuspendLayout();
59 | //
60 | // menuStrip1
61 | //
62 | this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
63 | this.fileToolStripMenuItem,
64 | this.togleTableToolStripMenuItem,
65 | this.hideshowcurveMenuItem,
66 | this.printMenuItem,
67 | this.lockunlockvzoomMenuItem,
68 | this.ExitStripMenuItem,
69 | this.aboutMenuItem,
70 | this.ControlsStripMenuItem,
71 | this.fullscreenToolStripMenuItem,
72 | this.SaveCSVMenuItem});
73 | this.menuStrip1.Location = new System.Drawing.Point(0, 0);
74 | this.menuStrip1.Name = "menuStrip1";
75 | this.menuStrip1.Padding = new System.Windows.Forms.Padding(6, 2, 2, 2);
76 | this.menuStrip1.ShowItemToolTips = true;
77 | this.menuStrip1.Size = new System.Drawing.Size(846, 24);
78 | this.menuStrip1.TabIndex = 0;
79 | this.menuStrip1.Text = "menuStrip1";
80 | //
81 | // fileToolStripMenuItem
82 | //
83 | this.fileToolStripMenuItem.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_142_database_plus;
84 | this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
85 | this.fileToolStripMenuItem.Size = new System.Drawing.Size(53, 20);
86 | this.fileToolStripMenuItem.Text = "File";
87 | this.fileToolStripMenuItem.ToolTipText = "Import data log file";
88 | this.fileToolStripMenuItem.Click += new System.EventHandler(this.fileToolStripMenuItem_Click);
89 | //
90 | // togleTableToolStripMenuItem
91 | //
92 | this.togleTableToolStripMenuItem.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_120_table;
93 | this.togleTableToolStripMenuItem.Name = "togleTableToolStripMenuItem";
94 | this.togleTableToolStripMenuItem.Size = new System.Drawing.Size(64, 20);
95 | this.togleTableToolStripMenuItem.Text = "Table";
96 | this.togleTableToolStripMenuItem.ToolTipText = "Toggle table view";
97 | this.togleTableToolStripMenuItem.Click += new System.EventHandler(this.togleTableToolStripMenuItem_Click);
98 | //
99 | // hideshowcurveMenuItem
100 | //
101 | this.hideshowcurveMenuItem.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_115_list;
102 | this.hideshowcurveMenuItem.Name = "hideshowcurveMenuItem";
103 | this.hideshowcurveMenuItem.Size = new System.Drawing.Size(71, 20);
104 | this.hideshowcurveMenuItem.Text = "Curves";
105 | //
106 | // printMenuItem
107 | //
108 | this.printMenuItem.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_16_print;
109 | this.printMenuItem.Name = "printMenuItem";
110 | this.printMenuItem.Size = new System.Drawing.Size(60, 20);
111 | this.printMenuItem.Text = "Print";
112 | this.printMenuItem.ToolTipText = "Print Graph";
113 | this.printMenuItem.Click += new System.EventHandler(this.printMenuItem_Click);
114 | //
115 | // lockunlockvzoomMenuItem
116 | //
117 | this.lockunlockvzoomMenuItem.CheckOnClick = true;
118 | this.lockunlockvzoomMenuItem.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_242_flash;
119 | this.lockunlockvzoomMenuItem.Name = "lockunlockvzoomMenuItem";
120 | this.lockunlockvzoomMenuItem.Size = new System.Drawing.Size(134, 20);
121 | this.lockunlockvzoomMenuItem.Text = "Lock vertical zoom";
122 | this.lockunlockvzoomMenuItem.ToolTipText = "Toggle Y-axis zoom lock";
123 | this.lockunlockvzoomMenuItem.Click += new System.EventHandler(this.lockunlockvzoomMenuItem_Click);
124 | //
125 | // ExitStripMenuItem
126 | //
127 | this.ExitStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
128 | this.ExitStripMenuItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
129 | this.ExitStripMenuItem.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_389_exit;
130 | this.ExitStripMenuItem.Name = "ExitStripMenuItem";
131 | this.ExitStripMenuItem.Size = new System.Drawing.Size(28, 20);
132 | this.ExitStripMenuItem.Text = "exit";
133 | this.ExitStripMenuItem.Click += new System.EventHandler(this.ExitStripMenuItem_Click);
134 | //
135 | // aboutMenuItem
136 | //
137 | this.aboutMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
138 | this.aboutMenuItem.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_196_circle_info;
139 | this.aboutMenuItem.Name = "aboutMenuItem";
140 | this.aboutMenuItem.Size = new System.Drawing.Size(38, 20);
141 | this.aboutMenuItem.Text = " ";
142 | this.aboutMenuItem.ToolTipText = "About";
143 | this.aboutMenuItem.Click += new System.EventHandler(this.aboutMenuItem_Click);
144 | //
145 | // ControlsStripMenuItem
146 | //
147 | this.ControlsStripMenuItem.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_589_remote_control_tv;
148 | this.ControlsStripMenuItem.Name = "ControlsStripMenuItem";
149 | this.ControlsStripMenuItem.Size = new System.Drawing.Size(80, 20);
150 | this.ControlsStripMenuItem.Text = "Controls";
151 | this.ControlsStripMenuItem.ToolTipText = "Toggle Control pad";
152 | this.ControlsStripMenuItem.Click += new System.EventHandler(this.ControlsStripMenuItem_Click);
153 | //
154 | // fullscreenToolStripMenuItem
155 | //
156 | this.fullscreenToolStripMenuItem.Image = global::WinCCFlexLogViewer.Properties.Resources.fullscreen2;
157 | this.fullscreenToolStripMenuItem.Name = "fullscreenToolStripMenuItem";
158 | this.fullscreenToolStripMenuItem.Size = new System.Drawing.Size(88, 20);
159 | this.fullscreenToolStripMenuItem.Text = "Fullscreen";
160 | this.fullscreenToolStripMenuItem.ToolTipText = "Toggle fullscreen mode";
161 | this.fullscreenToolStripMenuItem.Click += new System.EventHandler(this.fullscreenToolStripMenuItem_Click);
162 | //
163 | // SaveCSVMenuItem
164 | //
165 | this.SaveCSVMenuItem.Image = global::WinCCFlexLogViewer.Properties.Resources.save_64;
166 | this.SaveCSVMenuItem.Name = "SaveCSVMenuItem";
167 | this.SaveCSVMenuItem.Size = new System.Drawing.Size(79, 20);
168 | this.SaveCSVMenuItem.Text = "Save csv";
169 | this.SaveCSVMenuItem.ToolTipText = "Save Table data to CSV file";
170 | this.SaveCSVMenuItem.Click += new System.EventHandler(this.SaveCSVMenuItem_Click);
171 | //
172 | // openFileDialog1
173 | //
174 | this.openFileDialog1.Filter = "All Log Files(*.csv;*.txt;*rdb)|*.csv;*.txt;*rdb|csv file|*.csv|rdb file|*.rdb|An" +
175 | "y file|*.*";
176 | this.openFileDialog1.Title = "Open WinCC flexible or TIA Portal Log file";
177 | //
178 | // splitContainer1
179 | //
180 | this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
181 | this.splitContainer1.Location = new System.Drawing.Point(0, 24);
182 | this.splitContainer1.Name = "splitContainer1";
183 | this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
184 | //
185 | // splitContainer1.Panel1
186 | //
187 | this.splitContainer1.Panel1.Controls.Add(this.controlPanel);
188 | this.splitContainer1.Panel1.Controls.Add(this.panel1);
189 | this.splitContainer1.Panel1.Controls.Add(this.DTrend);
190 | //
191 | // splitContainer1.Panel2
192 | //
193 | this.splitContainer1.Panel2.Controls.Add(this.dataGridView_data);
194 | this.splitContainer1.Panel2Collapsed = true;
195 | this.splitContainer1.Size = new System.Drawing.Size(846, 454);
196 | this.splitContainer1.SplitterDistance = 354;
197 | this.splitContainer1.TabIndex = 1;
198 | //
199 | // controlPanel
200 | //
201 | this.controlPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
202 | this.controlPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
203 | this.controlPanel.Controls.Add(this.button_loclunlockvzoom);
204 | this.controlPanel.Controls.Add(this.button_panright);
205 | this.controlPanel.Controls.Add(this.button_zoomin);
206 | this.controlPanel.Controls.Add(this.button_panbottom);
207 | this.controlPanel.Controls.Add(this.button_resetzoompan);
208 | this.controlPanel.Controls.Add(this.button_pantop);
209 | this.controlPanel.Controls.Add(this.button_zoomout);
210 | this.controlPanel.Controls.Add(this.button_panleft);
211 | this.controlPanel.Controls.Add(this.button_print);
212 | this.controlPanel.Location = new System.Drawing.Point(718, 3);
213 | this.controlPanel.Name = "controlPanel";
214 | this.controlPanel.Size = new System.Drawing.Size(122, 116);
215 | this.controlPanel.TabIndex = 1;
216 | this.controlPanel.Visible = false;
217 | //
218 | // button_loclunlockvzoom
219 | //
220 | this.button_loclunlockvzoom.FlatAppearance.BorderSize = 0;
221 | this.button_loclunlockvzoom.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
222 | this.button_loclunlockvzoom.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_242_flash;
223 | this.button_loclunlockvzoom.Location = new System.Drawing.Point(85, 79);
224 | this.button_loclunlockvzoom.Name = "button_loclunlockvzoom";
225 | this.button_loclunlockvzoom.Size = new System.Drawing.Size(37, 34);
226 | this.button_loclunlockvzoom.TabIndex = 8;
227 | this.button_loclunlockvzoom.UseVisualStyleBackColor = true;
228 | this.button_loclunlockvzoom.Click += new System.EventHandler(this.button_loclunlockvzoom_Click);
229 | //
230 | // button_panright
231 | //
232 | this.button_panright.FlatAppearance.BorderSize = 0;
233 | this.button_panright.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
234 | this.button_panright.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_218_circle_arrow_right;
235 | this.button_panright.Location = new System.Drawing.Point(85, 39);
236 | this.button_panright.Name = "button_panright";
237 | this.button_panright.Size = new System.Drawing.Size(37, 34);
238 | this.button_panright.TabIndex = 7;
239 | this.button_panright.UseVisualStyleBackColor = true;
240 | this.button_panright.Click += new System.EventHandler(this.button_panright_Click);
241 | //
242 | // button_zoomin
243 | //
244 | this.button_zoomin.FlatAppearance.BorderSize = 0;
245 | this.button_zoomin.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
246 | this.button_zoomin.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_237_zoom_in;
247 | this.button_zoomin.Location = new System.Drawing.Point(85, -1);
248 | this.button_zoomin.Name = "button_zoomin";
249 | this.button_zoomin.Size = new System.Drawing.Size(37, 34);
250 | this.button_zoomin.TabIndex = 6;
251 | this.button_zoomin.UseVisualStyleBackColor = true;
252 | this.button_zoomin.Click += new System.EventHandler(this.button_zoomin_Click);
253 | //
254 | // button_panbottom
255 | //
256 | this.button_panbottom.FlatAppearance.BorderSize = 0;
257 | this.button_panbottom.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
258 | this.button_panbottom.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_220_circle_arrow_down;
259 | this.button_panbottom.Location = new System.Drawing.Point(42, 79);
260 | this.button_panbottom.Name = "button_panbottom";
261 | this.button_panbottom.Size = new System.Drawing.Size(37, 34);
262 | this.button_panbottom.TabIndex = 5;
263 | this.button_panbottom.UseVisualStyleBackColor = true;
264 | this.button_panbottom.Click += new System.EventHandler(this.button_panbottom_Click);
265 | //
266 | // button_resetzoompan
267 | //
268 | this.button_resetzoompan.FlatAppearance.BorderSize = 0;
269 | this.button_resetzoompan.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
270 | this.button_resetzoompan.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_215_resize_small;
271 | this.button_resetzoompan.Location = new System.Drawing.Point(42, 39);
272 | this.button_resetzoompan.Name = "button_resetzoompan";
273 | this.button_resetzoompan.Size = new System.Drawing.Size(37, 34);
274 | this.button_resetzoompan.TabIndex = 4;
275 | this.button_resetzoompan.UseVisualStyleBackColor = true;
276 | this.button_resetzoompan.Click += new System.EventHandler(this.button_resetzoompan_Click);
277 | //
278 | // button_pantop
279 | //
280 | this.button_pantop.FlatAppearance.BorderSize = 0;
281 | this.button_pantop.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
282 | this.button_pantop.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_219_circle_arrow_top;
283 | this.button_pantop.Location = new System.Drawing.Point(42, -1);
284 | this.button_pantop.Name = "button_pantop";
285 | this.button_pantop.Size = new System.Drawing.Size(37, 34);
286 | this.button_pantop.TabIndex = 3;
287 | this.button_pantop.UseVisualStyleBackColor = true;
288 | this.button_pantop.Click += new System.EventHandler(this.button_pantop_Click);
289 | //
290 | // button_zoomout
291 | //
292 | this.button_zoomout.FlatAppearance.BorderSize = 0;
293 | this.button_zoomout.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
294 | this.button_zoomout.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_238_zoom_out;
295 | this.button_zoomout.Location = new System.Drawing.Point(-1, 79);
296 | this.button_zoomout.Name = "button_zoomout";
297 | this.button_zoomout.Size = new System.Drawing.Size(37, 34);
298 | this.button_zoomout.TabIndex = 2;
299 | this.button_zoomout.UseVisualStyleBackColor = true;
300 | this.button_zoomout.Click += new System.EventHandler(this.button_zoomout_Click);
301 | //
302 | // button_panleft
303 | //
304 | this.button_panleft.FlatAppearance.BorderSize = 0;
305 | this.button_panleft.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
306 | this.button_panleft.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_217_circle_arrow_left;
307 | this.button_panleft.Location = new System.Drawing.Point(-1, 39);
308 | this.button_panleft.Name = "button_panleft";
309 | this.button_panleft.Size = new System.Drawing.Size(37, 34);
310 | this.button_panleft.TabIndex = 1;
311 | this.button_panleft.UseVisualStyleBackColor = true;
312 | this.button_panleft.Click += new System.EventHandler(this.button_panleft_Click);
313 | //
314 | // button_print
315 | //
316 | this.button_print.FlatAppearance.BorderSize = 0;
317 | this.button_print.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
318 | this.button_print.Image = global::WinCCFlexLogViewer.Properties.Resources.glyphicons_16_print;
319 | this.button_print.Location = new System.Drawing.Point(-1, -1);
320 | this.button_print.Name = "button_print";
321 | this.button_print.Size = new System.Drawing.Size(37, 34);
322 | this.button_print.TabIndex = 0;
323 | this.button_print.UseVisualStyleBackColor = true;
324 | this.button_print.Click += new System.EventHandler(this.button_print_Click);
325 | //
326 | // panel1
327 | //
328 | this.panel1.Controls.Add(this.loadingpanel);
329 | this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
330 | this.panel1.Location = new System.Drawing.Point(0, 0);
331 | this.panel1.Name = "panel1";
332 | this.panel1.Size = new System.Drawing.Size(846, 454);
333 | this.panel1.TabIndex = 1;
334 | //
335 | // loadingpanel
336 | //
337 | this.loadingpanel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
338 | this.loadingpanel.Controls.Add(this.progress_counter_textlabel);
339 | this.loadingpanel.Controls.Add(this.loadingpictureBox);
340 | this.loadingpanel.Dock = System.Windows.Forms.DockStyle.Fill;
341 | this.loadingpanel.Location = new System.Drawing.Point(0, 0);
342 | this.loadingpanel.Name = "loadingpanel";
343 | this.loadingpanel.Size = new System.Drawing.Size(846, 454);
344 | this.loadingpanel.TabIndex = 1;
345 | this.loadingpanel.Visible = false;
346 | //
347 | // progress_counter_textlabel
348 | //
349 | this.progress_counter_textlabel.AutoSize = true;
350 | this.progress_counter_textlabel.Location = new System.Drawing.Point(387, 261);
351 | this.progress_counter_textlabel.Name = "progress_counter_textlabel";
352 | this.progress_counter_textlabel.Size = new System.Drawing.Size(0, 13);
353 | this.progress_counter_textlabel.TabIndex = 1;
354 | this.progress_counter_textlabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
355 | //
356 | // loadingpictureBox
357 | //
358 | this.loadingpictureBox.Image = global::WinCCFlexLogViewer.Properties.Resources.loading;
359 | this.loadingpictureBox.Location = new System.Drawing.Point(371, 192);
360 | this.loadingpictureBox.Name = "loadingpictureBox";
361 | this.loadingpictureBox.Size = new System.Drawing.Size(63, 66);
362 | this.loadingpictureBox.TabIndex = 0;
363 | this.loadingpictureBox.TabStop = false;
364 | //
365 | // DTrend
366 | //
367 | this.DTrend.Dock = System.Windows.Forms.DockStyle.Fill;
368 | this.DTrend.IsEnableSelection = true;
369 | this.DTrend.Location = new System.Drawing.Point(0, 0);
370 | this.DTrend.Margin = new System.Windows.Forms.Padding(0);
371 | this.DTrend.Name = "DTrend";
372 | this.DTrend.ScrollGrace = 0D;
373 | this.DTrend.ScrollMaxX = 0D;
374 | this.DTrend.ScrollMaxY = 0D;
375 | this.DTrend.ScrollMaxY2 = 0D;
376 | this.DTrend.ScrollMinX = 0D;
377 | this.DTrend.ScrollMinY = 0D;
378 | this.DTrend.ScrollMinY2 = 0D;
379 | this.DTrend.Size = new System.Drawing.Size(846, 454);
380 | this.DTrend.TabIndex = 0;
381 | this.DTrend.UseExtendedPrintDialog = true;
382 | this.DTrend.ZoomEvent += new ZedGraph.ZedGraphControl.ZoomEventHandler(this.DTrend_ZoomEvent);
383 | //
384 | // dataGridView_data
385 | //
386 | this.dataGridView_data.AllowUserToOrderColumns = true;
387 | this.dataGridView_data.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
388 | this.dataGridView_data.Dock = System.Windows.Forms.DockStyle.Fill;
389 | this.dataGridView_data.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;
390 | this.dataGridView_data.Location = new System.Drawing.Point(0, 0);
391 | this.dataGridView_data.Name = "dataGridView_data";
392 | this.dataGridView_data.ReadOnly = true;
393 | this.dataGridView_data.Size = new System.Drawing.Size(150, 46);
394 | this.dataGridView_data.TabIndex = 0;
395 | //
396 | // progress_timer
397 | //
398 | this.progress_timer.Interval = 50;
399 | this.progress_timer.Tick += new System.EventHandler(this.progress_timer_Tick);
400 | //
401 | // printDlg
402 | //
403 | this.printDlg.UseEXDialog = true;
404 | //
405 | // saveFileDialog
406 | //
407 | this.saveFileDialog.FileName = "table.csv";
408 | //
409 | // Main
410 | //
411 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
412 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
413 | this.ClientSize = new System.Drawing.Size(846, 478);
414 | this.Controls.Add(this.splitContainer1);
415 | this.Controls.Add(this.menuStrip1);
416 | this.MainMenuStrip = this.menuStrip1;
417 | this.Name = "Main";
418 | this.Resize += new System.EventHandler(this.Main_Resize);
419 | this.menuStrip1.ResumeLayout(false);
420 | this.menuStrip1.PerformLayout();
421 | this.splitContainer1.Panel1.ResumeLayout(false);
422 | this.splitContainer1.Panel2.ResumeLayout(false);
423 | this.splitContainer1.ResumeLayout(false);
424 | this.controlPanel.ResumeLayout(false);
425 | this.panel1.ResumeLayout(false);
426 | this.loadingpanel.ResumeLayout(false);
427 | this.loadingpanel.PerformLayout();
428 | ((System.ComponentModel.ISupportInitialize)(this.loadingpictureBox)).EndInit();
429 | ((System.ComponentModel.ISupportInitialize)(this.dataGridView_data)).EndInit();
430 | this.ResumeLayout(false);
431 | this.PerformLayout();
432 |
433 | }
434 | //
435 | private System.ComponentModel.IContainer components;
436 | //
437 | private System.Windows.Forms.MenuStrip menuStrip1;
438 | //
439 | private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
440 | //
441 | private System.Windows.Forms.OpenFileDialog openFileDialog1;
442 | //
443 | private System.Windows.Forms.SplitContainer splitContainer1;
444 | // ZedGraph Instance
445 | private ZedGraph.ZedGraphControl DTrend;
446 | //
447 | private System.Windows.Forms.DataGridView dataGridView_data;
448 | //
449 | private System.Windows.Forms.ToolStripMenuItem togleTableToolStripMenuItem;
450 | //
451 | private System.Windows.Forms.ToolStripMenuItem hideshowcurveMenuItem;
452 | //
453 | private System.Windows.Forms.ToolStripMenuItem printMenuItem;
454 | //
455 | private System.Windows.Forms.ToolStripMenuItem lockunlockvzoomMenuItem;
456 | //
457 | private System.Windows.Forms.ToolStripMenuItem aboutMenuItem;
458 | //
459 | private System.Windows.Forms.Panel panel1;
460 | //
461 | private System.Windows.Forms.ToolStripMenuItem ControlsStripMenuItem;
462 | //
463 | private System.Windows.Forms.ToolStripMenuItem ExitStripMenuItem;
464 | //
465 | private System.Windows.Forms.Panel controlPanel;
466 | //
467 | private System.Windows.Forms.Button button_loclunlockvzoom;
468 | //
469 | private System.Windows.Forms.Button button_panright;
470 | //
471 | private System.Windows.Forms.Button button_zoomin;
472 | //
473 | private System.Windows.Forms.Button button_panbottom;
474 | //
475 | private System.Windows.Forms.Button button_resetzoompan;
476 | //
477 | private System.Windows.Forms.Button button_pantop;
478 | //
479 | private System.Windows.Forms.Button button_zoomout;
480 | //
481 | private System.Windows.Forms.Button button_panleft;
482 | //
483 | private System.Windows.Forms.Button button_print;
484 | //
485 | private System.Windows.Forms.Panel loadingpanel;
486 | //
487 | private System.Windows.Forms.PictureBox loadingpictureBox;
488 | //
489 | private System.Windows.Forms.Label progress_counter_textlabel;
490 | //
491 | private System.Windows.Forms.Timer progress_timer;
492 | //
493 | private System.Windows.Forms.PrintDialog printDlg;
494 | private System.Windows.Forms.ToolStripMenuItem fullscreenToolStripMenuItem;
495 | private System.Windows.Forms.ToolStripMenuItem SaveCSVMenuItem;
496 | private System.Windows.Forms.SaveFileDialog saveFileDialog;
497 | }
498 | }
499 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/Main.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Data.SQLite;
6 | using System.Drawing;
7 | using System.Drawing.Printing;
8 | using System.Globalization;
9 | using System.IO;
10 | using System.Text;
11 | using System.Text.RegularExpressions;
12 | using System.Windows.Forms;
13 | using WinCCFlexLogViewer.Properties;
14 | using ZedGraph;
15 |
16 | namespace WinCCFlexLogViewer
17 | {
18 | public partial class Main : Form
19 | {
20 | public Main()
21 | {
22 | InitializeComponent();
23 | Icon = Resources.logo1;
24 | Text = Application.ProductName + " v" + Application.ProductVersion;
25 | DTrend.GraphPane.Title.IsVisible = false;
26 | DTrend.MasterPane[0].IsFontsScaled = false;
27 | DTrend.GraphPane.Legend.IsVisible = false;
28 | DTrend.GraphPane.Border.IsVisible = false;
29 | DTrend.GraphPane.Chart.Border.IsVisible = false;
30 | DTrend.MasterPane.Margin.Left = 0f;
31 | DTrend.MasterPane.Margin.Right = 0f;
32 | DTrend.MasterPane.Margin.Top = 0f;
33 | DTrend.MasterPane.Margin.Bottom = 0f;
34 | DTrend.MasterPane.InnerPaneGap = 0f;
35 | DTrend.GraphPane.Margin.Left = 0f;
36 | DTrend.GraphPane.Margin.Right = 2f;
37 | DTrend.GraphPane.Margin.Top = 5f;
38 | DTrend.GraphPane.Margin.Bottom = 0f;
39 | DTrend.GraphPane.XAxis.Type = AxisType.Text;
40 | DTrend.GraphPane.XAxis.IsVisible = true;
41 | DTrend.GraphPane.XAxis.Title.IsVisible = false;
42 | DTrend.GraphPane.XAxis.IsAxisSegmentVisible = false;
43 | DTrend.GraphPane.XAxis.Scale.FontSpec.Size = 10f;
44 | DTrend.GraphPane.XAxis.Scale.Min = 0.0;
45 | DTrend.GraphPane.XAxis.MajorGrid.PenWidth = 0.5f;
46 | DTrend.GraphPane.XAxis.MajorGrid.IsVisible = true;
47 | DTrend.GraphPane.XAxis.MinorTic.IsOpposite = false;
48 | DTrend.GraphPane.XAxis.MajorTic.IsOpposite = false;
49 | DTrend.GraphPane.YAxis.IsVisible = false;
50 | DTrend.GraphPane.YAxis.Scale.MinAuto = false;
51 | DTrend.GraphPane.YAxis.Scale.MaxAuto = false;
52 | DTrend.GraphPane.YAxis.Scale.Min = -100.0;
53 | DTrend.GraphPane.YAxis.Scale.Max = 5000.0;
54 | DTrend.GraphPane.Y2Axis.MajorTic.IsOpposite = false;
55 | DTrend.GraphPane.Y2Axis.MinorTic.IsOpposite = false;
56 | DTrend.GraphPane.Y2Axis.IsVisible = false;
57 | DTrend.GraphPane.X2Axis.IsVisible = false;
58 | DTrend.Selection.SelectionChangedEvent += new EventHandler(Selection_SelectionChangedEvent);
59 | DTrend.GraphPane.AxisChange();
60 | DTrend.Refresh();
61 | string[] commandLineArgs = Environment.GetCommandLineArgs();
62 |
63 | for (int i = 0; i < commandLineArgs.Length; i++) // Парсинг аргументов командной строки
64 | {
65 | string path = "";
66 | string a = commandLineArgs[i];
67 | if (a == "-f")
68 | {
69 | if (i < commandLineArgs.Length - 1)
70 | {
71 | path = commandLineArgs[i + 1];
72 | if (File.Exists(path))
73 | {
74 | loadingpanel.Visible = true;
75 | log_file = path;
76 | startparsing();
77 | }
78 | }
79 | }
80 | else if (a == "-fullscreen")
81 | {
82 | FormBorderStyle = FormBorderStyle.None;
83 | WindowState = FormWindowState.Maximized;
84 | }
85 | else if (a == "-nofilebutton")
86 | {
87 | fileToolStripMenuItem.Visible = false;
88 | }
89 | else if (a == "-noprintbutton")
90 | {
91 | printMenuItem.Visible = button_print.Visible = false;
92 | }
93 | }
94 | }
95 |
96 | // FileOpen Button Click
97 | private void fileToolStripMenuItem_Click(object sender, EventArgs e)
98 | {
99 | if (openFileDialog1.ShowDialog() == DialogResult.OK)
100 | {
101 | loadingpanel.Visible = true;
102 | log_file = openFileDialog1.FileName;
103 | startparsing();
104 | }
105 | }
106 |
107 | // Запуск парсинга файла в фоновом режиме
108 | private void startparsing()
109 | {
110 | hideshowcurveMenuItem.DropDownItems.Clear();
111 | DTrend.GraphPane.YAxisList.Clear();
112 | DTrend.GraphPane.CurveList.Clear();
113 | panel1.Show();
114 | centerLoadingAnnimation();
115 | BackgroundWorker backgroundWorker = new BackgroundWorker();
116 | backgroundWorker.WorkerSupportsCancellation = true;
117 | if (Path.GetExtension(log_file) != ".rdb")
118 | backgroundWorker.DoWork += parse_data;
119 | else
120 | backgroundWorker.DoWork += startparsingSQL;
121 | backgroundWorker.RunWorkerAsync();
122 | backgroundWorker.RunWorkerCompleted += dataparsing_complete;
123 | progress_timer.Enabled = true;
124 | }
125 |
126 | // Парсинг SQLite файла лога
127 | private void startparsingSQL(object sender, DoWorkEventArgs e)
128 | {
129 | table = new DataTable();
130 | DataColumn dataColumn = new DataColumn();
131 | dataColumn.DataType = Type.GetType("System.String");
132 | dataColumn.ColumnName = "Date Time";
133 | table.Columns.Add(dataColumn); //добавляем столбец Дата-Время
134 |
135 | SQLiteConnection m_dbConn = new SQLiteConnection("Data Source=" + log_file + ";Version=3;");
136 | try
137 | {
138 | m_dbConn.Open();
139 | }
140 | catch (SQLiteException ex)
141 | {
142 | MessageBox.Show("Cannnot open the file " + ex.ToString());
143 | }
144 |
145 | SQLiteCommand m_sqlCmd = new SQLiteCommand("SELECT DISTINCT VarName FROM logdata WHERE (VarName != '$RT_OFF$')", m_dbConn);
146 | SQLiteDataReader reader = m_sqlCmd.ExecuteReader();
147 |
148 | channel_names = new List(); // Список имен тегов
149 | timeList = new List();
150 | while (reader.Read()) // Добавляем столбцы с тегами
151 | {
152 | dataColumn = new DataColumn();
153 | dataColumn.DataType = Type.GetType("System.Double");
154 | dataColumn.ColumnName = reader.GetString(0);
155 | table.Columns.Add(dataColumn);
156 |
157 | channel_names.Add(dataColumn.ColumnName);
158 | }
159 | reader.Close();
160 | m_sqlCmd.CommandText = "SELECT VarName, VarValue, Time_ms FROM logdata WHERE (VarName != '$RT_OFF$')";
161 | reader = m_sqlCmd.ExecuteReader();
162 | double tmpNum;
163 | DateTime d;
164 | int i = -1;
165 | while (reader.Read())
166 | {
167 | tmpNum = reader.GetDouble(2) / 1000000.0;
168 | d = DateTime.FromOADate(tmpNum); //форматируем в дату-время
169 | DataRow dataRow = table.NewRow();
170 | dataRow["Date Time"] = d.ToString() + "." + d.ToString("fff");
171 |
172 | if (i == -1) { table.Rows.Add(dataRow); i++; table.Rows[i][reader.GetString(0)] = reader.GetDouble(1); timeList.Add(d); continue; }
173 |
174 | if (table.Rows[i]["Date Time"].ToString() != dataRow["Date Time"].ToString())
175 | {
176 | table.Rows.Add(dataRow);
177 | timeList.Add(d);
178 | i++;
179 | }
180 | table.Rows[i][reader.GetString(0)] = reader.GetDouble(1);
181 | }
182 | reader.Close();
183 | m_dbConn.Dispose();
184 | goodRecCounter = table.Rows.Count;
185 | }
186 |
187 | // Парсинг CSV файла лога
188 | private void parse_data(object sender, DoWorkEventArgs e)
189 | {
190 | List list = new List();
191 | try
192 | { // Чтение файла построчно в список
193 | StreamReader streamReader = new StreamReader(new FileStream(log_file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.Default);
194 | string item;
195 | while ( (item = streamReader.ReadLine()) != null )
196 | {
197 | // totRecCounter++; // Общий счетчик строк для отображения на индикаторе прогресса
198 | list.Add(item);
199 | }
200 | totRecCounter = list.Count; //немного оптимизации, получим число записей сразу, без цикла
201 | }
202 | catch (Exception value)
203 | {
204 | MessageBox.Show("Cannot access the file. " + value.ToString());
205 | return;
206 | }
207 |
208 | char c = ';'; // Скорее всего эта инициализация не нужна
209 | string text = list[0];
210 | c = text.Split( new char[]{'"'} )[2][0]; // Получаем символ-разделитель элементов строки
211 |
212 | channel_names = new List(); // Список имен тегов
213 | timeList = new List(); //
214 | byte flag = 0;
215 | foreach (string text2 in list) // Цикл разбора списка на списки Имен тегов и Дата-Время
216 | {
217 | if (flag == 0) flag++; // сделано для пропуска первой строки в списке - Заголовок лога
218 | else
219 | {
220 | string[] array = text2.Split( new char[]{c} ); // Получаем массив элементов из строки списка лога
221 | if (array.Length == 5 && array[0].IndexOf("\"\"") == -1) // В строке должно быть 5 элементов и
222 | {
223 | string txtTagName = array[0].Replace("\"", ""); //Получаем имя тега без слэшей
224 | string txtTimems = array[4]; //Получаем значение время в мсек
225 | if (!channel_names.Contains(txtTagName) && !txtTagName.Equals("$RT_DIS$") && !txtTagName.Equals("$RT_COUNT$") && !txtTagName.Equals("$RT_OFF$"))
226 | {
227 | channel_names.Add(txtTagName); //Заносим в список имен если имя не служебный тег скады
228 | }
229 | if (!txtTagName.Equals("$RT_DIS$") && !txtTagName.Equals("$RT_COUNT$") && !txtTagName.Equals("$RT_OFF$"))
230 | {
231 | txtTimems = Regex.Replace(txtTimems, "[^\\d]", "");//Очищаем от НЕ цифр
232 | if (txtTimems.Length < 15)
233 | {
234 | int num2 = 15 - txtTimems.Length;
235 | for (int i = 0; i < num2; i++)
236 | {
237 | txtTimems += "0";
238 | }
239 | }
240 | try
241 | {
242 | double num3 = double.Parse(txtTimems); // Конвертируем строку в число
243 | num3 /= 10000.0;
244 | num3 /= 1000000.0;
245 | DateTime item2 = DateTime.FromOADate(num3); //форматируем в дату-время
246 | if (!timeList.Contains(item2))
247 | {
248 | // datapointCounter++;
249 | timeList.Add(item2);
250 | }
251 | }
252 | catch (Exception ex)
253 | {
254 | MessageBox.Show("Error 1." + ex.ToString());
255 | }
256 | }
257 | }
258 | }
259 | } //EndOfForeach
260 |
261 | datapointCounter = timeList.Count; // получим число записей сразу, без цикла
262 | table = new DataTable();
263 | DataColumn dataColumn = new DataColumn();
264 | dataColumn.DataType = Type.GetType("System.String");
265 | dataColumn.ColumnName = "Date Time";
266 | table.Columns.Add(dataColumn); //добавляем столбец Дата-Время
267 | foreach (string columnName in channel_names) // Добавляем столбцы с тегами
268 | {
269 | dataColumn = new DataColumn();
270 | dataColumn.DataType = Type.GetType("System.Double");
271 | dataColumn.ColumnName = columnName;
272 | table.Columns.Add(dataColumn);
273 | }
274 | foreach (DateTime dateTime in timeList) // Добавляем в таблицу строки из списка Даты-Времени
275 | {
276 | DataRow dataRow = table.NewRow();
277 | dataRow["Date Time"] = dateTime.ToString() + "." + dateTime.ToString("fff");
278 | table.Rows.Add(dataRow);
279 | }
280 | flag = 0;
281 | foreach (string text5 in list) //
282 | {
283 | if (flag == 0) flag++;
284 | else
285 | {
286 | string[] array2 = text5.Split( new char[]{c} ); // Получаем массив элементов из строки списка лога
287 | if (array2.Length == 5 && array2[0].IndexOf("\"\"") == -1)
288 | {
289 | string text6 = array2[0].Replace("\"", ""); //Получаем имя тега без слэшей
290 | string text7 = array2[4]; //Получаем значение время в мсек
291 | string text8 = array2[2]; //Получаем значение Тега
292 | if (!text6.Equals("$RT_DIS$") && !text6.Equals("$RT_COUNT$") && !text6.Equals("$RT_OFF$"))
293 | {
294 | text7 = Regex.Replace(text7, "[^\\d]", "");
295 | if (text7.Length < 15)
296 | {
297 | int num2 = 15 - text7.Length;
298 | for (int i = 0; i < num2; i++)
299 | {
300 | text7 += "0";
301 | }
302 | }
303 | try
304 | {
305 | double num4 = double.Parse(text7);
306 | num4 /= 10000.0;
307 | num4 /= 1000000.0;
308 | DateTime item3 = DateTime.FromOADate(num4);
309 | double num5 = double.Parse(text8.Replace(string.Concat(Main.GetDecimalSep(text8)), CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator ?? ""));
310 | int index = timeList.IndexOf(item3);
311 | table.Rows[index][text6] = num5;
312 | // goodRecCounter++;
313 | }
314 | catch (Exception ex)
315 | {
316 | MessageBox.Show("Error 2. " + ex.ToString());
317 | }
318 | }
319 | }
320 | }
321 | } //EndOfForeach
322 | goodRecCounter = table.Rows.Count;
323 | }
324 |
325 | //
326 | private void dataparsing_complete(object sender, RunWorkerCompletedEventArgs e)
327 | {
328 | if (goodRecCounter==0)
329 | {
330 | MessageBox.Show("LogFile contains no data");
331 | panel1.Hide();
332 | progress_timer.Enabled = false;
333 | return;
334 | }
335 | dataGridView_data.DataSource = table;
336 | dataGridView_data.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
337 | int numColor = 0;
338 | foreach (string text in channel_names)
339 | {
340 | PointPairList pointPairList = new PointPairList();
341 | int num2 = 0;
342 | foreach (DataRow dataRow in table.Rows)
343 | {
344 | if (dataRow[text].ToString() != "")
345 | {
346 | pointPairList.Add((double)num2, double.Parse(string.Concat(dataRow[text])));
347 | }
348 | else if (num2 > 0)
349 | {
350 | pointPairList.Add((double)num2, pointPairList[num2 - 1].Y);
351 | }
352 | else
353 | {
354 | pointPairList.Add((double)num2, double.NaN);
355 | }
356 | num2++;
357 | }
358 | Color color = ColorTranslator.FromHtml(colors[numColor]);
359 | YAxis yaxis = new YAxis(text);
360 | DTrend.GraphPane.YAxisList.Add(yaxis);
361 | yaxis.Title.IsVisible = true;
362 | yaxis.Type = AxisType.Linear;
363 | yaxis.Color = Color.Black; //color;
364 | yaxis.Scale.FontSpec.Size = 10f;
365 | yaxis.Scale.FontSpec.FontColor = color;
366 | yaxis.IsVisible = true;
367 | yaxis.Scale.MaxAuto = true;
368 | yaxis.Scale.MinAuto = true;
369 | yaxis.MajorGrid.IsZeroLine = false;
370 | yaxis.MajorGrid.IsVisible = true;
371 | yaxis.MajorTic.IsInside = false;
372 | yaxis.MinorTic.IsInside = false;
373 | yaxis.MajorTic.IsOpposite = false;
374 | yaxis.MinorTic.IsOpposite = false;
375 | yaxis.Scale.Align = AlignP.Inside;
376 | yaxis.Title.FontSpec.Size = 10f;
377 | yaxis.Title.FontSpec.FontColor = color;
378 |
379 | LineItem lineItem = DTrend.GraphPane.AddCurve(text, pointPairList, color, SymbolType.None);
380 | lineItem.Line.IsOptimizedDraw = true;
381 | lineItem.Line.Width = 1f;
382 | lineItem.YAxisIndex = DTrend.GraphPane.YAxisList.IndexOf(text);
383 | dataGridView_data.Columns[text].DefaultCellStyle.ForeColor = color;
384 | ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem(text);
385 | toolStripMenuItem.ForeColor = ColorTranslator.FromHtml(colors[numColor]);
386 | ToolStripMenuItem toolStripMenuItem2 = new ToolStripMenuItem("hide/show");
387 | toolStripMenuItem2.Checked = true;
388 | toolStripMenuItem2.ForeColor = ColorTranslator.FromHtml(colors[numColor]);
389 | toolStripMenuItem2.Click += toggleViewCurve;
390 | toolStripMenuItem2.Paint += toolMnuItemChSta;
391 | ToolStripMenuItem toolStripMenuItem3 = new ToolStripMenuItem("change Y scale min/max");
392 | toolStripMenuItem3.Click += setYminMax;
393 | toolStripMenuItem.DropDownItems.Add(toolStripMenuItem2);
394 | toolStripMenuItem.DropDownItems.Add(toolStripMenuItem3);
395 | hideshowcurveMenuItem.DropDownItems.Add(toolStripMenuItem);
396 | numColor++;
397 | } //EndOfForeach
398 | ToolStripMenuItem toolStripMnuItem = new ToolStripMenuItem("Show All/Hide All");
399 | toolStripMnuItem.Checked = true;
400 | hideshowcurveMenuItem.DropDownItems.Add(toolStripMnuItem);
401 | toolStripMnuItem.Click += toggleAllCurves;
402 | string[] array = new string[timeList.Count];
403 |
404 | int num3 = 0;
405 | foreach (DateTime dateTime in timeList)
406 | {
407 | array[num3] = dateTime.ToString().Replace(" ", "\n");
408 | num3++;
409 | }
410 | DTrend.GraphPane.XAxis.Scale.Max = (double)num3;
411 | DTrend.GraphPane.XAxis.Scale.TextLabels = array;
412 | DTrend.GraphPane.XAxis.Type = AxisType.Text;
413 | DTrend.GraphPane.Title.IsVisible = false;
414 | DTrend.GraphPane.Legend.IsVisible = false;
415 | DTrend.GraphPane.AxisChange();
416 | DTrend.Refresh();
417 | panel1.Hide();
418 | loadingpanel.Visible = false;
419 | progress_timer.Enabled = false;
420 | Text = Application.ProductName + " v" + Application.ProductVersion + " rec. " + goodRecCounter.ToString();
421 | }
422 |
423 | //
424 | private void setYminMax(object sender, EventArgs e)
425 | {
426 | foreach (YAxis yaxis in DTrend.GraphPane.YAxisList)
427 | {
428 | if (yaxis.Title.Text.IndexOf(((ToolStripMenuItem)sender).OwnerItem.Text) != -1)
429 | {
430 | YScaleSettings yscaleSettings = new YScaleSettings(yaxis.Scale.Min, yaxis.Scale.Max, ((ToolStripMenuItem)sender).OwnerItem.Text);
431 | yscaleSettings.ShowDialog();
432 | if (yscaleSettings.set)
433 | {
434 | yaxis.Scale.MaxAuto = false;
435 | yaxis.Scale.MinAuto = false;
436 | yaxis.Scale.Max = yscaleSettings.max;
437 | yaxis.Scale.Min = yscaleSettings.min;
438 | }
439 | }
440 | }
441 | DTrend.AxisChange();
442 | DTrend.Refresh();
443 | }
444 |
445 | //Устанавливает чек итема в соответствии с видимостью курвы
446 | private void toolMnuItemChSta(object sender, EventArgs e)
447 | {
448 | ((ToolStripMenuItem)sender).Checked = DTrend.GraphPane.CurveList[((ToolStripMenuItem)sender).OwnerItem.Text].IsVisible;
449 | }
450 |
451 | // Event handler for Dropdown MenuItem "show/hide ALL Curves"
452 | private void toggleAllCurves(object sender, EventArgs e)
453 | {
454 | ((ToolStripMenuItem)sender).Checked = !((ToolStripMenuItem)sender).Checked;
455 | foreach (YAxis yaxis in DTrend.GraphPane.YAxisList)
456 | {
457 | yaxis.IsVisible = ((ToolStripMenuItem)sender).Checked;
458 | DTrend.GraphPane.CurveList[yaxis.Title.Text].IsVisible = ((ToolStripMenuItem)sender).Checked;
459 | }
460 | DTrend.AxisChange();
461 | DTrend.Refresh();
462 | }
463 | //
464 | private void toggleViewCurve(object sender, EventArgs e)
465 | {
466 | ((ToolStripMenuItem)sender).Checked = !((ToolStripMenuItem)sender).Checked;
467 | DTrend.GraphPane.CurveList[((ToolStripMenuItem)sender).OwnerItem.Text].IsVisible = ((ToolStripMenuItem)sender).Checked;
468 | foreach (YAxis yaxis in DTrend.GraphPane.YAxisList)
469 | {
470 | if (yaxis.Title.Text.IndexOf(((ToolStripMenuItem)sender).OwnerItem.Text) != -1)
471 | {
472 | yaxis.IsVisible = ((ToolStripMenuItem)sender).Checked;
473 | }
474 | }
475 | DTrend.AxisChange();
476 | DTrend.Refresh();
477 | }
478 |
479 | //
480 | private static char GetDecimalSep(string input)
481 | {
482 | char[] array = input.ToCharArray();
483 | foreach (char c in array)
484 | {
485 | if (!char.IsNumber(c) && c != '-')
486 | {
487 | return c;
488 | }
489 | }
490 | return '.';
491 | }
492 |
493 | //
494 | private void togleTableToolStripMenuItem_Click(object sender, EventArgs e)
495 | {
496 | splitContainer1.Panel2Collapsed = !splitContainer1.Panel2Collapsed;
497 | griddatascroll();
498 |
499 | if (!splitContainer1.Panel2Collapsed)
500 | togleTableToolStripMenuItem.BackColor = SystemColors.ControlDark;
501 | else
502 | togleTableToolStripMenuItem.BackColor = SystemColors.Control;
503 | }
504 |
505 | //
506 | private void lockunlockvzoomMenuItem_Click(object sender, EventArgs e)
507 | {
508 | DTrend.IsEnableVZoom = !DTrend.IsEnableVZoom;
509 |
510 | if (!DTrend.IsEnableVZoom)
511 | lockunlockvzoomMenuItem.BackColor = SystemColors.ControlDark;
512 | else
513 | lockunlockvzoomMenuItem.BackColor = SystemColors.Control;
514 | }
515 |
516 | // Toolbar Print button click
517 | private void printMenuItem_Click(object sender, EventArgs e)
518 | {
519 | DoPrint();
520 | }
521 |
522 | //
523 | private void aboutMenuItem_Click(object sender, EventArgs e)
524 | {
525 | About about = new About();
526 | about.ShowDialog();
527 | about.Dispose();
528 | }
529 |
530 | //
531 | private void ExitStripMenuItem_Click(object sender, EventArgs e)
532 | {
533 | Application.Exit();
534 | }
535 |
536 | // Toolbar ToggleFullScreen Button Click
537 | private void fullscreenToolStripMenuItem_Click(object sender, EventArgs e)
538 | {
539 | if (FormBorderStyle == FormBorderStyle.Sizable)
540 | {;
541 | FormBorderStyle = FormBorderStyle.None;
542 | WindowState = FormWindowState.Maximized;
543 | }
544 | else
545 | {
546 | FormBorderStyle = FormBorderStyle.Sizable;
547 | WindowState = FormWindowState.Normal;
548 | }
549 | }
550 |
551 | //
552 | private void ControlsStripMenuItem_Click(object sender, EventArgs e)
553 | {
554 | controlPanel.Visible = !controlPanel.Visible;
555 | }
556 |
557 | //
558 | private void button_loclunlockvzoom_Click(object sender, EventArgs e)
559 | {
560 | DTrend.IsEnableVZoom = !DTrend.IsEnableVZoom;
561 | }
562 |
563 | //
564 | private void button_resetzoompan_Click(object sender, EventArgs e)
565 | {
566 | DTrend.RestoreScale(DTrend.GraphPane);
567 | }
568 |
569 | //
570 | private void button_zoomin_Click(object sender, EventArgs e)
571 | {
572 | DTrend.ZoomPane(DTrend.GraphPane, 0.9, default(PointF), false);
573 | }
574 |
575 | //
576 | private void button_zoomout_Click(object sender, EventArgs e)
577 | {
578 | DTrend.ZoomPane(DTrend.GraphPane, 1.1, default(PointF), false);
579 | }
580 |
581 | //
582 | private void button_panleft_Click(object sender, EventArgs e)
583 | {
584 | double num = (DTrend.GraphPane.XAxis.Scale.Max - DTrend.GraphPane.XAxis.Scale.Min) / 3.0;
585 | DTrend.GraphPane.XAxis.Scale.Min = DTrend.GraphPane.XAxis.Scale.Min - num;
586 | DTrend.GraphPane.XAxis.Scale.Max = DTrend.GraphPane.XAxis.Scale.Max - num;
587 | DTrend.AxisChange();
588 | DTrend.Refresh();
589 | }
590 |
591 | //
592 | private void button_panright_Click(object sender, EventArgs e)
593 | {
594 | double num = (DTrend.GraphPane.XAxis.Scale.Max - DTrend.GraphPane.XAxis.Scale.Min) / 3.0;
595 | DTrend.GraphPane.XAxis.Scale.Min = DTrend.GraphPane.XAxis.Scale.Min + num;
596 | DTrend.GraphPane.XAxis.Scale.Max = DTrend.GraphPane.XAxis.Scale.Max + num;
597 | DTrend.AxisChange();
598 | DTrend.Refresh();
599 | }
600 |
601 | //
602 | private void button_pantop_Click(object sender, EventArgs e)
603 | {
604 | double num = (DTrend.GraphPane.YAxis.Scale.Max - DTrend.GraphPane.YAxis.Scale.Min) / 3.0;
605 | foreach (YAxis yaxis in DTrend.GraphPane.YAxisList)
606 | {
607 | yaxis.Scale.Min = yaxis.Scale.Min + num;
608 | yaxis.Scale.Max = yaxis.Scale.Max + num;
609 | }
610 | DTrend.AxisChange();
611 | DTrend.Refresh();
612 | }
613 |
614 | //
615 | private void button_panbottom_Click(object sender, EventArgs e)
616 | {
617 | double num = (DTrend.GraphPane.YAxis.Scale.Max - DTrend.GraphPane.YAxis.Scale.Min) / 3.0;
618 | foreach (YAxis yaxis in DTrend.GraphPane.YAxisList)
619 | {
620 | yaxis.Scale.Min = yaxis.Scale.Min - num;
621 | yaxis.Scale.Max = yaxis.Scale.Max - num;
622 | }
623 | DTrend.AxisChange();
624 | DTrend.Refresh();
625 | }
626 |
627 | // ControlPad print button click
628 | private void button_print_Click(object sender, EventArgs e)
629 | {
630 | DoPrint();
631 | }
632 |
633 | //
634 | private void DTrend_ZoomEvent(ZedGraphControl sender, ZoomState oldState, ZoomState newState)
635 | {
636 | griddatascroll();
637 | }
638 |
639 | //
640 | private void griddatascroll()
641 | {
642 | if (!splitContainer1.Panel2Collapsed && dataGridView_data.Rows.Count > 0)
643 | {
644 | int num = (int)DTrend.GraphPane.XAxis.Scale.Min;
645 | if (num >= 0 && num <= dataGridView_data.Rows.Count)
646 | {
647 | dataGridView_data.FirstDisplayedScrollingRowIndex = num;
648 | return;
649 | }
650 | if (num >= dataGridView_data.Rows.Count - 1)
651 | {
652 | dataGridView_data.FirstDisplayedScrollingRowIndex = dataGridView_data.Rows.Count - 1;
653 | }
654 | }
655 | }
656 |
657 | //
658 | private void centerLoadingAnnimation()
659 | {
660 | if (loadingpanel.Visible)
661 | {
662 | loadingpictureBox.Location = new Point(loadingpanel.Width / 2 - loadingpictureBox.Width / 2, loadingpanel.Height / 2 - loadingpictureBox.Height / 2);
663 | progress_counter_textlabel.Location = new Point(loadingpanel.Width / 2 - progress_counter_textlabel.Width / 2, loadingpanel.Height / 2 - loadingpictureBox.Height / 2 + 66);
664 | }
665 | }
666 |
667 | //
668 | private void Main_Resize(object sender, EventArgs e)
669 | {
670 | centerLoadingAnnimation();
671 | }
672 |
673 | //
674 | private void progress_timer_Tick(object sender, EventArgs e)
675 | {
676 | progress_counter_textlabel.Text = string.Concat(new object[]
677 | {
678 | totRecCounter, " | ", //Общее количество записей в файле
679 | datapointCounter, " | ", //
680 | goodRecCounter //
681 | });
682 | centerLoadingAnnimation();
683 | }
684 |
685 | //
686 | private void SaveCSVMenuItem_Click(object sender, EventArgs e)
687 | {
688 | if (dataGridView_data.RowCount <= 0) //test to see if the DataGridView has any rows
689 | {
690 | MessageBox.Show("DataGrid contains no data\nNothing to save :)");
691 | return;
692 | }
693 | var sfd = new SaveFileDialog();
694 | sfd.Filter = "CSV files (*.csv)|*.csv";
695 | sfd.FileName = "table.csv";
696 | if (sfd.ShowDialog() != DialogResult.OK) return;
697 |
698 | string value = String.Empty;
699 | StreamWriter swOut = new StreamWriter(sfd.FileName, false);
700 |
701 | foreach (DataGridViewColumn dc in dataGridView_data.Columns)
702 | {
703 | value += dc.Name + ";";
704 | }
705 | value = value.Substring(0, value.Length - 1) + Environment.NewLine;
706 | swOut.Write(value);
707 | value = String.Empty;
708 |
709 | foreach (DataGridViewRow ddr in dataGridView_data.Rows)
710 | {
711 | if (ddr.IsNewRow)
712 | continue;
713 | foreach (DataGridViewCell dc in ddr.Cells)
714 | {
715 | if (dc.Value != null)
716 | {
717 | value += dc.Value.ToString() + ";";
718 | }
719 | }
720 | value = value.Substring(0, value.Length - 1) + Environment.NewLine;
721 | swOut.Write(value);
722 | value = "";
723 | }
724 | swOut.Close();
725 | }
726 |
727 | // Массив цветов для графиков
728 | public string[] colors = new string[]
729 | {
730 | "#0000FF", // Blue ярко синий
731 | "#000000", // Black
732 | "#FF0000", // Red
733 | "#85A900", //
734 | "#006400", // DarkGreen
735 | "#FE8900", //
736 | "#95003A", // светло-фиолетовый
737 | "#FF0056",
738 | "#007DB5", // светло-голубой
739 | "#FF00F6", //
740 | "#FF937E", //
741 | "#6A826C", //
742 | "#FF029D", //
743 | "#010067" , //
744 | "#7A4782",
745 | "#7E2DD2",
746 | "#01FFFE", // Cyan #00FFFF
747 | "#00FF00",
748 | "#A42400",
749 | "#00AE7E",
750 | "#683D3B",
751 | "#BDC6FF",
752 | "#263400",
753 | "#BDD393",
754 | "#00B917",
755 | "#9E008E",
756 | "#001544",
757 | "#C28C9F",
758 | "#FF74A3",
759 | "#01D0FF",
760 | "#004754",
761 | "#E56FFE",
762 | "#788231",
763 | "#0E4CA1",
764 | "#91D0CB",
765 | "#BE9970",
766 | "#968AE8",
767 | "#BB8800",
768 | "#43002C",
769 | "#DEFF74",
770 | "#00FFC6",
771 | "#FFE502",
772 | "#620E00",
773 | "#008F9C",
774 | "#98FF52",
775 | "#7544B1",
776 | "#B500FF",
777 | "#00FF78",
778 | "#FF6E41",
779 | "#005F39",
780 | "#6B6882",
781 | "#5FAD4E",
782 | "#A75740",
783 | "#A5FFD2",
784 | "#FFB167",
785 | "#009BFF",
786 | "#E85EBE"
787 | };
788 |
789 | // Имя открытого файла лога
790 | private string log_file = "";
791 | //
792 | private SortedList data_graph = new SortedList();
793 | //
794 | private DataTable table;
795 | //
796 | private List channel_names;
797 | //
798 | private List timeList;
799 | // Количество строк в файле лога
800 | private int totRecCounter;
801 | // Количество точек для графика
802 | private int datapointCounter;
803 | // Количество "полезных" записей (равно общее кол-во строк минус заголовок минус записи служебных тегов Скады)
804 | private int goodRecCounter;
805 |
806 |
807 | private void DoPrint()
808 | {
809 | using (PrintDocument printDocument = new PrintDocument())
810 | {
811 | printDlg.Document = printDocument;
812 | printDlg.AllowSelection = true;
813 | printDlg.AllowSomePages = true;
814 |
815 | printDocument.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
816 | printDocument.OriginAtMargins = false;
817 | printDocument.DefaultPageSettings.Landscape = true;
818 | printDocument.PrintPage += delegate (object _, PrintPageEventArgs o)
819 | {
820 | double num = 39.370078740157481;
821 | Image image = DTrend.MasterPane.GetImage();
822 | o.Graphics.DrawImage(image, (float)(1.0 * num), (float)(1.0 * num), (float)(27.0 * num), (float)(18.0 * num));
823 | o.HasMorePages = false;
824 | };
825 | if (printDlg.ShowDialog() == DialogResult.OK)
826 | printDocument.Print();
827 | }
828 | }
829 |
830 | private void Selection_SelectionChangedEvent(object sender, EventArgs e)
831 | {//zedGraph.Selection
832 | foreach (LineItem curve in DTrend.GraphPane.CurveList)
833 | {
834 | if (curve.IsSelected)
835 | {
836 | curve.Line.Width = (curve.Line.Width == 1f) ? 3f : 1f;
837 | curve.IsSelected = false;
838 | }
839 | }
840 | }
841 | }
842 | }
843 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/Main.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 | 132, 17
125 |
126 |
127 | 272, 17
128 |
129 |
130 | 405, 17
131 |
132 |
133 | 501, 17
134 |
135 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/NumTextBox.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Globalization;
3 | using System.Windows.Forms;
4 |
5 | namespace WinCCFlexLogViewer
6 | {
7 | public partial class NumTextBox : TextBox
8 | {
9 | private const int WM_PASTE = 0x0302;
10 | private bool ok = false;
11 |
12 | protected override void OnKeyPress(KeyPressEventArgs e)
13 | {
14 | base.OnKeyPress(e);
15 |
16 | if (e.KeyChar == '.' || e.KeyChar == ',')
17 | {
18 | e.KeyChar = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
19 | }
20 |
21 | if (e.KeyChar != 22)
22 | e.Handled = !char.IsDigit(e.KeyChar) && (e.KeyChar != ',' || (Text.Contains(",") && !SelectedText.Contains(","))) && e.KeyChar != (char)Keys.Back && (e.KeyChar != '-' || SelectionStart != 0 || (Text.Contains("-") && !SelectedText.Contains("-")));
23 | }
24 |
25 | protected override void WndProc(ref Message m)
26 | {
27 | if (m.Msg != WM_PASTE)
28 | {
29 | base.WndProc(ref m); // Handle all other messages normally
30 | }
31 | else
32 | {
33 | double value;
34 | if (double.TryParse(Clipboard.GetText(), out value))
35 | {
36 | Text = value.ToString();
37 | }
38 | else MessageBox.Show("Only Number Allowed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
39 | }
40 | }
41 |
42 | private double DblParse()
43 | {
44 | double d = 0.0;
45 | if (Text == String.Empty)
46 | {
47 | MessageBox.Show("Empty Value Not Allowed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
48 | ok = false;
49 | }
50 | else
51 | {
52 | ok = double.TryParse(this.Text, out d);
53 | if (ok == false) MessageBox.Show("Only Number Allowed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
54 | }
55 | return d;
56 | }
57 |
58 | public double DoubleVal
59 | {
60 | get
61 | {
62 | return DblParse();
63 | }
64 | }
65 |
66 | public bool NumOK
67 | {
68 | get
69 | {
70 | return ok;
71 | }
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace WinCCFlexLogViewer
5 | {
6 | internal static class Program
7 | {
8 | [STAThread]
9 | private static void Main()
10 | {
11 | Application.EnableVisualStyles();
12 | Application.SetCompatibleTextRenderingDefault(false);
13 | Application.Run(new Main());
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.Reflection;
4 | using System.Runtime.CompilerServices;
5 | using System.Runtime.InteropServices;
6 |
7 | [assembly: AssemblyVersion("1.9.*")]
8 | [assembly: AssemblyDescription("")]
9 | [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: CompilationRelaxations(8)]
13 | [assembly: AssemblyCopyright("Copyright © 2018")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
16 | [assembly: AssemblyProduct("WinCCFlexLogViewer")]
17 | [assembly: ComVisible(false)]
18 | [assembly: AssemblyFileVersion("1.9.1")]
19 | [assembly: AssemblyTitle("WinCCFlexLogViewer")]
20 | [assembly: Guid("6a71dd27-4f68-47f0-8074-655f5ca0c788")]
21 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace WinCCFlexLogViewer.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WinCCFlexLogViewer.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// Looks up a localized resource of type System.Drawing.Bitmap.
65 | ///
66 | internal static System.Drawing.Bitmap fullscreen2 {
67 | get {
68 | object obj = ResourceManager.GetObject("fullscreen2", resourceCulture);
69 | return ((System.Drawing.Bitmap)(obj));
70 | }
71 | }
72 |
73 | ///
74 | /// Looks up a localized resource of type System.Drawing.Bitmap.
75 | ///
76 | internal static System.Drawing.Bitmap glyphicons_115_list {
77 | get {
78 | object obj = ResourceManager.GetObject("glyphicons_115_list", resourceCulture);
79 | return ((System.Drawing.Bitmap)(obj));
80 | }
81 | }
82 |
83 | ///
84 | /// Looks up a localized resource of type System.Drawing.Bitmap.
85 | ///
86 | internal static System.Drawing.Bitmap glyphicons_120_table {
87 | get {
88 | object obj = ResourceManager.GetObject("glyphicons_120_table", resourceCulture);
89 | return ((System.Drawing.Bitmap)(obj));
90 | }
91 | }
92 |
93 | ///
94 | /// Looks up a localized resource of type System.Drawing.Bitmap.
95 | ///
96 | internal static System.Drawing.Bitmap glyphicons_142_database_plus {
97 | get {
98 | object obj = ResourceManager.GetObject("glyphicons_142_database_plus", resourceCulture);
99 | return ((System.Drawing.Bitmap)(obj));
100 | }
101 | }
102 |
103 | ///
104 | /// Looks up a localized resource of type System.Drawing.Bitmap.
105 | ///
106 | internal static System.Drawing.Bitmap glyphicons_16_print {
107 | get {
108 | object obj = ResourceManager.GetObject("glyphicons_16_print", resourceCulture);
109 | return ((System.Drawing.Bitmap)(obj));
110 | }
111 | }
112 |
113 | ///
114 | /// Looks up a localized resource of type System.Drawing.Bitmap.
115 | ///
116 | internal static System.Drawing.Bitmap glyphicons_196_circle_info {
117 | get {
118 | object obj = ResourceManager.GetObject("glyphicons_196_circle_info", resourceCulture);
119 | return ((System.Drawing.Bitmap)(obj));
120 | }
121 | }
122 |
123 | ///
124 | /// Looks up a localized resource of type System.Drawing.Bitmap.
125 | ///
126 | internal static System.Drawing.Bitmap glyphicons_215_resize_small {
127 | get {
128 | object obj = ResourceManager.GetObject("glyphicons_215_resize_small", resourceCulture);
129 | return ((System.Drawing.Bitmap)(obj));
130 | }
131 | }
132 |
133 | ///
134 | /// Looks up a localized resource of type System.Drawing.Bitmap.
135 | ///
136 | internal static System.Drawing.Bitmap glyphicons_217_circle_arrow_left {
137 | get {
138 | object obj = ResourceManager.GetObject("glyphicons_217_circle_arrow_left", resourceCulture);
139 | return ((System.Drawing.Bitmap)(obj));
140 | }
141 | }
142 |
143 | ///
144 | /// Looks up a localized resource of type System.Drawing.Bitmap.
145 | ///
146 | internal static System.Drawing.Bitmap glyphicons_218_circle_arrow_right {
147 | get {
148 | object obj = ResourceManager.GetObject("glyphicons_218_circle_arrow_right", resourceCulture);
149 | return ((System.Drawing.Bitmap)(obj));
150 | }
151 | }
152 |
153 | ///
154 | /// Looks up a localized resource of type System.Drawing.Bitmap.
155 | ///
156 | internal static System.Drawing.Bitmap glyphicons_219_circle_arrow_top {
157 | get {
158 | object obj = ResourceManager.GetObject("glyphicons_219_circle_arrow_top", resourceCulture);
159 | return ((System.Drawing.Bitmap)(obj));
160 | }
161 | }
162 |
163 | ///
164 | /// Looks up a localized resource of type System.Drawing.Bitmap.
165 | ///
166 | internal static System.Drawing.Bitmap glyphicons_220_circle_arrow_down {
167 | get {
168 | object obj = ResourceManager.GetObject("glyphicons_220_circle_arrow_down", resourceCulture);
169 | return ((System.Drawing.Bitmap)(obj));
170 | }
171 | }
172 |
173 | ///
174 | /// Looks up a localized resource of type System.Drawing.Bitmap.
175 | ///
176 | internal static System.Drawing.Bitmap glyphicons_237_zoom_in {
177 | get {
178 | object obj = ResourceManager.GetObject("glyphicons_237_zoom_in", resourceCulture);
179 | return ((System.Drawing.Bitmap)(obj));
180 | }
181 | }
182 |
183 | ///
184 | /// Looks up a localized resource of type System.Drawing.Bitmap.
185 | ///
186 | internal static System.Drawing.Bitmap glyphicons_238_zoom_out {
187 | get {
188 | object obj = ResourceManager.GetObject("glyphicons_238_zoom_out", resourceCulture);
189 | return ((System.Drawing.Bitmap)(obj));
190 | }
191 | }
192 |
193 | ///
194 | /// Looks up a localized resource of type System.Drawing.Bitmap.
195 | ///
196 | internal static System.Drawing.Bitmap glyphicons_242_flash {
197 | get {
198 | object obj = ResourceManager.GetObject("glyphicons_242_flash", resourceCulture);
199 | return ((System.Drawing.Bitmap)(obj));
200 | }
201 | }
202 |
203 | ///
204 | /// Looks up a localized resource of type System.Drawing.Bitmap.
205 | ///
206 | internal static System.Drawing.Bitmap glyphicons_389_exit {
207 | get {
208 | object obj = ResourceManager.GetObject("glyphicons_389_exit", resourceCulture);
209 | return ((System.Drawing.Bitmap)(obj));
210 | }
211 | }
212 |
213 | ///
214 | /// Looks up a localized resource of type System.Drawing.Bitmap.
215 | ///
216 | internal static System.Drawing.Bitmap glyphicons_589_remote_control_tv {
217 | get {
218 | object obj = ResourceManager.GetObject("glyphicons_589_remote_control_tv", resourceCulture);
219 | return ((System.Drawing.Bitmap)(obj));
220 | }
221 | }
222 |
223 | ///
224 | /// Looks up a localized resource of type System.Drawing.Bitmap.
225 | ///
226 | internal static System.Drawing.Bitmap loading {
227 | get {
228 | object obj = ResourceManager.GetObject("loading", resourceCulture);
229 | return ((System.Drawing.Bitmap)(obj));
230 | }
231 | }
232 |
233 | ///
234 | /// Looks up a localized resource of type System.Drawing.Bitmap.
235 | ///
236 | internal static System.Drawing.Bitmap logo {
237 | get {
238 | object obj = ResourceManager.GetObject("logo", resourceCulture);
239 | return ((System.Drawing.Bitmap)(obj));
240 | }
241 | }
242 |
243 | ///
244 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
245 | ///
246 | internal static System.Drawing.Icon logo1 {
247 | get {
248 | object obj = ResourceManager.GetObject("logo1", resourceCulture);
249 | return ((System.Drawing.Icon)(obj));
250 | }
251 | }
252 |
253 | ///
254 | /// Looks up a localized resource of type System.Drawing.Bitmap.
255 | ///
256 | internal static System.Drawing.Bitmap save_64 {
257 | get {
258 | object obj = ResourceManager.GetObject("save_64", resourceCulture);
259 | return ((System.Drawing.Bitmap)(obj));
260 | }
261 | }
262 | }
263 | }
264 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace WinCCFlexLogViewer.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/Resources/fullscreen2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yuriqdev/WinCCflexLogViewer/bc8c728e3a63871747c461b7e6d468a572b63f6b/WinCCFlexArchViewer/Resources/fullscreen2.png
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/Resources/save_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yuriqdev/WinCCflexLogViewer/bc8c728e3a63871747c461b7e6d468a572b63f6b/WinCCFlexArchViewer/Resources/save_64.png
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/WinCCFlexArchViewer.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yuriqdev/WinCCflexLogViewer/bc8c728e3a63871747c461b7e6d468a572b63f6b/WinCCFlexArchViewer/WinCCFlexArchViewer.ico
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/WinCCFlexLogViewer.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | x86
7 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}
8 | WinExe
9 | Properties
10 | WinCCFlexLogViewer
11 | WinCCFlexLogViewer
12 | v3.5
13 | 512
14 | app.manifest
15 | WinCCFlexArchViewer.ico
16 | WinCCFlexLogViewer.Program
17 |
18 | false
19 |
20 |
21 | publish\
22 | true
23 | Disk
24 | false
25 | Foreground
26 | 7
27 | Days
28 | false
29 | false
30 | true
31 | 0
32 | 1.0.0.%2a
33 | false
34 | true
35 |
36 |
37 | x86
38 | true
39 | full
40 | true
41 | bin\Debug\
42 | DEBUG;TRACE
43 | prompt
44 | 4
45 | false
46 |
47 |
48 | AnyCPU
49 | pdbonly
50 | true
51 | bin\Release\
52 | TRACE
53 | prompt
54 | 4
55 | false
56 |
57 |
58 |
59 |
60 |
61 | ..\packages\System.Data.SQLite.Core.1.0.108.0\lib\net20\System.Data.SQLite.dll
62 | True
63 |
64 |
65 |
66 |
67 | ..\packages\ZedGraph.5.1.7\lib\net35-Client\ZedGraph.dll
68 | True
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | Form
77 |
78 |
79 | About.cs
80 |
81 |
82 | Form
83 |
84 |
85 | Main.cs
86 |
87 |
88 | Component
89 |
90 |
91 |
92 |
93 | Resources.resx
94 | True
95 | True
96 |
97 |
98 | Settings.settings
99 | True
100 | True
101 |
102 |
103 | Form
104 |
105 |
106 | YScaleSettings.cs
107 |
108 |
109 |
110 |
111 | About.cs
112 |
113 |
114 | Main.cs
115 |
116 |
117 | ResXFileCodeGenerator
118 | Resources.Designer.cs
119 |
120 |
121 | YScaleSettings.cs
122 |
123 |
124 |
125 |
126 |
127 |
128 | Designer
129 |
130 |
131 | SettingsSingleFileGenerator
132 | Settings.Designer.cs
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 | False
142 | .NET Framework 3.5 SP1
143 | true
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
154 |
155 |
156 |
157 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/YScaleSettings.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace WinCCFlexLogViewer
2 | {
3 | public partial class YScaleSettings : System.Windows.Forms.Form
4 | {
5 | protected override void Dispose(bool disposing)
6 | {
7 | if (disposing && components != null)
8 | {
9 | components.Dispose();
10 | }
11 | base.Dispose(disposing);
12 | }
13 |
14 | //
15 | private void InitializeComponent()
16 | {
17 | this.channel_name_label = new System.Windows.Forms.Label();
18 | this.btnSet = new System.Windows.Forms.Button();
19 | this.btnCancel = new System.Windows.Forms.Button();
20 | this.channel_Y_min_label = new System.Windows.Forms.Label();
21 | this.channel_Y_max_label = new System.Windows.Forms.Label();
22 | this.channel_Y_max_input = new WinCCFlexLogViewer.NumTextBox();
23 | this.channel_Y_min_input = new WinCCFlexLogViewer.NumTextBox();
24 | this.SuspendLayout();
25 | //
26 | // channel_name_label
27 | //
28 | this.channel_name_label.AutoSize = true;
29 | this.channel_name_label.Location = new System.Drawing.Point(5, 9);
30 | this.channel_name_label.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
31 | this.channel_name_label.Name = "channel_name_label";
32 | this.channel_name_label.Size = new System.Drawing.Size(75, 13);
33 | this.channel_name_label.TabIndex = 0;
34 | this.channel_name_label.Text = "Channel name";
35 | //
36 | // btnSet
37 | //
38 | this.btnSet.Location = new System.Drawing.Point(12, 79);
39 | this.btnSet.Name = "btnSet";
40 | this.btnSet.Size = new System.Drawing.Size(75, 23);
41 | this.btnSet.TabIndex = 1;
42 | this.btnSet.Text = "Set";
43 | this.btnSet.UseVisualStyleBackColor = true;
44 | this.btnSet.Click += new System.EventHandler(this.btnSet_Click);
45 | //
46 | // btnCancel
47 | //
48 | this.btnCancel.Location = new System.Drawing.Point(93, 79);
49 | this.btnCancel.Name = "btnCancel";
50 | this.btnCancel.Size = new System.Drawing.Size(75, 23);
51 | this.btnCancel.TabIndex = 2;
52 | this.btnCancel.Text = "Cancel";
53 | this.btnCancel.UseVisualStyleBackColor = true;
54 | this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
55 | //
56 | // channel_Y_min_label
57 | //
58 | this.channel_Y_min_label.AutoSize = true;
59 | this.channel_Y_min_label.Location = new System.Drawing.Point(12, 34);
60 | this.channel_Y_min_label.Name = "channel_Y_min_label";
61 | this.channel_Y_min_label.Size = new System.Drawing.Size(37, 13);
62 | this.channel_Y_min_label.TabIndex = 5;
63 | this.channel_Y_min_label.Text = "Y Min:";
64 | //
65 | // channel_Y_max_label
66 | //
67 | this.channel_Y_max_label.AutoSize = true;
68 | this.channel_Y_max_label.Location = new System.Drawing.Point(12, 56);
69 | this.channel_Y_max_label.Name = "channel_Y_max_label";
70 | this.channel_Y_max_label.Size = new System.Drawing.Size(40, 13);
71 | this.channel_Y_max_label.TabIndex = 6;
72 | this.channel_Y_max_label.Text = "Y Max:";
73 | //
74 | // channel_Y_max_input
75 | //
76 | this.channel_Y_max_input.Location = new System.Drawing.Point(55, 53);
77 | this.channel_Y_max_input.Name = "channel_Y_max_input";
78 | this.channel_Y_max_input.Size = new System.Drawing.Size(100, 20);
79 | this.channel_Y_max_input.TabIndex = 4;
80 | this.channel_Y_max_input.Text = "0";
81 | this.channel_Y_max_input.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
82 | this.channel_Y_max_input.WordWrap = false;
83 | //
84 | // channel_Y_min_input
85 | //
86 | this.channel_Y_min_input.Location = new System.Drawing.Point(55, 31);
87 | this.channel_Y_min_input.Name = "channel_Y_min_input";
88 | this.channel_Y_min_input.Size = new System.Drawing.Size(100, 20);
89 | this.channel_Y_min_input.TabIndex = 3;
90 | this.channel_Y_min_input.Text = "0";
91 | this.channel_Y_min_input.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
92 | this.channel_Y_min_input.WordWrap = false;
93 | //
94 | // YScaleSettings
95 | //
96 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
97 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
98 | this.ClientSize = new System.Drawing.Size(184, 112);
99 | this.Controls.Add(this.channel_Y_max_label);
100 | this.Controls.Add(this.channel_Y_min_label);
101 | this.Controls.Add(this.channel_Y_max_input);
102 | this.Controls.Add(this.channel_Y_min_input);
103 | this.Controls.Add(this.btnCancel);
104 | this.Controls.Add(this.btnSet);
105 | this.Controls.Add(this.channel_name_label);
106 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
107 | this.MaximizeBox = false;
108 | this.MinimizeBox = false;
109 | this.Name = "YScaleSettings";
110 | this.ShowIcon = false;
111 | this.ShowInTaskbar = false;
112 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
113 | this.Text = " Y scale settings";
114 | this.ResumeLayout(false);
115 | this.PerformLayout();
116 |
117 | }
118 | //
119 | private System.ComponentModel.IContainer components;
120 | //
121 | private System.Windows.Forms.Label channel_name_label;
122 | //
123 | private System.Windows.Forms.Button btnSet;
124 | //
125 | private System.Windows.Forms.Button btnCancel;
126 | //
127 | private NumTextBox channel_Y_min_input;
128 | //
129 | private NumTextBox channel_Y_max_input;
130 | //
131 | private System.Windows.Forms.Label channel_Y_min_label;
132 | //
133 | private System.Windows.Forms.Label channel_Y_max_label;
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/YScaleSettings.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace WinCCFlexLogViewer
5 | {
6 | public partial class YScaleSettings : Form
7 | {
8 | public YScaleSettings(double min, double max, string c_name)
9 | {
10 | InitializeComponent();
11 | channel_name_label.Text = c_name;
12 | channel_Y_min_input.Text = string.Concat(min);
13 | channel_Y_max_input.Text = string.Concat(max);
14 | }
15 |
16 | private void btnSet_Click(object sender, EventArgs e)
17 | {
18 | min = channel_Y_min_input.DoubleVal;
19 | max = channel_Y_max_input.DoubleVal;
20 | if (channel_Y_min_input.NumOK == true & channel_Y_max_input.NumOK == true)
21 | {
22 | set = true;
23 | Close();
24 | }
25 | }
26 |
27 | private void btnCancel_Click(object sender, EventArgs e)
28 | {
29 | set = false;
30 | Close();
31 | }
32 | //
33 | public double min;
34 | //
35 | public double max;
36 | //
37 | public bool set;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/YScaleSettings.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/bin/Release/System.Data.SQLite.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yuriqdev/WinCCflexLogViewer/bc8c728e3a63871747c461b7e6d468a572b63f6b/WinCCFlexArchViewer/bin/Release/System.Data.SQLite.dll
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/bin/Release/WinCCFlexLogViewer.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yuriqdev/WinCCflexLogViewer/bc8c728e3a63871747c461b7e6d468a572b63f6b/WinCCFlexArchViewer/bin/Release/WinCCFlexLogViewer.exe
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/bin/Release/ZedGraph.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yuriqdev/WinCCflexLogViewer/bc8c728e3a63871747c461b7e6d468a572b63f6b/WinCCFlexArchViewer/bin/Release/ZedGraph.dll
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/bin/Release/x64/SQLite.Interop.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yuriqdev/WinCCflexLogViewer/bc8c728e3a63871747c461b7e6d468a572b63f6b/WinCCFlexArchViewer/bin/Release/x64/SQLite.Interop.dll
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/bin/Release/x86/SQLite.Interop.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yuriqdev/WinCCflexLogViewer/bc8c728e3a63871747c461b7e6d468a572b63f6b/WinCCFlexArchViewer/bin/Release/x86/SQLite.Interop.dll
--------------------------------------------------------------------------------
/WinCCFlexArchViewer/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WinCCFlexLogViewer.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.25420.1
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinCCFlexLogViewer", "WinCCFlexArchViewer\WinCCFlexLogViewer.csproj", "{4709856B-B2D9-4827-BADC-D0D7B4A64849}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|Mixed Platforms = Debug|Mixed Platforms
12 | Debug|x86 = Debug|x86
13 | Release|Any CPU = Release|Any CPU
14 | Release|Mixed Platforms = Release|Mixed Platforms
15 | Release|x86 = Release|x86
16 | EndGlobalSection
17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
18 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Debug|Any CPU.ActiveCfg = Debug|x86
19 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Debug|Any CPU.Build.0 = Debug|x86
20 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
21 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Debug|Mixed Platforms.Build.0 = Debug|x86
22 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Debug|x86.ActiveCfg = Debug|x86
23 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Debug|x86.Build.0 = Debug|x86
24 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Release|Any CPU.ActiveCfg = Release|x86
25 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Release|Any CPU.Build.0 = Release|x86
26 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Release|Mixed Platforms.ActiveCfg = Release|x86
27 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Release|Mixed Platforms.Build.0 = Release|x86
28 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Release|x86.ActiveCfg = Release|x86
29 | {4709856B-B2D9-4827-BADC-D0D7B4A64849}.Release|x86.Build.0 = Release|x86
30 | EndGlobalSection
31 | GlobalSection(SolutionProperties) = preSolution
32 | HideSolutionNode = FALSE
33 | EndGlobalSection
34 | EndGlobal
35 |
--------------------------------------------------------------------------------
/changelog.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yuriqdev/WinCCflexLogViewer/bc8c728e3a63871747c461b7e6d468a572b63f6b/changelog.txt
--------------------------------------------------------------------------------