// TLReader - reads access database containing tug info
// Copyright (C) 2004 Ian Cowburn
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
using System;
using System.Windows.Forms;
using System.Data;
using System.Data.Common;
using System.Data.Odbc;
using System.Collections;
using System.Collections.Specialized;
using System.IO;
namespace TLReader
{
///
/// Description of MainForm.
///
public class MainForm : System.Windows.Forms.Form
{
private System.Windows.Forms.Button m_quitButton;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.CheckBox m_sortOrder;
private System.Windows.Forms.Button m_aboutButton;
private System.Windows.Forms.Label label;
private System.Windows.Forms.ComboBox m_sortBy;
private System.Windows.Forms.Button m_csvButton;
private System.Windows.Forms.ListView m_list;
private System.Windows.Forms.TextBox m_noRowsText;
private System.Windows.Forms.ProgressBar m_progress;
private System.Windows.Forms.Button m_sortButton;
private OdbcConnection m_dbase;
private Query m_query;
private TLConfig m_config;
private StringCollection m_colDesc;
private StringCollection m_colName;
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
m_config=Config.Load();
m_dbase=new OdbcConnection(m_config.Connect);
m_dbase.Open();
Text+=" - "+m_dbase.Database;
m_colDesc=Util.Split(m_config.DisplayNames);
m_colName=Util.Split(m_config.ColumnNames);
m_sortBy.Items.Clear();
foreach (string s in m_colDesc)
{
m_sortBy.Items.Add(s);
}
m_sortBy.SelectedIndex=0;
DoQuery();
}
[STAThread]
public static void Main(string[] args)
{
try
{
Application.Run(new MainForm());
}
catch (OdbcException e)
{
string error="";
for (int i=0; i < e.Errors.Count; i++)
{
error += "Index #" + i + "\n" +
"Message: " + e.Errors[i].Message + "\n" +
"NativeError: " + e.Errors[i].NativeError.ToString() + "\n" +
"Source: " + e.Errors[i].Source + "\n" +
"SQL: " + e.Errors[i].SQLState + "\n";
}
Util.Error(error);
}
catch(Exception e)
{
Util.Error(e.ToString());
}
}
#region Windows Forms Designer generated code
///
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
///
private void InitializeComponent() {
this.m_sortButton = new System.Windows.Forms.Button();
this.m_progress = new System.Windows.Forms.ProgressBar();
this.m_noRowsText = new System.Windows.Forms.TextBox();
this.m_list = new System.Windows.Forms.ListView();
this.m_csvButton = new System.Windows.Forms.Button();
this.m_sortBy = new System.Windows.Forms.ComboBox();
this.label = new System.Windows.Forms.Label();
this.m_aboutButton = new System.Windows.Forms.Button();
this.m_sortOrder = new System.Windows.Forms.CheckBox();
this.label2 = new System.Windows.Forms.Label();
this.m_quitButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// m_sortButton
//
this.m_sortButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.m_sortButton.Location = new System.Drawing.Point(568, 8);
this.m_sortButton.Name = "m_sortButton";
this.m_sortButton.Size = new System.Drawing.Size(104, 32);
this.m_sortButton.TabIndex = 9;
this.m_sortButton.Text = "Sort";
this.m_sortButton.Click += new System.EventHandler(this.OnSort);
//
// m_progress
//
this.m_progress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.m_progress.Location = new System.Drawing.Point(128, 512);
this.m_progress.Name = "m_progress";
this.m_progress.Size = new System.Drawing.Size(304, 16);
this.m_progress.TabIndex = 3;
//
// m_noRowsText
//
this.m_noRowsText.Location = new System.Drawing.Point(104, 8);
this.m_noRowsText.Name = "m_noRowsText";
this.m_noRowsText.ReadOnly = true;
this.m_noRowsText.Size = new System.Drawing.Size(72, 20);
this.m_noRowsText.TabIndex = 6;
this.m_noRowsText.TabStop = false;
this.m_noRowsText.Text = "textBox";
//
// m_list
//
this.m_list.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.m_list.FullRowSelect = true;
this.m_list.GridLines = true;
this.m_list.HideSelection = false;
this.m_list.Location = new System.Drawing.Point(8, 48);
this.m_list.Name = "m_list";
this.m_list.Size = new System.Drawing.Size(664, 440);
this.m_list.TabIndex = 2;
this.m_list.View = System.Windows.Forms.View.Details;
//
// m_csvButton
//
this.m_csvButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.m_csvButton.Location = new System.Drawing.Point(448, 504);
this.m_csvButton.Name = "m_csvButton";
this.m_csvButton.Size = new System.Drawing.Size(104, 32);
this.m_csvButton.TabIndex = 1;
this.m_csvButton.Text = "Export as CSV";
this.m_csvButton.Click += new System.EventHandler(this.OnExportCSV);
//
// m_sortBy
//
this.m_sortBy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.m_sortBy.Location = new System.Drawing.Point(256, 8);
this.m_sortBy.Name = "m_sortBy";
this.m_sortBy.Size = new System.Drawing.Size(208, 21);
this.m_sortBy.TabIndex = 8;
//
// label
//
this.label.Location = new System.Drawing.Point(8, 8);
this.label.Name = "label";
this.label.Size = new System.Drawing.Size(88, 24);
this.label.TabIndex = 5;
this.label.Text = "Number of Rows";
this.label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// m_aboutButton
//
this.m_aboutButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.m_aboutButton.Location = new System.Drawing.Point(8, 504);
this.m_aboutButton.Name = "m_aboutButton";
this.m_aboutButton.Size = new System.Drawing.Size(104, 32);
this.m_aboutButton.TabIndex = 4;
this.m_aboutButton.Text = "About";
this.m_aboutButton.Click += new System.EventHandler(this.OnAbout);
//
// m_sortOrder
//
this.m_sortOrder.Checked = true;
this.m_sortOrder.CheckState = System.Windows.Forms.CheckState.Checked;
this.m_sortOrder.Location = new System.Drawing.Point(480, 8);
this.m_sortOrder.Name = "m_sortOrder";
this.m_sortOrder.Size = new System.Drawing.Size(80, 24);
this.m_sortOrder.TabIndex = 10;
this.m_sortOrder.Text = "Ascending";
//
// label2
//
this.label2.Location = new System.Drawing.Point(200, 8);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(56, 24);
this.label2.TabIndex = 7;
this.label2.Text = "Sort By";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// m_quitButton
//
this.m_quitButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.m_quitButton.Location = new System.Drawing.Point(568, 504);
this.m_quitButton.Name = "m_quitButton";
this.m_quitButton.Size = new System.Drawing.Size(104, 32);
this.m_quitButton.TabIndex = 0;
this.m_quitButton.Text = "Quit";
this.m_quitButton.Click += new System.EventHandler(this.OnQuit);
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(680, 541);
this.Controls.Add(this.m_sortOrder);
this.Controls.Add(this.m_sortButton);
this.Controls.Add(this.m_sortBy);
this.Controls.Add(this.label2);
this.Controls.Add(this.m_noRowsText);
this.Controls.Add(this.label);
this.Controls.Add(this.m_aboutButton);
this.Controls.Add(this.m_progress);
this.Controls.Add(this.m_list);
this.Controls.Add(this.m_csvButton);
this.Controls.Add(this.m_quitButton);
this.MinimumSize = new System.Drawing.Size(420, 200);
this.Name = "MainForm";
this.Text = "Tuglist Reader";
this.ResumeLayout(false);
}
#endregion
void OnQuit(object sender, System.EventArgs e)
{
Close();
}
void OnExportCSV(object sender, System.EventArgs e)
{
SaveFileDialog fsel=new SaveFileDialog();
fsel.Filter="CSV files (*.csv)|*.csv|All files (*.*)|*.*";
fsel.RestoreDirectory=true;
if(fsel.ShowDialog()==DialogResult.OK)
{
StreamWriter str=File.CreateText(fsel.FileName);
if(str!=null)
{
m_progress.Maximum=m_list.Items.Count+1;
m_progress.Step=1;
m_progress.Value=0;
CSV csv=new CSV(str);
foreach (string s in m_query.Fields)
{
csv.Value(s);
}
csv.EndLine();
m_progress.PerformStep();
foreach (ListViewItem i in m_list.Items)
{
//csv.Value(i.Text);
foreach (ListViewItem.ListViewSubItem si in i.SubItems)
{
csv.Value(si.Text);
}
csv.EndLine();
m_progress.PerformStep();
}
str.Close();
}
else
{
Util.Error("Failed to open "+fsel.FileName);
}
}
m_progress.Value=0;
}
private void DoQuery()
{
Enabled=false;
Cursor=Cursors.WaitCursor;
string sort=m_colName[m_sortBy.SelectedIndex];
string order=m_sortOrder.Checked ? "asc":"desc";
m_query=new Query(m_dbase,
m_config.DisplayNames,
m_config.Query+" order by "+sort+" "+order);
FillList();
m_noRowsText.Text=m_query.Count.ToString();
Cursor=Cursors.Default;
Enabled=true;
}
private void FillList()
{
int f;
m_list.BeginUpdate();
m_list.Columns.Clear();
m_list.Items.Clear();
foreach (string s in m_query.Fields)
{
m_list.Columns.Add(s,100,HorizontalAlignment.Left);
}
for(f=0;f