Check-in [7c16f12a17]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:We're going to be creating a DLL plugin instead of a BPL one. Renamed the old project. Created new plugin unit, added bitmap for splash and about screens.
Timelines: family | ancestors | descendants | both | feature/rewrite-multi-async
Files: files | file ages | folders
SHA1: 7c16f12a1702c9bf1e3253fd044589dd43810832
User & Date: tinus 2016-02-14 16:09:15
Context
2016-02-14
17:11
Added repo cache unit. check-in: 487a412c72 user: tinus tags: feature/rewrite-multi-async
16:09
We're going to be creating a DLL plugin instead of a BPL one. Renamed the old project. Created new plugin unit, added bitmap for splash and about screens. check-in: 7c16f12a17 user: tinus tags: feature/rewrite-multi-async
14:11
New branch to completely rewrite the wizard, this time modularizing VCS Clients properly from the start, and also supporting threading. check-in: 7183f7960c user: tinus tags: feature/rewrite-multi-async
Changes

Added .fossil-settings/binary-glob.

            1  +*.bmp
            2  +*.gif
            3  +*.jpeg
            4  +*.jpg
            5  +*.ico
            6  +*.pdf
            7  +*.png

Added .fossil-settings/binary-glob.no-warn.


Added .fossil-settings/ignore-glob.

            1  +__history/
            2  +__recovery/
            3  +out/
            4  +*.~*
            5  +*.identcache
            6  +*.local
            7  +*.dsk
            8  +*.stat
            9  +*.tvsconfig
           10  +*.dres
           11  +*Resource.rc
           12  +*.res

Added .fossil-settings/ignore-glob.no-warn.


Added img/logo.png.

cannot compute difference between binary files

