326 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			326 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| /*********************************************************************************************
 | |
|  * Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
 | |
|  * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
 | |
|  * ------------------------------------------------------------------------------
 | |
|  * $Workfile: DataRoot.cs $     $Revision: 2 $
 | |
|  * $Author: Jsj $   $Date: 3/06/07 1:29p $
 | |
|  *
 | |
|  * $History: DataRoot.cs $
 | |
|  * 
 | |
|  * *****************  Version 2  *****************
 | |
|  * User: Jsj          Date: 3/06/07    Time: 1:29p
 | |
|  * Updated in $/LibSource/VEObject
 | |
|  * Property page check
 | |
|  * 
 | |
|  * *****************  Version 1  *****************
 | |
|  * User: Kathy        Date: 7/27/04    Time: 8:53a
 | |
|  * Created in $/LibSource/VEObject
 | |
|  *********************************************************************************************/
 | |
| 
 | |
| using System;
 | |
| using System.Collections;
 | |
| using System.Windows.Forms;
 | |
| using System.ComponentModel;
 | |
| using System.IO;
 | |
| using VENetwork;
 | |
| using Utils;
 | |
| 
 | |
| namespace VEObject
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// This module defines the DataRoot class, which is the root of all
 | |
| 	/// data that is accessible to this user. (i.e. it is the container
 | |
| 	/// for all data within the datapath).  Applications accessing the database 
 | |
| 	/// should create a DataRoot.
 | |
| 	/// </summary>
 | |
| 	public class VEO_DataRoot : VEO_Base
 | |
| 	{
 | |
| 		protected string tmpLocation;
 | |
| 		protected bool changeLocation;
 | |
| 
 | |
| 		public VEO_DataRoot(UserRunTime iusrRunTime)
 | |
| 		{
 | |
| 			VEObjectType=(int)VEObjectTypesDefs.System;
 | |
| 			iconStates = new int[5] {6,21,8,22,7};
 | |
| 			_Title = "VE-PROMS Data "+iusrRunTime.ucfgpath;
 | |
| 			_Location = iusrRunTime.ucfgpath;
 | |
| 			changeLocation = false;
 | |
| 			usrRunTime = iusrRunTime;
 | |
| 			isNew=false;
 | |
| 			LoadLockInfo();
 | |
| 			icon = iconStates[(int)Lock.LockStatus];
 | |
| 		}
 | |
| 
 | |
| 		public override void LoadLockInfo()
 | |
| 		{
 | |
| 			Lock = new VELock(usrRunTime.syspath, usrRunTime.myUserData, usrRunTime.InMultiUserMode?VENetwork.LockTypes.System:VENetwork.LockTypes.None);
 | |
| 		}
 | |
| 
 | |
| 		// The following properties are used in the 'Properties' dialog. This set is used
 | |
| 		// for modify.
 | |
| 		[Description("Title"),Category("VE-PROMS Data Paths (CFG File)"),ReadOnly(true)]public string Title
 | |
| 		{
 | |
| 			get{return _Title;}
 | |
| 			set{_Title=value;}
 | |
| 		}
 | |
| 		
 | |
| 		//[Description("Location"),Category("VE-PROMS Data Paths (CFG File)"),EditorAttribute(typeof(DataRootFileDlg), typeof(System.Drawing.Design.UITypeEditor))]public string Location
 | |
| 		[Description("Location"),Category("VE-PROMS Data Paths (CFG File)"),ReadOnly(true)]public string Location
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				if (!changeLocation)
 | |
| 					return _Location;
 | |
| 				else
 | |
| 					return tmpLocation;
 | |
| 			}
 | |
| 			set
 | |
