407 lines
10 KiB
C#
407 lines
10 KiB
C#
/*********************************************************************************************
|
|
* Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
|
|
* Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
|
* ------------------------------------------------------------------------------
|
|
* $Workfile: Archive.cs $ $Revision: 3 $
|
|
* $Author: Kathy $ $Date: 1/31/05 11:05a $
|
|
*
|
|
* $History: Archive.cs $
|
|
*
|
|
* ***************** Version 3 *****************
|
|
* User: Kathy Date: 1/31/05 Time: 11:05a
|
|
* Updated in $/LibSource/VEObject
|
|
* Fix B2005-005 - this just fixed empty icon usage
|
|
*
|
|
* ***************** Version 2 *****************
|
|
* User: Kathy Date: 1/24/05 Time: 2:45p
|
|
* Updated in $/LibSource/VEObject
|
|
* B2005-004 fixes - icon clean-up
|
|
*
|
|
* ***************** Version 1 *****************
|
|
* User: Kathy Date: 7/27/04 Time: 8:52a
|
|
* Created in $/LibSource/VEObject
|
|
*********************************************************************************************/
|
|
|
|
using System;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.Design;
|
|
using System.ComponentModel;
|
|
using System.IO;
|
|
using System.Text;
|
|
using Utils;
|
|
using System.Collections.Specialized;
|
|
|
|
namespace VEObject
|
|
{
|
|
/// <summary>
|
|
/// Archive Object.
|
|
/// </summary>
|
|
public class VEO_Archive: VEO_Base
|
|
{
|
|
public bool isnew;
|
|
|
|
// These three strings are stored in the Zip file's
|
|
// comment field
|
|
private String tmpArchiveTitle;
|
|
private String _Comment;
|
|
public ArchiveTypeOptions _ArchiveType;
|
|
|
|
private String tmpComment;
|
|
|
|
private bool _ReadOnly;
|
|
private bool oldReadOnly;
|
|
private bool NeedToGetReadOnly;
|
|
|
|
private bool changeReadOnly;
|
|
private bool changeComment;
|
|
private bool changeArchiveTitle;
|
|
|
|
public VEO_Archive(string ipath, VEO_DummyZip dz)
|
|
{
|
|
iconStates = new int[5] {0,0,0,0,0};
|
|
_Location = ipath; // full path to the Zip file
|
|
VEObjectType = (int)VEObjectTypesDefs.Archive;
|
|
changeReadOnly = false;
|
|
changeComment = false;
|
|
changeArchiveTitle = false;
|
|
NeedToGetReadOnly = true;
|
|
isnew = IsThisANewArchive(ipath);
|
|
if (isnew)
|
|
{
|
|
_Title = "New Archive";
|
|
_Comment = "Created: " + System.DateTime.Now.ToString();
|
|
}
|
|
else // get the title and comment from the Zip file
|
|
{
|
|
GetInfoFromZipComment();
|
|
}
|
|
LoadLockInfo();
|
|
icon = iconStates[(int)Lock.LockStatus];
|
|
parentObj = dz;
|
|
usrRunTime = dz.usrRunTime;
|
|
}
|
|
|
|
// Read in the Title, Archive Type, and Comment from the Zip file's
|
|
// comment field.
|
|
private void GetInfoFromZipComment()
|
|
{
|
|
string tmpstr;
|
|
ZipFuncs ZipInfo = new ZipFuncs(_Location);
|
|
// just opening the zip file like this will read the zip's comment field
|
|
if (ZipInfo.strArcTitle != null)
|
|
tmpstr = ZipInfo.strArcTitle.Trim();
|
|
else
|
|
tmpstr = "";
|
|
// if the title is blank, then use the zip file name as the title
|
|
if (tmpstr.Length == 0)
|
|
this._Title = _Location.Substring(_Location.LastIndexOf("\\")+1);
|
|
else
|
|
this._Title = tmpstr;
|
|
_Comment = ZipInfo.strComment;
|
|
if (ZipInfo.ArchiveType == (int)VEO_Base.ArchiveTypeOptions.Full)
|
|
_ArchiveType = VEO_Base.ArchiveTypeOptions.Full;
|
|
else
|
|
_ArchiveType = VEO_Base.ArchiveTypeOptions.Partial;
|
|
}
|
|
|
|
private bool IsThisANewArchive(string arcPath)
|
|
{
|
|
string tmpstr = arcPath.ToUpper();
|
|
return (!tmpstr.EndsWith(".ZIP") || !File.Exists(tmpstr));
|
|
}
|
|
|
|
private string ParseOutZipPath()
|
|
{
|
|
string zpath = _Location.Substring(0,_Location.LastIndexOf("\\"));
|
|
return zpath;
|
|
}
|
|
|
|
// Gets and Sets for the Property Page
|
|
[Description("Location"),Category("Archive"),ReadOnly(true)]
|
|
public string Location
|
|
{
|
|
get{return _Location;}
|
|
|
|
//note: we don't allow them to change the zip file name or path.
|
|
}
|
|
|
|
|
|
[Description("Archive Title"),Category("Archive")]public string Description
|
|
{
|
|
get
|
|
{
|
|
if (!changeArchiveTitle)
|
|
return _Title;
|
|
else
|
|
return tmpArchiveTitle;
|
|
}
|
|
set
|
|
{
|
|
changeArchiveTitle = true;
|
|
tmpArchiveTitle = value;
|
|
}
|
|
}
|
|
|
|
[Description("Archive Type"),Category("Archive"),ReadOnly(true)]public ArchiveTypeOptions ArchiveType
|
|
{
|
|
get
|
|
{
|
|
return _ArchiveType;
|
|
}
|
|
set
|
|
{
|
|
_ArchiveType=value;
|
|
}
|
|
}
|
|
|
|
[Description("Comment"),Category("Archive")]public string Comment
|
|
{ get
|
|
{
|
|
if (!changeComment)
|
|
return _Comment;
|
|
else
|
|
return tmpComment;
|
|
}
|
|
set
|
|
{
|
|
changeComment = true;
|
|
tmpComment = value;
|
|
}
|
|
}
|
|
|
|
[Description("ReadOnly"),Category("Archive")]public bool ReadOnlyArchiveFile
|
|
{
|
|
get
|
|
{
|
|
if (!changeReadOnly && NeedToGetReadOnly)
|
|
{
|
|
FileAttributes attrib = File.GetAttributes(_Location);
|
|
_ReadOnly = (attrib & FileAttributes.ReadOnly) == FileAttributes.ReadOnly;
|
|
NeedToGetReadOnly = false;
|
|
}
|
|
return _ReadOnly;
|
|
}
|
|
set
|
|
{
|
|
if (!changeReadOnly) // only save previous value once
|
|
oldReadOnly = _ReadOnly;
|
|
changeReadOnly = true;
|
|
_ReadOnly = value;
|
|
}
|
|
}
|
|
|
|
// When the Save Button is pressed on the Property page, this function
|
|
// is called.
|
|
public override bool Write()
|
|
{
|
|
if (changeReadOnly)
|
|
{
|
|
changeReadOnly = false;
|
|
NeedToGetReadOnly = true;
|
|
FileAttributes attrib = File.GetAttributes(_Location);
|
|
if (_ReadOnly != ((attrib & FileAttributes.ReadOnly) == FileAttributes.ReadOnly))
|
|
attrib ^= FileAttributes.ReadOnly; //toggle
|
|
File.SetAttributes(_Location,attrib);
|
|
}
|
|
|
|
if (changeComment)
|
|
{
|
|
changeComment = false;
|
|
_Comment = tmpComment;
|
|
}
|
|
|
|
if (changeArchiveTitle)
|
|
{
|
|
changeArchiveTitle = false;
|
|
_Title = tmpArchiveTitle;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// When the Cancel Button on the Property Page is pressed,
|
|
// this function is called.
|
|
public override void CancelWrite()
|
|
{
|
|
if (changeReadOnly)
|
|
{
|
|
_ReadOnly = oldReadOnly;
|
|
}
|
|
changeArchiveTitle = false;
|
|
changeComment = false;
|
|
changeReadOnly = false;
|
|
NeedToGetReadOnly = true;
|
|
}
|
|
|
|
public override bool Read(bool dummy)
|
|
{
|
|
//load archive file list
|
|
return true;
|
|
}
|
|
|
|
public override void AddToTree(TreeNode parentnd)
|
|
{
|
|
}
|
|
|
|
public override bool Expand(TreeNode parentnd)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public override bool PropertiesDlg(Object parent)
|
|
{
|
|
ARProperties propdlg = new ARProperties(parent, this);
|
|
if (propdlg.ShowDialog() == DialogResult.OK) return true;
|
|
return false;
|
|
}
|
|
|
|
public bool Exists(string dname)
|
|
{
|
|
if(dname==null||dname=="") return false;
|
|
|
|
string archname=null;
|
|
// see if this is a pathname, it needs to be for the Exists check.
|
|
if (dname.IndexOf("\\") < 0) // it's not a path, prepend the path
|
|
archname = _Location + "\\" + dname;
|
|
else
|
|
archname = dname;
|
|
|
|
return File.Exists(archname);
|
|
}
|
|
|
|
public override bool mnuAllowNew()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public override bool mnuAllowDelete()
|
|
{
|
|
// VEO_DummyArchive ds = (VEO_DummyArchive) this.parentObj;
|
|
// VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
|
|
// if (ps.isApproved == true) return false;
|
|
// if (amILockedByMe()==false) return false;
|
|
// if ((ps.accessFlags&Security.DOCMAINT)==Security.DOCMAINT) return true;
|
|
return true;
|
|
}
|
|
|
|
public override bool mnuAllowUpdateArch()
|
|
{
|
|
if (amILockedByMe()==false) return false;
|
|
return true;
|
|
}
|
|
|
|
public override bool mnuAllowExtractArch()
|
|
{
|
|
if (amILockedByMe()==false) return false;
|
|
return true;
|
|
}
|
|
|
|
public override bool mnuAllowTestArchive()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public override void DoListView(ListView veoListView)
|
|
{
|
|
ZipFuncs ZipInfo = new ZipFuncs(_Location);
|
|
ListViewItem item=null;
|
|
veoListView.Columns.Add("Date/Time", 150, HorizontalAlignment.Left);
|
|
veoListView.Columns.Add("File", 450, HorizontalAlignment.Left);
|
|
StringCollection ZipFileList;
|
|
// veoListView.Sorting = SortOrder.Ascending;
|
|
|
|
ZipFileList = ZipInfo.ZipFileContents();
|
|
|
|
for (int i=0; i< ZipFileList.Count; i++)
|
|
{
|
|
string tmpstr = ZipFileList[i].ToString();
|
|
int subIdx = tmpstr.IndexOf('!');
|
|
item = new ListViewItem(tmpstr.Substring(0,subIdx));
|
|
item.SubItems.Add(tmpstr.Substring(subIdx+1));
|
|
item.Tag = this;
|
|
veoListView.Items.Add(item);
|
|
}
|
|
AllowListViewSort = true;
|
|
}
|
|
|
|
public override bool Delete()
|
|
{
|
|
if ((File.GetAttributes(_Location) & System.IO.FileAttributes.ReadOnly) == System.IO.FileAttributes.ReadOnly)
|
|
File.SetAttributes(_Location,System.IO.FileAttributes.Normal);
|
|
File.Delete(_Location);
|
|
// if this is the last zip, then change parent's icon to empty
|
|
VEO_DummyZip zip = (VEO_DummyZip) this.parentObj;
|
|
if (zip.Children.Count==1) zip.IsEmpty=true; // just this one.
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// This class is used when creating a new archive
|
|
public class VEO_ArchiveN: VEO_Archive
|
|
{
|
|
public VEO_ArchiveN(string ipath, VEO_DummyZip dz)
|
|
: base(ipath, dz)
|
|
{
|
|
}
|
|
|
|
[Description("Location"),Category("Archive"),ReadOnly(false),EditorAttribute(typeof(PropSaveFileAsDlg), typeof(System.Drawing.Design.UITypeEditor))]
|
|
public new string Location
|
|
{
|
|
get{return _Location;}
|
|
|
|
set
|
|
{
|
|
_Location=value.ToString();
|
|
}
|
|
}
|
|
|
|
[Description("Archive Type"),Category("Archive"),ReadOnly(false)]public new ArchiveTypeOptions ArchiveType
|
|
{
|
|
get
|
|
{
|
|
return _ArchiveType;
|
|
}
|
|
set
|
|
{
|
|
_ArchiveType=value;
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Setup a class that will display the SaveFileAs dialog from the property dialog
|
|
* when the "..." is pressed.
|
|
*/
|
|
public class PropSaveFileAsDlg : 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)
|
|
{
|
|
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
|
|
saveFileDialog1.AddExtension = true;
|
|
saveFileDialog1.CheckPathExists = true;
|
|
saveFileDialog1.DefaultExt = ".zip";
|
|
saveFileDialog1.Filter = "ZIP Files|*.zip|All Files|*.*||";
|
|
saveFileDialog1.DereferenceLinks = true;
|
|
saveFileDialog1.OverwritePrompt = true;
|
|
saveFileDialog1.Title = "Archive Location and Name";
|
|
saveFileDialog1.FileName = value.ToString();
|
|
saveFileDialog1.ShowDialog();
|
|
|
|
return saveFileDialog1.FileName;
|
|
}
|
|
|
|
public override bool GetPaintValueSupported(
|
|
System.ComponentModel.ITypeDescriptorContext context)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|