Name change from src/Delphi10/VCSInfo.dpk to src/Delphi10/VCSInfo_BPL.dpk.

     1         -package VCSInfo;
            1  +package VCSInfo_BPL;
     2      2   
     3      3   {$R *.res}
     4      4   {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
     5      5   {$ALIGN 8}
     6      6   {$ASSERTIONS ON}
     7      7   {$BOOLEVAL OFF}
     8      8   {$DEBUGINFO OFF}
................................................................................
    29     29   
    30     30   requires
    31     31     rtl,
    32     32     designide;
    33     33   
    34     34   contains
    35     35     VCSInfoMenuWzrd in '..\VCSInfoMenuWzrd.pas',
    36         -  u_FinalPathName in '..\u_FinalPathName.pas';
           36  +  u_FinalPathName in '..\u_FinalPathName.pas',
           37  +  VCSInfoWzrd in '..\VCSInfoWzrd.pas';
    37     38   
    38     39   end.

Name change from src/Delphi10/VCSInfo.dproj to src/Delphi10/VCSInfo_BPL.dproj.

     1      1   <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
     2      2       <PropertyGroup>
     3      3           <ProjectGuid>{E394A6F2-CCD7-4A8A-9E66-88F4D866E2FB}</ProjectGuid>
     4         -        <MainSource>VCSInfo.dpk</MainSource>
            4  +        <MainSource>VCSInfo_BPL.dpk</MainSource>
     5      5           <ProjectVersion>18.0</ProjectVersion>
     6      6           <FrameworkType>None</FrameworkType>
     7      7           <Base>True</Base>
     8      8           <Config Condition="'$(Config)'==''">Debug</Config>
     9      9           <Platform Condition="'$(Platform)'==''">Win32</Platform>
    10     10           <TargetedPlatforms>1</TargetedPlatforms>
    11     11           <AppType>Package</AppType>
................................................................................
    67     67       <Import Project="..\Version.optset" Condition="'$(Base)'!='' And Exists('..\Version.optset')"/>
    68     68       <PropertyGroup Condition="'$(Base)'!=''">
    69     69           <DCC_UNIT_PLATFORM>false</DCC_UNIT_PLATFORM>
    70     70           <DCC_SYMBOL_PLATFORM>false</DCC_SYMBOL_PLATFORM>
    71     71           <DCC_CBuilderOutput>All</DCC_CBuilderOutput>
    72     72           <GenPackage>true</GenPackage>
    73     73           <GenDll>true</GenDll>
    74         -        <SanitizedProjectName>VCSInfo</SanitizedProjectName>
           74  +        <SanitizedProjectName>VCSInfo_BPL</SanitizedProjectName>
    75     75           <DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
    76     76           <DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
    77     77           <DCC_E>false</DCC_E>
    78     78           <DCC_N>false</DCC_N>
    79     79           <DCC_S>false</DCC_S>
    80     80           <DCC_F>false</DCC_F>
    81     81           <DCC_K>false</DCC_K>
................................................................................
   130    130           <DCC_DebugDCUs>true</DCC_DebugDCUs>
   131    131           <DCC_Optimize>false</DCC_Optimize>
   132    132           <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
   133    133           <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
   134    134           <DCC_RemoteDebug>true</DCC_RemoteDebug>
   135    135       </PropertyGroup>
   136    136       <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
          137  +        <VerInfo_Keys>CompanyName=Martijn Coppoolse;FileDescription=VCS Info;FileVersion=0.1.0.0;InternalName=VCSInfo;LegalCopyright=;LegalTrademarks=;OriginalFilename=VCSInfo.bpl;ProductName=VCS Info;ProductVersion=1.0;Comments=http://fossil.2of4.net/vcsInfo</VerInfo_Keys>
   137    138           <VerInfo_MajorVer>0</VerInfo_MajorVer>
   138    139           <VerInfo_PreRelease>true</VerInfo_PreRelease>
   139    140           <VerInfo_DLL>true</VerInfo_DLL>
   140    141           <VerInfo_MinorVer>1</VerInfo_MinorVer>
   141    142           <DCC_RemoteDebug>false</DCC_RemoteDebug>
   142    143       </PropertyGroup>
   143    144       <PropertyGroup Condition="'$(Cfg_2)'!=''">
................................................................................
   150    151           <DelphiCompile Include="$(MainSource)">
   151    152               <MainSource>MainSource</MainSource>
   152    153           </DelphiCompile>
   153    154           <DCCReference Include="rtl.dcp"/>
   154    155           <DCCReference Include="designide.dcp"/>
   155    156           <DCCReference Include="..\VCSInfoMenuWzrd.pas"/>
   156    157           <DCCReference Include="..\u_FinalPathName.pas"/>
          158  +        <DCCReference Include="..\VCSInfoWzrd.pas"/>
   157    159           <None Include="..\..\todo.md"/>
   158    160           <BuildConfiguration Include="Release">
   159    161               <Key>Cfg_2</Key>
   160    162               <CfgParent>Base</CfgParent>
   161    163           </BuildConfiguration>
   162    164           <BuildConfiguration Include="Base">
   163    165               <Key>Base</Key>
................................................................................
   170    172       </ItemGroup>
   171    173       <ProjectExtensions>
   172    174           <Borland.Personality>Delphi.Personality.12</Borland.Personality>
   173    175           <Borland.ProjectType>Package</Borland.ProjectType>
   174    176           <BorlandProject>
   175    177               <Delphi.Personality>
   176    178                   <Source>
   177         -                    <Source Name="MainSource">VCSInfo.dpk</Source>
          179  +                    <Source Name="MainSource">VCSInfo_BPL.dpk</Source>
   178    180                   </Source>
   179    181                   <Excluded_Packages>
   180    182                       <Excluded_Packages Name="$(BDSBIN)\dcloffice2k230.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
   181    183                       <Excluded_Packages Name="$(BDSBIN)\dclofficexp230.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
   182    184                   </Excluded_Packages>
   183    185               </Delphi.Personality>
   184    186               <Deployment Version="2">
................................................................................
   193    195                       </Platform>
   194    196                   </DeployFile>
   195    197                   <DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
   196    198                       <Platform Name="iOSSimulator">
   197    199                           <Overwrite>true</Overwrite>
   198    200                       </Platform>
   199    201                   </DeployFile>
   200         -                <DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\15.0\Bpl\VCSInfo.bpl" Configuration="Debug" Class="ProjectOutput">
          202  +                <DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\17.0\Bpl\VCSInfo_BPL.bpl" Configuration="Debug" Class="ProjectOutput">
   201    203                       <Platform Name="Win32">
   202         -                        <RemoteName>VCSInfo.bpl</RemoteName>
          204  +                        <RemoteName>VCSInfo_BPL.bpl</RemoteName>
   203    205                           <Overwrite>true</Overwrite>
   204    206                       </Platform>
   205    207                   </DeployFile>
   206         -                <DeployClass Name="ProjectiOSDeviceResourceRules"/>
          208  +                <DeployClass Name="DependencyModule">
          209  +                    <Platform Name="Win32">
          210  +                        <Operation>0</Operation>
          211  +                        <Extensions>.dll;.bpl</Extensions>
          212  +                    </Platform>
          213  +                    <Platform Name="OSX32">
          214  +                        <Operation>1</Operation>
          215  +                        <Extensions>.dylib</Extensions>
          216  +                    </Platform>
          217  +                </DeployClass>
   207    218                   <DeployClass Name="ProjectOSXResource">
   208    219                       <Platform Name="OSX32">
   209    220                           <RemoteDir>Contents\Resources</RemoteDir>
   210    221                           <Operation>1</Operation>
   211    222                       </Platform>
   212    223                   </DeployClass>
   213    224                   <DeployClass Name="AndroidClassesDexFile">
................................................................................
   513    524                   </DeployClass>
   514    525                   <DeployClass Name="Android_LauncherIcon36">
   515    526                       <Platform Name="Android">
   516    527                           <RemoteDir>res\drawable-ldpi</RemoteDir>
   517    528                           <Operation>1</Operation>
   518    529                       </Platform>
   519    530                   </DeployClass>
   520         -                <DeployClass Name="DependencyModule">
   521         -                    <Platform Name="Win32">
   522         -                        <Operation>0</Operation>
   523         -                        <Extensions>.dll;.bpl</Extensions>
   524         -                    </Platform>
   525         -                    <Platform Name="OSX32">
   526         -                        <Operation>1</Operation>
   527         -                        <Extensions>.dylib</Extensions>
   528         -                    </Platform>
   529         -                </DeployClass>
          531  +                <DeployClass Name="ProjectiOSDeviceResourceRules"/>
   530    532                   <ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
   531    533                   <ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
   532    534                   <ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
   533    535                   <ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
   534    536                   <ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
   535    537                   <ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
   536    538                   <ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>

Added src/Delphi10/VCSInfo_XSeattle.dpr.

            1  +library VCSInfo_XSeattle;
            2  +
            3  +{ Important note about DLL memory management: ShareMem must be the
            4  +  first unit in your library's USES clause AND your project's (select
            5  +  Project-View Source) USES clause if your DLL exports any procedures or
            6  +  functions that pass strings as parameters or function results. This
            7  +  applies to all strings passed to and from your DLL--even those that
            8  +  are nested in records and classes. ShareMem is the interface unit to
            9  +  the BORLNDMM.DLL shared memory manager, which must be deployed along
           10  +  with your DLL. To avoid using BORLNDMM.DLL, pass string information
           11  +  using PChar or ShortString parameters. }
           12  +
           13  +{$R *.dres}
           14  +
           15  +uses
           16  +  System.SysUtils,
           17  +  System.Classes,
           18  +  VCSInfoWzrd in '..\VCSInfoWzrd.pas';
           19  +
           20  +{$R *.res}
           21  +
           22  +begin
           23  +end.

Added src/Delphi10/VCSInfo_XSeattle.dproj.

            1  +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
            2  +    <PropertyGroup>
            3  +        <ProjectGuid>{8615D8A1-1FF0-4BB0-A048-52AE5019C5DF}</ProjectGuid>
            4  +        <ProjectVersion>18.0</ProjectVersion>
            5  +        <FrameworkType>None</FrameworkType>
            6  +        <MainSource>VCSInfo_XSeattle.dpr</MainSource>
            7  +        <Base>True</Base>
            8  +        <Config Condition="'$(Config)'==''">Debug</Config>
            9  +        <Platform Condition="'$(Platform)'==''">Win32</Platform>
           10  +        <TargetedPlatforms>1</TargetedPlatforms>
           11  +        <AppType>Library</AppType>
           12  +    </PropertyGroup>
           13  +    <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
           14  +        <Base>true</Base>
           15  +    </PropertyGroup>
           16  +    <PropertyGroup Condition="('$(Platform)'=='OSX32' and '$(Base)'=='true') or '$(Base_OSX32)'!=''">
           17  +        <Base_OSX32>true</Base_OSX32>
           18  +        <CfgParent>Base</CfgParent>
           19  +        <Base>true</Base>
           20  +    </PropertyGroup>
           21  +    <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
           22  +        <Base_Win32>true</Base_Win32>
           23  +        <CfgParent>Base</CfgParent>
           24  +        <Base>true</Base>
           25  +    </PropertyGroup>
           26  +    <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
           27  +        <Base_Win64>true</Base_Win64>
           28  +        <CfgParent>Base</CfgParent>
           29  +        <Base>true</Base>
           30  +    </PropertyGroup>
           31  +    <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
           32  +        <Cfg_1>true</Cfg_1>
           33  +        <CfgParent>Base</CfgParent>
           34  +        <Base>true</Base>
           35  +    </PropertyGroup>
           36  +    <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
           37  +        <Cfg_1_Win32>true</Cfg_1_Win32>
           38  +        <CfgParent>Cfg_1</CfgParent>
           39  +        <Cfg_1>true</Cfg_1>
           40  +        <Base>true</Base>
           41  +    </PropertyGroup>
           42  +    <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
           43  +        <Cfg_2>true</Cfg_2>
           44  +        <CfgParent>Base</CfgParent>
           45  +        <Base>true</Base>
           46  +    </PropertyGroup>
           47  +    <PropertyGroup Condition="'$(Base)'!=''">
           48  +        <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
           49  +        <GenDll>true</GenDll>
           50  +        <SanitizedProjectName>VCSInfo_XSeattle</SanitizedProjectName>
           51  +        <DCC_UnitSearchPath>..;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
           52  +        <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
           53  +        <VerInfo_Locale>1043</VerInfo_Locale>
           54  +        <DCC_DcuOutput>..\..\out\DCU\$(Platform)\$(Config)</DCC_DcuOutput>
           55  +        <DCC_ExeOutput>..\..\out\$(Platform)\$(Config)</DCC_ExeOutput>
           56  +        <DCC_E>false</DCC_E>
           57  +        <DCC_N>false</DCC_N>
           58  +        <DCC_S>false</DCC_S>
           59  +        <DCC_F>false</DCC_F>
           60  +        <DCC_K>false</DCC_K>
           61  +    </PropertyGroup>
           62  +    <PropertyGroup Condition="'$(Base_OSX32)'!=''">
           63  +        <DCC_UsePackage>DBXSqliteDriver;bindcompdbx;IndyIPCommon;RESTComponents;DBXInterBaseDriver;IndyIPServer;IndySystem;tethering;fmxFireDAC;FireDAC;bindcompfmx;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;inetdb;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;FireDACIBDriver;fmx;fmxdae;xmlrtl;soapmidas;fmxobj;rtl;DbxClientDriver;CustomIPTransport;dbexpress;IndyCore;bindcomp;dsnap;FireDACCommon;IndyIPClient;RESTBackendComponents;dbxcds;soapserver;FireDACODBCDriver;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;inetdbxpress;IndyProtocols;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
           64  +    </PropertyGroup>
           65  +    <PropertyGroup Condition="'$(Base_Win32)'!=''">
           66  +        <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
           67  +        <VerInfo_Locale>1033</VerInfo_Locale>
           68  +        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
           69  +        <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
           70  +        <DCC_UsePackage>DBXSqliteDriver;bindcompdbx;IndyIPCommon;RESTComponents;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;frxe23;vclFireDAC;IndySystem;tethering;svnui;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;TeeDB;FireDAC;vcltouch;vcldb;bindcompfmx;svn;Intraweb;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;inetdb;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;OmniThreadLibraryRuntimeXE8;AbbreviaVCLD;FireDACIBDriver;fmx;fmxdae;xmlrtl;soapmidas;Tee;fmxobj;vclwinx;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;bindcomp;appanalytics;dsnap;AggPasRun;FireDACCommon;IndyIPClient;bindcompvcl;frxDB23;RESTBackendComponents;TeeUI;VCLRESTComponents;vclribbon;dbxcds;VclSmp;soapserver;adortl;FireDACODBCDriver;frxTee23;VCSInfo;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;inetdbxpress;IndyProtocols;frx23;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
           71  +    </PropertyGroup>
           72  +    <PropertyGroup Condition="'$(Base_Win64)'!=''">
           73  +        <DCC_UsePackage>DBXSqliteDriver;bindcompdbx;IndyIPCommon;RESTComponents;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;vclFireDAC;IndySystem;tethering;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;TeeDB;FireDAC;vcltouch;vcldb;bindcompfmx;Intraweb;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;inetdb;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;AbbreviaVCLD;FireDACIBDriver;fmx;fmxdae;xmlrtl;soapmidas;Tee;fmxobj;vclwinx;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;bindcomp;appanalytics;dsnap;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;TeeUI;VCLRESTComponents;vclribbon;dbxcds;VclSmp;soapserver;adortl;FireDACODBCDriver;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;inetdbxpress;IndyProtocols;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
           74  +    </PropertyGroup>
           75  +    <PropertyGroup Condition="'$(Cfg_1)'!=''">
           76  +        <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
           77  +        <DCC_DebugDCUs>true</DCC_DebugDCUs>
           78  +        <DCC_Optimize>false</DCC_Optimize>
           79  +        <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
           80  +        <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
           81  +        <DCC_RemoteDebug>true</DCC_RemoteDebug>
           82  +    </PropertyGroup>
           83  +    <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
           84  +        <Debugger_HostApplication>D:\ProgFiles\Embarcadero\RAD Studio\17.0\bin\bds.exe</Debugger_HostApplication>
           85  +        <UsePackages>true</UsePackages>
           86  +        <DCC_UsePackage>rtl;vcl;designide</DCC_UsePackage>
           87  +        <Debugger_RunParams>-pDelphi</Debugger_RunParams>
           88  +        <Manifest_File>None</Manifest_File>
           89  +        <VerInfo_Locale>1033</VerInfo_Locale>
           90  +        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
           91  +        <DCC_RemoteDebug>false</DCC_RemoteDebug>
           92  +    </PropertyGroup>
           93  +    <PropertyGroup Condition="'$(Cfg_2)'!=''">
           94  +        <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
           95  +        <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
           96  +        <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
           97  +        <DCC_DebugInformation>0</DCC_DebugInformation>
           98  +    </PropertyGroup>
           99  +    <ItemGroup>
          100  +        <DelphiCompile Include="$(MainSource)">
          101  +            <MainSource>MainSource</MainSource>
          102  +        </DelphiCompile>
          103  +        <DCCReference Include="..\VCSInfoWzrd.pas"/>
          104  +        <RcItem Include="..\Res\logo.bmp">
          105  +            <ResourceType>BITMAP</ResourceType>
          106  +            <ResourceId>BMP_LOGO</ResourceId>
          107  +        </RcItem>
          108  +        <BuildConfiguration Include="Release">
          109  +            <Key>Cfg_2</Key>
          110  +            <CfgParent>Base</CfgParent>
          111  +        </BuildConfiguration>
          112  +        <BuildConfiguration Include="Base">
          113  +            <Key>Base</Key>
          114  +        </BuildConfiguration>
          115  +        <BuildConfiguration Include="Debug">
          116  +            <Key>Cfg_1</Key>
          117  +            <CfgParent>Base</CfgParent>
          118  +        </BuildConfiguration>
          119  +    </ItemGroup>
          120  +    <ProjectExtensions>
          121  +        <Borland.Personality>Delphi.Personality.12</Borland.Personality>
          122  +        <Borland.ProjectType>Application</Borland.ProjectType>
          123  +        <BorlandProject>
          124  +            <Delphi.Personality>
          125  +                <Source>
          126  +                    <Source Name="MainSource">VCSInfo_XSeattle.dpr</Source>
          127  +                </Source>
          128  +                <Excluded_Packages>
          129  +                    <Excluded_Packages Name="$(BDSBIN)\dcloffice2k230.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
          130  +                    <Excluded_Packages Name="$(BDSBIN)\dclofficexp230.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
          131  +                </Excluded_Packages>
          132  +            </Delphi.Personality>
          133  +            <Deployment Version="2">
          134  +                <DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
          135  +                    <Platform Name="OSX32">
          136  +                        <Overwrite>true</Overwrite>
          137  +                    </Platform>
          138  +                </DeployFile>
          139  +                <DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
          140  +                    <Platform Name="iOSSimulator">
          141  +                        <Overwrite>true</Overwrite>
          142  +                    </Platform>
          143  +                </DeployFile>
          144  +                <DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
          145  +                    <Platform Name="iOSSimulator">
          146  +                        <Overwrite>true</Overwrite>
          147  +                    </Platform>
          148  +                </DeployFile>
          149  +                <DeployFile LocalName="out\Win32\Debug\VCSInfo_XSeattle.dll" Configuration="Debug" Class="ProjectOutput">
          150  +                    <Platform Name="Win32">
          151  +                        <RemoteName>VCSInfo_XSeattle.dll</RemoteName>
          152  +                        <Overwrite>true</Overwrite>
          153  +                    </Platform>
          154  +                </DeployFile>
          155  +                <DeployClass Name="ProjectiOSDeviceResourceRules">
          156  +                    <Platform Name="iOSDevice64">
          157  +                        <Operation>1</Operation>
          158  +                    </Platform>
          159  +                    <Platform Name="iOSDevice32">
          160  +                        <Operation>1</Operation>
          161  +                    </Platform>
          162  +                </DeployClass>
          163  +                <DeployClass Name="ProjectOSXResource">
          164  +                    <Platform Name="OSX32">
          165  +                        <RemoteDir>Contents\Resources</RemoteDir>
          166  +                        <Operation>1</Operation>
          167  +                    </Platform>
          168  +                </DeployClass>
          169  +                <DeployClass Name="AndroidClassesDexFile">
          170  +                    <Platform Name="Android">
          171  +                        <RemoteDir>classes</RemoteDir>
          172  +                        <Operation>1</Operation>
          173  +                    </Platform>
          174  +                </DeployClass>
          175  +                <DeployClass Name="AdditionalDebugSymbols">
          176  +                    <Platform Name="Win32">
          177  +                        <RemoteDir>Contents\MacOS</RemoteDir>
          178  +                        <Operation>0</Operation>
          179  +                    </Platform>
          180  +                    <Platform Name="iOSSimulator">
          181  +                        <Operation>1</Operation>
          182  +                    </Platform>
          183  +                    <Platform Name="OSX32">
          184  +                        <RemoteDir>Contents\MacOS</RemoteDir>
          185  +                        <Operation>1</Operation>
          186  +                    </Platform>
          187  +                </DeployClass>
          188  +                <DeployClass Name="iPad_Launch768">
          189  +                    <Platform Name="iOSSimulator">
          190  +                        <Operation>1</Operation>
          191  +                    </Platform>
          192  +                    <Platform Name="iOSDevice64">
          193  +                        <Operation>1</Operation>
          194  +                    </Platform>
          195  +                    <Platform Name="iOSDevice32">
          196  +                        <Operation>1</Operation>
          197  +                    </Platform>
          198  +                </DeployClass>
          199  +                <DeployClass Name="Android_LauncherIcon144">
          200  +                    <Platform Name="Android">
          201  +                        <RemoteDir>res\drawable-xxhdpi</RemoteDir>
          202  +                        <Operation>1</Operation>
          203  +                    </Platform>
          204  +                </DeployClass>
          205  +                <DeployClass Name="AndroidLibnativeMipsFile">
          206  +                    <Platform Name="Android">
          207  +                        <RemoteDir>library\lib\mips</RemoteDir>
          208  +                        <Operation>1</Operation>
          209  +                    </Platform>
          210  +                </DeployClass>
          211  +                <DeployClass Required="true" Name="ProjectOutput">
          212  +                    <Platform Name="Win32">
          213  +                        <Operation>0</Operation>
          214  +                    </Platform>
          215  +                    <Platform Name="iOSDevice64">
          216  +                        <Operation>1</Operation>
          217  +                    </Platform>
          218  +                    <Platform Name="OSX32">
          219  +                        <RemoteDir>Contents\MacOS</RemoteDir>
          220  +                        <Operation>1</Operation>
          221  +                    </Platform>
          222  +                    <Platform Name="iOSDevice32">
          223  +                        <Operation>1</Operation>
          224  +                    </Platform>
          225  +                    <Platform Name="Android">
          226  +                        <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
          227  +                        <Operation>1</Operation>
          228  +                    </Platform>
          229  +                    <Platform Name="iOSSimulator">
          230  +                        <Operation>1</Operation>
          231  +                    </Platform>
          232  +                </DeployClass>
          233  +                <DeployClass Name="DependencyFramework">
          234  +                    <Platform Name="Win32">
          235  +                        <Operation>0</Operation>
          236  +                    </Platform>
          237  +                    <Platform Name="OSX32">
          238  +                        <RemoteDir>Contents\MacOS</RemoteDir>
          239  +                        <Operation>1</Operation>
          240  +                        <Extensions>.framework</Extensions>
          241  +                    </Platform>
          242  +                </DeployClass>
          243  +                <DeployClass Name="iPhone_Launch640">
          244  +                    <Platform Name="iOSSimulator">
          245  +                        <Operation>1</Operation>
          246  +                    </Platform>
          247  +                    <Platform Name="iOSDevice64">
          248  +                        <Operation>1</Operation>
          249  +                    </Platform>
          250  +                    <Platform Name="iOSDevice32">
          251  +                        <Operation>1</Operation>
          252  +                    </Platform>
          253  +                </DeployClass>
          254  +                <DeployClass Name="iPad_Launch1024">
          255  +                    <Platform Name="iOSSimulator">
          256  +                        <Operation>1</Operation>
          257  +                    </Platform>
          258  +                    <Platform Name="iOSDevice64">
          259  +                        <Operation>1</Operation>
          260  +                    </Platform>
          261  +                    <Platform Name="iOSDevice32">
          262  +                        <Operation>1</Operation>
          263  +                    </Platform>
          264  +                </DeployClass>
          265  +                <DeployClass Name="ProjectiOSDeviceDebug">
          266  +                    <Platform Name="iOSDevice64">
          267  +                        <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
          268  +                        <Operation>1</Operation>
          269  +                    </Platform>
          270  +                    <Platform Name="iOSDevice32">
          271  +                        <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
          272  +                        <Operation>1</Operation>
          273  +                    </Platform>
          274  +                </DeployClass>
          275  +                <DeployClass Name="AndroidLibnativeX86File">
          276  +                    <Platform Name="Android">
          277  +                        <RemoteDir>library\lib\x86</RemoteDir>
          278  +                        <Operation>1</Operation>
          279  +                    </Platform>
          280  +                </DeployClass>
          281  +                <DeployClass Name="iPhone_Launch320">
          282  +                    <Platform Name="iOSSimulator">
          283  +                        <Operation>1</Operation>
          284  +                    </Platform>
          285  +                    <Platform Name="iOSDevice64">
          286  +                        <Operation>1</Operation>
          287  +                    </Platform>
          288  +                    <Platform Name="iOSDevice32">
          289  +                        <Operation>1</Operation>
          290  +                    </Platform>
          291  +                </DeployClass>
          292  +                <DeployClass Name="ProjectiOSInfoPList">
          293  +                    <Platform Name="iOSSimulator">
          294  +                        <Operation>1</Operation>
          295  +                    </Platform>
          296  +                    <Platform Name="iOSDevice64">
          297  +                        <Operation>1</Operation>
          298  +                    </Platform>
          299  +                    <Platform Name="iOSDevice32">
          300  +                        <Operation>1</Operation>
          301  +                    </Platform>
          302  +                </DeployClass>
          303  +                <DeployClass Name="AndroidLibnativeArmeabiFile">
          304  +                    <Platform Name="Android">
          305  +                        <RemoteDir>library\lib\armeabi</RemoteDir>
          306  +                        <Operation>1</Operation>
          307  +                    </Platform>
          308  +                </DeployClass>
          309  +                <DeployClass Name="DebugSymbols">
          310  +                    <Platform Name="Win32">
          311  +                        <Operation>0</Operation>
          312  +                    </Platform>
          313  +                    <Platform Name="iOSSimulator">
          314  +                        <Operation>1</Operation>
          315  +                    </Platform>
          316  +                    <Platform Name="OSX32">
          317  +                        <RemoteDir>Contents\MacOS</RemoteDir>
          318  +                        <Operation>1</Operation>
          319  +                    </Platform>
          320  +                </DeployClass>
          321  +                <DeployClass Name="iPad_Launch1536">
          322  +                    <Platform Name="iOSSimulator">
          323  +                        <Operation>1</Operation>
          324  +                    </Platform>
          325  +                    <Platform Name="iOSDevice64">
          326  +                        <Operation>1</Operation>
          327  +                    </Platform>
          328  +                    <Platform Name="iOSDevice32">
          329  +                        <Operation>1</Operation>
          330  +                    </Platform>
          331  +                </DeployClass>
          332  +                <DeployClass Name="Android_SplashImage470">
          333  +                    <Platform Name="Android">
          334  +                        <RemoteDir>res\drawable-normal</RemoteDir>
          335  +                        <Operation>1</Operation>
          336  +                    </Platform>
          337  +                </DeployClass>
          338  +                <DeployClass Name="Android_LauncherIcon96">
          339  +                    <Platform Name="Android">
          340  +                        <RemoteDir>res\drawable-xhdpi</RemoteDir>
          341  +                        <Operation>1</Operation>
          342  +                    </Platform>
          343  +                </DeployClass>
          344  +                <DeployClass Name="Android_SplashImage640">
          345  +                    <Platform Name="Android">
          346  +                        <RemoteDir>res\drawable-large</RemoteDir>
          347  +                        <Operation>1</Operation>
          348  +                    </Platform>
          349  +                </DeployClass>
          350  +                <DeployClass Name="iPhone_Launch640x1136">
          351  +                    <Platform Name="iOSSimulator">
          352  +                        <Operation>1</Operation>
          353  +                    </Platform>
          354  +                    <Platform Name="iOSDevice64">
          355  +                        <Operation>1</Operation>
          356  +                    </Platform>
          357  +                    <Platform Name="iOSDevice32">
          358  +                        <Operation>1</Operation>
          359  +                    </Platform>
          360  +                </DeployClass>
          361  +                <DeployClass Name="ProjectiOSEntitlements">
          362  +                    <Platform Name="iOSDevice64">
          363  +                        <RemoteDir>../</RemoteDir>
          364  +                        <Operation>1</Operation>
          365  +                    </Platform>
          366  +                    <Platform Name="iOSDevice32">
          367  +                        <RemoteDir>../</RemoteDir>
          368  +                        <Operation>1</Operation>
          369  +                    </Platform>
          370  +                </DeployClass>
          371  +                <DeployClass Name="Android_LauncherIcon72">
          372  +                    <Platform Name="Android">
          373  +                        <RemoteDir>res\drawable-hdpi</RemoteDir>
          374  +                        <Operation>1</Operation>
          375  +                    </Platform>
          376  +                </DeployClass>
          377  +                <DeployClass Name="AndroidGDBServer">
          378  +                    <Platform Name="Android">
          379  +                        <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
          380  +                        <Operation>1</Operation>
          381  +                    </Platform>
          382  +                </DeployClass>
          383  +                <DeployClass Name="ProjectOSXInfoPList">
          384  +                    <Platform Name="OSX32">
          385  +                        <RemoteDir>Contents</RemoteDir>
          386  +                        <Operation>1</Operation>
          387  +                    </Platform>
          388  +                </DeployClass>
          389  +                <DeployClass Name="ProjectOSXEntitlements">
          390  +                    <Platform Name="OSX32">
          391  +                        <RemoteDir>../</RemoteDir>
          392  +                        <Operation>1</Operation>
          393  +                    </Platform>
          394  +                </DeployClass>
          395  +                <DeployClass Name="iPad_Launch2048">
          396  +                    <Platform Name="iOSSimulator">
          397  +                        <Operation>1</Operation>
          398  +                    </Platform>
          399  +                    <Platform Name="iOSDevice64">
          400  +                        <Operation>1</Operation>
          401  +                    </Platform>
          402  +                    <Platform Name="iOSDevice32">
          403  +                        <Operation>1</Operation>
          404  +                    </Platform>
          405  +                </DeployClass>
          406  +                <DeployClass Name="AndroidSplashStyles">
          407  +                    <Platform Name="Android">
          408  +                        <RemoteDir>res\values</RemoteDir>
          409  +                        <Operation>1</Operation>
          410  +                    </Platform>
          411  +                </DeployClass>
          412  +                <DeployClass Name="Android_SplashImage426">
          413  +                    <Platform Name="Android">
          414  +                        <RemoteDir>res\drawable-small</RemoteDir>
          415  +                        <Operation>1</Operation>
          416  +                    </Platform>
          417  +                </DeployClass>
          418  +                <DeployClass Name="AndroidSplashImageDef">
          419  +                    <Platform Name="Android">
          420  +                        <RemoteDir>res\drawable</RemoteDir>
          421  +                        <Operation>1</Operation>
          422  +                    </Platform>
          423  +                </DeployClass>
          424  +                <DeployClass Name="ProjectiOSResource">
          425  +                    <Platform Name="iOSSimulator">
          426  +                        <Operation>1</Operation>
          427  +                    </Platform>
          428  +                    <Platform Name="iOSDevice64">
          429  +                        <Operation>1</Operation>
          430  +                    </Platform>
          431  +                    <Platform Name="iOSDevice32">
          432  +                        <Operation>1</Operation>
          433  +                    </Platform>
          434  +                </DeployClass>
          435  +                <DeployClass Name="ProjectAndroidManifest">
          436  +                    <Platform Name="Android">
          437  +                        <Operation>1</Operation>
          438  +                    </Platform>
          439  +                </DeployClass>
          440  +                <DeployClass Name="Android_DefaultAppIcon">
          441  +                    <Platform Name="Android">
          442  +                        <RemoteDir>res\drawable</RemoteDir>
          443  +                        <Operation>1</Operation>
          444  +                    </Platform>
          445  +                </DeployClass>
          446  +                <DeployClass Name="File">
          447  +                    <Platform Name="Win32">
          448  +                        <Operation>0</Operation>
          449  +                    </Platform>
          450  +                    <Platform Name="iOSDevice64">
          451  +                        <Operation>0</Operation>
          452  +                    </Platform>
          453  +                    <Platform Name="OSX32">
          454  +                        <RemoteDir>Contents\Resources\StartUp\</RemoteDir>
          455  +                        <Operation>0</Operation>
          456  +                    </Platform>
          457  +                    <Platform Name="iOSDevice32">
          458  +                        <Operation>0</Operation>
          459  +                    </Platform>
          460  +                    <Platform Name="Android">
          461  +                        <Operation>0</Operation>
          462  +                    </Platform>
          463  +                    <Platform Name="iOSSimulator">
          464  +                        <Operation>0</Operation>
          465  +                    </Platform>
          466  +                </DeployClass>
          467  +                <DeployClass Name="AndroidServiceOutput">
          468  +                    <Platform Name="Android">
          469  +                        <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
          470  +                        <Operation>1</Operation>
          471  +                    </Platform>
          472  +                </DeployClass>
          473  +                <DeployClass Required="true" Name="DependencyPackage">
          474  +                    <Platform Name="Win32">
          475  +                        <Operation>0</Operation>
          476  +                        <Extensions>.bpl</Extensions>
          477  +                    </Platform>
          478  +                    <Platform Name="iOSDevice64">
          479  +                        <Operation>1</Operation>
          480  +                        <Extensions>.dylib</Extensions>
          481  +                    </Platform>
          482  +                    <Platform Name="OSX32">
          483  +                        <RemoteDir>Contents\MacOS</RemoteDir>
          484  +                        <Operation>1</Operation>
          485  +                        <Extensions>.dylib</Extensions>
          486  +                    </Platform>
          487  +                    <Platform Name="iOSDevice32">
          488  +                        <Operation>1</Operation>
          489  +                        <Extensions>.dylib</Extensions>
          490  +                    </Platform>
          491  +                    <Platform Name="iOSSimulator">
          492  +                        <Operation>1</Operation>
          493  +                        <Extensions>.dylib</Extensions>
          494  +                    </Platform>
          495  +                </DeployClass>
          496  +                <DeployClass Name="Android_LauncherIcon48">
          497  +                    <Platform Name="Android">
          498  +                        <RemoteDir>res\drawable-mdpi</RemoteDir>
          499  +                        <Operation>1</Operation>
          500  +                    </Platform>
          501  +                </DeployClass>
          502  +                <DeployClass Name="Android_SplashImage960">
          503  +                    <Platform Name="Android">
          504  +                        <RemoteDir>res\drawable-xlarge</RemoteDir>
          505  +                        <Operation>1</Operation>
          506  +                    </Platform>
          507  +                </DeployClass>
          508  +                <DeployClass Name="Android_LauncherIcon36">
          509  +                    <Platform Name="Android">
          510  +                        <RemoteDir>res\drawable-ldpi</RemoteDir>
          511  +                        <Operation>1</Operation>
          512  +                    </Platform>
          513  +                </DeployClass>
          514  +                <DeployClass Name="DependencyModule">
          515  +                    <Platform Name="Win32">
          516  +                        <Operation>0</Operation>
          517  +                        <Extensions>.dll;.bpl</Extensions>
          518  +                    </Platform>
          519  +                    <Platform Name="iOSDevice64">
          520  +                        <Operation>1</Operation>
          521  +                        <Extensions>.dylib</Extensions>
          522  +                    </Platform>
          523  +                    <Platform Name="OSX32">
          524  +                        <RemoteDir>Contents\MacOS</RemoteDir>
          525  +                        <Operation>1</Operation>
          526  +                        <Extensions>.dylib</Extensions>
          527  +                    </Platform>
          528  +                    <Platform Name="iOSDevice32">
          529  +                        <Operation>1</Operation>
          530  +                        <Extensions>.dylib</Extensions>
          531  +                    </Platform>
          532  +                    <Platform Name="iOSSimulator">
          533  +                        <Operation>1</Operation>
          534  +                        <Extensions>.dylib</Extensions>
          535  +                    </Platform>
          536  +                </DeployClass>
          537  +                <ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
          538  +                <ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
          539  +                <ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
          540  +                <ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
          541  +                <ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
          542  +                <ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
          543  +                <ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
          544  +            </Deployment>
          545  +            <Platforms>
          546  +                <Platform value="OSX32">False</Platform>
          547  +                <Platform value="Win32">True</Platform>
          548  +                <Platform value="Win64">False</Platform>
          549  +            </Platforms>
          550  +        </BorlandProject>
          551  +        <ProjectFileVersion>12</ProjectFileVersion>
          552  +    </ProjectExtensions>
          553  +    <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
          554  +    <Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
          555  +    <Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
          556  +</Project>

Added src/Delphi10/VCSInfo_dev.groupproj.

            1  +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
            2  +    <PropertyGroup>
            3  +        <ProjectGuid>{520AFAE8-DD39-4069-8DB8-F803A041CC1B}</ProjectGuid>
            4  +    </PropertyGroup>
            5  +    <ItemGroup>
            6  +        <Projects Include="VCSInfo_BPL.dproj">
            7  +            <Dependencies/>
            8  +        </Projects>
            9  +        <Projects Include="VCSInfo_XSeattle.dproj">
           10  +            <Dependencies/>
           11  +        </Projects>
           12  +    </ItemGroup>
           13  +    <ProjectExtensions>
           14  +        <Borland.Personality>Default.Personality.12</Borland.Personality>
           15  +        <Borland.ProjectType/>
           16  +        <BorlandProject>
           17  +            <Default.Personality/>
           18  +        </BorlandProject>
           19  +    </ProjectExtensions>
           20  +    <Target Name="VCSInfo_BPL">
           21  +        <MSBuild Projects="VCSInfo_BPL.dproj"/>
           22  +    </Target>
           23  +    <Target Name="VCSInfo_BPL:Clean">
           24  +        <MSBuild Projects="VCSInfo_BPL.dproj" Targets="Clean"/>
           25  +    </Target>
           26  +    <Target Name="VCSInfo_BPL:Make">
           27  +        <MSBuild Projects="VCSInfo_BPL.dproj" Targets="Make"/>
           28  +    </Target>
           29  +    <Target Name="VCSInfo_XSeattle">
           30  +        <MSBuild Projects="VCSInfo_XSeattle.dproj"/>
           31  +    </Target>
           32  +    <Target Name="VCSInfo_XSeattle:Clean">
           33  +        <MSBuild Projects="VCSInfo_XSeattle.dproj" Targets="Clean"/>
           34  +    </Target>
           35  +    <Target Name="VCSInfo_XSeattle:Make">
           36  +        <MSBuild Projects="VCSInfo_XSeattle.dproj" Targets="Make"/>
           37  +    </Target>
           38  +    <Target Name="Build">
           39  +        <CallTarget Targets="VCSInfo_BPL;VCSInfo_XSeattle"/>
           40  +    </Target>
           41  +    <Target Name="Clean">
           42  +        <CallTarget Targets="VCSInfo_BPL:Clean;VCSInfo_XSeattle:Clean"/>
           43  +    </Target>
           44  +    <Target Name="Make">
           45  +        <CallTarget Targets="VCSInfo_BPL:Make;VCSInfo_XSeattle:Make"/>
           46  +    </Target>
           47  +    <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/>
           48  +</Project>

Added src/Res/logo.bmp.

cannot compute difference between binary files

Changes to src/VCSInfoMenuWzrd.pas.

    16     16       Incoming: Integer;
    17     17       Outgoing: Integer;
    18     18       LastUpdated: TDateTime;
    19     19       function IsRepo: Boolean;
    20     20     end;
    21     21   
    22     22     // TODO: implement IOTAEditorNotifier and/or IOTAIDENotifier so we know which file is active
    23         -  TVCSInfoWizard = class(TNotifierObject, IOTAWizard, IOTAMenuWizard)
           23  +  TVCSInfoMenuWizard = class(TNotifierObject, IOTAWizard, IOTAMenuWizard)
    24     24       private
    25     25         FRepos: TDictionary<string,TRepoInfo>;
    26     26   
    27     27         FToolbar: TToolBar;
    28     28         FPluginAbout: Integer;
    29     29   
    30     30         FButtonSync: TToolButton;
................................................................................
    94     94   const
    95     95     scMenuIDString = 'net.2of4.VCSInfoWizard';
    96     96     cLimit = 9;
    97     97   
    98     98   { ------------------------------------------------------------------------------------------------ }
    99     99   procedure Register;
   100    100   begin
   101         -  RegisterPackageWizard(TVCSInfoWizard.Create);
          101  +  RegisterPackageWizard(TVCSInfoMenuWizard.Create);
   102    102     (* TODO: create multiple separate menu wizards:
   103    103       - pull (incoming) / push (outgoing)
   104    104     *)
   105    105   end;
   106    106   
   107    107   
   108    108   {$REGION 'Functions to execute command-line and capture output'}
................................................................................
   415    415     end;
   416    416   end;
   417    417   
   418    418   { ================================================================================================ }
   419    419   { TVCSInfoWizard }
   420    420   
   421    421   { ------------------------------------------------------------------------------------------------ }
   422         -constructor TVCSInfoWizard.Create;
          422  +constructor TVCSInfoMenuWizard.Create;
   423    423   var
   424    424     Services: INTAServices;
   425    425     AboutBox: IOTAAboutBoxServices;
   426    426     { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }
   427    427     function AddButtonImage(const Color: TColor; const TransparentColor: TColor = clFuchsia): Integer;
   428    428     var
   429    429       bmp: TBitmap;
................................................................................
   620    620     AboutBox := ToolsAPI.BorlandIDEServices as IOTAAboutBoxServices;
   621    621     FPluginAbout := AboutBox.AddPluginInfo(GetCurrentVersion, GetCurrentVersion + sLineBreak +
   622    622                                             sLineBreak +
   623    623                                             '© Martijn Coppoolse - http://fossil.2of4.net/vcsInfo',
   624    624                                             0);
   625    625   end {TVCSInfoWizard.Create};
   626    626   { ------------------------------------------------------------------------------------------------ }
   627         -destructor TVCSInfoWizard.Destroy;
          627  +destructor TVCSInfoMenuWizard.Destroy;
   628    628   var
   629    629     Services: INTAServices;
   630    630     Button: TToolButton;
   631    631     i: Integer;
   632    632     AboutBox: IOTAAboutBoxServices;
   633    633   begin
   634    634     try
................................................................................
   645    645       FToolbar.Free;
   646    646       FRepos.Free;
   647    647     finally
   648    648       inherited;
   649    649     end;
   650    650   end {TVCSInfoWizard.Destroy};
   651    651   
   652         -procedure TVCSInfoWizard.actBranchUpdate(Sender: TObject);
          652  +procedure TVCSInfoMenuWizard.actBranchUpdate(Sender: TObject);
   653    653   var
   654    654     actBranch: TAction;
   655    655     Repo: TRepoInfo;
   656    656     NewHint, NewCaption: string;
   657    657     NewEnabled: boolean;
   658    658   begin
   659    659     try
................................................................................
   688    688     except
   689    689       on E: Exception do begin
   690    690         LogMessage('actBranchUpdate raised ' + E.ClassName + sLineBreak + E.ToString);
   691    691       end;
   692    692     end;
   693    693   end;
   694    694   
   695         -procedure TVCSInfoWizard.actInfoExecute(Sender: TObject);
          695  +procedure TVCSInfoMenuWizard.actInfoExecute(Sender: TObject);
   696    696   begin
   697    697     // nothing; just drop down the menu
   698    698   end;
   699    699   
   700         -procedure TVCSInfoWizard.actInfoMenuPopup(Sender: TObject);
          700  +procedure TVCSInfoMenuWizard.actInfoMenuPopup(Sender: TObject);
   701    701   var
   702    702     Menu: TPopupMenu;
   703    703     Item: TMenuItem;
   704    704     Button: TToolButton;
   705    705     Output: string;
   706    706   begin
   707    707     try
................................................................................
   733    733     except
   734    734       on E: Exception do begin
   735    735         LogMessage('actInfoMenuPopUp raised ' + E.ClassName + sLineBreak + E.ToString);
   736    736       end;
   737    737     end;
   738    738   end {TVCSInfoWizard.actInfoMenuPopup};
   739    739   
   740         -procedure TVCSInfoWizard.actInfoUpdate(Sender: TObject);
          740  +procedure TVCSInfoMenuWizard.actInfoUpdate(Sender: TObject);
   741    741   var
   742    742     actInfo: TAction;
   743    743     Repo: TRepoInfo;
   744    744     NewImageIndex: integer;
   745    745     NewCaption: string;
   746    746   begin
   747    747     try
................................................................................
   770    770     except
   771    771       on E: Exception do begin
   772    772         LogMessage('actInfoUpdate raised ' + E.ClassName + sLineBreak + E.ToString);
   773    773       end;
   774    774     end;
   775    775   end;
   776    776   
   777         -procedure TVCSInfoWizard.actInfoMenuVCSClick(Sender: TObject);
          777  +procedure TVCSInfoMenuWizard.actInfoMenuVCSClick(Sender: TObject);
   778    778   var
   779    779     Dir: string;
   780    780   begin
   781    781     Dir := ExtractFileDir(GetActiveFileName);
   782    782     case (((Sender as TMenuItem).Owner as TComponent).Owner as TToolButton).Action.Tag of
   783    783       0: begin // hg
   784    784         CreateProcess('cmd.exe /k hg', Dir, True);
................................................................................
   785    785       end;
   786    786       1: begin // fossil
   787    787         CreateProcess('cmd.exe /k fossil', Dir, True);
   788    788       end;
   789    789     end;
   790    790   end;
   791    791   
   792         -procedure TVCSInfoWizard.actBranchExecute(Sender: TObject);
          792  +procedure TVCSInfoMenuWizard.actBranchExecute(Sender: TObject);
   793    793   var
   794    794     P: TPoint;
   795    795   begin
   796    796     with FButtonBranch.BoundsRect do
   797    797       P := FButtonBranch.Parent.ClientToScreen(Point(Left, Bottom));
   798    798     FMenuBranches.Popup(P.X, P.Y);
   799    799   end;
   800    800   
   801         -procedure TVCSInfoWizard.actBranchMenuClick(Sender: TObject);
          801  +procedure TVCSInfoMenuWizard.actBranchMenuClick(Sender: TObject);
   802    802   var
   803    803     BranchName: string;
   804    804   begin
   805    805     BranchName := (Sender as TMenuItem).Caption;
   806    806     SwitchToRevision(BranchName);
   807    807   end {TVCSInfoWizard.actBranchMenuClick};
   808    808   
   809         -procedure TVCSInfoWizard.actBranchMenuPopup(Sender: TObject);
          809  +procedure TVCSInfoMenuWizard.actBranchMenuPopup(Sender: TObject);
   810    810   var
   811    811     Menu: TPopupMenu;
   812    812     Repo: TRepoInfo;
   813    813     Branches: TStringList;
   814    814     Branch: string;
   815    815     mi: TMenuItem;
   816    816     iRes: Cardinal;
................................................................................
   857    857         end;
   858    858       finally
   859    859         Branches.Free;
   860    860       end;
   861    861     end;
   862    862   end {TVCSInfoWizard.actBranchMenuPopup};
   863    863   
   864         -procedure TVCSInfoWizard.actStatusExecute(Sender: TObject);
          864  +procedure TVCSInfoMenuWizard.actStatusExecute(Sender: TObject);
   865    865   var
   866    866     Repo: TRepoInfo;
   867    867   begin
   868    868     Repo := GetActiveFileRepo;
   869    869     case IndexStr(Repo.RepoType, ['hg', 'fossil']) of
   870    870       0: begin // hg
   871    871         if Repo.Pending > 0 then begin
................................................................................
   884    884           if not CreateProcess('fossil ui', Repo.Root) then
   885    885             RaiseLastOSError;
   886    886         end;
   887    887       end;
   888    888     end;
   889    889   end;
   890    890   
   891         -procedure TVCSInfoWizard.actStatusUpdate(Sender: TObject);
          891  +procedure TVCSInfoMenuWizard.actStatusUpdate(Sender: TObject);
   892    892   var
   893    893     actStatus: TAction;
   894    894     Repo: TRepoInfo;
   895    895     NewImageIndex: Integer;
   896    896     NewHint: string;
   897    897     NewEnabled: boolean;
   898    898   begin
................................................................................
   936    936     except
   937    937       on E: Exception do begin
   938    938         LogMessage('actStatusUpdate raised ' + E.ClassName + sLineBreak + E.ToString);
   939    939       end;
   940    940     end;
   941    941   end;
   942    942   
   943         -procedure TVCSInfoWizard.actSyncExecute(Sender: TObject);
          943  +procedure TVCSInfoMenuWizard.actSyncExecute(Sender: TObject);
   944    944   var
   945    945     Repo: TRepoInfo;
   946    946     iRes: Cardinal;
   947    947     Output: string;
   948    948     MsgType: TMsgDlgType;
   949    949   begin
   950    950     Repo := GetActiveFileRepo;
................................................................................
   964    964           Screen.Cursor := crDefault;
   965    965         end;
   966    966         TaskMessageDlg(Repo.Root, Output, MsgType, [mbOK], 0);
   967    967       end;
   968    968     end;
   969    969   end;
   970    970   
   971         -procedure TVCSInfoWizard.actSyncUpdate(Sender: TObject);
          971  +procedure TVCSInfoMenuWizard.actSyncUpdate(Sender: TObject);
   972    972   var
   973    973     actSync: TAction;
   974    974   begin
   975    975     try
   976    976       actSync := Sender as TAction;
   977    977       RefreshSyncStatus(actSync);
   978    978     except
   979    979       on E: Exception do begin
   980    980         LogMessage('actSyncUpdate raised ' + E.ClassName + sLineBreak + E.ToString);
   981    981       end;
   982    982     end;
   983    983   end {TVCSInfoWizard.actSyncUpdate};
   984    984   
   985         -procedure TVCSInfoWizard.RefreshSyncStatus(const actSync: TAction);
          985  +procedure TVCSInfoMenuWizard.RefreshSyncStatus(const actSync: TAction);
   986    986   var
   987    987     NewImageIndex: Integer;
   988    988     Repo: TRepoInfo;
   989    989     NewEnabled: Boolean;
   990    990     NewCaption: string;
   991    991   begin
   992    992     Repo := GetActiveFileRepo;
................................................................................
  1058   1058   
  1059   1059       FToolbar.Invalidate;
  1060   1060       LogMessage('actSyncUpdate: IsRepo=%d, In=%d, Out=%d; Caption="%s", Img=%d',
  1061   1061                   [Ord(Repo.IsRepo), Repo.Incoming, Repo.Outgoing, NewCaption, NewImageIndex]);
  1062   1062     end;
  1063   1063   end;
  1064   1064   
  1065         -procedure TVCSInfoWizard.SwitchToRevision(const Revision: string);
         1065  +procedure TVCSInfoMenuWizard.SwitchToRevision(const Revision: string);
  1066   1066   var
  1067   1067     i: Integer;
  1068   1068     iRes: Cardinal;
  1069   1069     Repo: TRepoInfo;
  1070   1070     Output: string;
  1071   1071     MsgType: TMsgDlgType;
  1072   1072     Modules: IOTAModuleServices;
................................................................................
  1108   1108   
  1109   1109       // TODO: if we closed the project, reopen it
  1110   1110   
  1111   1111     end;
  1112   1112   end {TVCSInfoWizard.SwitchToBranch};
  1113   1113   
  1114   1114   { ------------------------------------------------------------------------------------------------ }
  1115         -function TVCSInfoWizard.GetMenuText: string;
         1115  +function TVCSInfoMenuWizard.GetMenuText: string;
  1116   1116   var
  1117   1117     Project: IOTAProject;
  1118   1118     Repo: TRepoInfo;
  1119   1119   begin
  1120   1120     Project := ToolsAPI.GetActiveProject;
  1121   1121     if Assigned(Project) then begin
  1122   1122       Repo := GetRepoInfo(Project.FileName);
................................................................................
  1145   1145       end;
  1146   1146     end else begin
  1147   1147       Result := Application.Title;
  1148   1148     end;
  1149   1149   end {TVCSInfoWizard.GetMenuText};
  1150   1150   
  1151   1151   { ------------------------------------------------------------------------------------------------ }
  1152         -function TVCSInfoWizard.GetState: TWizardState;
         1152  +function TVCSInfoMenuWizard.GetState: TWizardState;
  1153   1153   var
  1154   1154     Repo: TRepoInfo;
  1155   1155   begin
  1156   1156     Result := [];
  1157   1157     Repo := GetActiveFileRepo;
  1158   1158     // wsEnabled if the current module is located inside a working directory
  1159   1159     if Repo.IsRepo then begin
................................................................................
  1161   1161       // wsChecked if the current module has incoming or outgoing changes
  1162   1162       if (Repo.Incoming + Repo.Outgoing > 0) then begin
  1163   1163         Include(Result, wsChecked);
  1164   1164       end;
  1165   1165     end;
  1166   1166   end {TVCSInfoWizard.GetState};
  1167   1167   
  1168         -procedure TVCSInfoWizard.LogMessage(const Text: string; const Args: array of const);
         1168  +procedure TVCSInfoMenuWizard.LogMessage(const Text: string; const Args: array of const);
  1169   1169   begin
  1170   1170     LogMessage(Format(Text, Args));
  1171   1171   end;
  1172   1172   
  1173         -procedure TVCSInfoWizard.LogMessage(const Text: string);
         1173  +procedure TVCSInfoMenuWizard.LogMessage(const Text: string);
  1174   1174   const
  1175   1175     RFC3339: TFormatSettings = (DateSeparator: '-'; TimeSeparator: ':';
  1176   1176                                 ShortDateFormat: 'yyyy-MM-dd'; LongDateFormat: 'yyyy-MM-dd';
  1177   1177                                 ShortTimeFormat: 'hh:nn:ss'; LongTimeFormat: 'hh:nn:ss.zzz');
  1178   1178   var
  1179   1179     Messages: IOTAMessageServices;
  1180   1180     Group: IOTAMessageGroup;
................................................................................
  1192   1192       Messages.AddTitleMessage(TimeStamp + #9 + Line, Group);
  1193   1193       if TimeStamp[1] <> #9 then
  1194   1194         TimeStamp := StringOfChar(#9, 2);
  1195   1195     end;
  1196   1196   end {TVCSInfoWizard.LogMessage};
  1197   1197   
  1198   1198   { ------------------------------------------------------------------------------------------------ }
  1199         -procedure TVCSInfoWizard.Execute;
         1199  +procedure TVCSInfoMenuWizard.Execute;
  1200   1200   var
  1201   1201     Project: IOTAProject;
  1202   1202     CodeFile: string;
  1203   1203     Info: TRepoInfo;
  1204   1204     Msg: string;
  1205   1205   begin
  1206   1206     Project := ToolsAPI.GetActiveProject;
................................................................................
  1233   1233       end;
  1234   1234     end else begin
  1235   1235       TaskMessageDlg('No project loaded', '', mtError, [mbOK], 0);
  1236   1236     end;
  1237   1237   end {TVCSInfoWizard.Execute};
  1238   1238   
  1239   1239   { ------------------------------------------------------------------------------------------------ }
  1240         -function TVCSInfoWizard.GetIDString: string;
         1240  +function TVCSInfoMenuWizard.GetIDString: string;
  1241   1241   begin
  1242   1242     Result := scMenuIDString;
  1243   1243   end;
  1244   1244   
  1245   1245   { ------------------------------------------------------------------------------------------------ }
  1246         -function TVCSInfoWizard.GetName: string;
         1246  +function TVCSInfoMenuWizard.GetName: string;
  1247   1247   begin
  1248   1248     Result := scMenuIDString;
  1249   1249   end;
  1250   1250   
  1251         -function TVCSInfoWizard.GetActiveFileName: string;
         1251  +function TVCSInfoMenuWizard.GetActiveFileName: string;
  1252   1252   var
  1253   1253     Modules: IOTAModuleServices;
  1254   1254     Module: IOTAModule;
  1255   1255     Editor: IOTAEditor;
  1256   1256     Project: IOTAProject;
  1257   1257   begin
  1258   1258     Result := '';
................................................................................
  1268   1268     if Result = '' then begin
  1269   1269       Project := ToolsAPI.GetActiveProject;
  1270   1270       if Assigned(Project) then
  1271   1271         Result := Project.FileName;
  1272   1272     end;
  1273   1273   end {GetActiveFileName};
  1274   1274   
  1275         -function TVCSInfoWizard.GetActiveFileRepo(const AForceUpdate: Boolean): TRepoInfo;
         1275  +function TVCSInfoMenuWizard.GetActiveFileRepo(const AForceUpdate: Boolean): TRepoInfo;
  1276   1276   var
  1277   1277     FileName: string;
  1278   1278   begin
  1279   1279     Result := GetActiveFileRepo(AForceUpdate, FileName);
  1280   1280   end;
  1281   1281   
  1282         -function TVCSInfoWizard.GetActiveFileRepo(const AForceUpdate: Boolean; out AFileName: string): TRepoInfo;
         1282  +function TVCSInfoMenuWizard.GetActiveFileRepo(const AForceUpdate: Boolean; out AFileName: string): TRepoInfo;
  1283   1283   begin
  1284   1284     AFileName := GetActiveFileName;
  1285   1285     if FileExists(AFileName) then begin
  1286   1286       Result := GetRepoInfo(AFileName, AForceUpdate);
  1287   1287     end else begin
  1288   1288       Result := Default(TRepoInfo);
  1289   1289     end;
  1290   1290   end {TVCSInfoWizard.GetActiveFileRepo};
  1291   1291   
  1292         -function TVCSInfoWizard.GetRepoInfo(const AFileName: string; const AForceUpdate: Boolean): TRepoInfo;
         1292  +function TVCSInfoMenuWizard.GetRepoInfo(const AFileName: string; const AForceUpdate: Boolean): TRepoInfo;
  1293   1293   const
  1294   1294     cRefreshSeconds = 10;
  1295   1295   var
  1296   1296     FilePath, FinalFilePath, RootPath, FinalRootPath: string;
  1297   1297     Lines: TStringList;
  1298   1298     Line: string;
  1299   1299     iRes: Cardinal;

Added src/VCSInfoWzrd.pas.

            1  +unit VCSInfoWzrd;
            2  +
            3  +interface
            4  +uses
            5  +  Vcl.Graphics,
            6  +  ToolsAPI;
            7  +
            8  +type
            9  +  TVCSInfoStatusWizard = class(TNotifierObject, IOTAWizard)
           10  +  private
           11  +    FLogo: TBitmap;
           12  +  public
           13  +    constructor Create;
           14  +    destructor Destroy; override;
           15  +
           16  +    { IOTAWizard }
           17  +    function GetIDString: string;
           18  +    function GetName: string;
           19  +    function GetState: TWizardState;
           20  +    procedure Execute;
           21  +  end;
           22  +
           23  +implementation
           24  +
           25  +const
           26  +  scWizardID = 'net.2of4.VCSInfoStatusWizard';
           27  +resourcestring
           28  +  rsWizardName = 'VCS Info Wizard';
           29  +
           30  +{ ------------------------------------------------------------------------------------------------ }
           31  +procedure Register;
           32  +begin
           33  +  RegisterPackageWizard(TVCSInfoStatusWizard.Create);
           34  +end;
           35  +
           36  +
           37  +{ TVCSInfoStatusWizard }
           38  +
           39  +constructor TVCSInfoStatusWizard.Create;
           40  +begin
           41  +  FLogo := TBitmap.Create;
           42  +  FLogo.LoadFromResourceName(HInstance, 'BMP_LOGO');
           43  +  (BorlandIDEServices as IOTAAboutBoxServices).AddPluginInfo(rsWizardName, rsWizardName, FLogo.Handle,
           44  +                                                            False, 'Open Source');
           45  +  SplashScreenServices.AddPluginBitmap(rsWizardName, FLogo.Handle,
           46  +                                        False, 'Open Source');
           47  +  // TODO: set up cache
           48  +  // TODO: set up UI
           49  +  // TODO: set up thread queue, timer and notifiers
           50  +end;
           51  +
           52  +destructor TVCSInfoStatusWizard.Destroy;
           53  +begin
           54  +  // TODO: destroy all the objects we own
           55  +  FLogo.Free;
           56  +  inherited;
           57  +end;
           58  +
           59  +procedure TVCSInfoStatusWizard.Execute;
           60  +begin
           61  +  // TODO: when will this be called?
           62  +end;
           63  +
           64  +function TVCSInfoStatusWizard.GetIDString: string;
           65  +begin
           66  +  Result := scWizardID;
           67  +end;
           68  +
           69  +function TVCSInfoStatusWizard.GetName: string;
           70  +begin
           71  +  Result := rsWizardName;
           72  +end;
           73  +
           74  +function TVCSInfoStatusWizard.GetState: TWizardState;
           75  +begin
           76  +  Result := [wsEnabled];
           77  +end;
           78  +
           79  +
           80  +
           81  +function InitializeWizard(const BorlandIDEServices: IBorlandIDEServices): IOTAWizard;
           82  +begin
           83  +  Result := TVCSInfoStatusWizard.Create;
           84  +end;
           85  +
           86  +function InitWizard(const BorlandIDEServices: IBorlandIDEServices;
           87  +                    RegisterProc: TWizardRegisterProc;
           88  +                    var Terminate: TWizardTerminateProc): boolean; stdcall;
           89  +begin
           90  +  RegisterProc(InitializeWizard(BorlandIDEServices));
           91  +  Result := True;
           92  +end;
           93  +
           94  +
           95  +exports
           96  +  InitWizard name WizardEntryPoint;
           97  +
           98  +end.