| 			{
 | |
| 				FileInfo fi = new FileInfo(value);
 | |
| 				if (!fi.Exists)
 | |
| 				{
 | |
| 					MessageBox.Show("The file that was specified does not exist.");
 | |
| 					return;
 | |
| 				}
 | |
| 				changeLocation = true;
 | |
| 				tmpLocation=value;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public override bool Open()
 | |
| 		{
 | |
| 			isOpen = true;
 | |
| 			// check current multi-user status
 | |
| 			if (Connection!=null)Connection.Enter(false);
 | |
| 			return true;
 | |
| 		}
 | |
| 
 | |
| 		// Close clears any multi-user settings for the system level
 | |
| 		public override bool Close()
 | |
| 		{
 | |
| 			isOpen = false;
 | |
| 			if (Connection!=null)Connection.Exit();
 | |
| 			return true;
 | |
| 		}
 | |
| 
 | |
| 		public override void Restore()
 | |
| 		{
 | |
| 			changeLocation = false;
 | |
| 		}
 | |
| 
 | |
| 		public override bool mnuAllowDelete()
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		public override bool mnuAllowLckDB()
 | |
| 		{
 | |
| 			if (usrRunTime.InMultiUserMode && usrRunTime.sec.PermissionToLockFlag&&Lock.LockStatus==VENetwork.Status.NoLock) return true;
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		public override bool mnuAllowNew()
 | |
| 		{
 | |
| //			if (usrRunTime.InMultiUserMode && Lock.LockStatus==VENetwork.Status.LockedByOther)return false;
 | |
| 			// B2007-005
 | |
| 			// Standardize the need for a lock. Prevent NEW button on first tree node
 | |
| 			// if a lock is not set
 | |
| 			if (amILockedByMe()==false) return false;
 | |
| 			return true;
 | |
| 		}
 | |
| 
 | |
| 		public override bool mnuAllowUnlckDB()
 | |
| 		{
 | |
| 			if (usrRunTime.InMultiUserMode && usrRunTime.sec.PermissionToLockFlag&&(Lock.LockStatus==VENetwork.Status.Locked||
 | |
| 				Lock.LockStatus==VENetwork.Status.LockPending)) return true;
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		// Add a Data Path. Private method used below.
 | |
| 		private void AddDataPath(string entry)
 | |
| 		{
 | |
| 			int comma;
 | |
| 			string tmp;
 | |
| 			string loc;
 | |
| 			string title;
 | |
| 
 | |
| 			comma = entry.IndexOf(",");
 | |
| 			tmp=entry.Substring(0,comma);
 | |
| 			loc=tmp.Trim();
 | |
| 			//Make sure datapath has an ending backslash
 | |
| 			if (!(loc.EndsWith("\\")))
 | |
| 				loc = loc + "\\";
 | |
| 
 | |
| 			tmp=entry.Substring(comma+1,entry.Length-comma-2);  // -2, don't copy ";"
 | |
| 			title=tmp.Trim();
 | |
| 
 | |
| 			VEO_DataPath dp = new VEO_DataPath(usrRunTime,title,loc);
 | |
| 			dp.parentObj = (VEO_Base) this;
 | |
| 			Children.Add(dp);
 | |
| 		}
 | |
| 
 | |
| 		// Get the datapath list. If in demo mode, use sample list; otherwise read in
 | |
| 		// from the user's cfg file.
 | |
| 		public override bool Read(bool dummy)
 | |
| 		{
 | |
| 			PrivateProfile ppCfg;
 | |
| 			string dpath;
 | |
| 			string entry;
 | |
| 			int semi;
 | |
| 			int strtindx=0;
 | |
| 			int netpth;
 | |
| 
 | |
| 			if (usrRunTime.sec.isDemoMode)
 | |
| 			{
 | |
| 				dpath = usrRunTime.syspath + "\\samples\\,Demo Data;";
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				// for this data root, read in the datapath. If a user's cfg exists
 | |
| 				// use that data. Otherwise, use the menuwin2.xml data which is part
 | |
| 				// of the user's run time.
 | |
| 				ppCfg = new PrivateProfile(usrRunTime.ucfgpath);
 | |
| //				dpath=ppCfg.Attr("/ini/section[@name='Menu']/param[@name='DataPath']/@value");
 | |
| 				dpath=ppCfg.Attr("Menu","DataPath");
 | |
| 				if (dpath==null || dpath=="")return false;
 | |
| 			}
 | |
| 			semi=dpath.IndexOf(";",strtindx);
 | |
| 			if (semi == -1) 
 | |
| 			{
 | |
| 				MessageBox.Show("Must have semi-colon in datapath");
 | |
| 				Environment.Exit(-1);
 | |
| 			}
 | |
| 			while (semi !=-1)
 | |
| 			{
 | |
| 				entry = dpath.Substring(strtindx,semi-strtindx+1);
 | |
| 				netpth = entry.IndexOf("////",0);
 | |
| 				if (netpth != -1)
 | |
| 					//if(GetNetTempDisk()) AddDataPath(entry);
 | |
| 					MessageBox.Show("Need to support network temp disk");
 | |
| 				else
 | |
| 					AddDataPath(entry);
 | |
| 
 | |
| 				if (semi+1>dpath.Length)
 | |
| 					strtindx=-1;
 | |
| 				else
 | |
| 				{
 | |
| 					strtindx=semi+1;
 | |
| 					semi=dpath.IndexOf(";",strtindx);
 | |
| 				}
 | |
| 			}
 | |
| 			
 | |
| 			return true;
 | |
| 		}
 | |
| 
 | |
| 		// use the change to the cfg file.
 | |
| 		public override bool Write()
 | |
| 		{
 | |
| 			// check for cfg file existence
 | |
| 			FileInfo fi = new FileInfo(Location);
 | |
| 			if (fi.Exists)
 | |
| 			{
 | |
| 				if(changeLocation)_Location=tmpLocation;
 | |
| 				changeLocation=false;
 | |
| 				this._Title = "VE-PROMS Data " + Location;
 | |
| 				usrRunTime.ucfgpath = Location;
 | |
| 				return true;
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				MessageBox.Show("The file that was specified does not exist.");
 | |
| 				return false;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// add a new datapath
 | |
| 		public override Object MakeNewChild()
 | |
| 		{
 | |
| 			VEO_DataPathN dp = new VEO_DataPathN(usrRunTime,null,null);
 | |
| 			return dp;
 | |
| 		}
 | |
| 
 | |
| 		// check that the directory input by the user exists. If so, add the
 | |
| 		// directory & title to the cfg file.
 | |
| 		public override bool SaveChild(Object obj)
 | |
| 		{
 | |
| 			VEO_DataPathN dp = (VEO_DataPathN) obj;
 | |
| 			// B2007-005
 | |
| 			// If the user didn't enter a location, then show an error message
 | |
| 			//and don't continue with the save.
 | |
| 			if (dp.Location == null || dp.Location.Length == 0)
 | |
| 			{
 | |
| 				MessageBox.Show("No data path Location specified.","Error");
 | |
| 				return false;
 | |
| 			}
 | |
| 			dp.SaveFields();
 | |
| 			// Check for existance of directory if it doesn't exist give message
 | |
| 			// and return;
 | |
| 			string pth = dp._Location;
 | |
| 			DirectoryInfo di = new DirectoryInfo(pth);
 | |
| 			if (di.Exists == false)
 | |
| 			{
 | |
| 				try
 | |
| 				{
 | |
| 					di.Create();
 | |
| 				}
 | |
| 				catch
 | |
| 				{
 | |
| 					MessageBox.Show("Directory for data path doesn't exist, and could not be created.");
 | |
| 				}
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			string newcfgpth = dp._Location+","+dp._Title+";";
 | |
| 			usrRunTime.AddPathToCfg(newcfgpth);
 | |
| 			return true;
 | |
| 		}
 | |
| 
 | |
| 		public override void DoListView(ListView veoListView)
 | |
| 		{
 | |
| 			ListViewItem item=null;
 | |
| 			veoListView.Columns.Add("Location", 120, HorizontalAlignment.Left);
 | |
| 			veoListView.Columns.Add("Title", 300, HorizontalAlignment.Left);
 | |
| 			
 | |
| 			for (int i=0; i<Children.Count; i++)
 | |
| 			{
 | |
| 				VEO_DataPath dp = (VEO_DataPath) Children[i];
 | |
| 				item = new ListViewItem(dp._Location,dp.icon);
 | |
| 				item.Tag = dp;
 | |
| 				item.SubItems.Add(dp._Title);
 | |
| 				veoListView.Items.Add(item);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public class DataRootFileDlg : System.Drawing.Design.UITypeEditor
 | |
| 	{
 | |
| 		public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
 | |
| 		{
 | |
| 			return System.Drawing.Design.UITypeEditorEditStyle.Modal;
 | |
| 		}
 | |
| 
 | |
| 		public override object EditValue(
 | |
| 			System.ComponentModel.ITypeDescriptorContext context,
 | |
| 			System.IServiceProvider provider, object value)
 | |
| 		{
 | |
| 			OpenFileDialog FileDialog1 = new OpenFileDialog();
 | |
| 			FileDialog1.AddExtension = true;
 | |
| 			FileDialog1.CheckPathExists = true;
 | |
| 			FileDialog1.DefaultExt = ".cfg";
 | |
| 			FileDialog1.Filter = "CFG Files|*.cfg|All Files|*.*||";
 | |
| 			FileDialog1.DereferenceLinks = true;
 | |
| 			FileDialog1.Title = "User Configuration File (defines datapath)";
 | |
| 			FileDialog1.FileName = value.ToString();
 | |
| 			FileDialog1.ShowDialog();
 | |
| 
 | |
| 			return FileDialog1.FileName;
 | |
| 		}
 | |
| 
 | |
| 		public override bool GetPaintValueSupported(
 | |
| 			System.ComponentModel.ITypeDescriptorContext context)
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 	}
 | |
| }
 |