mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Moved BeefInstall to Beef_website
This commit is contained in:
parent
d7da98444e
commit
faa1dbd45e
18 changed files with 0 additions and 1659 deletions
|
@ -1,26 +0,0 @@
|
|||
FileVersion = 1
|
||||
|
||||
[Project]
|
||||
Name = "Stub"
|
||||
TargetType = "BeefWindowsApplication"
|
||||
StartupObject = "BIStub.Program"
|
||||
|
||||
[Configs.Debug.Win64]
|
||||
TargetDirectory = "$(WorkspaceDir)/../dist"
|
||||
TargetName = "$(ProjectName)_d"
|
||||
BeefLibType = "Static"
|
||||
|
||||
[Configs.Release.Win64]
|
||||
TargetDirectory = "$(WorkspaceDir)/../dist"
|
||||
|
||||
[Configs.Paranoid.Win64]
|
||||
TargetDirectory = "$(WorkspaceDir)/../dist"
|
||||
|
||||
[Configs.Test.Win64]
|
||||
TargetDirectory = "$(WorkspaceDir)/../dist"
|
||||
|
||||
[ProjectFolder]
|
||||
|
||||
[[ProjectFolder.Items]]
|
||||
Type = "Source"
|
||||
Path = "../../../IDE/src/util/Zip.bf"
|
|
@ -1,11 +0,0 @@
|
|||
FileVersion = 1
|
||||
Projects = {Stub = {Path = "."}}
|
||||
Unlocked = ["corlib"]
|
||||
|
||||
[Workspace]
|
||||
StartupProject = "Stub"
|
||||
|
||||
[Configs.Debug.Win64]
|
||||
AllocType = "CRT"
|
||||
EnableObjectDebugFlags = false
|
||||
IntermediateType = "ObjectAndIRCode"
|
|
@ -1,278 +0,0 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace System.Windows
|
||||
{
|
||||
class CabFile
|
||||
{
|
||||
struct HFDI : int
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
struct HFile : int
|
||||
{
|
||||
}
|
||||
|
||||
enum FDIERROR : int32
|
||||
{
|
||||
FDIERROR_NONE,
|
||||
FDIERROR_CABINET_NOT_FOUND,
|
||||
FDIERROR_NOT_A_CABINET,
|
||||
FDIERROR_UNKNOWN_CABINET_VERSION,
|
||||
FDIERROR_CORRUPT_CABINET,
|
||||
FDIERROR_ALLOC_FAIL,
|
||||
FDIERROR_BAD_COMPR_TYPE,
|
||||
FDIERROR_MDI_FAIL,
|
||||
FDIERROR_TARGET_FILE,
|
||||
FDIERROR_RESERVE_MISMATCH,
|
||||
FDIERROR_WRONG_CABINET,
|
||||
FDIERROR_USER_ABORT,
|
||||
FDIERROR_EOF,
|
||||
}
|
||||
|
||||
|
||||
[CRepr]
|
||||
struct FDICABINETINFO
|
||||
{
|
||||
public int32 cbCabinet; // Total length of cabinet file
|
||||
public uint16 cFolders; // Count of folders in cabinet
|
||||
public uint16 cFiles; // Count of files in cabinet
|
||||
public uint16 setID; // Cabinet set ID
|
||||
public uint16 iCabinet; // Cabinet number in set (0 based)
|
||||
public Windows.IntBool fReserve; // TRUE => RESERVE present in cabinet
|
||||
public Windows.IntBool hasprev; // TRUE => Cabinet is chained prev
|
||||
public Windows.IntBool hasnext; // TRUE => Cabinet is chained next
|
||||
}
|
||||
|
||||
[CRepr]
|
||||
struct FDINOTIFICATION
|
||||
{
|
||||
public int32 cb;
|
||||
public char8* psz1;
|
||||
public char8* psz2;
|
||||
public char8* psz3; // Points to a 256 character buffer
|
||||
public void* pv; // Value for client
|
||||
|
||||
public HFile hf;
|
||||
|
||||
public uint16 date;
|
||||
public uint16 time;
|
||||
public uint16 attribs;
|
||||
|
||||
public uint16 setID; // Cabinet set ID
|
||||
public uint16 iCabinet; // Cabinet number (0-based)
|
||||
public uint16 iFolder; // Folder number (0-based)
|
||||
|
||||
public FDIERROR fdie;
|
||||
}
|
||||
|
||||
enum NotificationType : int32
|
||||
{
|
||||
CABINET_INFO, // General information about cabinet
|
||||
PARTIAL_FILE, // First file in cabinet is continuation
|
||||
COPY_FILE, // File to be copied
|
||||
CLOSE_FILE_INFO, // close the file, set relevant info
|
||||
NEXT_CABINET, // File continued to next cabinet
|
||||
ENUMERATE, // Enumeration status
|
||||
}
|
||||
|
||||
struct ERF
|
||||
{
|
||||
public int32 erfOper; // FCI/FDI error code -- see FDIERROR_XXX
|
||||
// and FCIERR_XXX equates for details.
|
||||
|
||||
public int32 erfType; // Optional error value filled in by FCI/FDI.
|
||||
// For FCI, this is usually the C run-time
|
||||
// *errno* value.
|
||||
public Windows.IntBool fError; // TRUE => error present
|
||||
}
|
||||
|
||||
enum FDIDECRYPTTYPE : int32
|
||||
{
|
||||
NEW_CABINET, // New cabinet
|
||||
NEW_FOLDER, // New folder
|
||||
DECRYPT, // Decrypt a data block
|
||||
}
|
||||
|
||||
[CRepr]
|
||||
struct FDIDECRYPT
|
||||
{
|
||||
public FDIDECRYPTTYPE fdidt; // Command type (selects union below)
|
||||
public void* pvUser; // Decryption context
|
||||
}
|
||||
|
||||
[CRepr]
|
||||
struct FDIDECRYPT_CABINET : FDIDECRYPT
|
||||
{
|
||||
public void* pHeaderReserve; // RESERVE section from CFHEADER
|
||||
public uint16 cbHeaderReserve; // Size of pHeaderReserve
|
||||
public uint16 setID; // Cabinet set ID
|
||||
public int32 iCabinet; // Cabinet number in set (0 based)
|
||||
}
|
||||
|
||||
[CRepr]
|
||||
struct FDIDECRYPT_FOLDER : FDIDECRYPT
|
||||
{
|
||||
public void* pFolderReserve; // RESERVE section from CFFOLDER
|
||||
public uint16 cbFolderReserve; // Size of pFolderReserve
|
||||
public uint16 iFolder; // Folder number in cabinet (0 based)
|
||||
}
|
||||
|
||||
[CRepr]
|
||||
struct FDIDECRYPT_DECRYPT : FDIDECRYPT
|
||||
{
|
||||
public void* pDataReserve; // RESERVE section from CFDATA
|
||||
public uint16 cbDataReserve; // Size of pDataReserve
|
||||
public void* pbData; // Data buffer
|
||||
public uint16 cbData; // Size of data buffer
|
||||
public Windows.IntBool fSplit; // TRUE if this is a split data block
|
||||
public uint16 cbPartial; // 0 if this is not a split block, or
|
||||
// the first piece of a split block;
|
||||
// Greater than 0 if this is the
|
||||
// second piece of a split block.
|
||||
}
|
||||
|
||||
function void* FNALLOC(uint32 cb);
|
||||
function void FNFREE(void* p);
|
||||
function HFile FNOPEN(char8* fileName, int32 oflag, int32 pmode);
|
||||
function uint32 FNREAD(HFile file, void* pv, uint32 cb);
|
||||
function uint32 FNWRITE(HFile file, void* pv, uint32 cb);
|
||||
function int32 FNCLOSE(HFile file);
|
||||
function int32 FNSEEK(HFile file, int32 dist, int32 seekType);
|
||||
function int FNFDINOTIFY(NotificationType notifyType, FDINOTIFICATION* notifyData);
|
||||
function int32 FNFDIDECRYPT(FDIDECRYPT* fdid);
|
||||
|
||||
static void* CabMemAlloc(uint32 cb)
|
||||
{
|
||||
return new uint8[cb]*;
|
||||
}
|
||||
|
||||
static void CabMemFree(void* p)
|
||||
{
|
||||
delete p;
|
||||
}
|
||||
|
||||
static HFile CabFileOpen(char8* fileName, int32 oflag, int32 pmode)
|
||||
{
|
||||
String fileNameStr = scope .(fileName);
|
||||
|
||||
Windows.Handle fh;
|
||||
if (oflag & 0x0100 != 0)
|
||||
{
|
||||
// Creating
|
||||
fh = Windows.CreateFileW(fileNameStr.ToScopedNativeWChar!(), Windows.GENERIC_READ | Windows.GENERIC_WRITE, .Read | .Write, null, .Create, 0, .NullHandle);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Reading
|
||||
fh = Windows.CreateFileW(fileNameStr.ToScopedNativeWChar!(), Windows.GENERIC_READ, .Read | .Write, null, .Open, 0, .NullHandle);
|
||||
}
|
||||
|
||||
return (.)fh;
|
||||
}
|
||||
|
||||
static uint32 CabFileRead(HFile file, void* pv, uint32 cb)
|
||||
{
|
||||
Windows.ReadFile((.)file, (.)pv, (.)cb, var bytesRead, null);
|
||||
return (.)bytesRead;
|
||||
}
|
||||
|
||||
static uint32 CabFileWrite(HFile file, void* pv, uint32 cb)
|
||||
{
|
||||
Windows.WriteFile((.)file, (.)pv, (.)cb, var bytesWritten, null);
|
||||
return (.)bytesWritten;
|
||||
}
|
||||
|
||||
static int32 CabFileClose(HFile file)
|
||||
{
|
||||
((Windows.Handle)file).Close();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int32 CabFileSeek(HFile file, int32 dist, int32 seekType)
|
||||
{
|
||||
return Windows.SetFilePointer((.)file, dist, null, seekType);
|
||||
}
|
||||
|
||||
static int CabFDINotify(NotificationType notifyType, FDINOTIFICATION* notifyData)
|
||||
{
|
||||
if (notifyType == .COPY_FILE)
|
||||
{
|
||||
String destFileName = scope .();
|
||||
destFileName.Append(@"c:\temp\out\");
|
||||
destFileName.Append(notifyData.psz1);
|
||||
|
||||
//_O_BINARY | _O_CREAT | _O_WRONLY | _O_SEQUENTIAL
|
||||
//_S_IREAD | _S_IWRITE
|
||||
|
||||
String dirPath = scope String();
|
||||
Path.GetDirectoryPath(destFileName, dirPath);
|
||||
Directory.CreateDirectory(dirPath).IgnoreError();
|
||||
|
||||
let hOutFile = CabFileOpen(destFileName, 0x8121, 0x0180);
|
||||
return (.)hOutFile;
|
||||
}
|
||||
else if (notifyType == .CLOSE_FILE_INFO)
|
||||
{
|
||||
CabFileClose(notifyData.hf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
[Import("Cabinet.lib"), CLink]
|
||||
static extern HFDI FDICreate(FNALLOC pfnalloc,
|
||||
FNFREE pfnfree,
|
||||
FNOPEN pfnopen,
|
||||
FNREAD pfnread,
|
||||
FNWRITE pfnwrite,
|
||||
FNCLOSE pfnclose,
|
||||
FNSEEK pfnseek,
|
||||
int32 cpuType,
|
||||
ERF* erf);
|
||||
|
||||
[CLink]
|
||||
static extern Windows.IntBool FDIDestroy(HFDI hfdi);
|
||||
|
||||
[CLink]
|
||||
static extern Windows.IntBool FDICopy(HFDI hfdi,
|
||||
char8* pszCabinet,
|
||||
char8* pszCabPath,
|
||||
int32 flags,
|
||||
FNFDINOTIFY fnfdin,
|
||||
FNFDIDECRYPT pfnfdid,
|
||||
void* pvUser);
|
||||
|
||||
HFDI mHDFI;
|
||||
|
||||
public ~this()
|
||||
{
|
||||
if (mHDFI != 0)
|
||||
{
|
||||
FDIDestroy(mHDFI);
|
||||
}
|
||||
}
|
||||
|
||||
public void Init()
|
||||
{
|
||||
ERF erf;
|
||||
|
||||
mHDFI = FDICreate(=> CabMemAlloc,
|
||||
=> CabMemFree,
|
||||
=> CabFileOpen,
|
||||
=> CabFileRead,
|
||||
=> CabFileWrite,
|
||||
=> CabFileClose,
|
||||
=> CabFileSeek,
|
||||
1 /*cpu80386*/,
|
||||
&erf);
|
||||
}
|
||||
|
||||
public void Copy()
|
||||
{
|
||||
FDICopy(mHDFI, "test.cab", "c:\\temp\\", 0, => CabFDINotify, null, Internal.UnsafeCastToPtr(this));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,236 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace System.Windows
|
||||
{
|
||||
class PEFile
|
||||
{
|
||||
public const uint16 PE_MACHINE_X86 = 0x14c;
|
||||
public const uint16 PE_MACHINE_X64 = 0x8664;
|
||||
|
||||
[CRepr]
|
||||
public struct PEHeader
|
||||
{
|
||||
public uint16 e_magic; // Magic number
|
||||
public uint16 e_cblp; // uint8s on last page of file
|
||||
public uint16 e_cp; // Pages in file
|
||||
public uint16 e_crlc; // Relocations
|
||||
public uint16 e_cparhdr; // Size of header in paragraphs
|
||||
public uint16 e_minalloc; // Minimum extra paragraphs needed
|
||||
public uint16 e_maxalloc; // Maximum extra paragraphs needed
|
||||
public uint16 e_ss; // Initial (relative) SS value
|
||||
public uint16 e_sp; // Initial SP value
|
||||
public uint16 e_csum; // Checksum
|
||||
public uint16 e_ip; // Initial IP value
|
||||
public uint16 e_cs; // Initial (relative) CS value
|
||||
public uint16 e_lfarlc; // File address of relocation table
|
||||
public uint16 e_ovno; // Overlay number
|
||||
public uint16[4] e_res; // Reserved uint16s
|
||||
public uint16 e_oemid; // OEM identifier (for e_oeminfo)
|
||||
public uint16 e_oeminfo; // OEM information; e_oemid specific
|
||||
public uint16[10] e_res2; // Reserved uint16s
|
||||
public int32 e_lfanew; // File address of new exe header
|
||||
};
|
||||
|
||||
|
||||
[CRepr]
|
||||
public struct PEFileHeader
|
||||
{
|
||||
public uint16 mMachine;
|
||||
public uint16 mNumberOfSections;
|
||||
public uint32 mTimeDateStamp;
|
||||
public uint32 mPointerToSymbolTable;
|
||||
public uint32 mNumberOfSymbols;
|
||||
public uint16 mSizeOfOptionalHeader;
|
||||
public uint16 mCharacteristics;
|
||||
};
|
||||
|
||||
[CRepr]
|
||||
public struct PEImportObjectHeader
|
||||
{
|
||||
public uint16 mSig1;
|
||||
public uint16 mSig2;
|
||||
public uint16 mVersion;
|
||||
public uint16 mMachine;
|
||||
public uint32 mTimeDateStamp;
|
||||
public uint32 mDataSize;
|
||||
public uint16 mHint;
|
||||
public uint16 mType;
|
||||
};
|
||||
|
||||
[CRepr]
|
||||
public struct PEDataDirectory
|
||||
{
|
||||
public uint32 mVirtualAddress;
|
||||
public uint32 mSize;
|
||||
};
|
||||
|
||||
[CRepr]
|
||||
public struct PEOptionalHeader32
|
||||
{
|
||||
//
|
||||
// Standard fields.
|
||||
//
|
||||
|
||||
public uint16 mMagic;
|
||||
public uint8 mMajorLinkerVersion;
|
||||
public uint8 mMinorLinkerVersion;
|
||||
public uint32 mSizeOfCode;
|
||||
public uint32 mSizeOfInitializedData;
|
||||
public uint32 mSizeOfUninitializedData;
|
||||
public uint32 mAddressOfEntryPoint;
|
||||
public uint32 mBaseOfCode;
|
||||
public uint32 mBaseOfData;
|
||||
|
||||
//
|
||||
// NT additional fields.
|
||||
//
|
||||
|
||||
public uint32 mImageBase;
|
||||
public uint32 mSectionAlignment;
|
||||
public uint32 mFileAlignment;
|
||||
public uint16 mMajorOperatingSystemVersion;
|
||||
public uint16 mMinorOperatingSystemVersion;
|
||||
public uint16 mMajorImageVersion;
|
||||
public uint16 mMinorImageVersion;
|
||||
public uint16 mMajorSubsystemVersion;
|
||||
public uint16 mMinorSubsystemVersion;
|
||||
public uint32 mReserved1;
|
||||
public uint32 mSizeOfImage;
|
||||
public uint32 mSizeOfHeaders;
|
||||
public uint32 mCheckSum;
|
||||
public uint16 mSubsystem;
|
||||
public uint16 mDllCharacteristics;
|
||||
public uint32 mSizeOfStackReserve;
|
||||
public uint32 mSizeOfStackCommit;
|
||||
public uint32 mSizeOfHeapReserve;
|
||||
public uint32 mSizeOfHeapCommit;
|
||||
public uint32 mLoaderFlags;
|
||||
public uint32 mNumberOfRvaAndSizes;
|
||||
public PEDataDirectory[16] mDataDirectory;
|
||||
};
|
||||
|
||||
[CRepr]
|
||||
public struct PEOptionalHeader64
|
||||
{
|
||||
//
|
||||
// Standard fields.
|
||||
//
|
||||
|
||||
public uint16 mMagic;
|
||||
public uint8 mMajorLinkerVersion;
|
||||
public uint8 mMinorLinkerVersion;
|
||||
public uint32 mSizeOfCode;
|
||||
public uint32 mSizeOfInitializedData;
|
||||
public uint32 mSizeOfUninitializedData;
|
||||
public uint32 mAddressOfEntryPoint;
|
||||
public uint32 mBaseOfCode;
|
||||
|
||||
//
|
||||
// NT additional fields.
|
||||
//
|
||||
|
||||
public uint64 mImageBase;
|
||||
public uint32 mSectionAlignment;
|
||||
public uint32 mFileAlignment;
|
||||
public uint16 mMajorOperatingSystemVersion;
|
||||
public uint16 mMinorOperatingSystemVersion;
|
||||
public uint16 mMajorImageVersion;
|
||||
public uint16 mMinorImageVersion;
|
||||
public uint16 mMajorSubsystemVersion;
|
||||
public uint16 mMinorSubsystemVersion;
|
||||
public uint32 mReserved1;
|
||||
public uint32 mSizeOfImage;
|
||||
public uint32 mSizeOfHeaders;
|
||||
public uint32 mCheckSum;
|
||||
public uint16 mSubsystem;
|
||||
public uint16 mDllCharacteristics;
|
||||
public uint64 mSizeOfStackReserve;
|
||||
public uint64 mSizeOfStackCommit;
|
||||
public uint64 mSizeOfHeapReserve;
|
||||
public uint64 mSizeOfHeapCommit;
|
||||
public uint32 mLoaderFlags;
|
||||
public uint32 mNumberOfRvaAndSizes;
|
||||
public PEDataDirectory[16] mDataDirectory;
|
||||
};
|
||||
|
||||
[CRepr]
|
||||
struct PE_NTHeaders32
|
||||
{
|
||||
uint32 mSignature;
|
||||
PEFileHeader mFileHeader;
|
||||
PEOptionalHeader32 mOptionalHeader;
|
||||
};
|
||||
|
||||
[CRepr]
|
||||
public struct PE_NTHeaders64
|
||||
{
|
||||
public uint32 mSignature;
|
||||
public PEFileHeader mFileHeader;
|
||||
public PEOptionalHeader64 mOptionalHeader;
|
||||
};
|
||||
|
||||
const int IMAGE_SIZEOF_SHORT_NAME = 8;
|
||||
|
||||
[CRepr]
|
||||
public struct PESectionHeader
|
||||
{
|
||||
public char8[IMAGE_SIZEOF_SHORT_NAME] mName;
|
||||
public uint32 mVirtualSize;
|
||||
public uint32 mVirtualAddress;
|
||||
public uint32 mSizeOfRawData;
|
||||
public uint32 mPointerToRawData;
|
||||
public uint32 mPointerToRelocations;
|
||||
public uint32 mPointerToLineNumbers;
|
||||
public uint16 mNumberOfRelocations;
|
||||
public uint16 mNumberOfLineNumbers;
|
||||
public uint32 mCharacteristics;
|
||||
};
|
||||
|
||||
[CRepr]
|
||||
struct COFFRelocation
|
||||
{
|
||||
uint32 mVirtualAddress;
|
||||
uint32 mSymbolTableIndex;
|
||||
uint16 mType;
|
||||
};
|
||||
|
||||
[CRepr]
|
||||
struct PE_SymInfo
|
||||
{
|
||||
[Union]
|
||||
public struct Name
|
||||
{
|
||||
public char8[8] mName;
|
||||
public int32[2] mNameOfs;
|
||||
}
|
||||
|
||||
public Name mName;
|
||||
|
||||
/*union
|
||||
{
|
||||
char mName[8];
|
||||
int32 mNameOfs[2];
|
||||
};*/
|
||||
|
||||
public int32 mValue;
|
||||
public uint16 mSectionNum;
|
||||
public uint16 mType;
|
||||
public int8 mStorageClass;
|
||||
public int8 mNumOfAuxSymbols;
|
||||
};
|
||||
|
||||
[CRepr]
|
||||
struct PE_SymInfoAux
|
||||
{
|
||||
public uint32 mLength;
|
||||
public uint16 mNumberOfRelocations;
|
||||
public uint16 mNumberOfLinenumbers;
|
||||
public uint32 mCheckSum;
|
||||
public uint16 mNumber;
|
||||
public uint8 mSelection;
|
||||
public char8 mUnused;
|
||||
public char8 mUnused2;
|
||||
public char8 mUnused3;
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,181 +0,0 @@
|
|||
using System;
|
||||
using IDE.Util;
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
|
||||
namespace BIStub
|
||||
{
|
||||
class Program
|
||||
{
|
||||
bool mFailed;
|
||||
|
||||
void Fail(StringView str)
|
||||
{
|
||||
if (mFailed)
|
||||
return;
|
||||
mFailed = true;
|
||||
Windows.MessageBoxA(default, scope String..AppendF("ERROR: {}", str), "FATAL ERROR", Windows.MB_ICONHAND);
|
||||
}
|
||||
|
||||
bool HandleCommandLineParam(String key, String value)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void UnhandledCommandLine(String key, String value)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void ParseCommandLine(String[] args)
|
||||
{
|
||||
for (var str in args)
|
||||
{
|
||||
int eqPos = str.IndexOf('=');
|
||||
if (eqPos == -1)
|
||||
{
|
||||
if (!HandleCommandLineParam(str, null))
|
||||
UnhandledCommandLine(str, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
var cmd = scope String(str, 0, eqPos);
|
||||
var param = scope String(str, eqPos + 1);
|
||||
if (!HandleCommandLineParam(cmd, param))
|
||||
UnhandledCommandLine(cmd, param);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Result<void> ExtractTo(ZipFile zipFile, StringView destDir, StringView subStr)
|
||||
{
|
||||
String fileName = scope .();
|
||||
String destPath = scope .();
|
||||
|
||||
for (int i < zipFile.GetNumFiles())
|
||||
{
|
||||
ZipFile.Entry entry = scope .();
|
||||
if (zipFile.SelectEntry(i, entry) case .Err)
|
||||
continue;
|
||||
|
||||
fileName.Clear();
|
||||
entry.GetFileName(fileName);
|
||||
|
||||
if (!fileName.StartsWith(subStr))
|
||||
continue;
|
||||
|
||||
destPath.Clear();
|
||||
destPath.Append(destDir);
|
||||
destPath.Append('/');
|
||||
destPath.Append(fileName);
|
||||
|
||||
if (entry.IsDirectory)
|
||||
{
|
||||
if (Directory.CreateDirectory(destPath) case .Err)
|
||||
return .Err;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (entry.ExtractToFile(destPath) case .Err)
|
||||
return .Err;
|
||||
}
|
||||
}
|
||||
|
||||
return .Ok;
|
||||
}
|
||||
|
||||
void CheckPE()
|
||||
{
|
||||
let module = Windows.GetModuleHandleW(null);
|
||||
uint8* moduleData = (uint8*)(int)module;
|
||||
PEFile.PEHeader* header = (.)moduleData;
|
||||
|
||||
PEFile.PE_NTHeaders64* hdr64 = (.)(moduleData + header.e_lfanew);
|
||||
if (hdr64.mFileHeader.mMachine == PEFile.PE_MACHINE_X64)
|
||||
{
|
||||
int fileEnd = 0;
|
||||
|
||||
for (int sectIdx < hdr64.mFileHeader.mNumberOfSections)
|
||||
{
|
||||
PEFile.PESectionHeader* sectHdrHead = (.)((uint8*)(hdr64 + 1)) + sectIdx;
|
||||
fileEnd = Math.Max(fileEnd, sectHdrHead.mPointerToRawData + sectHdrHead.mSizeOfRawData);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function void InstallFunc(StringView dest, StringView filter);
|
||||
public function int ProgressFunc();
|
||||
public function void CancelFunc();
|
||||
|
||||
public function void StartFunc(InstallFunc installFunc, ProgressFunc progressFunc, CancelFunc cancelFunc);
|
||||
|
||||
static void UI_Install(StringView dest, StringView filter)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static int UI_GetProgress()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void UI_Cancel()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void StartUI(StringView dir)
|
||||
{
|
||||
String destLib = scope .();
|
||||
destLib.Append(dir);
|
||||
destLib.Append("/../dist/StubUI_d.dll");
|
||||
|
||||
var lib = Windows.LoadLibraryW(destLib.ToScopedNativeWChar!());
|
||||
if (lib.IsInvalid)
|
||||
{
|
||||
Fail(scope String()..AppendF("Failed to load installer UI '{}'", destLib));
|
||||
return;
|
||||
}
|
||||
|
||||
StartFunc startFunc = (.)Windows.GetProcAddress(lib, "Start");
|
||||
if (startFunc == null)
|
||||
{
|
||||
Fail(scope String()..AppendF("Failed to initialize installer UI '{}'", destLib));
|
||||
return;
|
||||
}
|
||||
|
||||
startFunc(=> UI_Install, => UI_GetProgress, => UI_Cancel);
|
||||
|
||||
Windows.FreeLibrary(lib);
|
||||
}
|
||||
|
||||
void Run()
|
||||
{
|
||||
String cwd = scope .();
|
||||
Directory.GetCurrentDirectory(cwd);
|
||||
StartUI(cwd);
|
||||
|
||||
/*CheckPE();
|
||||
|
||||
ZipFile zipFile = scope .();
|
||||
zipFile.Open(@"c:\\temp\\build_1827.zip");
|
||||
ExtractTo(zipFile, @"c:\temp\unzip", .());
|
||||
|
||||
CabFile cabFile = scope .();
|
||||
cabFile.Init();
|
||||
cabFile.Copy();*/
|
||||
}
|
||||
|
||||
static int Main(String[] args)
|
||||
{
|
||||
|
||||
Program pg = new Program();
|
||||
pg.ParseCommandLine(args);
|
||||
pg.Run();
|
||||
delete pg;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
|
@ -1,24 +0,0 @@
|
|||
FileVersion = 1
|
||||
Dependencies = {corlib = "*", Beefy2D = "*", SDL2 = "*"}
|
||||
|
||||
[Project]
|
||||
Name = "StubUI"
|
||||
TargetType = "BeefDynLib"
|
||||
StartupObject = "Program"
|
||||
DefaultNamespace = "BIStubUI"
|
||||
|
||||
[Configs.Debug.Win64]
|
||||
TargetDirectory = "$(WorkspaceDir)/../dist"
|
||||
TargetName = "$(ProjectName)_d"
|
||||
OtherLinkFlags = "$(LinkFlags) BeefySysLib64_d.lib"
|
||||
BeefLibType = "DynamicDebug"
|
||||
DebugCommand = "$(WorkspaceDir)\\..\\dist\\Stub_d.exe"
|
||||
|
||||
[Configs.Release.Win64]
|
||||
TargetDirectory = "$(WorkspaceDir)/../dist"
|
||||
|
||||
[Configs.Paranoid.Win64]
|
||||
TargetDirectory = "$(WorkspaceDir)/../dist"
|
||||
|
||||
[Configs.Test.Win64]
|
||||
TargetDirectory = "$(WorkspaceDir)/../dist"
|
|
@ -1,10 +0,0 @@
|
|||
FileVersion = 1
|
||||
Projects = {StubUI = {Path = "."}, Beefy2D = "*", SDL2 = "*"}
|
||||
Unlocked = ["Beefy2D", "corlib", "SDL2"]
|
||||
|
||||
[Workspace]
|
||||
StartupProject = "StubUI"
|
||||
|
||||
[Configs.Debug.Win64]
|
||||
AllocType = "CRT"
|
||||
IntermediateType = "ObjectAndIRCode"
|
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,129 +0,0 @@
|
|||
using System;
|
||||
using Beefy;
|
||||
using Beefy.widgets;
|
||||
using Beefy.geom;
|
||||
using Beefy.gfx;
|
||||
|
||||
namespace BIStubUI
|
||||
{
|
||||
class BIApp : BFApp
|
||||
{
|
||||
static int a = 123;
|
||||
|
||||
public function void InstallFunc(StringView dest, StringView filter);
|
||||
public function int ProgressFunc();
|
||||
public function void CancelFunc();
|
||||
|
||||
const int cWidth = 900;
|
||||
const int cHeight = 620;
|
||||
|
||||
public Font mHeaderFont ~ delete _;
|
||||
public Font mBodyFont ~ delete _;
|
||||
public Font mBtnFont ~ delete _;
|
||||
public Font mBoxFont ~ delete _;
|
||||
|
||||
public InstallFunc mInstallFunc;
|
||||
public ProgressFunc mProgressFunc;
|
||||
public CancelFunc mCancelFunc;
|
||||
|
||||
public Board mBoard;
|
||||
public Widget mRootWidget;
|
||||
public WidgetWindow mMainWindow;
|
||||
|
||||
public bool mCancelling;
|
||||
public bool mWantRehup;
|
||||
public int32 mBoardDelay;
|
||||
public bool mClosing;
|
||||
|
||||
public ~this()
|
||||
{
|
||||
Images.Dispose();
|
||||
}
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
|
||||
BFWindow.Flags windowFlags = .QuitOnClose
|
||||
| .DestAlpha
|
||||
;
|
||||
|
||||
GetWorkspaceRect(var workX, var workY, var workWidth, var workHeight);
|
||||
|
||||
mRootWidget = new Widget();
|
||||
mMainWindow = new WidgetWindow(null, "Beef Installer",
|
||||
workX + (workWidth - cWidth)/2, workY + (workHeight - cHeight) / 2, cWidth, cHeight, windowFlags, mRootWidget);
|
||||
mMainWindow.mIsMainWindow = true;
|
||||
mMainWindow.mOnHitTest.Add(new (absX, absY) =>
|
||||
{
|
||||
float x = absX - mMainWindow.mX;
|
||||
float y = absY - mMainWindow.mY;
|
||||
|
||||
Widget aWidget = mRootWidget.FindWidgetByCoords(x, y);
|
||||
if ((aWidget != null) && (aWidget != mBoard))
|
||||
return .NotHandled;
|
||||
|
||||
if (Rect(60, 24, 700, 420).Contains(x, y))
|
||||
return .Caption;
|
||||
|
||||
return .NotHandled;
|
||||
});
|
||||
|
||||
Font CreateFont(StringView srcName, float fontSize)
|
||||
{
|
||||
Font font = new Font();
|
||||
font.Load(srcName, fontSize);
|
||||
font.AddAlternate("Segoe UI Symbol", fontSize);
|
||||
font.AddAlternate("Segoe UI Historic", fontSize);
|
||||
font.AddAlternate("Segoe UI Emoji", fontSize);
|
||||
return font;
|
||||
}
|
||||
|
||||
mHeaderFont = CreateFont("Segoe UI Bold", 42);
|
||||
mBodyFont = CreateFont("Segoe UI", 22);
|
||||
mBoxFont = CreateFont("Segoe UI", 18);
|
||||
mBtnFont = CreateFont("Segoe UI", 32);
|
||||
|
||||
Images.Init();
|
||||
Sounds.Init();
|
||||
|
||||
SetupBoard();
|
||||
}
|
||||
|
||||
void SetupBoard()
|
||||
{
|
||||
mBoard = new .();
|
||||
mRootWidget.AddWidget(mBoard);
|
||||
mBoard.Resize(0, 0, cWidth, cHeight);
|
||||
mBoard.SetFocus();
|
||||
}
|
||||
|
||||
public override void Update(bool batchStart)
|
||||
{
|
||||
base.Update(batchStart);
|
||||
|
||||
if (mCancelling)
|
||||
{
|
||||
mClosing = true;
|
||||
if ((mBoard != null) && (mBoard.mIsClosed))
|
||||
Stop();
|
||||
}
|
||||
|
||||
if (mWantRehup)
|
||||
{
|
||||
mBoard.RemoveSelf();
|
||||
DeleteAndNullify!(mBoard);
|
||||
mBoardDelay = 30;
|
||||
mWantRehup = false;
|
||||
}
|
||||
|
||||
if ((mBoardDelay > 0) && (--mBoardDelay == 0))
|
||||
SetupBoard();
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
{
|
||||
public static BIApp gApp;
|
||||
}
|
||||
}
|
|
@ -1,619 +0,0 @@
|
|||
using Beefy.widgets;
|
||||
using Beefy.geom;
|
||||
using Beefy.gfx;
|
||||
using System.Diagnostics;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
|
||||
namespace BIStubUI
|
||||
{
|
||||
class BiButtonWidget : ButtonWidget
|
||||
{
|
||||
public Image mImage;
|
||||
public Image mImageHi;
|
||||
|
||||
public override void Draw(Graphics g)
|
||||
{
|
||||
if (mMouseOver && mMouseDown)
|
||||
g.Draw(mImageHi);
|
||||
if (mMouseOver)
|
||||
g.Draw(mImageHi);
|
||||
else
|
||||
g.Draw(mImage);
|
||||
|
||||
/*using (g.PushColor(0x8000FF00))
|
||||
g.FillRect(0, 0, mWidth, mHeight);*/
|
||||
}
|
||||
|
||||
public override void DrawAll(Graphics g)
|
||||
{
|
||||
using (g.PushColor(mDisabled ? 0xD0A0A0A0 : 0xFFFFFFFF))
|
||||
base.DrawAll(g);
|
||||
}
|
||||
|
||||
public override void MouseEnter()
|
||||
{
|
||||
base.MouseEnter();
|
||||
if (!mDisabled)
|
||||
{
|
||||
gApp.SetCursor(.Hand);
|
||||
gApp.mSoundManager.PlaySound(Sounds.sMouseOver);
|
||||
}
|
||||
}
|
||||
|
||||
public override void MouseDown(float x, float y, int32 btn, int32 btnCount)
|
||||
{
|
||||
base.MouseDown(x, y, btn, btnCount);
|
||||
if (!mDisabled)
|
||||
gApp.mSoundManager.PlaySound(Sounds.sButtonPress);
|
||||
}
|
||||
|
||||
public override void MouseLeave()
|
||||
{
|
||||
base.MouseLeave();
|
||||
gApp.SetCursor(.Pointer);
|
||||
}
|
||||
}
|
||||
|
||||
class BiDialogButton : BiButtonWidget
|
||||
{
|
||||
public String mLabel ~ delete _;
|
||||
|
||||
public override void Draw(Graphics g)
|
||||
{
|
||||
base.Draw(g);
|
||||
|
||||
g.SetFont(gApp.mBtnFont);
|
||||
g.DrawString(mLabel, 0, 14, .Centered, mWidth);
|
||||
}
|
||||
}
|
||||
|
||||
class BiCheckbox : CheckBox
|
||||
{
|
||||
public State mState;
|
||||
public String mLabel ~ delete _;
|
||||
|
||||
public override bool Checked
|
||||
{
|
||||
get
|
||||
{
|
||||
return mState != .Unchecked;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
gApp.mSoundManager.PlaySound(Sounds.sChecked);
|
||||
mState = value ? .Checked : .Unchecked;
|
||||
}
|
||||
}
|
||||
|
||||
public override State State
|
||||
{
|
||||
get
|
||||
{
|
||||
return mState;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
mState = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Draw(Graphics g)
|
||||
{
|
||||
if (mState == .Checked)
|
||||
g.Draw(Images.sChecked);
|
||||
else
|
||||
g.Draw(Images.sUnchecked);
|
||||
|
||||
g.SetFont(gApp.mBodyFont);
|
||||
using (g.PushColor(0xFF000000))
|
||||
g.DrawString(mLabel, 40, 2);
|
||||
}
|
||||
|
||||
public override void MouseEnter()
|
||||
{
|
||||
base.MouseEnter();
|
||||
gApp.SetCursor(.Hand);
|
||||
}
|
||||
|
||||
public override void MouseLeave()
|
||||
{
|
||||
base.MouseLeave();
|
||||
gApp.SetCursor(.Pointer);
|
||||
}
|
||||
}
|
||||
|
||||
class BiInstallPathBox : Widget
|
||||
{
|
||||
public String mInstallPath = new .() ~ delete _;
|
||||
ImageWidget mBrowseButton;
|
||||
|
||||
public this()
|
||||
{
|
||||
mBrowseButton = new ImageWidget();
|
||||
mBrowseButton.mImage = Images.sBrowse;
|
||||
mBrowseButton.mDownImage = Images.sBrowseDown;
|
||||
mBrowseButton.mOnMouseClick.Add(new (mouseArgs) =>
|
||||
{
|
||||
var folderDialog = scope FolderBrowserDialog();
|
||||
if (folderDialog.ShowDialog(mWidgetWindow).GetValueOrDefault() == .OK)
|
||||
{
|
||||
var selectedPath = scope String..AppendF(folderDialog.SelectedPath);
|
||||
mInstallPath.Set(selectedPath);
|
||||
}
|
||||
});
|
||||
AddWidget(mBrowseButton);
|
||||
}
|
||||
|
||||
public void ResizeComponenets()
|
||||
{
|
||||
mBrowseButton.Resize(mWidth - 30, 2, Images.sBrowse.mWidth, Images.sBrowse.mHeight);
|
||||
}
|
||||
|
||||
public override void Resize(float x, float y, float width, float height)
|
||||
{
|
||||
base.Resize(x, y, width, height);
|
||||
ResizeComponenets();
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
ResizeComponenets();
|
||||
}
|
||||
|
||||
public override void Draw(Graphics g)
|
||||
{
|
||||
base.Draw(g);
|
||||
|
||||
g.DrawButton(Images.sTextBox, 0, 0, mWidth);
|
||||
using (g.PushColor(0xFF000000))
|
||||
{
|
||||
g.SetFont(gApp.mBodyFont);
|
||||
g.DrawString("Installation path", 0, -32);
|
||||
g.SetFont(gApp.mBoxFont);
|
||||
g.DrawString(mInstallPath, 4, 0, .Left, mWidth - 36, .Ellipsis);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Board : Widget
|
||||
{
|
||||
const float cBodyX = 0;
|
||||
const float cBodyY = 20;
|
||||
|
||||
LabelWidget mHeaderLabel;
|
||||
BiButtonWidget mCloseButton;
|
||||
BiDialogButton mCancelButton;
|
||||
BiDialogButton mInstallButton;
|
||||
BiCheckbox mInstallForAllCheckbox;
|
||||
BiCheckbox mAddToStartCheckbox;
|
||||
BiCheckbox mAddToDesktopCheckbox;
|
||||
BiCheckbox mStartAfterCheckbox;
|
||||
BiInstallPathBox mInstallPathBox;
|
||||
|
||||
float mScale = 0.35f;
|
||||
float mScaleVel = 0.2f;
|
||||
|
||||
float mSurprisePct = 1.0f;
|
||||
float mHeadRaise = 1.0f;
|
||||
float mEatPct;
|
||||
|
||||
int mCloseTicks;
|
||||
int mInstallTicks;
|
||||
public bool mIsClosed;
|
||||
bool mUninstallDone;
|
||||
|
||||
public bool mInstalling;
|
||||
public bool mUninstalling;
|
||||
public float mInstallPct;
|
||||
|
||||
public this()
|
||||
{
|
||||
mHeaderLabel = new LabelWidget();
|
||||
mHeaderLabel.mLabel = new String("Beef Development Tools");
|
||||
mHeaderLabel.mAlign = .Centered;
|
||||
mHeaderLabel.mColor = 0xFF000000;
|
||||
mHeaderLabel.mFont = gApp.mHeaderFont;
|
||||
mHeaderLabel.mMouseVisible = false;
|
||||
AddWidget(mHeaderLabel);
|
||||
|
||||
mCloseButton = new BiButtonWidget();
|
||||
mCloseButton.mImage = Images.sClose;
|
||||
mCloseButton.mImageHi = Images.sCloseHi;
|
||||
mCloseButton.mOnMouseClick.Add(new (mouseArgs) =>
|
||||
{
|
||||
gApp.mCancelling = true;
|
||||
});
|
||||
mCloseButton.mMouseInsets = new Insets(4, 4, 4, 4);
|
||||
AddWidget(mCloseButton);
|
||||
|
||||
mInstallForAllCheckbox = new BiCheckbox();
|
||||
mInstallForAllCheckbox.mState = .Checked;
|
||||
mInstallForAllCheckbox.mLabel = new String("Install for all users");
|
||||
AddWidget(mInstallForAllCheckbox);
|
||||
|
||||
mAddToStartCheckbox = new BiCheckbox();
|
||||
mAddToStartCheckbox.mState = .Checked;
|
||||
mAddToStartCheckbox.mLabel = new String("Add to Start menu");
|
||||
AddWidget(mAddToStartCheckbox);
|
||||
|
||||
mAddToDesktopCheckbox = new BiCheckbox();
|
||||
mAddToDesktopCheckbox.mState = .Checked;
|
||||
mAddToDesktopCheckbox.mLabel = new String("Add to desktop");
|
||||
AddWidget(mAddToDesktopCheckbox);
|
||||
|
||||
mStartAfterCheckbox = new BiCheckbox();
|
||||
mStartAfterCheckbox.mState = .Checked;
|
||||
mStartAfterCheckbox.mLabel = new String("Run after install");
|
||||
AddWidget(mStartAfterCheckbox);
|
||||
|
||||
mInstallPathBox = new BiInstallPathBox();
|
||||
AddWidget(mInstallPathBox);
|
||||
|
||||
mCancelButton = new BiDialogButton();
|
||||
mCancelButton.mLabel = new .("Cancel");
|
||||
mCancelButton.mImage = Images.sButton;
|
||||
mCancelButton.mImageHi = Images.sButtonHi;
|
||||
mCancelButton.mOnMouseClick.Add(new (mouseArgs) =>
|
||||
{
|
||||
gApp.mCancelling = true;
|
||||
});
|
||||
mCancelButton.mMouseInsets = new Insets(4, 4, 4, 4);
|
||||
AddWidget(mCancelButton);
|
||||
|
||||
mInstallButton = new BiDialogButton();
|
||||
mInstallButton.mLabel = new .("Install");
|
||||
mInstallButton.mImage = Images.sButton;
|
||||
mInstallButton.mImageHi = Images.sButtonHi;
|
||||
mInstallButton.mOnMouseClick.Add(new (mouseArgs) =>
|
||||
{
|
||||
StartInstall();
|
||||
});
|
||||
mInstallButton.mMouseInsets = new Insets(4, 4, 4, 4);
|
||||
AddWidget(mInstallButton);
|
||||
|
||||
////
|
||||
|
||||
int pidl = 0;
|
||||
Windows.SHGetSpecialFolderLocation(gApp.mMainWindow.HWND, Windows.CSIDL_PROGRAM_FILES, ref pidl);
|
||||
if (pidl != 0)
|
||||
{
|
||||
char8* selectedPathCStr = scope char8[Windows.MAX_PATH]*;
|
||||
Windows.SHGetPathFromIDList(pidl, selectedPathCStr);
|
||||
mInstallPathBox.mInstallPath.Set(StringView(selectedPathCStr));
|
||||
}
|
||||
else
|
||||
{
|
||||
mInstallPathBox.mInstallPath.Set(@"C:\Program Files");
|
||||
}
|
||||
mInstallPathBox.mInstallPath.Append(@"\BeefLang");
|
||||
}
|
||||
|
||||
void Uninstall()
|
||||
{
|
||||
Thread.Sleep(10000);
|
||||
mUninstallDone = true;
|
||||
}
|
||||
|
||||
void StartInstall()
|
||||
{
|
||||
mInstalling = true;
|
||||
mInstallButton.mDisabled = true;
|
||||
mInstallButton.mMouseVisible = false;
|
||||
mInstallPathBox.mVisible = false;
|
||||
}
|
||||
|
||||
public override void Draw(Graphics g)
|
||||
{
|
||||
float bodyX = cBodyX;
|
||||
float bodyY = cBodyY;
|
||||
|
||||
g.Draw(Images.sBody, bodyX, bodyY);
|
||||
|
||||
float headRaise = mHeadRaise;
|
||||
headRaise += Math.Sin(Math.Clamp((mEatPct - 0.2f) * 1.4f, 0, 1.0f) * Math.PI_f*6) * 0.02f;
|
||||
|
||||
float headX = bodyX + 664 - headRaise * 6;
|
||||
float headY = bodyY + 192 - headRaise * 30;
|
||||
|
||||
headY += Math.Clamp(Math.Sin(Math.PI_f * mEatPct) * 3.0f, 0, 1) * 8.0f;
|
||||
|
||||
Images.sHead.mPixelSnapping = .Never;
|
||||
Images.sEyesOpen.mPixelSnapping = .Never;
|
||||
Images.sEyesClosed.mPixelSnapping = .Never;
|
||||
g.Draw(Images.sHead, headX, headY);
|
||||
g.Draw((mSurprisePct > 0) ? Images.sEyesOpen : Images.sEyesClosed, headX + 70, headY + 190);
|
||||
|
||||
if (mInstalling)
|
||||
{
|
||||
//float installDiv = 1000.0f;
|
||||
//mInstallPct = (mUpdateCnt % installDiv) / installDiv;
|
||||
|
||||
//mInstallPct = 1.0f;
|
||||
|
||||
float totalWidth = 410;
|
||||
float fillWidth = totalWidth * (mInstallPct*0.9f + 0.1f);
|
||||
if (mUninstalling)
|
||||
fillWidth = totalWidth * mInstallPct;
|
||||
|
||||
float barX = 200;
|
||||
float barY = 280;
|
||||
|
||||
float barHeight = Images.sPBBarBottom.mHeight;
|
||||
using (g.PushClip(barX, barY, totalWidth, barHeight))
|
||||
{
|
||||
g.DrawButton(Images.sPBBarBottom, barX, barY, totalWidth);
|
||||
|
||||
Color colorLeft = 0x800288E9;
|
||||
Color colorRight = 0x80FFFFFF;
|
||||
if (gApp.mClosing)
|
||||
{
|
||||
colorLeft = 0x80000000;
|
||||
colorRight = 0x800288E9;
|
||||
}
|
||||
g.FillRectGradient(barX, barY, fillWidth, barHeight, colorLeft, colorRight, colorLeft, colorRight);
|
||||
|
||||
float barPct = (mInstallTicks % 60) / 60.0f;
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
Images.sPBBarHilite.mPixelSnapping = .Never;
|
||||
using (g.PushColor(0x22FFFFFF))
|
||||
g.Draw(Images.sPBBarHilite, barX - 16 - totalWidth + fillWidth + (i + barPct) * 26, barY + 6);
|
||||
}
|
||||
|
||||
g.DrawButton(Images.sPBBarEmpty, barX + fillWidth - 30, barY + 5, totalWidth - fillWidth + 40);
|
||||
|
||||
g.DrawButton(Images.sPBFrameTop, barX, barY, totalWidth);
|
||||
|
||||
g.DrawButton(Images.sPBFrameGlow, barX, barY, fillWidth);
|
||||
}
|
||||
}
|
||||
|
||||
/*g.SetFont(gApp.mHdrFont);
|
||||
using (g.PushColor(0xFF000000))
|
||||
g.DrawString("Beef Development Tools", 400, 20, .Centered);*/
|
||||
}
|
||||
|
||||
public override void MouseMove(float x, float y)
|
||||
{
|
||||
if (Rect(60, 24, 700, 420).Contains(x, y))
|
||||
{
|
||||
gApp.SetCursor(.SizeNESW);
|
||||
}
|
||||
else
|
||||
{
|
||||
gApp.SetCursor(.Pointer);
|
||||
}
|
||||
|
||||
base.MouseMove(x, y);
|
||||
}
|
||||
|
||||
public override void DrawAll(Graphics g)
|
||||
{
|
||||
int cBodyX = 0;
|
||||
int cBodyY = 0;
|
||||
|
||||
/*using (g.PushColor(0x80FF0000))
|
||||
g.FillRect(0, 0, mWidth, mHeight);*/
|
||||
|
||||
//float scaleX = (Math.Cos(mUpdateCnt * 0.1f) + 1.0f) * 0.5f;
|
||||
//float scaleY = scaleX;
|
||||
float scaleX = mScale;
|
||||
float scaleY = mScale;
|
||||
|
||||
if ((Math.Abs(scaleX - 1.0f) < 0.001) && (Math.Abs(scaleY - 1.0f) < 0.001))
|
||||
base.DrawAll(g);
|
||||
else using (g.PushScale(scaleX, scaleY, cBodyX + 400, cBodyY + 560))
|
||||
base.DrawAll(g);
|
||||
}
|
||||
|
||||
public bool IsDecompressing
|
||||
{
|
||||
get
|
||||
{
|
||||
//return gApp.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
|
||||
ResizeComponents();
|
||||
|
||||
if (gApp.mClosing)
|
||||
{
|
||||
mCancelButton.mDisabled = true;
|
||||
mCancelButton.mMouseVisible = false;
|
||||
|
||||
if ((mInstalling) && (!mUninstallDone))
|
||||
{
|
||||
if ((!IsDecompressing) && (!mUninstalling))
|
||||
{
|
||||
mUninstalling = true;
|
||||
ThreadPool.QueueUserWorkItem(new => Uninstall);
|
||||
}
|
||||
mInstallTicks--;
|
||||
if (mInstallTicks < 0)
|
||||
mInstallTicks = 0x3FFFFFFF;
|
||||
}
|
||||
|
||||
if (mInstallPct > 0)
|
||||
{
|
||||
mInstallPct = (mInstallPct * 0.98f) - 0.003f;
|
||||
if (!mUninstallDone)
|
||||
mInstallPct = Math.Max(mInstallPct, 0.1f);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((mInstalling) && (!mUninstallDone))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (mCloseTicks == 0)
|
||||
{
|
||||
gApp.mSoundManager.PlaySound(Sounds.sAbort);
|
||||
mScaleVel = 0.055f;
|
||||
}
|
||||
mCloseTicks++;
|
||||
|
||||
mScaleVel *= 0.90f;
|
||||
mScaleVel -= 0.01f;
|
||||
mScale += mScaleVel;
|
||||
mSurprisePct = 1.0f;
|
||||
mHeadRaise = Math.Clamp(mHeadRaise + 0.2f, 0, 1.0f);
|
||||
|
||||
if (mScale <= 0)
|
||||
{
|
||||
mScale = 0.0f;
|
||||
}
|
||||
|
||||
if (mCloseTicks == 60)
|
||||
mIsClosed = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (mInstalling)
|
||||
mInstallTicks++;
|
||||
|
||||
if (mUpdateCnt == 1)
|
||||
gApp.mSoundManager.PlaySound(Sounds.sBoing);
|
||||
|
||||
float sizeTarget = Math.Min(0.5f + mUpdateCnt * 0.05f, 1.0f);
|
||||
|
||||
float scaleDiff = sizeTarget - mScale;
|
||||
mScaleVel += scaleDiff * 0.05f;
|
||||
mScaleVel *= 0.80f;
|
||||
mScale += mScaleVel;
|
||||
|
||||
mSurprisePct = Math.Max(mSurprisePct - 0.005f, 0);
|
||||
if (mUpdateCnt > 240)
|
||||
{
|
||||
mHeadRaise = Math.Max(mHeadRaise * 0.95f - 0.01f, 0);
|
||||
}
|
||||
|
||||
if (mEatPct == 0.0f)
|
||||
{
|
||||
if ((mUpdateCnt == 600) || (mUpdateCnt % 2400 == 0))
|
||||
{
|
||||
mEatPct = 0.0001f;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
let prev = mEatPct;
|
||||
mEatPct += 0.004f;
|
||||
if ((prev < 0.2f) && (mEatPct >= 0.2f))
|
||||
gApp.mSoundManager.PlaySound(Sounds.sEating);
|
||||
|
||||
if (mEatPct >= 1.0f)
|
||||
{
|
||||
//Debug.WriteLine("Eat done");
|
||||
mEatPct = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (mUpdateCnt % 2200 == 0)
|
||||
{
|
||||
mSurprisePct = 0.5f;
|
||||
}
|
||||
}
|
||||
|
||||
public override void UpdateAll()
|
||||
{
|
||||
base.UpdateAll();
|
||||
|
||||
if (mWidgetWindow.IsKeyDown(.Control))
|
||||
{
|
||||
for (int i < 2)
|
||||
base.UpdateAll();
|
||||
}
|
||||
}
|
||||
|
||||
public override void MouseDown(float x, float y, int32 btn, int32 btnCount)
|
||||
{
|
||||
base.MouseDown(x, y, btn, btnCount);
|
||||
}
|
||||
|
||||
public override void KeyDown(KeyCode keyCode, bool isRepeat)
|
||||
{
|
||||
base.KeyDown(keyCode, isRepeat);
|
||||
|
||||
if (keyCode == .Space)
|
||||
{
|
||||
gApp.mWantRehup = true;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateComponent(Widget widget, int updateOffset, float centerX = 0.5f, float centerY = 0.5f, float speedMult = 1.0f)
|
||||
{
|
||||
float pct = Math.Clamp((mUpdateCnt - 50 - updateOffset) * 0.25f * speedMult, 0, 1.0f);
|
||||
//float pct = Math.Clamp((mUpdateCnt - 50 - updateOffset) * 0.02f, 0, 1.0f);
|
||||
if (pct == 0)
|
||||
{
|
||||
widget.SetVisible(false);
|
||||
return;
|
||||
}
|
||||
widget.SetVisible(true);
|
||||
if (pct == 1)
|
||||
{
|
||||
widget.ClearTransform();
|
||||
return;
|
||||
}
|
||||
|
||||
Matrix matrix = .IdentityMatrix;
|
||||
matrix.Translate(-widget.mWidth * centerX, -widget.mHeight * centerY);
|
||||
matrix.Scale(pct, pct);
|
||||
matrix.Translate(widget.mWidth * centerX, widget.mHeight * centerY);
|
||||
matrix.Translate(widget.mX, widget.mY);
|
||||
widget.Transform = matrix;
|
||||
}
|
||||
|
||||
void ResizeComponents()
|
||||
{
|
||||
float headerWidth = mHeaderLabel.CalcWidth();
|
||||
mHeaderLabel.Resize(cBodyX + 375 - headerWidth/2, cBodyY + 60, headerWidth, 60);
|
||||
UpdateComponent(mHeaderLabel, 0, 0.5f, 2.0f, 0.4f);
|
||||
|
||||
mCloseButton.Resize(cBodyX + 660, cBodyY + 55, mCloseButton.mImage.mWidth, mCloseButton.mImage.mHeight);
|
||||
UpdateComponent(mCloseButton, 5);
|
||||
|
||||
mInstallForAllCheckbox.Resize(cBodyX + 120, cBodyY + 136, 48, 48);
|
||||
UpdateComponent(mInstallForAllCheckbox, 10);
|
||||
|
||||
mAddToStartCheckbox.Resize(cBodyX + 418, cBodyY + 136, 48, 48);
|
||||
UpdateComponent(mAddToStartCheckbox, 12);
|
||||
|
||||
mAddToDesktopCheckbox.Resize(cBodyX + 120, cBodyY + 190, 48, 48);
|
||||
UpdateComponent(mAddToDesktopCheckbox, 14);
|
||||
|
||||
mStartAfterCheckbox.Resize(cBodyX + 418, cBodyY + 190, 48, 48);
|
||||
UpdateComponent(mStartAfterCheckbox, 16);
|
||||
|
||||
if (!mInstalling)
|
||||
{
|
||||
mInstallPathBox.Resize(cBodyX + 122, cBodyY + 276, 508, Images.sTextBox.mHeight);
|
||||
UpdateComponent(mInstallPathBox, 5, 0.1f, 0.5f, 0.4f);
|
||||
}
|
||||
|
||||
mCancelButton.Resize(cBodyX + 180, cBodyY + 320, mCancelButton.mImage.mWidth, mCancelButton.mImage.mHeight);
|
||||
UpdateComponent(mCancelButton, 13, 0.5f, 0.2f);
|
||||
|
||||
mInstallButton.Resize(cBodyX + 404, cBodyY + 320, mInstallButton.mImage.mWidth, mInstallButton.mImage.mHeight);
|
||||
UpdateComponent(mInstallButton, 15, 0.5f, 0.2f);
|
||||
}
|
||||
|
||||
public override void Resize(float x, float y, float width, float height)
|
||||
{
|
||||
base.Resize(x, y, width, height);
|
||||
ResizeComponents();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace BIStubUI
|
||||
{
|
||||
class Program
|
||||
{
|
||||
public static this()
|
||||
{
|
||||
Debug.WriteLine("Initializing StubUI");
|
||||
}
|
||||
|
||||
public static ~this()
|
||||
{
|
||||
Debug.WriteLine("Deinitializing StubUI");
|
||||
}
|
||||
|
||||
[Export, CLink]
|
||||
public static void Start(BIApp.InstallFunc installFunc, BIApp.ProgressFunc progressFunc, BIApp.CancelFunc cancelFunc)
|
||||
{
|
||||
gApp = new BIApp();
|
||||
gApp.mInstallFunc = installFunc;
|
||||
gApp.mProgressFunc = progressFunc;
|
||||
gApp.mCancelFunc = cancelFunc;
|
||||
gApp.Init();
|
||||
gApp.Run();
|
||||
gApp.Shutdown();
|
||||
DeleteAndNullify!(gApp);
|
||||
}
|
||||
|
||||
public static void Hello()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static int Main(String[] args)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,102 +0,0 @@
|
|||
using System;
|
||||
using Beefy.gfx;
|
||||
using System.Collections.Generic;
|
||||
using Beefy.sound;
|
||||
|
||||
namespace BIStubUI
|
||||
{
|
||||
class Images
|
||||
{
|
||||
public static Image sBody;
|
||||
public static Image sHead;
|
||||
public static Image sEyesOpen;
|
||||
public static Image sEyesClosed;
|
||||
public static Image sButton;
|
||||
public static Image sButtonHi;
|
||||
public static Image sSmButton;
|
||||
public static Image sClose;
|
||||
public static Image sCloseHi;
|
||||
public static Image sChecked;
|
||||
public static Image sUnchecked;
|
||||
public static Image sTextBox;
|
||||
public static Image sBrowse;
|
||||
public static Image sBrowseDown;
|
||||
public static Image sPBBarBottom;
|
||||
public static Image sPBBarEmpty;
|
||||
public static Image sPBBarHilite;
|
||||
public static Image sPBFrameGlow;
|
||||
public static Image sPBFrameTop;
|
||||
|
||||
static List<Image> sImages = new .() ~ delete _;
|
||||
|
||||
public static Result<Image> Load(String fileName, bool additive = false)
|
||||
{
|
||||
let image = Image.LoadFromFile(scope String(gApp.mInstallDir, "/", fileName), additive);
|
||||
if (image == null)
|
||||
{
|
||||
delete image;
|
||||
return .Err;
|
||||
}
|
||||
sImages.Add(image);
|
||||
return image;
|
||||
}
|
||||
|
||||
public static void Dispose()
|
||||
{
|
||||
ClearAndDeleteItems(sImages);
|
||||
}
|
||||
|
||||
public static Result<void> Init()
|
||||
{
|
||||
sBody = Try!(Load("images/body.png"));
|
||||
sHead = Try!(Load("images/head.png"));
|
||||
sEyesOpen = Try!(Load("images/eyesopen.png"));
|
||||
sEyesClosed = Try!(Load("images/eyesclosed.png"));
|
||||
sButton = Try!(Load("images/button.png"));
|
||||
sButtonHi = Try!(Load("images/button_hi.png"));
|
||||
sSmButton = Try!(Load("images/smbutton.png"));
|
||||
sClose = Try!(Load("images/close.png"));
|
||||
sCloseHi = Try!(Load("images/close_hi.png"));
|
||||
sChecked = Try!(Load("images/checked.png"));
|
||||
sUnchecked = Try!(Load("images/unchecked.png"));
|
||||
sTextBox = Try!(Load("images/textbox.png"));
|
||||
sBrowse = Try!(Load("images/browse.png"));
|
||||
sBrowseDown = Try!(Load("images/browsedown.png"));
|
||||
sPBBarBottom = Try!(Load("images/pb_barbottom.png"));
|
||||
sPBBarEmpty = Try!(Load("images/pb_barempty.png"));
|
||||
sPBBarHilite = Try!(Load("images/pb_barhilite.png", true));
|
||||
sPBFrameGlow = Try!(Load("images/pb_frameglow.png"));
|
||||
sPBFrameTop = Try!(Load("images/pb_frametop.png"));
|
||||
return .Ok;
|
||||
}
|
||||
}
|
||||
|
||||
class Sounds
|
||||
{
|
||||
public static SoundSource sBoing;
|
||||
public static SoundSource sEating;
|
||||
public static SoundSource sButtonPress;
|
||||
public static SoundSource sMouseOver;
|
||||
public static SoundSource sAbort;
|
||||
public static SoundSource sChecked;
|
||||
|
||||
public static Result<SoundSource> Load(String fileName)
|
||||
{
|
||||
let source = gApp.mSoundManager.LoadSound(scope String(gApp.mInstallDir, "/", fileName));
|
||||
if (source.IsInvalid)
|
||||
return .Err;
|
||||
return source;
|
||||
}
|
||||
|
||||
public static Result<void> Init()
|
||||
{
|
||||
sBoing = Try!(Load("sounds/boing.wav"));
|
||||
sEating = Try!(Load("sounds/eating.wav"));
|
||||
sButtonPress = Try!(Load("sounds/buttonpress.wav"));
|
||||
sMouseOver = Try!(Load("sounds/mouseover.wav"));
|
||||
sAbort = Try!(Load("sounds/abort.wav"));
|
||||
sChecked = Try!(Load("sounds/checked.wav"));
|
||||
return .Ok;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue