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;
|
|
}
|
|
}
|
|
}
|