mirror of https://gitlab.com/basile.b/dexed.git
Compare commits
74 Commits
Author | SHA1 | Date |
---|---|---|
|
129d83d568 | |
|
3a6a20c466 | |
|
685242ae65 | |
|
647daa96c8 | |
|
d4766a2d2a | |
|
a45e590521 | |
|
340c099fe9 | |
|
be699bd9bc | |
|
7fea8c5e4d | |
|
e16a751495 | |
|
a741032bd1 | |
|
ccbc12a16c | |
|
877072dc48 | |
|
ad9f8ca2d4 | |
|
503196e999 | |
|
488301ac2c | |
|
200e197b95 | |
|
129c3c4d2c | |
|
0160c52b61 | |
|
f349dee6a4 | |
|
58332062d1 | |
|
61c2d132df | |
|
bd3625a63f | |
|
5f0cb4a3f4 | |
|
6e2209e3b0 | |
|
1d6442917e | |
|
4c85af2cc4 | |
|
22f0a5cf39 | |
|
af68051ba8 | |
|
f1c6b38c38 | |
|
e576ad1702 | |
|
68f2d53b5c | |
|
47e00a6a9b | |
|
011907d934 | |
|
263f2a1121 | |
|
052e49aa35 | |
|
73513b3512 | |
|
6aea36e65a | |
|
2478e6dd03 | |
|
700d2c6fd8 | |
|
1eeeaccdf0 | |
|
cd19075e38 | |
|
1d2ac14225 | |
|
985b8b073d | |
|
c2c987cdda | |
|
75ed028f58 | |
|
f06ad0ad8c | |
|
bd2a5d16df | |
|
63fff3f001 | |
|
468a3a6656 | |
|
8622a7039a | |
|
81c336c3bb | |
|
78cb98640f | |
|
5044e0d1fc | |
|
b4ae83569f | |
|
7398bf9609 | |
|
390ec7777e | |
|
3dfad53fe3 | |
|
9f56a74e54 | |
|
0c5932e0cf | |
|
9b58fe161e | |
|
0c5b0b101e | |
|
5966e03425 | |
|
1c03f6175a | |
|
2fb9dfda94 | |
|
10ce57f723 | |
|
accb025ac7 | |
|
e73d226dba | |
|
60f9e4e984 | |
|
cf93e0d9e6 | |
|
cdde8fe37f | |
|
d60a2cceee | |
|
e0b599aea9 | |
|
093ffa54b3 |
|
@ -16,30 +16,9 @@ pages:
|
|||
- merge_requests
|
||||
|
||||
release:
|
||||
image: dlang2/ldc-ubuntu
|
||||
image: registry.gitlab.com/basile.b/dexed/rlz-image.fedora.x86_64:1.3
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: normal
|
||||
before_script:
|
||||
- apt-get update -y
|
||||
# deps, packaging tools
|
||||
- apt-get install -y rpm
|
||||
- apt-get install -y git
|
||||
- apt-get install -y zip
|
||||
- apt-get install -y libcurl4-openssl-dev
|
||||
- apt-get install -y git-lfs && git lfs install
|
||||
# gitlab Ubuntu-based runners default to LD gold
|
||||
# but linking lazarus programs requires LD bfd.
|
||||
- update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.bfd" 20
|
||||
- update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.gold" 10
|
||||
- update-alternatives --config ld
|
||||
- ld --version
|
||||
# lazarus
|
||||
- git clone https://gitlab.com/basile.b/laz-bin-cache.git --depth=1
|
||||
- cd laz-bin-cache
|
||||
- apt install -y ./fpc-laz_3.2.2-210709_amd64.deb
|
||||
- apt install -y ./fpc-src_3.2.2-210709_amd64.deb
|
||||
- apt install -y ./lazarus-project_2.2.0-0_amd64.deb
|
||||
- cd ..
|
||||
script:
|
||||
- bash setup/build-release.sh
|
||||
artifacts:
|
||||
|
|
81
CHANGELOG.md
81
CHANGELOG.md
|
@ -1,3 +1,84 @@
|
|||
# v3.9.27-devel
|
||||
|
||||
## Enhancements
|
||||
|
||||
- Added the _Git Blame_ widget.
|
||||
- Search & Replace, add visual feedback in the editor.
|
||||
|
||||
## Bugs fixed
|
||||
|
||||
- Mini-explorer, clearing the filter had for effect to scan the root folder instead of the selected one. (#129)
|
||||
- Mini-explorer, on startup selected folder becomes the root, instead of the previous root. (#130)
|
||||
- With dark themes warning message on exit was barely legible.
|
||||
- Editor, completions, better behavior with `..` and when "auto-dot" is enabled (_autoDotDelay_ > 0).
|
||||
|
||||
# v3.9.26
|
||||
|
||||
## Enhancements
|
||||
|
||||
- Editor, added the _Undo All_ action.
|
||||
- GDB Commander, custom executables selected for debugging are now stored in a persistent MRU list.
|
||||
|
||||
## Bugx fixed
|
||||
|
||||
- Fixed windows release (#116). From now ldc2 >= 1.31.0 is a minimal requirement.
|
||||
- The context lines of the diff viewer were not legible whith dark themes.
|
||||
- Font size of reloaded document not always correct.
|
||||
|
||||
# v3.9.25
|
||||
|
||||
## Enhancements
|
||||
|
||||
- Added support for the new DUB package naming scheme.
|
||||
However older DUB versions (or package installed with) are still supported. (#118)
|
||||
- Add highlighter preset "Arc Dark".
|
||||
|
||||
## Bugs fixed
|
||||
|
||||
- Completion did not work properly for dependencies specified with a _path_ property.
|
||||
- Word completions (non-semantics ones) did not include identifiers containing digits. (#121)
|
||||
- Messages, "select all" could hang the IDE for a while (#120)
|
||||
- Custom tools editor, when focused and typing, a useless input box appeared.
|
||||
- Symbol List, spurious errors when the code used most recently added languages constructs.
|
||||
|
||||
# v3.9.24
|
||||
|
||||
## Enhancements
|
||||
|
||||
- Editor, added the _Redo All_ action.
|
||||
- Editor, added the _ecScrollCenteredDown_ and _ecScrollCenteredUp_ actions. Only available using shortcuts and
|
||||
binded by default to <kbd>UP/DOWN</kbd>+<kbd>CTRL</kbd>+<kbd>ALT</kbd>, they allow to maintain the caret at the center
|
||||
of the text view while scrolling.
|
||||
|
||||
## Bugs fixed
|
||||
|
||||
- dexed did not, or was slow, to start on Plasma. (7398bf960958)
|
||||
- make projects, DUB was wrongly mentioned when trying to compile while previous build not finished.
|
||||
- possible access violation related to project groups (390ec7777e63)
|
||||
|
||||
# v3.9.23
|
||||
|
||||
## Enhancements
|
||||
|
||||
- GDB Commander, center editor view after double click on the call stack.
|
||||
|
||||
## Fixes
|
||||
|
||||
- fix, dub projects, "sourcePath" not tried in the "subPackages".
|
||||
- fix, dub projects, completion not working well if project is organized as sub packages. (#65)
|
||||
|
||||
# v3.9.22
|
||||
|
||||
## Enhancements
|
||||
|
||||
- Make projects, added the _excludedSourceExtensions_ options. It allows to filter out files that are in the
|
||||
_sourceDirectories_ from the project inspector or from the list of files used to perform project wide searches.
|
||||
|
||||
## Regressions fixed
|
||||
|
||||
- Editor, line clicked when adding a breakpoint unexpectedly vertically centered.
|
||||
- Window menu, "Reset default layout", did not work anymore. (#50)
|
||||
|
||||
# v3.9.21
|
||||
|
||||
## Bugs fixed
|
||||
|
|
12
README.md
12
README.md
|
@ -24,16 +24,16 @@ Dexed, the _D Extended EDitor_, is an IDE for the [D programming language](https
|
|||
|
||||
## Project information
|
||||
|
||||
- :bookmark: latest release: version 3.9.21, Sun 19 June 2022.
|
||||
- :bookmark: latest release: version 3.9.26, Mon 18 Sep. 2023.
|
||||
- :scroll: licensed under the terms of the Boost software license.
|
||||
- :dollar: Development can be supported with [Paypal donations](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=AQDJVC39PJF7J).
|
||||
|
||||
## Download version 3.9.21
|
||||
## Download version 3.9.26
|
||||
|
||||
- :package: [setup program for Linux 64 bit](https://gitlab.com/basile.b/dexed/-/releases/v3.9.21/downloads/binaries/dexed.3.9.21.linux64.setup.zip)
|
||||
- :package: [binaries for Linux 64 bit](https://gitlab.com/basile.b/dexed/-/releases/v3.9.21/downloads/binaries/dexed.3.9.21.linux64.zip)
|
||||
- :package: [rpm for Linux 64 bit](https://gitlab.com/basile.b/dexed/-/releases/v3.9.21/downloads/binaries/dexed-3.9.21-0.x86_64.rpm)
|
||||
- :package: [deb for Linux 64 bit](https://gitlab.com/basile.b/dexed/-/releases/v3.9.21/downloads/binaries/dexed-3.9.21.amd64.deb)
|
||||
- :package: [setup program for Linux 64 bit](https://gitlab.com/basile.b/dexed/-/releases/v3.9.26/downloads/binaries/dexed.3.9.26.linux64.setup.zip)
|
||||
- :package: [binaries for Linux 64 bit](https://gitlab.com/basile.b/dexed/-/releases/v3.9.26/downloads/binaries/dexed.3.9.26.linux64.zip)
|
||||
- :package: [rpm for Linux 64 bit](https://gitlab.com/basile.b/dexed/-/releases/v3.9.26/downloads/binaries/dexed-3.9.26-0.x86_64.rpm)
|
||||
- :package: [deb for Linux 64 bit](https://gitlab.com/basile.b/dexed/-/releases/v3.9.26/downloads/binaries/dexed-3.9.26.amd64.deb)
|
||||
|
||||
The _zip_ archives allow to move freely the files.
|
||||
The _setup.zip_ archives contain a command line program that installs to predefined locations so that the software can be run without additional intervention.
|
||||
|
|
|
@ -19,14 +19,14 @@ branches:
|
|||
|
||||
install:
|
||||
- ps: |
|
||||
$LDC_URL = "https://github.com/ldc-developers/ldc/releases/download/v1.27.1/ldc2-1.27.1-windows-x64.7z"
|
||||
$LDC_URL = "https://github.com/ldc-developers/ldc/releases/download/v1.33.0/ldc2-1.33.0-windows-multilib.7z"
|
||||
$LDC_NME = "C:\ldc.7z";
|
||||
$LAZ_URL = "https://gitlab.com/basile.b/laz-bin-cache.git"
|
||||
$LAZ_NME = "laz-bin-cache\lazarus-2.2.0-fpc-3.2.2-win64.exe"
|
||||
|
||||
(new-object net.webclient).DownloadFile($LDC_URL, $LDC_NME)
|
||||
7z x $LDC_NME -o"C:\" -y -r
|
||||
Rename-Item "C:\ldc2-1.27.1-windows-x64" "C:\ldc"
|
||||
Rename-Item "C:\ldc2-1.33.0-windows-multilib" "C:\ldc"
|
||||
|
||||
git clone $LAZ_URL --depth=1
|
||||
Start-Process -FilePath $LAZ_NME -Wait -ArgumentList "/SILENT", "/SUPPRESSMSGBOXES", "/DIR=C:\lazarus"
|
|
@ -8,7 +8,12 @@
|
|||
"path" : "../etc/libdparse"
|
||||
}
|
||||
},
|
||||
"dflags" : [
|
||||
"dflags-linux" : [
|
||||
"-link-defaultlib-shared=false"
|
||||
]
|
||||
}
|
||||
],
|
||||
"dflags-windows" : [
|
||||
"-link-defaultlib-shared=false",
|
||||
"-fvisibility=public",
|
||||
"-dllimport=none",
|
||||
],
|
||||
}
|
||||
|
|
|
@ -432,7 +432,7 @@ static assert (!MustAddGcRange!(SymbolListBuilder!(ListFmt.Pas)));
|
|||
override void visit(const ContinueStatement) {}
|
||||
override void visit(const Deprecated) {}
|
||||
override void visit(const Expression) {}
|
||||
override void visit(const ExpressionNode) {}
|
||||
override void dynamicDispatch(const ExpressionNode) {}
|
||||
override void visit(const ExpressionStatement) {}
|
||||
override void visit(const FunctionAttribute) {}
|
||||
override void visit(const FunctionContract) {}
|
||||
|
|
|
@ -11,7 +11,7 @@ Dexed is mostly programmed in Object Pascal, using the the [Lazarus development
|
|||
* [Download](http://lazarus.freepascal.org/index.php?page=downloads) and setup the latest Lazarus version (>= 2.2.0) and FPC + FPC sources (= 3.2.2) for your platform.
|
||||
* Windows: the three packages are bundled in an installer.
|
||||
* Linux: the three packages must be downloaded and setup individually. It's recommended to download the packages from _SourceForge_ and not from the official repository of the distribution because they don't always propose the latest version.
|
||||
* [Download](https://github.com/ldc-developers/ldc/releases) and setup LDC2, the LLVM-based D compiler. It is used to compile the part of the IDE that's written in D, a library called _libdexed-d_. LDC2 binaries must be visible in the system PATH variable. Note that building _libdexed-d_ is automatic.
|
||||
* [Download](https://github.com/ldc-developers/ldc/releases) and setup LDC2 (>= v1.31.0), the LLVM-based D compiler. It is used to compile the part of the IDE that's written in D, a library called _libdexed-d_. LDC2 binaries must be visible in the system PATH variable. Note that building _libdexed-d_ is automatic.
|
||||
|
||||
## Build
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit b94a1573acc5c5c6b21794970af5907f2a21822d
|
||||
Subproject commit fe6d1e38fb4fc04323170389cfec67ed7fd4e24a
|
|
@ -125,3 +125,4 @@ __gshared
|
|||
__traits
|
||||
__vector
|
||||
__parameters
|
||||
__rvalue
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
#!/usr/bin/sh
|
||||
isitthere --if=sxkeywords.txt --ml=128 --is=6574 --fk=pascal --of=sxkw.pas --fn=KeywordMatch
|
|
@ -0,0 +1,61 @@
|
|||
alias
|
||||
apply
|
||||
asm
|
||||
assert
|
||||
auto
|
||||
break
|
||||
class
|
||||
const
|
||||
continue
|
||||
defer
|
||||
delete
|
||||
do
|
||||
echo
|
||||
else
|
||||
enum
|
||||
false
|
||||
finally
|
||||
foreach
|
||||
from
|
||||
function
|
||||
goto
|
||||
if
|
||||
import
|
||||
in
|
||||
label
|
||||
new
|
||||
null
|
||||
on
|
||||
overload
|
||||
protection
|
||||
return
|
||||
static
|
||||
struct
|
||||
super
|
||||
switch
|
||||
template
|
||||
this
|
||||
throw
|
||||
true
|
||||
try
|
||||
union
|
||||
unit
|
||||
var
|
||||
version
|
||||
with
|
||||
while
|
||||
|
||||
char
|
||||
bool
|
||||
f32
|
||||
f64
|
||||
s16
|
||||
s32
|
||||
s64
|
||||
s8
|
||||
ssize
|
||||
u16
|
||||
u32
|
||||
u64
|
||||
u8
|
||||
usize
|
|
@ -434,6 +434,7 @@
|
|||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
|
@ -487,6 +488,7 @@
|
|||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
|
@ -511,7 +513,7 @@
|
|||
<RunParams>
|
||||
<environment>
|
||||
<UserOverrides Count="1">
|
||||
<Variable0 Name="LD_LIBRARY_PATH" Value="./"/>
|
||||
<Variable0 Name="LD_LIBRARY_PATH" Value="$(ProjPath)/../bin"/>
|
||||
</UserOverrides>
|
||||
</environment>
|
||||
<FormatVersion Value="2"/>
|
||||
|
@ -519,7 +521,7 @@
|
|||
<Mode0 Name="default">
|
||||
<environment>
|
||||
<UserOverrides Count="1">
|
||||
<Variable0 Name="LD_LIBRARY_PATH" Value="./"/>
|
||||
<Variable0 Name="LD_LIBRARY_PATH" Value="$(ProjPath)/../bin"/>
|
||||
</UserOverrides>
|
||||
</environment>
|
||||
</Mode0>
|
||||
|
@ -551,7 +553,7 @@
|
|||
<PackageName Value="LCL"/>
|
||||
</Item8>
|
||||
</RequiredPackages>
|
||||
<Units Count="64">
|
||||
<Units Count="65">
|
||||
<Unit0>
|
||||
<Filename Value="dexed.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
|
@ -884,6 +886,13 @@
|
|||
<Filename Value="..\src\u_makeproject.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit63>
|
||||
<Unit64>
|
||||
<Filename Value="..\src\u_blame.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="BlameWidget"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
</Unit64>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
@ -907,6 +916,7 @@
|
|||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
<DebugInfoType Value="dsDwarf2"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
|
|
|
@ -14,7 +14,7 @@ uses
|
|||
u_lcldragdrop, u_stringrange, u_dlangmaps, u_projgroup, u_projutils,
|
||||
u_d2synpresets, u_dbgitf, u_ddemangle, u_dubproject, LCLVersion,
|
||||
u_halstead, u_diff, u_profileviewer, u_semver, u_term, u_simpleget,
|
||||
u_makeproject;
|
||||
u_makeproject, u_blame;
|
||||
|
||||
{$if lcl_fullversion < 2020000}
|
||||
{$ERROR Lazarus version >= 2.2 required}
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
Fixes https://github.com/Basile-z/Coedit/issues/218
|
||||
Must be applied to any Lazarus 1.8.0 Vanilla.
|
||||
Has not be applied to Lazarus 1.8.1 or newer.
|
||||
--- synedit.pp
|
||||
+++ synedit.pp
|
||||
@@ -8945,7 +8945,7 @@
|
||||
while not Highlighter.GetEol do begin
|
||||
Start := Highlighter.GetTokenPos + 1;
|
||||
Token := Highlighter.GetToken;
|
||||
+ if (PosX >= Start) and (PosX < Start + Length(Token)) then begin
|
||||
- if (PosX >= Start) and (PosX <= Start + Length(Token)) then begin
|
||||
Attri := Highlighter.GetTokenAttribute;
|
||||
TokenType := Highlighter.GetTokenKind;
|
||||
exit(True);
|
||||
@@ -8990,7 +8990,7 @@
|
||||
//TokenType := Highlighter.GetTokenKind;
|
||||
Attri := Highlighter.GetTokenAttribute;
|
||||
//DebugLn([' TCustomSynEdit.CaretAtIdentOrString: Start=', Start, ', Token=', Token]);
|
||||
+ if (PosX >= Start) and (PosX < Start + Length(Token)) then
|
||||
- if (PosX >= Start) and (PosX <= Start + Length(Token)) then
|
||||
begin
|
||||
AtIdent := Attri = Highlighter.IdentifierAttribute;
|
||||
NearString := (Attri = Highlighter.StringAttribute)
|
|
@ -0,0 +1,10 @@
|
|||
FROM fedora:37
|
||||
RUN dnf install -y "coreutils" "dpkg" "rpm" "rpm-build" "zip" "tar" "make" "findutils" "curl" "git" "libgcc" "bash" "which" &&\
|
||||
curl -JLO "https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20x86_64%20RPM/Lazarus%202.2.6/fpc-3.2.2-1.x86_64.rpm/download" &&\
|
||||
curl -JLO "https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20x86_64%20RPM/Lazarus%202.2.6/fpc-src-3.2.2-1.x86_64.rpm" &&\
|
||||
curl -JLO "https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20x86_64%20RPM/Lazarus%202.2.6/lazarus-2.2.6-0.x86_64.rpm/download" &&\
|
||||
dnf install -y "fpc-3.2.2-1.x86_64.rpm" "fpc-src-3.2.2-1.x86_64.rpm" "lazarus-2.2.6-0.x86_64.rpm" &&\
|
||||
curl -JLO "https://github.com/ldc-developers/ldc/releases/download/v1.32.2/ldc2-1.32.2-linux-x86_64.tar.xz" &&\
|
||||
tar -xf "ldc2-1.32.2-linux-x86_64.tar.xz" && mv "ldc2-1.32.2-linux-x86_64" "ldc2-" &&\
|
||||
ln -s "/ldc2-/bin/ldc2" "/usr/bin/ldc2" && ln -s "/ldc2-/bin/ldmd2" "/usr/bin/ldmd2" && ln -s "/ldc2-/bin/dub" "/usr/bin/dub" &&\
|
||||
dnf clean all && rm -rf "/var/cache/yum"
|
|
@ -51,7 +51,7 @@ git fetch --tags
|
|||
if [ ! -z "$dcd_ver" ]; then
|
||||
git checkout $dcd_ver
|
||||
fi
|
||||
make ldc
|
||||
make ldc -j5
|
||||
echo "...done"
|
||||
cd ..
|
||||
|
||||
|
@ -69,7 +69,7 @@ git fetch --tags
|
|||
if [ ! -z "$dscanner_ver" ]; then
|
||||
git checkout $dscanner_ver
|
||||
fi
|
||||
make ldc
|
||||
make ldc -j5
|
||||
echo "...done"
|
||||
cd ..
|
||||
|
||||
|
@ -126,10 +126,10 @@ if [ ! -z "$GITLAB_CI" ]; then
|
|||
LOG=$(./extract_last_changelog_part)
|
||||
LOG=$(echo "$LOG" | sed -z 's/\n/\\n/g' | sed -z 's/\"/\\"/g')
|
||||
|
||||
ASSET_RPM='{ "name" : "'$RPM_NAME'" , "url" : "'$LNK_BASE$RPM_NAME'" , "filepath" : "/binaries/'$RPM_NAME'" }'
|
||||
ASSET_DEB='{ "name" : "'$DEB_NAME'" , "url" : "'$LNK_BASE$DEB_NAME'" , "filepath" : "/binaries/'$DEB_NAME'" }'
|
||||
ASSET_ZP1='{ "name" : "'$ZP1_NAME'" , "url" : "'$LNK_BASE$ZP1_NAME'" , "filepath" : "/binaries/'$ZP1_NAME'" }'
|
||||
ASSET_ZP2='{ "name" : "'$ZP2_NAME'" , "url" : "'$LNK_BASE$ZP2_NAME'" , "filepath" : "/binaries/'$ZP2_NAME'" }'
|
||||
ASSET_RPM='{ "name" : "'$RPM_NAME'" , "url" : "'$LNK_BASE$RPM_NAME'" , "direct_asset_path" : "/binaries/'$RPM_NAME'" }'
|
||||
ASSET_DEB='{ "name" : "'$DEB_NAME'" , "url" : "'$LNK_BASE$DEB_NAME'" , "direct_asset_path" : "/binaries/'$DEB_NAME'" }'
|
||||
ASSET_ZP1='{ "name" : "'$ZP1_NAME'" , "url" : "'$LNK_BASE$ZP1_NAME'" , "direct_asset_path" : "/binaries/'$ZP1_NAME'" }'
|
||||
ASSET_ZP2='{ "name" : "'$ZP2_NAME'" , "url" : "'$LNK_BASE$ZP2_NAME'" , "direct_asset_path" : "/binaries/'$ZP2_NAME'" }'
|
||||
|
||||
# ASSET_RPM='{ "name" : "'$RPM_NAME'" , "url" : "'$LNK_BASE$RPM_NAME'" }'
|
||||
# ASSET_DEB='{ "name" : "'$DEB_NAME'" , "url" : "'$LNK_BASE$DEB_NAME'" }'
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
sudo docker build $(realpath ".") -t "registry.gitlab.com/basile.b/dexed/rlz-image.fedora.x86_64:1.3"
|
|
@ -1 +1 @@
|
|||
v3.9.21
|
||||
v3.9.26
|
||||
|
|
|
@ -0,0 +1,241 @@
|
|||
inherited BlameWidget: TBlameWidget
|
||||
Left = 1275
|
||||
Height = 282
|
||||
Top = 652
|
||||
Width = 563
|
||||
Caption = 'GIT Blame'
|
||||
ClientHeight = 282
|
||||
ClientWidth = 563
|
||||
inherited Content: TPanel
|
||||
Height = 246
|
||||
Top = 36
|
||||
Width = 563
|
||||
ClientHeight = 246
|
||||
ClientWidth = 563
|
||||
object btnBlame: TButton[0]
|
||||
Left = 8
|
||||
Height = 32
|
||||
Top = 206
|
||||
Width = 547
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 8
|
||||
Caption = 'Blame'
|
||||
TabOrder = 0
|
||||
OnClick = btnBlameClick
|
||||
end
|
||||
object grpGen: TGroupBox[1]
|
||||
Left = 4
|
||||
Height = 95
|
||||
Top = 4
|
||||
Width = 555
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'General'
|
||||
ClientHeight = 76
|
||||
ClientWidth = 553
|
||||
TabOrder = 1
|
||||
object Panel1: TPanel
|
||||
Left = 4
|
||||
Height = 32
|
||||
Top = 4
|
||||
Width = 545
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 4
|
||||
BevelColor = clNone
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 32
|
||||
ClientWidth = 545
|
||||
TabOrder = 0
|
||||
object Label1: TLabel
|
||||
Left = 4
|
||||
Height = 24
|
||||
Top = 4
|
||||
Width = 118
|
||||
Align = alLeft
|
||||
Alignment = taCenter
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'Displayed Revision '
|
||||
end
|
||||
object lblDispRev: TStaticText
|
||||
Left = 126
|
||||
Height = 24
|
||||
Top = 4
|
||||
Width = 365
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BorderStyle = sbsSingle
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnCpyCurrHash: TSpeedButton
|
||||
Left = 495
|
||||
Height = 32
|
||||
Hint = 'copy current commit hash'
|
||||
Top = 0
|
||||
Width = 25
|
||||
Align = alRight
|
||||
OnClick = btnCpyCurrHashClick
|
||||
end
|
||||
object btnLogCurr: TSpeedButton
|
||||
Left = 520
|
||||
Height = 32
|
||||
Hint = 'show current commit message'
|
||||
Top = 0
|
||||
Width = 25
|
||||
Align = alRight
|
||||
OnClick = btnLogCurrClick
|
||||
end
|
||||
end
|
||||
object Panel4: TPanel
|
||||
Left = 4
|
||||
Height = 32
|
||||
Top = 40
|
||||
Width = 545
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 4
|
||||
BevelColor = clNone
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 32
|
||||
ClientWidth = 545
|
||||
TabOrder = 1
|
||||
object Label4: TLabel
|
||||
Left = 4
|
||||
Height = 24
|
||||
Top = 4
|
||||
Width = 60
|
||||
Align = alLeft
|
||||
Alignment = taCenter
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'Filename '
|
||||
end
|
||||
object lblFname: TStaticText
|
||||
Left = 68
|
||||
Height = 24
|
||||
Top = 4
|
||||
Width = 473
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BorderStyle = sbsSingle
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
object grpLine: TGroupBox[2]
|
||||
Left = 4
|
||||
Height = 95
|
||||
Top = 103
|
||||
Width = 555
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'Current line'
|
||||
ClientHeight = 76
|
||||
ClientWidth = 553
|
||||
TabOrder = 2
|
||||
object Panel2: TPanel
|
||||
Left = 4
|
||||
Height = 32
|
||||
Top = 4
|
||||
Width = 545
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 4
|
||||
BevelColor = clNone
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 32
|
||||
ClientWidth = 545
|
||||
TabOrder = 0
|
||||
object Label2: TLabel
|
||||
Left = 4
|
||||
Height = 24
|
||||
Top = 4
|
||||
Width = 111
|
||||
Align = alLeft
|
||||
Alignment = taCenter
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'Previous Revision '
|
||||
end
|
||||
object lblPrevRev: TStaticText
|
||||
Left = 119
|
||||
Height = 24
|
||||
Top = 4
|
||||
Width = 372
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BorderStyle = sbsSingle
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnCpyPrevHash: TSpeedButton
|
||||
Left = 495
|
||||
Height = 32
|
||||
Hint = 'copy prior commit hash'
|
||||
Top = 0
|
||||
Width = 25
|
||||
Align = alRight
|
||||
OnClick = btnCpyPrevHashClick
|
||||
end
|
||||
object btnLogPrev: TSpeedButton
|
||||
Left = 520
|
||||
Height = 32
|
||||
Hint = 'show prior commit message'
|
||||
Top = 0
|
||||
Width = 25
|
||||
Align = alRight
|
||||
OnClick = btnLogPrevClick
|
||||
end
|
||||
end
|
||||
object Panel3: TPanel
|
||||
Left = 4
|
||||
Height = 32
|
||||
Top = 40
|
||||
Width = 545
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 4
|
||||
BevelColor = clNone
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 32
|
||||
ClientWidth = 545
|
||||
TabOrder = 1
|
||||
object Label3: TLabel
|
||||
Left = 4
|
||||
Height = 24
|
||||
Top = 4
|
||||
Width = 106
|
||||
Align = alLeft
|
||||
Alignment = taCenter
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'Author and Date '
|
||||
end
|
||||
object lblAuthDate: TStaticText
|
||||
Left = 114
|
||||
Height = 24
|
||||
Top = 4
|
||||
Width = 427
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BorderStyle = sbsSingle
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 555
|
||||
end
|
||||
object Timer1: TTimer[3]
|
||||
Enabled = False
|
||||
OnTimer = Timer1Timer
|
||||
Left = 32
|
||||
end
|
||||
end
|
|
@ -0,0 +1,504 @@
|
|||
unit u_blame;
|
||||
|
||||
{$I u_defines.inc}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
|
||||
Buttons, ghashmap, process, Clipbrd,
|
||||
u_common, u_interfaces, u_observer, u_widget,
|
||||
u_synmemo, u_stringrange, u_sharedres;
|
||||
|
||||
type
|
||||
|
||||
TLineData = record
|
||||
// the previous git hash
|
||||
hash: string;
|
||||
// if file has ever moved
|
||||
filename: string;
|
||||
// data, author or prev
|
||||
info: string;
|
||||
end;
|
||||
|
||||
TBlameDataKind = (
|
||||
bdkNone, // no yet computed
|
||||
bdkFirst, // initial blame on HEAD
|
||||
bdkBlame // display in a dedicated editor
|
||||
);
|
||||
|
||||
TEditorData = class
|
||||
private
|
||||
// if this is a standard editor or one opened to start blaming
|
||||
kind: TBlameDataKind;
|
||||
// the filename in git
|
||||
filename: string;
|
||||
// current revision
|
||||
currHash: string;
|
||||
// previous revision and fname for each line
|
||||
lineData: array of TLineData;
|
||||
end;
|
||||
|
||||
TEditorToData = specialize THashmap<TDexedMemo, TEditorData, TObjectHash>;
|
||||
|
||||
{ TBlameWidget }
|
||||
|
||||
TBlameWidget = class(TDexedWidget, IDocumentObserver, IProjectObserver)
|
||||
btnBlame: TButton;
|
||||
btnCpyPrevHash: TSpeedButton;
|
||||
btnLogCurr: TSpeedButton;
|
||||
btnLogPrev: TSpeedButton;
|
||||
grpGen: TGroupBox;
|
||||
Panel4: TPanel;
|
||||
grpLine: TGroupBox;
|
||||
Label1: TLabel;
|
||||
Label2: TLabel;
|
||||
Label3: TLabel;
|
||||
Panel1: TPanel;
|
||||
Label4: TLabel;
|
||||
lblFname: TStaticText;
|
||||
Panel2: TPanel;
|
||||
Panel3: TPanel;
|
||||
lblDispRev: TStaticText;
|
||||
lblPrevRev: TStaticText;
|
||||
lblAuthDate: TStaticText;
|
||||
btnCpyCurrHash: TSpeedButton;
|
||||
Timer1: TTimer;
|
||||
procedure btnBlameClick(Sender: TObject);
|
||||
procedure btnCpyCurrHashClick(Sender: TObject);
|
||||
procedure btnCpyPrevHashClick(Sender: TObject);
|
||||
procedure btnLogCurrClick(Sender: TObject);
|
||||
procedure btnLogPrevClick(Sender: TObject);
|
||||
procedure Timer1Timer(Sender: TObject);
|
||||
private
|
||||
fEditors: TEditorToData;
|
||||
fDocData: TEditorData;
|
||||
fDoc: TDExedMemo;
|
||||
fProj: ICommonProject;
|
||||
function getGitCwd(): string;
|
||||
procedure showLog(const hash: string);
|
||||
function checkTool(var exename: string): boolean;
|
||||
protected
|
||||
procedure setVisible(Value: Boolean); override;
|
||||
procedure setToolBarFlat(value: boolean); override;
|
||||
public
|
||||
constructor create(aOwner: TComponent); override;
|
||||
destructor destroy(); override;
|
||||
|
||||
procedure docNew(document: TDexedMemo);
|
||||
procedure docFocused(document: TDexedMemo);
|
||||
procedure docChanged(document: TDexedMemo);
|
||||
procedure docClosing(document: TDexedMemo);
|
||||
|
||||
procedure projNew(project: ICommonProject);
|
||||
procedure projChanged(project: ICommonProject);
|
||||
procedure projClosing(project: ICommonProject);
|
||||
procedure projFocused(project: ICommonProject);
|
||||
procedure projCompiling(project: ICommonProject);
|
||||
procedure projCompiled(project: ICommonProject; success: boolean);
|
||||
|
||||
procedure updateView();
|
||||
|
||||
procedure blameToData(gitLines: TStrings; blameLines: TStrings);
|
||||
procedure blameBegin();
|
||||
procedure blameContinue();
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
{$R *.lfm}
|
||||
|
||||
constructor TBlameWidget.create(aOwner: TComponent);
|
||||
begin
|
||||
inherited;
|
||||
fEditors := TEditorToData.create();
|
||||
toolbarVisible:= false;
|
||||
case GetIconScaledSize of
|
||||
iss16:
|
||||
begin
|
||||
AssignPng(btnCpyCurrHash, 'COPY');
|
||||
AssignPng(btnCpyPrevHash, 'COPY');
|
||||
AssignPng(btnLogCurr, 'GIT');
|
||||
AssignPng(btnLogPrev, 'GIT');
|
||||
end;
|
||||
iss24:
|
||||
begin
|
||||
AssignPng(btnCpyCurrHash, 'COPY24');
|
||||
AssignPng(btnCpyPrevHash, 'COPY24');
|
||||
AssignPng(btnLogCurr, 'GIT24');
|
||||
AssignPng(btnLogPrev, 'GIT24');
|
||||
end;
|
||||
iss32:
|
||||
begin
|
||||
AssignPng(btnCpyCurrHash, 'COPY32');
|
||||
AssignPng(btnCpyPrevHash, 'COPY32');
|
||||
AssignPng(btnLogCurr, 'GIT32');
|
||||
AssignPng(btnLogPrev, 'GIT32');
|
||||
end;
|
||||
end;
|
||||
EntitiesConnector.addObserver(self);
|
||||
end;
|
||||
|
||||
destructor TBlameWidget.destroy();
|
||||
begin
|
||||
fEditors.free();
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.setVisible(Value: Boolean);
|
||||
begin
|
||||
inherited SetVisible(value);
|
||||
if Timer1.isAssigned then
|
||||
Timer1.Enabled := value;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.setToolBarFlat(value: boolean);
|
||||
begin
|
||||
inherited;
|
||||
btnLogCurr.Flat := value;
|
||||
btnCpyCurrHash.Flat := value;
|
||||
btnLogPrev.Flat := value;
|
||||
btnCpyPrevHash.Flat := value;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.docNew(document: TDexedMemo);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.docFocused(document: TDexedMemo);
|
||||
begin
|
||||
fDoc := document;
|
||||
if fEditors.contains(document) then
|
||||
begin
|
||||
fDocData := fEditors[document];
|
||||
end else
|
||||
begin
|
||||
fDocData := TEditorData.Create;
|
||||
fEditors.insert(fDoc, fDocData);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.docChanged(document: TDexedMemo);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.docClosing(document: TDexedMemo);
|
||||
var
|
||||
closingData: TEditorData = nil;
|
||||
begin
|
||||
if fEditors.contains(document) then
|
||||
begin
|
||||
closingData := fEditors[document];
|
||||
closingData.Free();
|
||||
fEditors.delete(document);
|
||||
end;
|
||||
if fDoc = document then
|
||||
fDoc := nil;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.projNew(project: ICommonProject);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.projChanged(project: ICommonProject);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.projClosing(project: ICommonProject);
|
||||
begin
|
||||
if project = fProj then
|
||||
fProj := nil;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.projFocused(project: ICommonProject);
|
||||
begin
|
||||
fProj := project;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.projCompiling(project: ICommonProject);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.projCompiled(project: ICommonProject; success: boolean);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.blameToData(gitLines: TStrings; blameLines: TStrings);
|
||||
var
|
||||
i : integer;
|
||||
line: string;
|
||||
rng : TStringRange = (ptr:nil; pos:0; len:0);
|
||||
tmp : string;
|
||||
begin
|
||||
setLength(fDocData.lineData, gitLines.Count);
|
||||
for i := 0 to gitLines.count-1 do
|
||||
begin
|
||||
line:= gitLines[i];
|
||||
rng := TStringRange.create(line);
|
||||
// hash
|
||||
tmp := rng.takeUntil(' ').yield().ToLower();
|
||||
fDocData.lineData[i].hash := tmp;
|
||||
rng.popFront();
|
||||
// optional filename
|
||||
if rng.front() <> '(' then
|
||||
begin
|
||||
tmp := rng.takeUntil('(').yield();
|
||||
tmp := TrimRight(tmp);
|
||||
fDocData.lineData[i].filename := tmp;
|
||||
rng.popFront();
|
||||
end;
|
||||
// date, author
|
||||
tmp := rng.takeUntil(')').yield();
|
||||
fDocData.lineData[i].info := tmp;
|
||||
rng.popFront;
|
||||
rng.popFront;
|
||||
// code
|
||||
if blameLines.isAssigned() then
|
||||
begin
|
||||
tmp := rng.takeUntil([#13,#10]).yield();
|
||||
blameLines.Add(tmp);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TBlameWidget.getGitCwd():string;
|
||||
var
|
||||
old: string = '';
|
||||
begin
|
||||
result := '';
|
||||
if assigned(fProj) then
|
||||
begin
|
||||
result := fProj.filename.extractFileDir;
|
||||
end
|
||||
else
|
||||
if fDoc.isAssigned then
|
||||
begin
|
||||
result := fDoc.fileName;
|
||||
while true do
|
||||
begin
|
||||
result := result.extractFileDir;
|
||||
if result = old then
|
||||
exit;
|
||||
if (result + DirectorySeparator + '.git').dirExists then
|
||||
exit;
|
||||
old := result;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TBlameWidget.checkTool(var exename: string): boolean;
|
||||
begin
|
||||
exename := exeFullName('git' + exeExt);
|
||||
result := exename.fileExists();
|
||||
if not result then
|
||||
getMessageDisplay().message('cannot locate the `git` executable', nil, amcApp, amkErr);
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.blameBegin();
|
||||
var
|
||||
p: TProcess = nil;
|
||||
s: TStringList = nil;
|
||||
d: IMessagesDisplay = nil;
|
||||
i: integer;
|
||||
g: string = '';
|
||||
begin
|
||||
if fDoc.isNotAssigned or not checkTool(g) then
|
||||
exit;
|
||||
p := TProcess.create(nil);
|
||||
s := TStringList.Create();
|
||||
try
|
||||
p.Executable:= g;
|
||||
p.Options := [poUsePipes, poNoConsole];
|
||||
p.ShowWindow:= swoHIDE;
|
||||
p.CurrentDirectory:= getGitCwd();
|
||||
p.Parameters.AddStrings([ 'blame', fDoc.fileName]);
|
||||
p.execute();
|
||||
processOutputToStrings(p,s);
|
||||
while p.Running do ;
|
||||
if p.ExitCode = 0 then
|
||||
begin
|
||||
fDocData.filename := fDoc.fileName;
|
||||
blameToData(s,nil);
|
||||
fDocData.kind := bdkFirst;
|
||||
end else
|
||||
begin
|
||||
d := getMessageDisplay();
|
||||
s.LoadFromStream(p.Stderr);
|
||||
for i := 0 to s.Count-1 do
|
||||
d.message(s[i], fProj, amcMisc, amkAuto);
|
||||
end;
|
||||
finally
|
||||
p.free();
|
||||
s.free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.blameContinue();
|
||||
var
|
||||
newDoc: TDexedMemo = nil;
|
||||
oldDoc: TDexedMemo = nil;
|
||||
p: TProcess = nil;
|
||||
s: TStringList = nil;
|
||||
d: TLineData;
|
||||
m: IMessagesDisplay = nil;
|
||||
n: string = '';
|
||||
h: string;
|
||||
i: integer;
|
||||
g: string = '';
|
||||
begin
|
||||
if fDoc.isNotAssigned or not checkTool(g) then
|
||||
exit;
|
||||
oldDoc := fDoc;
|
||||
d := fDocData.lineData[fDoc.CaretY-1];
|
||||
h := d.hash;
|
||||
if d.filename.isNotEmpty then
|
||||
n := d.filename
|
||||
else if fDocData.kind = bdkFirst then
|
||||
n := fDoc.fileName
|
||||
else
|
||||
n := fDocData.filename;
|
||||
|
||||
p := TProcess.create(nil);
|
||||
s := TStringList.Create();
|
||||
try
|
||||
p.Executable := exeFullName('git' + exeExt);
|
||||
p.Options := [poUsePipes, poNoConsole];
|
||||
p.ShowWindow := swoHIDE;
|
||||
p.CurrentDirectory:= getGitCwd();
|
||||
p.Parameters.AddStrings([ 'blame', n, h]);
|
||||
p.execute();
|
||||
processOutputToStrings(p,s);
|
||||
while p.Running do ;
|
||||
if p.ExitCode = 0 then
|
||||
begin
|
||||
newDoc := TDexedMemo.Create(nil);
|
||||
blameToData(s,newDoc.Lines);
|
||||
fDocData.kind := bdkBlame;
|
||||
fDocData.currHash := h;
|
||||
fDocData.filename := n;
|
||||
newDoc.ReadOnly := true;
|
||||
newDoc.setHighligtherFrom(oldDoc);
|
||||
getMultiDocHandler().forceCaption(newDoc, '<blame-only view>');
|
||||
end else
|
||||
begin
|
||||
m := getMessageDisplay();
|
||||
s.LoadFromStream(p.Stderr);
|
||||
for i := 0 to s.Count-1 do
|
||||
m.message(s[i], fProj, amcMisc, amkAuto);
|
||||
end;
|
||||
finally
|
||||
p.free();
|
||||
s.free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.updateView();
|
||||
var
|
||||
d: TLineData;
|
||||
begin
|
||||
if fDocData.isNotAssigned or (not visible) or fDoc.isNotAssigned then
|
||||
exit;
|
||||
if fDocData.kind = bdkNone then
|
||||
begin
|
||||
lblFname.Caption := fDoc.fileName;
|
||||
lblDispRev.Caption := 'HEAD';
|
||||
lblPrevRev.Caption := 'N/A';
|
||||
lblAuthDate.Caption:= 'N/A';
|
||||
btnBlame.Caption := 'Collect initial data';
|
||||
end else
|
||||
begin
|
||||
if fDocData.kind = bdkFirst then
|
||||
begin
|
||||
lblFname.Caption := fDoc.fileName;
|
||||
lblDispRev.Caption:= 'HEAD';
|
||||
end else
|
||||
begin
|
||||
lblFname.Caption := fDocData.fileName;
|
||||
lblDispRev.Caption:= fDocData.currHash;
|
||||
end;
|
||||
d := fDocData.lineData[fDoc.CaretY-1];
|
||||
lblAuthDate.Caption := d.info;
|
||||
if d.hash <> fDocData.currHash then
|
||||
begin
|
||||
btnBlame.Enabled := true;
|
||||
btnBlame.Caption := format('Open blame view for %s', [d.hash]);
|
||||
lblPrevRev.Caption := d.hash;
|
||||
end else
|
||||
begin
|
||||
btnBlame.Enabled := false;
|
||||
btnBlame.Caption := 'Open blame';
|
||||
lblPrevRev.Caption := 'N/A (initial commit)';
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.btnBlameClick(Sender: TObject);
|
||||
begin
|
||||
if fDocData.isNotAssigned then
|
||||
exit;
|
||||
if fDocData.kind = bdkNone then
|
||||
blameBegin()
|
||||
else
|
||||
blameContinue();
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.btnCpyCurrHashClick(Sender: TObject);
|
||||
begin
|
||||
if fDocData.isAssigned then
|
||||
Clipboard.AsText := fDocData.currHash;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.btnCpyPrevHashClick(Sender: TObject);
|
||||
begin
|
||||
if fDocData.isAssigned and (length(fDocData.lineData) <> 0) and fDoc.isAssigned then
|
||||
Clipboard.AsText := fDocData.lineData[fDoc.CaretY-1].hash;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.btnLogCurrClick(Sender: TObject);
|
||||
begin
|
||||
if fDocData.isAssigned then
|
||||
showLog(fDocData.currHash);
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.btnLogPrevClick(Sender: TObject);
|
||||
begin
|
||||
if fDocData.isAssigned and (length(fDocData.lineData) <> 0) and fDoc.isAssigned then
|
||||
showLog(fDocData.lineData[fDoc.CaretY-1].hash);
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.showLog(const hash: string);
|
||||
var
|
||||
p: TProcess;
|
||||
g: TStringList;
|
||||
n: string = '';
|
||||
begin
|
||||
if not checkTool(n) or hash.isEmpty() or (hash = 'HEAD') then
|
||||
exit;
|
||||
p := TProcess.Create(nil);
|
||||
g := TStringList.Create;
|
||||
try
|
||||
p.Executable := n;
|
||||
p.Options := [poUsePipes, poNoConsole];
|
||||
p.ShowWindow := swoHIDE;
|
||||
p.CurrentDirectory:= getGitCwd();
|
||||
p.Parameters.AddStrings([ 'log', hash, '-n1', '--pretty=full']);
|
||||
p.execute();
|
||||
processOutputToStrings(p,g);
|
||||
while p.Running do ;
|
||||
if p.ExitCode = 0 then
|
||||
begin
|
||||
showMessage(g.Text);
|
||||
end;
|
||||
finally
|
||||
p.free;
|
||||
g.free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBlameWidget.Timer1Timer(Sender: TObject);
|
||||
begin
|
||||
updateView;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
492
src/u_cdbcmd.lfm
492
src/u_cdbcmd.lfm
|
@ -6,262 +6,256 @@ inherited CECdbWidget: TCECdbWidget
|
|||
Caption = 'CDB commander'
|
||||
ClientHeight = 589
|
||||
ClientWidth = 496
|
||||
inherited Back: TPanel
|
||||
inherited Content: TPanel
|
||||
Height = 589
|
||||
Width = 496
|
||||
ClientHeight = 589
|
||||
ClientWidth = 496
|
||||
inherited Content: TPanel
|
||||
Height = 589
|
||||
Width = 496
|
||||
ClientHeight = 589
|
||||
ClientWidth = 496
|
||||
object txtCdbCmd: TEdit[0]
|
||||
Left = 4
|
||||
Height = 23
|
||||
Hint = 'CDB command field'
|
||||
Top = 562
|
||||
Width = 488
|
||||
Align = alBottom
|
||||
BorderSpacing.Around = 4
|
||||
OnKeyPress = txtCdbCmdKeyPress
|
||||
TabOrder = 0
|
||||
end
|
||||
object Panel1: TPanel[1]
|
||||
Left = 4
|
||||
object txtCdbCmd: TEdit[0]
|
||||
Left = 4
|
||||
Height = 23
|
||||
Hint = 'CDB command field'
|
||||
Top = 562
|
||||
Width = 488
|
||||
Align = alBottom
|
||||
BorderSpacing.Around = 4
|
||||
OnKeyPress = txtCdbCmdKeyPress
|
||||
TabOrder = 0
|
||||
end
|
||||
object Panel1: TPanel[1]
|
||||
Left = 4
|
||||
Height = 24
|
||||
Top = 4
|
||||
Width = 488
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 24
|
||||
ClientWidth = 488
|
||||
TabOrder = 1
|
||||
object btnGo: TSpeedButton
|
||||
Left = 56
|
||||
Height = 24
|
||||
Top = 4
|
||||
Width = 488
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 24
|
||||
ClientWidth = 488
|
||||
TabOrder = 1
|
||||
object btnGo: TSpeedButton
|
||||
Left = 56
|
||||
Height = 24
|
||||
Hint = 'resume execution'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF000000000000000000000000000000000000000024000000330000
|
||||
002F000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF0000000000000000000000000000000000007D41C100C684FF0086
|
||||
46ED000000290000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF0000000024000000330000003300000033008847FF00E4A6FF00BE
|
||||
80FF008345D90000002100000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00007D41C1008A48FF008847FF008746FF008847FF00D9A1FF00D8
|
||||
A0FF00BC80FF007C41B900000022FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00008947FF43E8C2FF00D7A0FF00D7A0FF00D59FFF00D09CFF00D0
|
||||
9CFF00D39FFF00B981FF007E43BDFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00008845FF6FE8D0FF00C899FF00C899FF00C899FF00C797FF00C8
|
||||
98FF00CA9AFF63E6CDFF008A47FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00008946FF99F0E4FF4FE9D5FF51E8D4FF4DE6D1FF94E8D8FF00C3
|
||||
97FF60E0C7FF00B281FF008B49ACFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00008847B2008946FF008744FF008642FF008847FF82E4D6FF5ADA
|
||||
C4FF00AD7FFF008947A700000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF0000000000000000000000000000000000008847FF7AE4D8FF00AA
|
||||
7FFF008946CF0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF0000000000000000000000000000000000008847B200AA85FF008A
|
||||
46E9000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
|
||||
}
|
||||
OnClick = btnGoClick
|
||||
ShowCaption = False
|
||||
end
|
||||
object btnStop: TSpeedButton
|
||||
Left = 28
|
||||
Height = 24
|
||||
Hint = 'stop debugging'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF003941D64C444BD9D2474FDAF0434BD9E94048D7E93E47
|
||||
D8F0353ED5D2252ED254232BD206FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF004148D74C636CE4E48997FAFF8495FFFF7F90FCFF7D8EFAFF7D8D
|
||||
F7FF7D8BF2FF5159DDFF222AD173FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF004E56DA4D6C75E4DF96A5FAFF5A74FFFF3250FFFF304FFFFF2C49FEFF2542
|
||||
FAFF4860F9FF8694F4FF5159DDDC252ED14DFFFFFF00FFFFFF00FFFFFF005E65
|
||||
DE4B7981E7E59FADFBFF6781FFFF405EFFFF405EFFFF3C59FFFF3755FFFF3350
|
||||
FFFF2846FDFF4A65FDFF8996F6FF545EDEE52C34D44BFFFFFF00FFFFFF007178
|
||||
E3D5A2B2FCFF738FFFFF4F70FFFF4F6EFFFF4B69FFFF4664FFFF415EFFFF3C5A
|
||||
FFFF3755FFFF2C4BFFFF4E67FFFF8493FAFF4048D8D5FFFFFF00FFFFFF007D84
|
||||
E5F2A6BBFFFF5F7FFFFF5F7EFFFF5A79FFFF5573FFFF506EFFFF4B69FFFF4664
|
||||
FFFF415EFFFF3B59FFFF314FFFFF8799FFFF4D55DBF2FFFFFF00FFFFFF00858A
|
||||
E6E9ABBEFFFF6D8DFFFF6989FFFF6583FFFF5F7EFFFF5A79FFFF5574FFFF506F
|
||||
FFFF4B69FFFF4663FFFF3F5CFFFF8A9BFFFF535BDCE9FFFFFF00FFFFFF008B91
|
||||
E7EAB1C4FFFF7698FFFF7393FFFF6E8EFFFF6989FFFF6583FFFF5F7EFFFF5A79
|
||||
FFFF5573FFFF4F6EFFFF4867FFFF90A1FFFF5A62DEEAFFFFFF00FFFFFF009298
|
||||
E9F2B8CDFFFF7DA0FFFF7C9DFFFF7899FFFF7393FFFF6E8EFFFF6989FFFF6583
|
||||
FFFF607EFFFF5978FFFF4F70FFFF98AAFFFF636AE0F2FFFFFF00FFFFFF00959A
|
||||
EAD4BCCDFCFF9CBBFFFF81A5FFFF81A2FFFF7C9EFFFF7899FFFF7493FFFF6F8E
|
||||
FFFF6989FFFF6080FFFF7893FFFF9EADFBFF656CE0D4FFFFFF00FFFFFF009297
|
||||
E84AA5ACEFE4C1D1FCFFA0BFFFFF86AAFFFF85A7FFFF81A2FFFF7C9DFFFF7898
|
||||
FFFF6F90FFFF85A1FFFFACBAFBFF838BE8E46369DF4AFFFFFF00FFFFFF00FFFF
|
||||
FF009396E849A6ADEEDFC4D4FCFFA3C2FFFF8BAFFFFF89ABFFFF84A7FFFF7EA0
|
||||
FFFF91AEFFFFB4C3FBFF8C93EADB6D71E04AFFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF009498E84AA9B1F0E4C2D3FCFFC1D6FFFFBDD1FFFFBBCFFFFFB9CE
|
||||
FFFFB7C8FCFF989FEDFF797EE272FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00999DEA4B9EA3EBD2A0A5ECF09DA2EBE99BA0EBE9989E
|
||||
EAF09297E9D2868BE6538388E506FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
|
||||
}
|
||||
OnClick = btnStopClick
|
||||
ShowCaption = False
|
||||
end
|
||||
object btnStart: TSpeedButton
|
||||
Left = 0
|
||||
Height = 24
|
||||
Hint = 'start debuggin'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
|
||||
FF00000000000000003300000030000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF0000000000329EDEFF319CDBF10000002D0000000000000000000000000000
|
||||
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF0000000000329AD8C4329DDEFF2F98D7E90000003300000006000000000000
|
||||
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF0000000000339EDE5A329BDDFF67C6EEFF369FDEFF133D574A000000050000
|
||||
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF000000000000000000319ADBFF83D7F3FF89E4FAFF349CDCFF133951490000
|
||||
001200000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF0000000000000000003196D7BA57BEEAFFA9F5FFFF7BDEF8FF369CDCFF2772
|
||||
A17B00000011000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00000000330000003321648F6B42A9E2FFBDF5FEFF81E7FBFF76DBF6FF379B
|
||||
DCFF276F9E790000001A0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00389BDCFF48ACE4FF45A9E2FF3FA5E1FFBDF3FDFF7FE4F8FF7AE3FAFF70D9
|
||||
F5FF42A5E0FF2E81B7990000002200000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF003799DBFF9EF1FDFF80E5F9FF73E0F9FF6FDEF7FF6DDCF7FF6EDDF7FF71E0
|
||||
F9FF70DFF8FF40A6E0FF358DC8B900000023FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF003794D6D285DCF5FF89E5F8FF68DAF6FF68DAF6FFB9F0FCFFB8F2FDFFB4F2
|
||||
FCFFA9F1FDFFABF1FCFF44A9E2FF3890CBBFFFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF003993D2856DC5ECFF9CE8FAFF5FD6F4FF61D7F4FF46B4E6FF3191D8FF3595
|
||||
DAFF3797DAFF3A99DBFF3E9CDCFF409EDDFFFFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF003E9BDC324CAEE4FFB0EEFBFF66D8F4FF57D3F3FFACEDFBFF63B4E5FF2D77
|
||||
AB8900000001000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00000000003B9ADAFFACEEFBFF82DDF5FF4CCEF1FF82DFF6FFABE6F8FF3996
|
||||
D9FF0711182D000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00000000003C94D5D28BDAF3FFACEAF9FF3FCBF0FF45CDF0FFBBF0FBFF6DBA
|
||||
E7FF3B93D0D90000000E0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00000000003E93D1876CC5EBFFD7FAFFFFCDF6FDFFC3F3FDFFD2F8FFFFC6F1
|
||||
FBFF409ADAFF2D67916D0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF0000000000479CDC3A439ADAFF3F97D9FF3E96D9FF3E96D9FF3E97D9FF4099
|
||||
DAFF459CDBFF489EDCFF0000000000000000FFFFFF00FFFFFF00
|
||||
}
|
||||
OnClick = btnStartClick
|
||||
ShowCaption = False
|
||||
end
|
||||
object btnStep: TSpeedButton
|
||||
Left = 84
|
||||
Height = 24
|
||||
Hint = 'next instruction'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Glyph.Data = {
|
||||
42020000424D4202000000000000420000002800000010000000100000000100
|
||||
100003000000000200006400000064000000000000000000000000F80000E007
|
||||
00001F000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE73EF7B0000000000004D6B9294FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B18C6CF7B000000006D6B14A5FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B9AD6FBDECF7B00008E7334A5FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B18C6F7BD5DEFEF7BAE7355ADFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B96B575AD7DEFEF7BCF7B55ADFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B14A51CE7CF7B0000EF7B75ADFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B1CE7CF7B00000000108496B5FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1084EF7B0000000000003084B6B5FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFF
|
||||
}
|
||||
OnClick = btnStepClick
|
||||
ShowCaption = False
|
||||
end
|
||||
object btnDisasm: TSpeedButton
|
||||
Left = 112
|
||||
Height = 24
|
||||
Hint = 'disasm'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Glyph.Data = {
|
||||
42020000424D4202000000000000420000002800000010000000100000000100
|
||||
100003000000000200006400000064000000000000000000000000F80000E007
|
||||
00001F0000000000000000000000000000000000000000000000000000000000
|
||||
00000000FFFFCF7BD39CD39CD39CD39CD39CD39CD39CD39CD39CD39CD39CD39C
|
||||
D39C3084FFFFD39CDFFFBEF7BEF7BEF7BEF7BEF7BEF7BEF7BEF7BEF7BEF7BEF7
|
||||
DFFFD39CFFFFD39C9EF75DEF5DEF5DEF7DEF9EF79EF79EF77DEF5DEF5DEF5DEF
|
||||
9EF7D39CFFFFD39C7DEF3CE73CE75DEFEB5A0C632C630C63EB5A5DEF3CE73CE7
|
||||
7DEFD39CFFFFD39C7DEFFBDEFBDE1CE7DFFFFFFFFFFFFFFFDFFF3CE71CE7FBDE
|
||||
7DEFD39CFFFFD39C5DEFDBDEDBDE1CE78A52AA52AA52AA52AA528A521CE7FBDE
|
||||
5DEFD39CFFFFD39C5DEFBAD6BAD6DBDEDFFFFFFFFFFFFFFFFFFFBEF7FBDEDBDE
|
||||
7DEFD39CFFFFD39C5DEF9AD6BAD6DBDE2842494A494A494A494A28420842BAD6
|
||||
5DEFD39CFFFFD39C5DEF79CEBAD6DBDEDFFFFFFFFFFFDFFFBEF79EF75DEF79CE
|
||||
5DEFD39CFFFFD39C7DEF79CEA631C739C739C739C739A63179CE59CE59CE38C6
|
||||
5DEFD39CFFFFD39C7DEF38C69EF79EF79EF79EF79EF75DEF38C638C638C618C6
|
||||
7DEFD39CFFFFD39C7DEFF7BDF7BDF7BDF7BDF7BDF7BDF7BDF7BDF7BDF7BDF7BD
|
||||
7DEFD39CFFFFD39C9EF7B6B5D7BDD7BDD7BDD7BDD7BDD7BDD7BDD7BDD7BDB6B5
|
||||
9EF7D39CFFFFD39CDFFFFBDEFBDE1CE71CE71CE71CE71CE71CE71CE7FBDEFBDE
|
||||
DFFFD39CFFFFF39CD39CD39CD39CD39CD39CD39CD39CD39CD39CD39CD39CD39C
|
||||
D39CF39CFFFF
|
||||
}
|
||||
OnClick = btnDisasmClick
|
||||
ShowCaption = False
|
||||
end
|
||||
Hint = 'resume execution'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF000000000000000000000000000000000000000024000000330000
|
||||
002F000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF0000000000000000000000000000000000007D41C100C684FF0086
|
||||
46ED000000290000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF0000000024000000330000003300000033008847FF00E4A6FF00BE
|
||||
80FF008345D90000002100000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00007D41C1008A48FF008847FF008746FF008847FF00D9A1FF00D8
|
||||
A0FF00BC80FF007C41B900000022FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00008947FF43E8C2FF00D7A0FF00D7A0FF00D59FFF00D09CFF00D0
|
||||
9CFF00D39FFF00B981FF007E43BDFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00008845FF6FE8D0FF00C899FF00C899FF00C899FF00C797FF00C8
|
||||
98FF00CA9AFF63E6CDFF008A47FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00008946FF99F0E4FF4FE9D5FF51E8D4FF4DE6D1FF94E8D8FF00C3
|
||||
97FF60E0C7FF00B281FF008B49ACFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00008847B2008946FF008744FF008642FF008847FF82E4D6FF5ADA
|
||||
C4FF00AD7FFF008947A700000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF0000000000000000000000000000000000008847FF7AE4D8FF00AA
|
||||
7FFF008946CF0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF0000000000000000000000000000000000008847B200AA85FF008A
|
||||
46E9000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
|
||||
}
|
||||
OnClick = btnGoClick
|
||||
ShowCaption = False
|
||||
end
|
||||
object lstCdbOut: TListView[2]
|
||||
Left = 4
|
||||
Height = 526
|
||||
Hint = 'CDB output'
|
||||
Top = 32
|
||||
Width = 488
|
||||
Align = alClient
|
||||
AutoWidthLastColumn = True
|
||||
BorderSpacing.Left = 4
|
||||
BorderSpacing.Top = 4
|
||||
BorderSpacing.Right = 4
|
||||
BorderSpacing.Bottom = 4
|
||||
Columns = <
|
||||
item
|
||||
Caption = 'CDB output'
|
||||
Width = 484
|
||||
end>
|
||||
Font.Height = -11
|
||||
Font.Name = 'Lucida Console'
|
||||
ParentFont = False
|
||||
TabOrder = 2
|
||||
ViewStyle = vsReport
|
||||
object btnStop: TSpeedButton
|
||||
Left = 28
|
||||
Height = 24
|
||||
Hint = 'stop debugging'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF003941D64C444BD9D2474FDAF0434BD9E94048D7E93E47
|
||||
D8F0353ED5D2252ED254232BD206FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF004148D74C636CE4E48997FAFF8495FFFF7F90FCFF7D8EFAFF7D8D
|
||||
F7FF7D8BF2FF5159DDFF222AD173FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF004E56DA4D6C75E4DF96A5FAFF5A74FFFF3250FFFF304FFFFF2C49FEFF2542
|
||||
FAFF4860F9FF8694F4FF5159DDDC252ED14DFFFFFF00FFFFFF00FFFFFF005E65
|
||||
DE4B7981E7E59FADFBFF6781FFFF405EFFFF405EFFFF3C59FFFF3755FFFF3350
|
||||
FFFF2846FDFF4A65FDFF8996F6FF545EDEE52C34D44BFFFFFF00FFFFFF007178
|
||||
E3D5A2B2FCFF738FFFFF4F70FFFF4F6EFFFF4B69FFFF4664FFFF415EFFFF3C5A
|
||||
FFFF3755FFFF2C4BFFFF4E67FFFF8493FAFF4048D8D5FFFFFF00FFFFFF007D84
|
||||
E5F2A6BBFFFF5F7FFFFF5F7EFFFF5A79FFFF5573FFFF506EFFFF4B69FFFF4664
|
||||
FFFF415EFFFF3B59FFFF314FFFFF8799FFFF4D55DBF2FFFFFF00FFFFFF00858A
|
||||
E6E9ABBEFFFF6D8DFFFF6989FFFF6583FFFF5F7EFFFF5A79FFFF5574FFFF506F
|
||||
FFFF4B69FFFF4663FFFF3F5CFFFF8A9BFFFF535BDCE9FFFFFF00FFFFFF008B91
|
||||
E7EAB1C4FFFF7698FFFF7393FFFF6E8EFFFF6989FFFF6583FFFF5F7EFFFF5A79
|
||||
FFFF5573FFFF4F6EFFFF4867FFFF90A1FFFF5A62DEEAFFFFFF00FFFFFF009298
|
||||
E9F2B8CDFFFF7DA0FFFF7C9DFFFF7899FFFF7393FFFF6E8EFFFF6989FFFF6583
|
||||
FFFF607EFFFF5978FFFF4F70FFFF98AAFFFF636AE0F2FFFFFF00FFFFFF00959A
|
||||
EAD4BCCDFCFF9CBBFFFF81A5FFFF81A2FFFF7C9EFFFF7899FFFF7493FFFF6F8E
|
||||
FFFF6989FFFF6080FFFF7893FFFF9EADFBFF656CE0D4FFFFFF00FFFFFF009297
|
||||
E84AA5ACEFE4C1D1FCFFA0BFFFFF86AAFFFF85A7FFFF81A2FFFF7C9DFFFF7898
|
||||
FFFF6F90FFFF85A1FFFFACBAFBFF838BE8E46369DF4AFFFFFF00FFFFFF00FFFF
|
||||
FF009396E849A6ADEEDFC4D4FCFFA3C2FFFF8BAFFFFF89ABFFFF84A7FFFF7EA0
|
||||
FFFF91AEFFFFB4C3FBFF8C93EADB6D71E04AFFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF009498E84AA9B1F0E4C2D3FCFFC1D6FFFFBDD1FFFFBBCFFFFFB9CE
|
||||
FFFFB7C8FCFF989FEDFF797EE272FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00999DEA4B9EA3EBD2A0A5ECF09DA2EBE99BA0EBE9989E
|
||||
EAF09297E9D2868BE6538388E506FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
|
||||
}
|
||||
OnClick = btnStopClick
|
||||
ShowCaption = False
|
||||
end
|
||||
object btnStart: TSpeedButton
|
||||
Left = 0
|
||||
Height = 24
|
||||
Hint = 'start debuggin'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
|
||||
FF00000000000000003300000030000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF0000000000329EDEFF319CDBF10000002D0000000000000000000000000000
|
||||
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF0000000000329AD8C4329DDEFF2F98D7E90000003300000006000000000000
|
||||
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF0000000000339EDE5A329BDDFF67C6EEFF369FDEFF133D574A000000050000
|
||||
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF000000000000000000319ADBFF83D7F3FF89E4FAFF349CDCFF133951490000
|
||||
001200000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF0000000000000000003196D7BA57BEEAFFA9F5FFFF7BDEF8FF369CDCFF2772
|
||||
A17B00000011000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00000000330000003321648F6B42A9E2FFBDF5FEFF81E7FBFF76DBF6FF379B
|
||||
DCFF276F9E790000001A0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00389BDCFF48ACE4FF45A9E2FF3FA5E1FFBDF3FDFF7FE4F8FF7AE3FAFF70D9
|
||||
F5FF42A5E0FF2E81B7990000002200000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF003799DBFF9EF1FDFF80E5F9FF73E0F9FF6FDEF7FF6DDCF7FF6EDDF7FF71E0
|
||||
F9FF70DFF8FF40A6E0FF358DC8B900000023FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF003794D6D285DCF5FF89E5F8FF68DAF6FF68DAF6FFB9F0FCFFB8F2FDFFB4F2
|
||||
FCFFA9F1FDFFABF1FCFF44A9E2FF3890CBBFFFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF003993D2856DC5ECFF9CE8FAFF5FD6F4FF61D7F4FF46B4E6FF3191D8FF3595
|
||||
DAFF3797DAFF3A99DBFF3E9CDCFF409EDDFFFFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF003E9BDC324CAEE4FFB0EEFBFF66D8F4FF57D3F3FFACEDFBFF63B4E5FF2D77
|
||||
AB8900000001000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00000000003B9ADAFFACEEFBFF82DDF5FF4CCEF1FF82DFF6FFABE6F8FF3996
|
||||
D9FF0711182D000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00000000003C94D5D28BDAF3FFACEAF9FF3FCBF0FF45CDF0FFBBF0FBFF6DBA
|
||||
E7FF3B93D0D90000000E0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00000000003E93D1876CC5EBFFD7FAFFFFCDF6FDFFC3F3FDFFD2F8FFFFC6F1
|
||||
FBFF409ADAFF2D67916D0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF0000000000479CDC3A439ADAFF3F97D9FF3E96D9FF3E96D9FF3E97D9FF4099
|
||||
DAFF459CDBFF489EDCFF0000000000000000FFFFFF00FFFFFF00
|
||||
}
|
||||
OnClick = btnStartClick
|
||||
ShowCaption = False
|
||||
end
|
||||
object btnStep: TSpeedButton
|
||||
Left = 84
|
||||
Height = 24
|
||||
Hint = 'next instruction'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Glyph.Data = {
|
||||
42020000424D4202000000000000420000002800000010000000100000000100
|
||||
100003000000000200006400000064000000000000000000000000F80000E007
|
||||
00001F000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE73EF7B0000000000004D6B9294FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B18C6CF7B000000006D6B14A5FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B9AD6FBDECF7B00008E7334A5FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B18C6F7BD5DEFEF7BAE7355ADFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B96B575AD7DEFEF7BCF7B55ADFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B14A51CE7CF7B0000EF7B75ADFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7B1CE7CF7B00000000108496B5FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1084EF7B0000000000003084B6B5FFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
FFFFFFFFFFFF
|
||||
}
|
||||
OnClick = btnStepClick
|
||||
ShowCaption = False
|
||||
end
|
||||
object btnDisasm: TSpeedButton
|
||||
Left = 112
|
||||
Height = 24
|
||||
Hint = 'disasm'
|
||||
Top = 0
|
||||
Width = 28
|
||||
Align = alLeft
|
||||
Glyph.Data = {
|
||||
42020000424D4202000000000000420000002800000010000000100000000100
|
||||
100003000000000200006400000064000000000000000000000000F80000E007
|
||||
00001F0000000000000000000000000000000000000000000000000000000000
|
||||
00000000FFFFCF7BD39CD39CD39CD39CD39CD39CD39CD39CD39CD39CD39CD39C
|
||||
D39C3084FFFFD39CDFFFBEF7BEF7BEF7BEF7BEF7BEF7BEF7BEF7BEF7BEF7BEF7
|
||||
DFFFD39CFFFFD39C9EF75DEF5DEF5DEF7DEF9EF79EF79EF77DEF5DEF5DEF5DEF
|
||||
9EF7D39CFFFFD39C7DEF3CE73CE75DEFEB5A0C632C630C63EB5A5DEF3CE73CE7
|
||||
7DEFD39CFFFFD39C7DEFFBDEFBDE1CE7DFFFFFFFFFFFFFFFDFFF3CE71CE7FBDE
|
||||
7DEFD39CFFFFD39C5DEFDBDEDBDE1CE78A52AA52AA52AA52AA528A521CE7FBDE
|
||||
5DEFD39CFFFFD39C5DEFBAD6BAD6DBDEDFFFFFFFFFFFFFFFFFFFBEF7FBDEDBDE
|
||||
7DEFD39CFFFFD39C5DEF9AD6BAD6DBDE2842494A494A494A494A28420842BAD6
|
||||
5DEFD39CFFFFD39C5DEF79CEBAD6DBDEDFFFFFFFFFFFDFFFBEF79EF75DEF79CE
|
||||
5DEFD39CFFFFD39C7DEF79CEA631C739C739C739C739A63179CE59CE59CE38C6
|
||||
5DEFD39CFFFFD39C7DEF38C69EF79EF79EF79EF79EF75DEF38C638C638C618C6
|
||||
7DEFD39CFFFFD39C7DEFF7BDF7BDF7BDF7BDF7BDF7BDF7BDF7BDF7BDF7BDF7BD
|
||||
7DEFD39CFFFFD39C9EF7B6B5D7BDD7BDD7BDD7BDD7BDD7BDD7BDD7BDD7BDB6B5
|
||||
9EF7D39CFFFFD39CDFFFFBDEFBDE1CE71CE71CE71CE71CE71CE71CE7FBDEFBDE
|
||||
DFFFD39CFFFFF39CD39CD39CD39CD39CD39CD39CD39CD39CD39CD39CD39CD39C
|
||||
D39CF39CFFFF
|
||||
}
|
||||
OnClick = btnDisasmClick
|
||||
ShowCaption = False
|
||||
end
|
||||
end
|
||||
object lstCdbOut: TListView[2]
|
||||
Left = 4
|
||||
Height = 526
|
||||
Hint = 'CDB output'
|
||||
Top = 32
|
||||
Width = 488
|
||||
Align = alClient
|
||||
AutoWidthLastColumn = True
|
||||
BorderSpacing.Left = 4
|
||||
BorderSpacing.Top = 4
|
||||
BorderSpacing.Right = 4
|
||||
BorderSpacing.Bottom = 4
|
||||
Columns = <
|
||||
item
|
||||
Caption = 'CDB output'
|
||||
Width = 484
|
||||
end>
|
||||
Font.Height = -11
|
||||
Font.Name = 'Lucida Console'
|
||||
ParentFont = False
|
||||
TabOrder = 2
|
||||
ViewStyle = vsReport
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
|
@ -6,144 +6,137 @@ inherited ProjectConfigurationWidget: TProjectConfigurationWidget
|
|||
Caption = 'DEXED project editor'
|
||||
ClientHeight = 315
|
||||
ClientWidth = 445
|
||||
inherited Back: TPanel
|
||||
Height = 315
|
||||
inherited Content: TPanel
|
||||
Height = 279
|
||||
Width = 445
|
||||
AutoSize = True
|
||||
ClientHeight = 315
|
||||
ClientHeight = 279
|
||||
ClientWidth = 445
|
||||
inherited Content: TPanel
|
||||
Height = 279
|
||||
Width = 445
|
||||
ClientHeight = 279
|
||||
ClientWidth = 445
|
||||
object Panel2: TPanel[0]
|
||||
Left = 4
|
||||
object Panel2: TPanel[0]
|
||||
Left = 4
|
||||
Height = 271
|
||||
Top = 4
|
||||
Width = 437
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 271
|
||||
ClientWidth = 437
|
||||
TabOrder = 0
|
||||
object Tree: TTreeView
|
||||
Left = 0
|
||||
Height = 271
|
||||
Top = 4
|
||||
Width = 437
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 271
|
||||
ClientWidth = 437
|
||||
Hint = 'filter configuration elements'
|
||||
Top = 0
|
||||
Width = 160
|
||||
Align = alLeft
|
||||
AutoExpand = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
ShowRoot = False
|
||||
TabOrder = 0
|
||||
object Tree: TTreeView
|
||||
Left = 0
|
||||
Height = 271
|
||||
Hint = 'filter configuration elements'
|
||||
Top = 0
|
||||
Width = 160
|
||||
Align = alLeft
|
||||
AutoExpand = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
ShowRoot = False
|
||||
TabOrder = 0
|
||||
OnChange = TreeChange
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoToolTips, tvoThemedDraw]
|
||||
Items.Data = {
|
||||
F9FFFFFF020003000000FFFFFFFFFFFFFFFF01000000FFFFFFFF000000000000
|
||||
0000000700000047656E6572616CFFFFFFFFFFFFFFFF02000000FFFFFFFF0900
|
||||
000000000000010A00000043617465676F72696573FFFFFFFFFFFFFFFF020000
|
||||
00FFFFFFFF000000000000000000080000004D65737361676573FFFFFFFFFFFF
|
||||
FFFF03000000FFFFFFFF00000000000000000009000000446562756767696E67
|
||||
FFFFFFFFFFFFFFFF04000000FFFFFFFF0000000000000000000D000000446F63
|
||||
756D656E746174696F6EFFFFFFFFFFFFFFFF05000000FFFFFFFF000000000000
|
||||
000000060000004F7574707574FFFFFFFFFFFFFFFF06000000FFFFFFFF000000
|
||||
000000000000060000004F7468657273FFFFFFFFFFFFFFFF07000000FFFFFFFF
|
||||
000000000000000000050000005061746873FFFFFFFFFFFFFFFF08000000FFFF
|
||||
FFFF000000000000000000110000005072652D6275696C642070726F63657373
|
||||
FFFFFFFFFFFFFFFF09000000FFFFFFFF00000000000000000012000000506F73
|
||||
742D6275696C642070726F63657373FFFFFFFFFFFFFFFF0A000000FFFFFFFF00
|
||||
00000000000000000B00000052756E206F7074696F6E73FFFFFFFFFFFFFFFF0B
|
||||
000000FFFFFFFF0000000000000000000E000000416C6C2063617465676F7269
|
||||
6573
|
||||
}
|
||||
end
|
||||
object Splitter1: TSplitter
|
||||
Left = 160
|
||||
Height = 271
|
||||
Top = 0
|
||||
Width = 5
|
||||
AutoSnap = False
|
||||
end
|
||||
object inspector: TTIPropertyGrid
|
||||
Left = 165
|
||||
Height = 271
|
||||
Top = 0
|
||||
Width = 272
|
||||
Align = alClient
|
||||
CheckboxForBoolean = False
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper]
|
||||
Indent = 16
|
||||
NameFont.Color = clWindowText
|
||||
OnModified = inspectorModified
|
||||
PreferredSplitterX = 150
|
||||
SplitterX = 150
|
||||
ValueFont.Color = clGreen
|
||||
end
|
||||
OnChange = TreeChange
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoToolTips, tvoThemedDraw]
|
||||
Items.Data = {
|
||||
F9FFFFFF020003000000FFFFFFFFFFFFFFFF01000000FFFFFFFF000000000000
|
||||
0000000700000047656E6572616CFFFFFFFFFFFFFFFF02000000FFFFFFFF0900
|
||||
000000000000010A00000043617465676F72696573FFFFFFFFFFFFFFFF020000
|
||||
00FFFFFFFF000000000000000000080000004D65737361676573FFFFFFFFFFFF
|
||||
FFFF03000000FFFFFFFF00000000000000000009000000446562756767696E67
|
||||
FFFFFFFFFFFFFFFF04000000FFFFFFFF0000000000000000000D000000446F63
|
||||
756D656E746174696F6EFFFFFFFFFFFFFFFF05000000FFFFFFFF000000000000
|
||||
000000060000004F7574707574FFFFFFFFFFFFFFFF06000000FFFFFFFF000000
|
||||
000000000000060000004F7468657273FFFFFFFFFFFFFFFF07000000FFFFFFFF
|
||||
000000000000000000050000005061746873FFFFFFFFFFFFFFFF08000000FFFF
|
||||
FFFF000000000000000000110000005072652D6275696C642070726F63657373
|
||||
FFFFFFFFFFFFFFFF09000000FFFFFFFF00000000000000000012000000506F73
|
||||
742D6275696C642070726F63657373FFFFFFFFFFFFFFFF0A000000FFFFFFFF00
|
||||
00000000000000000B00000052756E206F7074696F6E73FFFFFFFFFFFFFFFF0B
|
||||
000000FFFFFFFF0000000000000000000E000000416C6C2063617465676F7269
|
||||
6573
|
||||
}
|
||||
end
|
||||
object Splitter1: TSplitter
|
||||
Left = 160
|
||||
Height = 271
|
||||
Top = 0
|
||||
Width = 5
|
||||
AutoSnap = False
|
||||
end
|
||||
object inspector: TTIPropertyGrid
|
||||
Left = 165
|
||||
Height = 271
|
||||
Top = 0
|
||||
Width = 272
|
||||
Align = alClient
|
||||
CheckboxForBoolean = False
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper]
|
||||
Indent = 16
|
||||
NameFont.Color = clWindowText
|
||||
OnModified = inspectorModified
|
||||
PreferredSplitterX = 150
|
||||
SplitterX = 150
|
||||
ValueFont.Color = clGreen
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 437
|
||||
object btnSyncEdit: TDexedToolButton[0]
|
||||
Left = 85
|
||||
Hint = 'activate or deactivate the synchronized edition'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnSyncEdit'
|
||||
OnClick = btnSyncEditClick
|
||||
resourceName = 'LINK_BREAK'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnCloneConf: TDexedToolButton[1]
|
||||
Left = 57
|
||||
Hint = 'clone the selected configuration'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnCloneConf'
|
||||
OnClick = btnCloneCurrClick
|
||||
resourceName = 'COG_GO'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnDelConf: TDexedToolButton[2]
|
||||
Left = 29
|
||||
Hint = 'delete selected configuration'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnDelConf'
|
||||
OnClick = btnDelConfClick
|
||||
resourceName = 'COG_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddConf: TDexedToolButton[3]
|
||||
Left = 1
|
||||
Hint = 'add a new configuration'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddConf'
|
||||
OnClick = btnAddConfClick
|
||||
resourceName = 'COG_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object selConf: TComboBox[4]
|
||||
Left = 116
|
||||
Height = 26
|
||||
Hint = 'select a configuration'
|
||||
Top = 1
|
||||
Width = 320
|
||||
Align = alClient
|
||||
BorderSpacing.Left = 114
|
||||
BorderSpacing.Around = 1
|
||||
ItemHeight = 0
|
||||
OnChange = selConfChange
|
||||
Style = csDropDownList
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 437
|
||||
object btnSyncEdit: TDexedToolButton[0]
|
||||
Left = 85
|
||||
Hint = 'activate or deactivate the synchronized edition'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnSyncEdit'
|
||||
OnClick = btnSyncEditClick
|
||||
resourceName = 'LINK_BREAK'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnCloneConf: TDexedToolButton[1]
|
||||
Left = 57
|
||||
Hint = 'clone the selected configuration'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnCloneConf'
|
||||
OnClick = btnCloneCurrClick
|
||||
resourceName = 'COG_GO'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnDelConf: TDexedToolButton[2]
|
||||
Left = 29
|
||||
Hint = 'delete selected configuration'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnDelConf'
|
||||
OnClick = btnDelConfClick
|
||||
resourceName = 'COG_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddConf: TDexedToolButton[3]
|
||||
Left = 1
|
||||
Hint = 'add a new configuration'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddConf'
|
||||
OnClick = btnAddConfClick
|
||||
resourceName = 'COG_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object selConf: TComboBox[4]
|
||||
Left = 116
|
||||
Height = 26
|
||||
Hint = 'select a configuration'
|
||||
Top = 1
|
||||
Width = 320
|
||||
Align = alClient
|
||||
BorderSpacing.Left = 114
|
||||
BorderSpacing.Around = 1
|
||||
ItemHeight = 0
|
||||
OnChange = selConfChange
|
||||
Style = csDropDownList
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
|
@ -351,6 +351,9 @@ type
|
|||
// Converts the delta between two calls to GetTickCount64 to a string indicating a duration.
|
||||
function formatTicksAsDuration(ticks: UInt64): string;
|
||||
|
||||
// Returns wether runing in a dark DE
|
||||
function isDarkDE(): boolean;
|
||||
|
||||
(**
|
||||
* Compares two TPoints.
|
||||
*)
|
||||
|
@ -1562,6 +1565,11 @@ begin
|
|||
result += value[p .. value.length];
|
||||
end;
|
||||
|
||||
function isDarkDE(): boolean;
|
||||
begin
|
||||
result := clBackground < clCaptionText;
|
||||
end;
|
||||
|
||||
{$IFDEF DEBUG}
|
||||
initialization
|
||||
|
||||
|
|
|
@ -22,9 +22,12 @@ type
|
|||
private
|
||||
function getIndex: integer;
|
||||
protected
|
||||
fFixedCaption: string;
|
||||
procedure realSetText(const Value: TCaption); override;
|
||||
procedure setFixedCaption(const value: string);
|
||||
public
|
||||
property index: integer read getIndex;
|
||||
property fixedCaption: string read fFixedCaption write setFixedCaption;
|
||||
end;
|
||||
|
||||
TPageControlOption = (poPageHistory, poBottomHeader, poFlatButtons);
|
||||
|
@ -171,16 +174,26 @@ procedure TDexedPage.RealSetText(const Value: TCaption);
|
|||
var
|
||||
i: integer;
|
||||
ctrl: TDexedPageControl;
|
||||
v : string;
|
||||
begin
|
||||
inherited;
|
||||
v := value;
|
||||
if fFixedCaption.isNotEmpty then
|
||||
v := fFixedCaption;
|
||||
inherited RealSetText(v);
|
||||
ctrl := TDexedPageControl(owner);
|
||||
i := ctrl.getPageIndex(self);
|
||||
ctrl.fTabs.BeginUpdate;
|
||||
if i <> -1 then
|
||||
ctrl.fTabs.Tabs[i] := value;
|
||||
ctrl.fTabs.Tabs[i] := v;
|
||||
ctrl.fTabs.EndUpdate;
|
||||
end;
|
||||
|
||||
procedure TDexedPage.setFixedCaption(const value: string);
|
||||
begin
|
||||
fFixedCaption:= value;
|
||||
caption := value;
|
||||
end;
|
||||
|
||||
constructor TDexedPageControl.Create(aowner: TComponent);
|
||||
begin
|
||||
inherited;
|
||||
|
|
|
@ -648,7 +648,7 @@ begin
|
|||
// double quoted strings | raw double quoted strings
|
||||
if (fCurrRange.notInExclusiveRange()) and readDelim(reader, fTokStop, stringPrefixes) then
|
||||
begin
|
||||
if readerPrev^ in ['r','x'] then
|
||||
if readerPrev^ in ['r','x','i'] then
|
||||
begin
|
||||
fCurrRange.rString := reader^ = 'r';
|
||||
if not (readerNext^ = '"') then
|
||||
|
@ -747,7 +747,7 @@ begin
|
|||
end;
|
||||
|
||||
// token string
|
||||
if readDelim(reader, fTokStop, 'q{') then
|
||||
if readDelim(reader, fTokStop, 'q{') or readDelim(reader, fTokStop, 'iq{') then
|
||||
begin
|
||||
fTokKind := tkSymbl;
|
||||
StartCodeFoldBlock(nil, fkBrackets in fFoldKinds);
|
||||
|
|
|
@ -595,6 +595,70 @@ begin
|
|||
selection.Foreground := clNone;
|
||||
getHl.calls.Assign(getHl.identifiers);
|
||||
end;
|
||||
with fPresets.insertPreset(5) do
|
||||
begin
|
||||
fIsHardcoded := true;
|
||||
name := 'Arc Dark';
|
||||
|
||||
getHl.phobosStyleType := False;
|
||||
getHl.foldKinds := [fkBrackets, fkRegion];
|
||||
getHl.whites.FrameEdges := sfeNone;
|
||||
getHl.numbers.Foreground := 16761218;
|
||||
getHl.numbers.FrameEdges := sfeNone;
|
||||
getHl.symbols.Foreground := clYellow;
|
||||
getHl.symbols.FrameEdges := sfeNone;
|
||||
getHl.identifiers.Foreground := clWhite;
|
||||
getHl.identifiers.FrameEdges := sfeNone;
|
||||
getHl.comments.Foreground := 10664152;
|
||||
getHl.comments.FrameEdges := sfeNone;
|
||||
getHl.strings.Foreground := 5157104;
|
||||
getHl.strings.FrameEdges := sfeNone;
|
||||
getHl.keywords.Foreground := 8511369;
|
||||
getHl.keywords.FrameEdges := sfeNone;
|
||||
getHl.ddoc.Foreground := 14671730;
|
||||
getHl.ddoc.FrameEdges := sfeNone;
|
||||
getHl.inlineAsm.Foreground := 15500491;
|
||||
getHl.inlineAsm.FrameEdges := sfeNone;
|
||||
getHl.special.Foreground := 9684887;
|
||||
getHl.special.FrameEdges := sfeNone;
|
||||
getHl.errors.Foreground := 14807024;
|
||||
getHl.attributes.Foreground := 8441210;
|
||||
getHl.attributes.FrameEdges := sfeNone;
|
||||
getHl.types.Foreground := 14807024;
|
||||
getHl.calls.Foreground := clWhite;
|
||||
getHl.calls.Style := [fsItalic];
|
||||
|
||||
background := 5391680;
|
||||
|
||||
bracketMatch.Background := clNone;
|
||||
bracketMatch.Foreground := clGradientActiveCaption;
|
||||
bracketMatch.FrameStyle := slsDashed;
|
||||
bracketMatch.FrameEdges := sfeNone;
|
||||
bracketMatch.Style := [fsBold];
|
||||
|
||||
currentLine.Background := 8816262;
|
||||
currentLine.Foreground := clNone;
|
||||
currentLine.BackAlpha := 50;
|
||||
|
||||
folding.Background := 7303023;
|
||||
folding.Foreground := clYellow;
|
||||
folding.FrameColor := clGray;
|
||||
|
||||
identifierMatch.Background := clMoneyGreen;
|
||||
identifierMatch.Foreground := clNone;
|
||||
identifierMatch.FrameColor := clInfoText;
|
||||
identifierMatch.FrameEdges := sfeBottom;
|
||||
identifierMatch.BackPriority := 1;
|
||||
identifierMatch.BackAlpha := 30;
|
||||
|
||||
mouseLink.Background := clNone;
|
||||
mouseLink.Foreground := clNone;
|
||||
mouseLink.Style := [fsBold, fsUnderline];
|
||||
|
||||
selection.Background := 5987166;
|
||||
selection.Foreground := clNone;
|
||||
selection.BackPriority := 2;
|
||||
end;
|
||||
|
||||
fEditor := TSynEdit.Create(self);
|
||||
fEditor.Parent:= self;
|
||||
|
|
|
@ -38,7 +38,6 @@ type
|
|||
fProj: ICommonProject;
|
||||
fPortAsProcParam: string;
|
||||
fVersion: TSemVer;
|
||||
fCanRemove: boolean;
|
||||
procedure killServer;
|
||||
procedure terminateClient; {$IFNDEF DEBUG}inline;{$ENDIF}
|
||||
procedure waitClient; {$IFNDEF DEBUG}inline;{$ENDIF}
|
||||
|
@ -105,7 +104,7 @@ var
|
|||
begin
|
||||
inherited;
|
||||
|
||||
fVersion.init('v0.0.0');
|
||||
fVersion.init('v0.0.0', false);
|
||||
fname := getDocPath + optsname;
|
||||
if fname.fileExists then
|
||||
loadFromFile(fname);
|
||||
|
@ -137,16 +136,6 @@ begin
|
|||
fTempLines := TStringList.Create;
|
||||
fImportCache := TStringHashSet.Create;
|
||||
|
||||
fClient.Parameters.Add('--version');
|
||||
fClient.Execute;
|
||||
processOutputToStrings(fClient, fTempLines);
|
||||
while fClient.Running do ;
|
||||
fVersion.init(fTempLines.strictText);
|
||||
r.major := 0;
|
||||
r.minor := 9;
|
||||
r.patch := 10;
|
||||
fCanRemove := fVersion > r;
|
||||
|
||||
if fServer.isAssigned then
|
||||
begin
|
||||
fServer.Execute;
|
||||
|
@ -442,8 +431,6 @@ end;
|
|||
|
||||
procedure TDcdWrapper.remImportFolder(const folder: string);
|
||||
begin
|
||||
if not fCanRemove then
|
||||
exit;
|
||||
if not fAvailable or not fServerListening or not fImportCache.contains(folder) then
|
||||
exit;
|
||||
|
||||
|
@ -460,8 +447,6 @@ var
|
|||
i: string;
|
||||
c: integer;
|
||||
begin
|
||||
if not fCanRemove then
|
||||
exit;
|
||||
if not fAvailable or not fServerListening then
|
||||
exit;
|
||||
|
||||
|
|
126
src/u_dfmt.lfm
126
src/u_dfmt.lfm
|
@ -6,77 +6,67 @@ inherited DfmtWidget: TDfmtWidget
|
|||
Caption = 'Dfmt commander'
|
||||
ClientHeight = 365
|
||||
ClientWidth = 458
|
||||
inherited Back: TPanel
|
||||
Left = 4
|
||||
Height = 357
|
||||
Top = 4
|
||||
inherited Content: TPanel
|
||||
Height = 321
|
||||
Width = 450
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
ClientHeight = 357
|
||||
ClientHeight = 321
|
||||
ClientWidth = 450
|
||||
inherited Content: TPanel
|
||||
Height = 321
|
||||
Width = 450
|
||||
ClientHeight = 321
|
||||
ClientWidth = 450
|
||||
object dfmtOptionEditor: TTIPropertyGrid[0]
|
||||
Left = 4
|
||||
Height = 299
|
||||
Top = 4
|
||||
Width = 442
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
CheckboxForBoolean = True
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper]
|
||||
Indent = 10
|
||||
NameFont.Color = clWindowText
|
||||
OnEditorFilter = dfmtOptionEditorEditorFilter
|
||||
PreferredSplitterX = 220
|
||||
SplitterX = 220
|
||||
ValueFont.Color = clGreen
|
||||
end
|
||||
object pnlFooter: TPanel[1]
|
||||
Left = 4
|
||||
Height = 10
|
||||
Top = 307
|
||||
Width = 442
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvLowered
|
||||
ClientHeight = 10
|
||||
ClientWidth = 442
|
||||
TabOrder = 1
|
||||
object btnCancel: TSpeedButton
|
||||
Left = 427
|
||||
Height = 4
|
||||
Hint = 'restore previous format'
|
||||
Top = 3
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Around = 2
|
||||
Flat = True
|
||||
end
|
||||
object btnApply: TSpeedButton
|
||||
Left = 435
|
||||
Height = 4
|
||||
Hint = 'apply formating'
|
||||
Top = 3
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Around = 2
|
||||
Flat = True
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
object dfmtOptionEditor: TTIPropertyGrid[0]
|
||||
Left = 4
|
||||
Height = 299
|
||||
Top = 4
|
||||
Width = 442
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
CheckboxForBoolean = True
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper]
|
||||
Indent = 10
|
||||
NameFont.Color = clWindowText
|
||||
OnEditorFilter = dfmtOptionEditorEditorFilter
|
||||
PreferredSplitterX = 220
|
||||
SplitterX = 220
|
||||
ValueFont.Color = clGreen
|
||||
end
|
||||
object pnlFooter: TPanel[1]
|
||||
Left = 4
|
||||
Height = 10
|
||||
Top = 307
|
||||
Width = 442
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvLowered
|
||||
ClientHeight = 10
|
||||
ClientWidth = 442
|
||||
TabOrder = 1
|
||||
object btnCancel: TSpeedButton
|
||||
Left = 427
|
||||
Height = 4
|
||||
Hint = 'restore previous format'
|
||||
Top = 3
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Around = 2
|
||||
Flat = True
|
||||
end
|
||||
object btnApply: TSpeedButton
|
||||
Left = 435
|
||||
Height = 4
|
||||
Hint = 'apply formating'
|
||||
Top = 3
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Around = 2
|
||||
Flat = True
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 442
|
||||
end
|
||||
end
|
||||
|
|
|
@ -308,7 +308,10 @@ begin
|
|||
if fDoc.isNotAssigned then
|
||||
exit;
|
||||
if not exeInSysPath('dfmt') then
|
||||
begin
|
||||
getMessageDisplay().message('DFMT is missing. See https://github.com/dlang-community/dfmt for more instructions on how to get DFMT.', nil, TAppMessageCtxt.amcAll, TAppMessageKind.amkWarn);
|
||||
exit;
|
||||
end;
|
||||
|
||||
fBackup.Assign(fDoc.Lines);
|
||||
prc := TProcess.create(nil);
|
||||
|
|
|
@ -41,7 +41,10 @@ begin
|
|||
editor.Gutter.LineNumberPart.Visible:=false;
|
||||
|
||||
if ed.isAssigned then
|
||||
begin
|
||||
editor.Font.Assign(ed.Font);
|
||||
editor.Color := ed.Color;
|
||||
end;
|
||||
|
||||
p := TProcess.Create(self);
|
||||
try
|
||||
|
|
|
@ -55,20 +55,20 @@ type
|
|||
keywordsMap = record
|
||||
private
|
||||
{
|
||||
rendered on 2021-Apr-14 18:49:17.621124 by IsItThere.
|
||||
rendered on 2025-Mar-10 11:20:03.8930671 by IsItThere.
|
||||
- PRNG seed: 0
|
||||
- map length: 512
|
||||
- case sensitive: true
|
||||
}
|
||||
|
||||
const fWords: array [0..511] of string =
|
||||
('', '', '', '', '', '', 'scope', '', '', '', '', 'this', 'ucent', 'delegate', 'size_t', '', '', 'ulong', 'nothrow', '', '', 'bool', '', '', '', '', 'debug', '', '', 'class', '', '', 'function', '', '', 'uint', 'private', '', 'for', '', '', '', 'false', 'deprecated', 'mixin', '', 'while', '', '', 'with', '', '', '', 'true', '', '', '', '', '', 'foreach_reverse', '', '', '', 'real', '', '', 'align', '', '', '__vector', '', '', '', '', 'pragma', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'module', '', '', '', '', '', '', '', '', '', '', '', '', '', 'interface', '', '', '', '', '', '', '', '', 'foreach', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'auto', '', 'float', '', 'typeid', 'else', '', 'string', 'creal', 'inout', '', '', 'pure', '', '', '', '', '', '', '', '', '', '', '', 'export', '', '', '', '', '', 'ubyte', 'double', '', '', '', '', '', '', '', 'do', '', '', '', 'union', '', '', '', '', '', 'static', '', 'final', 'ireal', '', '', '', '', '', 'is', '', '', 'immutable', '', 'switch', '', '', '', 'assert', '', '', '', '', 'dstring', '', '__traits', '', '', '', '', '', 'new', 'super', '', '', '', '', '', '', 'typeof', '', '', 'catch', 'short', '', 'alias', '', '', '', 'delete', 'in', '', '', '', '', '', 'cfloat', '', '', '', 'abstract', '', '', '', '__gshared', 'wstring', 'break', '', '', '', 'unittest', '', '', 'struct', '', '', '', '', '', '', '', 'throw', '', '', '', 'cdouble', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'ifloat', 'ptrdiff_t', 'template', 'cent', 'if', '', '', '', 'long', '', '', '', '', '', '', '', '', 'char', '', '', '', 'default', '', '', '', '', 'int', '', '', 'idouble', 'volatile', '', '', '', '', 'version', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'goto', '', '', '', '', '', 'package', '__parameters', '', '', '', '', '', '', '', 'shared', '', '', '', '', '', '', '', '', '', '', '', '', 'dchar', '', '', '', '', '', '', '', '', '', '', '', 'continue', '', '', '', '', '', '', '', '', 'synchronized', '', '', '', 'public', '', '', 'return', '', '', '', '', 'out', '', 'import', '', '', '', 'null', 'protected', '', 'wchar', '', 'finally', '', '', '', 'invariant', '', 'ref', '', 'case', '', '', '', '', '', '', '', '', '', 'asm', '', '', '', '', '', '', '', '', '', '', '', '', 'ushort', 'void', '', '', '', '', '', '', '', '', '', '', '', '', '', 'enum', '', '', '', '', '', '', 'byte', '', '', '', 'const', '', 'lazy', '', '', '', 'cast', '', '', '', 'extern', '', 'try', 'override', '', '', '', '', '', '', '', '');
|
||||
('', '', '', '', 'cdouble', '', '', '', 'creal', '', 'abstract', '', 'ulong', 'uint', '', '', '', '', 'delete', '', '', '', '', '', '', 'while', '', '', '', '', '', 'goto', 'void', '', '', 'ptrdiff_t', '', '', 'extern', '', '', '', '', '__traits', '', '', '', 'ifloat', '', '', 'dchar', 'pure', '', '', '', 'template', '', 'auto', '', 'cast', '', '', 'synchronized', '', '', '', 'union', '', '', '', '', '', '', '', '__parameters', '', 'finally', '', '', 'this', '__rvalue', '', '', 'mixin', 'throw', '', '', '', '', 'class', '', '', '', '', '', '', '', '', '', 'false', '', '', '', '', '', '', '', '', '', '', '', 'continue', '', 'import', '', '', '', 'break', '', '', 'immutable', '', 'cfloat', '', '', 'case', '', 'enum', '', '', 'override', 'public', '', 'cent', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'inout', '', '', '', 'in', '', '', '', '', 'interface', 'true', '', '', 'catch', '', 'string', '', '', 'delegate', '', 'else', '', 'if', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'short', '', '', '', '', '', '', '', '', '', 'const', '', '', '', 'wstring', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'super', '', '', 'package', '', '', '', '__gshared', '', '', '', '', '', '', '', '', '', 'is', '', '', '', '', 'scope', '', '', '__vector', '', 'foreach_reverse', '', '', '', '', 'do', '', '', '', '', '', 'unittest', '', 'switch', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'static', '', '', 'dstring', 'null', '', '', 'byte', '', 'for', 'nothrow', '', '', 'debug', 'return', '', '', '', 'align', '', '', '', '', '', '', 'module', '', 'ucent', 'long', 'int', '', '', '', 'final', '', '', '', '', '', 'shared', '', '', '', '', '', '', '', '', '', '', 'protected', '', 'lazy', '', '', '', '', '', 'private', '', 'invariant', '', '', '', '', '', 'size_t', '', '', 'asm', '', '', 'double', '', '', '', 'real', '', '', '', '', '', '', '', '', '', '', '', '', 'new', '', 'volatile', '', 'alias', '', '', '', 'foreach', '', '', '', '', '', '', '', '', '', '', '', 'ushort', 'ref', 'default', 'typeid', 'assert', '', '', '', '', '', '', '', '', '', 'export', 'char', '', '', '', '', '', '', 'struct', '', '', '', '', '', '', '', '', 'idouble', '', '', '', 'ireal', '', '', '', '', '', '', 'bool', 'typeof', '', '', '', 'pragma', '', '', 'with', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'deprecated', '', '', '', '', 'version', 'try', '', '', '', '', 'wchar', '', 'function', '', 'float', '', '', '', '', '', '', '', '', '', '', '', 'ubyte', '', '', '', '', 'out', '', '', '');
|
||||
|
||||
const fHasEntry: array [0..511] of boolean =
|
||||
(false, false, false, false, false, false, true, false, false, false, false, true, true, true, true, false, false, true, true, false, false, true, false, false, false, false, true, false, false, true, false, false, true, false, false, true, true, false, true, false, false, false, true, true, true, false, true, false, false, true, false, false, false, true, false, false, false, false, false, true, false, false, false, true, false, false, true, false, false, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, true, true, false, true, true, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, true, true, false, false, false, false, false, false, false, true, false, false, false, true, false, false, false, false, false, true, false, true, true, false, false, false, false, false, true, false, false, true, false, true, false, false, false, true, false, false, false, false, true, false, true, false, false, false, false, false, true, true, false, false, false, false, false, false, true, false, false, true, true, false, true, false, false, false, true, true, false, false, false, false, false, true, false, false, false, true, false, false, false, true, true, true, false, false, false, true, false, false, true, false, false, false, false, false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, true, false, false, false, false, true, false, false, true, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, true, true, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, true, false, false, true, false, false, false, false, true, false, true, false, false, false, true, true, false, true, false, true, false, false, false, true, false, true, false, true, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, true, false, false, false, true, false, true, false, false, false, true, false, false, false, true, false, true, true, false, false, false, false, false, false, false, false);
|
||||
(false, false, false, false, true, false, false, false, true, false, true, false, true, true, false, false, false, false, true, false, false, false, false, false, false, true, false, false, false, false, false, true, true, false, false, true, false, false, true, false, false, false, false, true, false, false, false, true, false, false, true, true, false, false, false, true, false, true, false, true, false, false, true, false, false, false, true, false, false, false, false, false, false, false, true, false, true, false, false, true, true, false, false, true, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, false, true, false, false, true, false, true, false, false, true, false, true, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, true, false, false, false, false, true, true, false, false, true, false, true, false, false, true, false, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, true, false, false, false, false, true, false, false, true, false, true, false, false, false, false, true, false, false, false, false, false, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, true, true, false, false, true, false, true, true, false, false, true, true, false, false, false, true, false, false, false, false, false, false, true, false, true, true, true, false, false, false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, false, false, false, true, false, true, false, false, false, false, false, true, false, false, true, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, true, false, false, false, false, false, false, true, true, false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, true, true, false, false, false, false, true, false, true, false, true, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, true, false, false, false);
|
||||
|
||||
const fCoeffs: array [0..255] of Byte =
|
||||
(38, 33, 180, 0, 185, 246, 108, 140, 101, 70, 225, 36, 169, 241, 207, 131, 8, 145, 253, 246, 120, 51, 192, 218, 141, 3, 128, 13, 153, 122, 147, 180, 155, 253, 108, 112, 81, 69, 216, 179, 91, 136, 140, 39, 226, 59, 35, 105, 3, 111, 139, 247, 35, 246, 8, 124, 74, 191, 207, 221, 168, 208, 182, 40, 125, 146, 113, 139, 166, 251, 161, 145, 87, 99, 57, 74, 153, 249, 60, 234, 254, 164, 213, 146, 164, 14, 30, 121, 56, 203, 76, 11, 44, 178, 124, 193, 12, 248, 217, 103, 65, 21, 164, 21, 231, 147, 173, 45, 52, 134, 110, 132, 193, 209, 254, 69, 76, 214, 121, 107, 18, 172, 20, 89, 137, 103, 6, 153, 190, 154, 210, 136, 72, 198, 124, 133, 215, 154, 155, 198, 121, 208, 215, 184, 239, 210, 214, 130, 231, 158, 210, 177, 16, 39, 121, 200, 101, 187, 168, 82, 237, 94, 101, 118, 255, 207, 85, 168, 217, 106, 177, 5, 88, 246, 217, 77, 204, 40, 208, 142, 96, 217, 123, 31, 20, 237, 212, 146, 9, 168, 103, 214, 167, 134, 75, 204, 86, 62, 164, 83, 131, 236, 14, 131, 31, 66, 95, 70, 166, 134, 47, 8, 171, 76, 79, 136, 237, 10, 178, 22, 235, 255, 228, 205, 162, 40, 103, 57, 169, 153, 164, 128, 28, 5, 216, 168, 35, 121, 33, 96, 39, 72, 230, 91, 54, 134, 223, 59, 5, 166, 146, 71, 188, 129, 179, 117);
|
||||
(149, 149, 209, 70, 128, 54, 131, 42, 163, 99, 62, 99, 162, 96, 41, 68, 64, 176, 136, 67, 36, 232, 177, 99, 114, 106, 120, 83, 85, 249, 51, 53, 48, 55, 217, 168, 129, 86, 247, 153, 11, 47, 7, 88, 69, 131, 73, 188, 111, 154, 128, 152, 194, 99, 121, 84, 28, 83, 247, 175, 238, 255, 237, 177, 37, 205, 174, 140, 119, 108, 68, 1, 113, 102, 208, 214, 123, 137, 223, 57, 95, 182, 228, 85, 57, 41, 133, 64, 9, 201, 112, 156, 192, 173, 209, 166, 66, 61, 163, 143, 137, 240, 106, 91, 156, 68, 10, 100, 11, 116, 88, 139, 63, 240, 65, 193, 174, 195, 200, 62, 255, 243, 38, 238, 63, 128, 80, 248, 104, 7, 154, 154, 254, 221, 1, 238, 26, 252, 2, 169, 227, 130, 99, 240, 52, 248, 250, 72, 216, 222, 22, 227, 139, 187, 59, 217, 118, 119, 63, 220, 235, 55, 154, 87, 10, 171, 249, 239, 254, 232, 63, 174, 120, 245, 238, 228, 152, 175, 240, 174, 18, 95, 239, 185, 227, 226, 186, 161, 234, 227, 29, 152, 90, 54, 69, 136, 192, 252, 29, 237, 62, 164, 45, 151, 187, 68, 165, 60, 102, 146, 15, 97, 207, 59, 99, 48, 24, 53, 225, 174, 175, 183, 215, 24, 234, 33, 31, 255, 60, 128, 31, 89, 63, 3, 105, 233, 191, 6, 181, 198, 46, 7, 164, 17, 90, 45, 93, 185, 254, 17, 194, 218, 197, 194, 85, 71);
|
||||
class function hash(const w: string): Word; static; {$IFNDEF DEBUG}inline;{$ENDIF}
|
||||
public
|
||||
class function match(const w: string): boolean; static; {$IFNDEF DEBUG}inline;{$ENDIF}
|
||||
|
|
|
@ -12,7 +12,7 @@ type
|
|||
|
||||
const
|
||||
stringPostfixes: TCharSet = ['c', 'w', 'd'];
|
||||
stringPrefixes: TCharSet = ['r', 'x', '"'];
|
||||
stringPrefixes: TCharSet = ['r', 'x', 'i', '"'];
|
||||
stringStopChecks: TCharSet = ['\', '"'];
|
||||
charStopChecks: TCharSet = ['\', #39];
|
||||
symbChars: TCharSet = [';', '{', '}', '(', ')', '[', ']', ',', '.', ':', '?', '$', '"', #39];
|
||||
|
|
|
@ -30,6 +30,7 @@ type
|
|||
strict private
|
||||
fName : string;
|
||||
fVersions: TSemVerList;
|
||||
fNewNamingScheme: boolean;
|
||||
public
|
||||
constructor create;
|
||||
destructor destroy; override;
|
||||
|
@ -38,6 +39,7 @@ type
|
|||
function highestInInterval(constref lo, hi: TSemVer): PSemVer;
|
||||
function highest: PSemVer;
|
||||
property name: string read fName write fName;
|
||||
property newNamingScheme: boolean read fNewNamingScheme write fNewNamingScheme;
|
||||
end;
|
||||
|
||||
TDubLocalPackages = class
|
||||
|
@ -324,9 +326,9 @@ var
|
|||
begin
|
||||
v := new(PSemVer);
|
||||
if value = 'vmaster' then
|
||||
v^.init('v0.0.0-master')
|
||||
v^.init('v0.0.0-master', false)
|
||||
else try
|
||||
v^.init(value);
|
||||
v^.init(value, true);
|
||||
except
|
||||
dispose(v);
|
||||
exit;
|
||||
|
@ -359,10 +361,12 @@ begin
|
|||
begin
|
||||
v := fVersions[i]^;
|
||||
if v < lo then
|
||||
continue;
|
||||
if v < hi then
|
||||
result := fVersions[i];
|
||||
if v > hi then
|
||||
continue
|
||||
else if (v > lo) or (v = lo) then
|
||||
result := fVersions[i]
|
||||
else if (v < hi) and ((assigned(result) and (v > result^)) or (not assigned(result))) then
|
||||
result := fVersions[i]
|
||||
else if v > hi then
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
|
@ -395,6 +399,23 @@ begin
|
|||
end;
|
||||
|
||||
class procedure TDubLocalPackages.update;
|
||||
|
||||
procedure addPackageOrVersion(name, semVer: string; newNamingScheme: Boolean);
|
||||
var
|
||||
d: PDubLocalPackage = nil;
|
||||
begin
|
||||
if not find(name, d) then
|
||||
begin
|
||||
setLength(fLocalPackages, length(fLocalPackages) + 1);
|
||||
fLocalPackages[high(fLocalPackages)] := TDubLocalPackage.create;
|
||||
d := @fLocalPackages[high(fLocalPackages)];
|
||||
d^.name := name;
|
||||
d^.newNamingScheme := newNamingScheme;
|
||||
end;
|
||||
d^.addVersion(semVer);
|
||||
end;
|
||||
|
||||
|
||||
var
|
||||
p: TStringList;
|
||||
r: TStringList;
|
||||
|
@ -404,9 +425,10 @@ var
|
|||
i: integer;
|
||||
j: integer = 0;
|
||||
k: integer;
|
||||
d: PDubLocalPackage = nil;
|
||||
h: TStringRange = (ptr: nil; pos: 0; len: 0);
|
||||
x: string;
|
||||
u: TStringList;
|
||||
g: string;
|
||||
|
||||
begin
|
||||
|
||||
|
@ -441,33 +463,42 @@ begin
|
|||
j := 0;
|
||||
s := p[i];
|
||||
h.init(s);
|
||||
while true do
|
||||
// after 2.104 <cachePath>/<package>/<version>/<package>
|
||||
// new naming scheme can be distinguished because '.' is not a legal char in a package name
|
||||
v := s.extractFileName;
|
||||
if (Pos('.', v) < 1) and (Pos('master', v) < 1) then
|
||||
begin
|
||||
h.popUntil('-');
|
||||
if h.empty then
|
||||
break;
|
||||
if (h.popFront^.front in ['0'..'9']) or
|
||||
h.endsWith('master') then
|
||||
u := TStringList.Create;
|
||||
try
|
||||
listFolders(u, s + DirectorySeparator);
|
||||
for g in u do
|
||||
addPackageOrVersion(v, 'v' + g.extractFileName, true);
|
||||
finally
|
||||
u.free;
|
||||
end;
|
||||
end
|
||||
// before 2.104 <cachePath>/<package>-<version>/<package>
|
||||
else
|
||||
begin
|
||||
while true do
|
||||
begin
|
||||
j := h.position;
|
||||
break;
|
||||
h.popUntil('-');
|
||||
if h.empty then
|
||||
break;
|
||||
if (h.popFront^.front in ['0'..'9']) or
|
||||
h.endsWith('master') then
|
||||
begin
|
||||
j := h.position;
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
if not j.equals(0) then
|
||||
begin
|
||||
n := s[1..j-1];
|
||||
n := n.extractFileName;
|
||||
addPackageOrVersion(n, 'v' + s[j+1 .. length(s)], false);
|
||||
end;
|
||||
end;
|
||||
if j.equals(0) then
|
||||
continue;
|
||||
|
||||
n := s[1..j-1];
|
||||
n := n.extractFileName;
|
||||
if not find(n, d) then
|
||||
begin
|
||||
setLength(fLocalPackages, length(fLocalPackages) + 1);
|
||||
fLocalPackages[high(fLocalPackages)] := TDubLocalPackage.create;
|
||||
d := @fLocalPackages[high(fLocalPackages)];
|
||||
d^.name := n;
|
||||
end;
|
||||
v := 'v' + s[j+1 .. length(s)];
|
||||
d^.addVersion(v);
|
||||
|
||||
end;
|
||||
finally
|
||||
p.Free;
|
||||
|
@ -509,7 +540,6 @@ begin
|
|||
hi.patch := 0;
|
||||
hi.additional :='';
|
||||
result := package^.highestInInterval(opVer, hi);
|
||||
result := result;
|
||||
end;
|
||||
end
|
||||
else if op = '=' then
|
||||
|
@ -1379,6 +1409,31 @@ begin
|
|||
fSrcs.Add(patchPlateformPath(ExtractRelativepath(fBasePath, abs)));
|
||||
end;
|
||||
end;
|
||||
procedure tryFromCustomPath(o: TJSONObject);
|
||||
var
|
||||
i: integer;
|
||||
a: TJSONArray;
|
||||
p: string;
|
||||
begin
|
||||
if o.findArray('sourcePaths', a) then
|
||||
for i := 0 to a.Count-1 do
|
||||
begin
|
||||
p := TrimRightSet(a.Strings[i], ['/','\']);
|
||||
if p.dirExists and FilenameIsAbsolute(p) then
|
||||
tryAddFromFolder(p)
|
||||
else
|
||||
tryAddFromFolder(expandFilenameEx(fBasePath, p));
|
||||
end;
|
||||
if o.findArray('importPaths', a) then
|
||||
for i := 0 to a.Count-1 do
|
||||
begin
|
||||
p := TrimRightSet(a.Strings[i], ['/','\']);
|
||||
if p.dirExists and FilenameIsAbsolute(p) then
|
||||
fImportPaths.Add(p)
|
||||
else
|
||||
fImportPaths.Add(expandFilenameEx(fBasePath, p));
|
||||
end;
|
||||
end;
|
||||
procedure trySubpPackages(a: TJSONArray);
|
||||
var
|
||||
n: TJSONData;
|
||||
|
@ -1396,6 +1451,7 @@ begin
|
|||
o := a.Objects[i];
|
||||
if o.findAny('name', n) then
|
||||
tryAddFromFolder(fBasePath + n.AsString);
|
||||
tryFromCustomPath(o);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
@ -1449,15 +1505,7 @@ begin
|
|||
fSrcs.Add(patchPlateformPath(pth));
|
||||
end;
|
||||
// custom folders in current config
|
||||
if conf.findArray('sourcePaths', arr) then
|
||||
for i := 0 to arr.Count-1 do
|
||||
begin
|
||||
pth := TrimRightSet(arr.Strings[i], ['/','\']);
|
||||
if pth.dirExists and FilenameIsAbsolute(pth) then
|
||||
tryAddFromFolder(pth)
|
||||
else
|
||||
tryAddFromFolder(expandFilenameEx(fBasePath, pth));
|
||||
end;
|
||||
tryFromCustomPath(conf);
|
||||
// subpackages
|
||||
if conf.findArray('subPackages', arr) then
|
||||
trySubpPackages(arr);
|
||||
|
@ -1630,9 +1678,9 @@ procedure TDubProject.updateImportPathsFromJson;
|
|||
s += w;
|
||||
// as auto detected by DUB
|
||||
if (s + 'source').dirExists then
|
||||
fImportPaths.Add(s)
|
||||
fImportPaths.Add(s + 'source')
|
||||
else if (s + 'src').dirExists then
|
||||
fImportPaths.Add(s)
|
||||
fImportPaths.Add(s + 'src')
|
||||
// when standard src content is directly in the repo root
|
||||
else if (s + n).dirExists or (w.length <> 0) then
|
||||
fImportPaths.Add(s);
|
||||
|
@ -1678,18 +1726,18 @@ procedure TDubProject.updateImportPathsFromJson;
|
|||
p := '0.0.0';
|
||||
end
|
||||
else if (p = 'master') or (v = '~master') then
|
||||
q.init('v0.0.0-master')
|
||||
q.init('v0.0.0-master', false)
|
||||
else
|
||||
begin
|
||||
try
|
||||
q.init('v' + p);
|
||||
q.init('v' + p, true);
|
||||
except
|
||||
// while editing a DUB project from the DUB project editor,
|
||||
// '<value>', i.e "undefined JSON value" can be found here.
|
||||
// So get DUB to fetch the most recent if the 'autoFetch' IDE option
|
||||
// is ON, even if another version is set later.
|
||||
o := '>=';
|
||||
q.init('v0.0.0');
|
||||
q.init('v0.0.0', false);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -1724,15 +1772,19 @@ procedure TDubProject.updateImportPathsFromJson;
|
|||
for k := 0 to b.Count-1 do
|
||||
begin
|
||||
s := b[k] + n;
|
||||
p := s + '-' + u^.asString + DirectorySeparator + n + DirectorySeparator;
|
||||
// e.g vibe-d:http -> <registrypath>/vibed-<sember>/http
|
||||
p := s + '-' + u^.asString + DirectorySeparator + n + DirectorySeparator;
|
||||
// new naming scheme
|
||||
if not p.dirExists then
|
||||
p := s + DirectorySeparator + u^.asString + DirectorySeparator + n + DirectorySeparator;
|
||||
// e.g vibe-d:http -> <registrypath>/vibed/<semver>/vibed/http
|
||||
// e.g ae:sys-wininet -> <registrypath>/ae/<semver>/ae/sys/wininet
|
||||
if length(w) <> 0 then
|
||||
p += w;
|
||||
p += strutils.ReplaceText(w, '-', DirectorySeparator);
|
||||
if not p.dirExists then
|
||||
continue;
|
||||
if (p + 'source').dirExists then
|
||||
begin
|
||||
fImportPaths.Add(p + 'source') ;
|
||||
fImportPaths.Add(p + 'source');
|
||||
break;
|
||||
end
|
||||
else if (p + 'src').dirExists then
|
||||
|
@ -1875,9 +1927,9 @@ procedure TDubProject.updateFields;
|
|||
begin
|
||||
updatePackageNameFromJson;
|
||||
udpateConfigsFromJson;
|
||||
updateImportPathsFromJson;
|
||||
updateSourcesFromJson;
|
||||
updateTargetKindFromJson;
|
||||
updateImportPathsFromJson;
|
||||
updateOutputNameFromJson;
|
||||
end;
|
||||
|
||||
|
|
|
@ -6,135 +6,128 @@ inherited DubProjectEditorWidget: TDubProjectEditorWidget
|
|||
Caption = 'DUB project editor'
|
||||
ClientHeight = 424
|
||||
ClientWidth = 407
|
||||
inherited Back: TPanel
|
||||
Height = 424
|
||||
inherited Content: TPanel
|
||||
Height = 388
|
||||
Width = 407
|
||||
AutoSize = True
|
||||
ClientHeight = 424
|
||||
ClientHeight = 388
|
||||
ClientWidth = 407
|
||||
inherited Content: TPanel
|
||||
Height = 388
|
||||
Width = 407
|
||||
ClientHeight = 388
|
||||
ClientWidth = 407
|
||||
object propTree: TTreeView[0]
|
||||
Left = 4
|
||||
Height = 347
|
||||
Top = 4
|
||||
Width = 399
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 0
|
||||
ToolTips = False
|
||||
OnSelectionChanged = propTreeSelectionChanged
|
||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoThemedDraw]
|
||||
TreeLinePenStyle = psClear
|
||||
end
|
||||
object Panel1: TPanel[1]
|
||||
object propTree: TTreeView[0]
|
||||
Left = 4
|
||||
Height = 347
|
||||
Top = 4
|
||||
Width = 399
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 0
|
||||
ToolTips = False
|
||||
OnSelectionChanged = propTreeSelectionChanged
|
||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoThemedDraw]
|
||||
TreeLinePenStyle = psClear
|
||||
end
|
||||
object Panel1: TPanel[1]
|
||||
Left = 2
|
||||
Height = 31
|
||||
Top = 355
|
||||
Width = 403
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 2
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 31
|
||||
ClientWidth = 403
|
||||
TabOrder = 1
|
||||
object edProp: TEdit
|
||||
Left = 2
|
||||
Height = 31
|
||||
Top = 355
|
||||
Width = 403
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
Height = 27
|
||||
Top = 2
|
||||
Width = 395
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 31
|
||||
ClientWidth = 403
|
||||
TabOrder = 1
|
||||
object edProp: TEdit
|
||||
Left = 2
|
||||
Height = 27
|
||||
Top = 2
|
||||
Width = 395
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnAcceptProp: TSpeedButton
|
||||
Left = 399
|
||||
Height = 31
|
||||
Hint = 'accept property value'
|
||||
Top = 0
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
Layout = blGlyphBottom
|
||||
OnClick = btnAcceptPropClick
|
||||
ShowCaption = False
|
||||
end
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnAcceptProp: TSpeedButton
|
||||
Left = 399
|
||||
Height = 31
|
||||
Hint = 'accept property value'
|
||||
Top = 0
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
Layout = blGlyphBottom
|
||||
OnClick = btnAcceptPropClick
|
||||
ShowCaption = False
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 399
|
||||
OnResize = toolbarResize
|
||||
object btnReload: TDexedToolButton[0]
|
||||
Left = 85
|
||||
Hint = 'reload the project, useful to fetch new dependencies or detect new source files'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnReload'
|
||||
OnClick = btnRefreshClick
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnDelProp: TDexedToolButton[1]
|
||||
Left = 29
|
||||
Hint = 'delete property'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnDelProp'
|
||||
OnClick = btnDelPropClick
|
||||
resourceName = 'TEXTFIELD_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddProp: TDexedToolButton[2]
|
||||
Left = 1
|
||||
Hint = 'add a property'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddProp'
|
||||
OnClick = btnAddPropClick
|
||||
resourceName = 'TEXTFIELD_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object fltEdit: TTreeFilterEdit[3]
|
||||
Left = 120
|
||||
Height = 26
|
||||
Hint = 'filter properties'
|
||||
Top = 2
|
||||
Width = 277
|
||||
ButtonWidth = 23
|
||||
Align = alRight
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
FilteredTreeview = propTree
|
||||
end
|
||||
object btnCloneObject: TDexedToolButton[4]
|
||||
Left = 57
|
||||
Hint = 'clone selected object'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnCloneObject'
|
||||
OnClick = btnCloneObjectClick
|
||||
resourceName = 'COPY'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button1: TDexedToolButton[5]
|
||||
Left = 113
|
||||
Height = 5
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button1'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 399
|
||||
OnResize = toolbarResize
|
||||
object btnReload: TDexedToolButton[0]
|
||||
Left = 85
|
||||
Hint = 'reload the project, useful to fetch new dependencies or detect new source files'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnReload'
|
||||
OnClick = btnRefreshClick
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnDelProp: TDexedToolButton[1]
|
||||
Left = 29
|
||||
Hint = 'delete property'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnDelProp'
|
||||
OnClick = btnDelPropClick
|
||||
resourceName = 'TEXTFIELD_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddProp: TDexedToolButton[2]
|
||||
Left = 1
|
||||
Hint = 'add a property'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddProp'
|
||||
OnClick = btnAddPropClick
|
||||
resourceName = 'TEXTFIELD_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object fltEdit: TTreeFilterEdit[3]
|
||||
Left = 120
|
||||
Height = 26
|
||||
Hint = 'filter properties'
|
||||
Top = 2
|
||||
Width = 277
|
||||
ButtonWidth = 23
|
||||
Align = alRight
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
FilteredTreeview = propTree
|
||||
end
|
||||
object btnCloneObject: TDexedToolButton[4]
|
||||
Left = 57
|
||||
Hint = 'clone selected object'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnCloneObject'
|
||||
OnClick = btnCloneObjectClick
|
||||
resourceName = 'COPY'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button1: TDexedToolButton[5]
|
||||
Left = 113
|
||||
Height = 5
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button1'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
|
@ -8,63 +8,57 @@ inherited EditorWidget: TEditorWidget
|
|||
ClientWidth = 465
|
||||
OnShortCut = FormShortCut
|
||||
OnShow = FormShow
|
||||
inherited Back: TPanel
|
||||
Height = 434
|
||||
inherited Content: TPanel
|
||||
Height = 398
|
||||
Top = 36
|
||||
Width = 465
|
||||
ClientHeight = 434
|
||||
ClientHeight = 398
|
||||
ClientWidth = 465
|
||||
inherited Content: TPanel
|
||||
Height = 398
|
||||
object editorStatus: TStatusBar[0]
|
||||
Left = 0
|
||||
Height = 20
|
||||
Top = 376
|
||||
Width = 465
|
||||
ClientHeight = 398
|
||||
ClientWidth = 465
|
||||
object editorStatus: TStatusBar[0]
|
||||
Left = 0
|
||||
Height = 19
|
||||
Top = 377
|
||||
Width = 465
|
||||
BorderSpacing.Bottom = 2
|
||||
Panels = <
|
||||
item
|
||||
Width = 110
|
||||
end
|
||||
item
|
||||
Width = 80
|
||||
end
|
||||
item
|
||||
Width = 120
|
||||
end
|
||||
item
|
||||
Alignment = taCenter
|
||||
Width = 100
|
||||
end
|
||||
item
|
||||
Width = 2000
|
||||
end
|
||||
item
|
||||
Width = 50
|
||||
end>
|
||||
SimplePanel = False
|
||||
SizeGrip = False
|
||||
UseSystemFont = False
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Height = 30
|
||||
Width = 457
|
||||
BorderSpacing.Bottom = 2
|
||||
Panels = <
|
||||
item
|
||||
Width = 110
|
||||
end
|
||||
item
|
||||
Width = 80
|
||||
end
|
||||
item
|
||||
Width = 120
|
||||
end
|
||||
item
|
||||
Alignment = taCenter
|
||||
Width = 100
|
||||
end
|
||||
item
|
||||
Width = 2000
|
||||
end
|
||||
item
|
||||
Width = 50
|
||||
end>
|
||||
SimplePanel = False
|
||||
SizeGrip = False
|
||||
UseSystemFont = False
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 457
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
Left = 24
|
||||
Top = 16
|
||||
end
|
||||
object macRecorder: TSynMacroRecorder[2]
|
||||
object macRecorder: TSynMacroRecorder[3]
|
||||
RecordShortCut = 0
|
||||
PlaybackShortCut = 0
|
||||
Left = 80
|
||||
Top = 16
|
||||
end
|
||||
object mnuEditor: TPopupMenu[3]
|
||||
object mnuEditor: TPopupMenu[4]
|
||||
OnPopup = mnuEditorPopup
|
||||
Left = 152
|
||||
Top = 16
|
||||
|
@ -87,10 +81,18 @@ inherited EditorWidget: TEditorWidget
|
|||
Caption = 'Undo'
|
||||
OnClick = mnuedUndoClick
|
||||
end
|
||||
object mnuedUndoAll: TMenuItem
|
||||
Caption = 'Undo all'
|
||||
OnClick = mnuedUndoAllClick
|
||||
end
|
||||
object mnuedRedo: TMenuItem
|
||||
Caption = 'Redo'
|
||||
OnClick = mnuedRedoClick
|
||||
end
|
||||
object mnuedRedoAll: TMenuItem
|
||||
Caption = 'Redo all'
|
||||
OnClick = mnuedRedoAllClick
|
||||
end
|
||||
object MenuItem11: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
|
@ -282,7 +284,7 @@ inherited EditorWidget: TEditorWidget
|
|||
OnClick = MenuItem8Click
|
||||
end
|
||||
end
|
||||
object mnuCurFile: TPopupMenu[4]
|
||||
object mnuCurFile: TPopupMenu[5]
|
||||
Left = 216
|
||||
Top = 16
|
||||
object mnuCurFileShowInMiniExpl: TMenuItem
|
||||
|
|
|
@ -62,6 +62,8 @@ type
|
|||
MenuItem14: TMenuItem;
|
||||
MenuItem15: TMenuItem;
|
||||
MenuItem16: TMenuItem;
|
||||
mnuedRedoAll: TMenuItem;
|
||||
mnuedUndoAll: TMenuItem;
|
||||
mnuCurFileCopyName: TMenuItem;
|
||||
mnuCurFileShowInMiniExpl: TMenuItem;
|
||||
mnuCurFileShellOpen: TMenuItem;
|
||||
|
@ -112,6 +114,7 @@ type
|
|||
editorStatus: TStatusBar;
|
||||
mnuEditor: TPopupMenu;
|
||||
mnuCurFile: TPopupMenu;
|
||||
procedure mnuedRedoAllClick(Sender: TObject);
|
||||
procedure FormShortCut(var Msg: TLMKey; var Handled: Boolean);
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure mnuCurFileCopyNameClick(Sender: TObject);
|
||||
|
@ -132,6 +135,7 @@ type
|
|||
procedure mnuEdShowSpecClick(Sender: TObject);
|
||||
procedure mnuedSortLinesClick(Sender: TObject);
|
||||
procedure mnuEdTabWidth2Click(Sender: TObject);
|
||||
procedure mnuedUndoAllClick(Sender: TObject);
|
||||
procedure mnuedUpcaseClick(Sender: TObject);
|
||||
procedure MenuItem5Click(Sender: TObject);
|
||||
procedure MenuItem6Click(Sender: TObject);
|
||||
|
@ -201,6 +205,7 @@ type
|
|||
procedure openDocument(const fname: string);
|
||||
function closeDocument(index: Integer;promptOnChanged: boolean = true): boolean;
|
||||
function closeDocument(doc: TDexedMemo;promptOnChanged: boolean = true): boolean;
|
||||
procedure forceCaption(doc: TDexedMemo; value: string);
|
||||
public
|
||||
constructor create(aOwner: TComponent); override;
|
||||
destructor destroy; override;
|
||||
|
@ -358,7 +363,9 @@ begin
|
|||
AssignPng(mnuedCut.Bitmap, 'CUT');
|
||||
AssignPng(mnuedPaste.Bitmap, 'PASTE');
|
||||
AssignPng(mnuedUndo.Bitmap, 'ARROW_UNDO');
|
||||
AssignPng(mnuedUndoAll.Bitmap, 'ARROW_UNDO');
|
||||
AssignPng(mnuedRedo.Bitmap, 'ARROW_REDO');
|
||||
AssignPng(mnuedRedoAll.Bitmap, 'ARROW_REDO');
|
||||
AssignPng(mnuedJum2Decl.Bitmap, 'ARROW_SHOE');
|
||||
AssignPng(mnuedCopy.Bitmap, 'COPY');
|
||||
AssignPng(mnuedNext.Bitmap, 'GO_NEXT');
|
||||
|
@ -386,7 +393,9 @@ begin
|
|||
AssignPng(mnuedCut.Bitmap, 'CUT24');
|
||||
AssignPng(mnuedPaste.Bitmap, 'PASTE24');
|
||||
AssignPng(mnuedUndo.Bitmap, 'ARROW_UNDO24');
|
||||
AssignPng(mnuedUndoAll.Bitmap, 'ARROW_UNDO24');
|
||||
AssignPng(mnuedRedo.Bitmap, 'ARROW_REDO24');
|
||||
AssignPng(mnuedRedoAll.Bitmap, 'ARROW_REDO24');
|
||||
//AssignPng(mnuedJum2Decl.Bitmap, 'ARROW_SHOE24');
|
||||
AssignPng(mnuedCopy.Bitmap, 'COPY24');
|
||||
AssignPng(mnuedNext.Bitmap, 'GO_NEXT24');
|
||||
|
@ -414,7 +423,9 @@ begin
|
|||
AssignPng(mnuedCut.Bitmap, 'CUT32');
|
||||
AssignPng(mnuedPaste.Bitmap, 'PASTE32');
|
||||
AssignPng(mnuedUndo.Bitmap, 'ARROW_UNDO32');
|
||||
AssignPng(mnuedUndoAll.Bitmap, 'ARROW_UNDO32');
|
||||
AssignPng(mnuedRedo.Bitmap, 'ARROW_REDO32');
|
||||
AssignPng(mnuedRedoAll.Bitmap, 'ARROW_REDO32');
|
||||
//AssignPng(mnuedJum2Decl.Bitmap, 'ARROW_SHOE32');
|
||||
AssignPng(mnuedCopy.Bitmap, 'COPY32');
|
||||
AssignPng(mnuedNext.Bitmap, 'GO_NEXT32');
|
||||
|
@ -659,6 +670,11 @@ begin
|
|||
exit(false);
|
||||
exit(closeDocument(page.index, promptOnChanged));
|
||||
end;
|
||||
|
||||
procedure TEditorWidget.forceCaption(doc: TDexedMemo; value: string);
|
||||
begin
|
||||
TDexedPage(doc.Parent).fixedCaption := value;
|
||||
end;
|
||||
{$ENDREGION}
|
||||
|
||||
{$REGION PageControl/Editor things ---------------------------------------------}
|
||||
|
@ -1041,6 +1057,12 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TEditorWidget.mnuedUndoAllClick(Sender: TObject);
|
||||
begin
|
||||
if fDoc.isAssigned then
|
||||
fDoc.undoAll();
|
||||
end;
|
||||
|
||||
procedure TEditorWidget.mnuedNextCareaClick(Sender: TObject);
|
||||
begin
|
||||
if fDoc.isAssigned then
|
||||
|
@ -1090,6 +1112,12 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TEditorWidget.mnuedRedoAllClick(Sender: TObject);
|
||||
begin
|
||||
if fDoc.isAssigned then
|
||||
fDoc.redoAll();
|
||||
end;
|
||||
|
||||
procedure TEditorWidget.FormShow(Sender: TObject);
|
||||
begin
|
||||
if fDoc.isAssigned then
|
||||
|
@ -1251,7 +1279,9 @@ begin
|
|||
mnuedPaste.Enabled:=fDoc.CanPaste;
|
||||
mnuedCopy.Enabled:=fDoc.SelAvail;
|
||||
mnuedUndo.Enabled:=fDoc.CanUndo;
|
||||
mnuedUndoAll.Enabled:=fDoc.CanUndo;
|
||||
mnuedRedo.Enabled:=fDoc.CanRedo;
|
||||
mnuedRedoAll.Enabled:=fDoc.CanRedo;
|
||||
mnuedJum2Decl.Enabled:=fDoc.isDSource;
|
||||
|
||||
mnuEdSetSpaces.Checked:= eoTabsToSpaces in fDoc.Options;
|
||||
|
|
790
src/u_gdb.lfm
790
src/u_gdb.lfm
|
@ -6,466 +6,459 @@ inherited GdbWidget: TGdbWidget
|
|||
Caption = 'GDB commander'
|
||||
ClientHeight = 668
|
||||
ClientWidth = 672
|
||||
inherited Back: TPanel
|
||||
Height = 662
|
||||
Top = 6
|
||||
inherited Content: TPanel
|
||||
Height = 626
|
||||
Top = 42
|
||||
Width = 672
|
||||
AutoSize = True
|
||||
ClientHeight = 662
|
||||
ClientHeight = 626
|
||||
ClientWidth = 672
|
||||
inherited Content: TPanel
|
||||
Height = 626
|
||||
object Panel1: TPanel[0]
|
||||
Left = 0
|
||||
Height = 383
|
||||
Top = 205
|
||||
Width = 672
|
||||
ClientHeight = 626
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 383
|
||||
ClientWidth = 672
|
||||
object Panel1: TPanel[0]
|
||||
TabOrder = 0
|
||||
object GroupBox3: TGroupBox
|
||||
Left = 0
|
||||
Height = 386
|
||||
Top = 205
|
||||
Height = 177
|
||||
Top = 206
|
||||
Width = 672
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 386
|
||||
ClientWidth = 672
|
||||
Caption = 'CPU'
|
||||
ClientHeight = 158
|
||||
ClientWidth = 670
|
||||
TabOrder = 0
|
||||
object GroupBox3: TGroupBox
|
||||
object cpuViewer: TTIPropertyGrid
|
||||
Left = 0
|
||||
Height = 180
|
||||
Top = 206
|
||||
Width = 672
|
||||
Align = alClient
|
||||
Caption = 'CPU'
|
||||
ClientHeight = 161
|
||||
ClientWidth = 668
|
||||
TabOrder = 0
|
||||
object cpuViewer: TTIPropertyGrid
|
||||
Left = 0
|
||||
Height = 161
|
||||
Hint = 'cpu registers'
|
||||
Top = 0
|
||||
Width = 668
|
||||
Align = alClient
|
||||
CheckboxForBoolean = True
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper, tkFile, tkClassRef, tkPointer]
|
||||
Indent = 10
|
||||
NameFont.Color = clWindowText
|
||||
PreferredSplitterX = 200
|
||||
SplitterX = 200
|
||||
ValueFont.Color = clMaroon
|
||||
end
|
||||
end
|
||||
object Splitter4: TSplitter
|
||||
Cursor = crVSplit
|
||||
Left = 0
|
||||
Height = 6
|
||||
Top = 200
|
||||
Width = 672
|
||||
Align = alTop
|
||||
ResizeAnchor = akTop
|
||||
end
|
||||
object PageControl2: TPageControl
|
||||
Left = 0
|
||||
Height = 200
|
||||
Height = 158
|
||||
Hint = 'cpu registers'
|
||||
Top = 0
|
||||
Width = 672
|
||||
ActivePage = TabSheet3
|
||||
Align = alTop
|
||||
TabIndex = 0
|
||||
TabOrder = 2
|
||||
OnChange = PageControl2Change
|
||||
object TabSheet3: TTabSheet
|
||||
Caption = 'Variables'
|
||||
ClientHeight = 173
|
||||
ClientWidth = 670
|
||||
object lstVariables: TListView
|
||||
Left = 2
|
||||
Height = 140
|
||||
Top = 31
|
||||
Width = 666
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'name'
|
||||
Width = 43
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'value'
|
||||
Width = 621
|
||||
end>
|
||||
GridLines = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SortColumn = 0
|
||||
SortType = stText
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnShowHint = lstVariablesShowHint
|
||||
end
|
||||
object varListFlt: TListViewFilterEdit
|
||||
Left = 2
|
||||
Height = 27
|
||||
Hint = 'locate variables'
|
||||
Top = 2
|
||||
Width = 666
|
||||
ButtonWidth = 24
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 1
|
||||
OnChange = varListFltChange
|
||||
end
|
||||
end
|
||||
object TabSheet4: TTabSheet
|
||||
Caption = 'Assembler'
|
||||
ClientHeight = 173
|
||||
ClientWidth = 670
|
||||
object lstAsm: TListView
|
||||
Left = 2
|
||||
Height = 169
|
||||
Top = 2
|
||||
Width = 666
|
||||
Align = alClient
|
||||
AutoSort = False
|
||||
AutoWidthLastColumn = True
|
||||
BorderSpacing.Around = 2
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'address'
|
||||
Width = 57
|
||||
end
|
||||
item
|
||||
Caption = 'instruction'
|
||||
Width = 607
|
||||
end>
|
||||
GridLines = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SortColumn = 0
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
end
|
||||
end
|
||||
Width = 670
|
||||
Align = alClient
|
||||
CheckboxForBoolean = True
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper, tkFile, tkClassRef, tkPointer]
|
||||
Indent = 10
|
||||
NameFont.Color = clWindowText
|
||||
PreferredSplitterX = 200
|
||||
SplitterX = 200
|
||||
ValueFont.Color = clMaroon
|
||||
end
|
||||
end
|
||||
object Panel3: TPanel[1]
|
||||
Left = 4
|
||||
Height = 27
|
||||
Top = 595
|
||||
Width = 664
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 27
|
||||
ClientWidth = 664
|
||||
TabOrder = 1
|
||||
object btnSendCom: TSpeedButton
|
||||
Left = 659
|
||||
Height = 25
|
||||
Top = 1
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 1
|
||||
OnClick = btnSendComClick
|
||||
end
|
||||
object Edit1: TComboBox
|
||||
Left = 0
|
||||
Height = 27
|
||||
Hint = 'enter a custom GDB command or the program input with ">"'
|
||||
Top = 0
|
||||
Width = 658
|
||||
Align = alClient
|
||||
AutoComplete = True
|
||||
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
|
||||
ItemHeight = 0
|
||||
MaxLength = 128
|
||||
OnKeyDown = Edit1KeyDown
|
||||
OnKeyUp = Edit1KeyUp
|
||||
TabOrder = 0
|
||||
TabStop = False
|
||||
end
|
||||
end
|
||||
object Splitter3: TSplitter[2]
|
||||
object Splitter4: TSplitter
|
||||
Cursor = crVSplit
|
||||
Left = 0
|
||||
Height = 5
|
||||
Height = 6
|
||||
Top = 200
|
||||
Width = 672
|
||||
Align = alTop
|
||||
ResizeAnchor = akTop
|
||||
end
|
||||
object PageControl1: TPageControl[3]
|
||||
object PageControl2: TPageControl
|
||||
Left = 0
|
||||
Height = 200
|
||||
Hint = 'edit the command line and the environment of the debuger target'
|
||||
Top = 0
|
||||
Width = 672
|
||||
ActivePage = TabSheet1
|
||||
ActivePage = TabSheet3
|
||||
Align = alTop
|
||||
TabIndex = 0
|
||||
TabOrder = 3
|
||||
object TabSheet1: TTabSheet
|
||||
Caption = 'Call stack'
|
||||
ClientHeight = 173
|
||||
ClientWidth = 670
|
||||
object lstCallStack: TListView
|
||||
Left = 0
|
||||
Height = 173
|
||||
Hint = 'call stack'
|
||||
Top = 0
|
||||
Width = 670
|
||||
TabOrder = 2
|
||||
OnChange = PageControl2Change
|
||||
object TabSheet3: TTabSheet
|
||||
Caption = 'Variables'
|
||||
ClientHeight = 168
|
||||
ClientWidth = 662
|
||||
object lstVariables: TListView
|
||||
Left = 2
|
||||
Height = 132
|
||||
Top = 34
|
||||
Width = 658
|
||||
Align = alClient
|
||||
AutoSort = False
|
||||
BorderSpacing.Around = 2
|
||||
Columns = <
|
||||
item
|
||||
Caption = 'function'
|
||||
Width = 200
|
||||
AutoSize = True
|
||||
Caption = 'name'
|
||||
Width = 52
|
||||
end
|
||||
item
|
||||
Caption = 'address'
|
||||
Width = 40
|
||||
end
|
||||
item
|
||||
Caption = 'filename'
|
||||
Width = 100
|
||||
end
|
||||
item
|
||||
Caption = 'line'
|
||||
Width = 328
|
||||
AutoSize = True
|
||||
Caption = 'value'
|
||||
Width = 604
|
||||
end>
|
||||
GridLines = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SortColumn = 0
|
||||
SortType = stText
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnDblClick = lstCallStackDblClick
|
||||
OnShowHint = lstVariablesShowHint
|
||||
end
|
||||
object varListFlt: TListViewFilterEdit
|
||||
Left = 2
|
||||
Height = 30
|
||||
Hint = 'locate variables'
|
||||
Top = 2
|
||||
Width = 658
|
||||
ButtonWidth = 24
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 1
|
||||
OnChange = varListFltChange
|
||||
end
|
||||
end
|
||||
object TabSheet2: TTabSheet
|
||||
Caption = 'Thread list'
|
||||
ClientHeight = 173
|
||||
ClientWidth = 670
|
||||
object lstThreads: TListView
|
||||
Left = 0
|
||||
Height = 173
|
||||
Hint = 'call stack'
|
||||
Top = 0
|
||||
Width = 670
|
||||
object TabSheet4: TTabSheet
|
||||
Caption = 'Assembler'
|
||||
ClientHeight = 168
|
||||
ClientWidth = 662
|
||||
object lstAsm: TListView
|
||||
Left = 2
|
||||
Height = 164
|
||||
Top = 2
|
||||
Width = 658
|
||||
Align = alClient
|
||||
AutoSort = False
|
||||
AutoWidthLastColumn = True
|
||||
BorderSpacing.Around = 2
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'id'
|
||||
Width = 18
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'state'
|
||||
Width = 39
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'core'
|
||||
Width = 34
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'function'
|
||||
Width = 59
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'address'
|
||||
Width = 57
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'filename'
|
||||
Width = 64
|
||||
end
|
||||
item
|
||||
Caption = 'line'
|
||||
Width = 397
|
||||
Caption = 'instruction'
|
||||
Width = 592
|
||||
end>
|
||||
GridLines = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SortColumn = 0
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnDblClick = lstThreadsDblClick
|
||||
end
|
||||
end
|
||||
object TabSheet5: TTabSheet
|
||||
Caption = 'Debugee options'
|
||||
ClientHeight = 173
|
||||
ClientWidth = 670
|
||||
object dbgeeOptsEd: TTIPropertyGrid
|
||||
Left = 2
|
||||
Height = 169
|
||||
Top = 2
|
||||
Width = 666
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
CheckboxForBoolean = True
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper, tkFile, tkClassRef, tkPointer]
|
||||
Indent = 10
|
||||
NameFont.Color = clWindowText
|
||||
OnEditorFilter = dbgeeOptsEdEditorFilter
|
||||
PreferredSplitterX = 190
|
||||
SplitterX = 190
|
||||
ValueFont.Color = clGreen
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
object Panel3: TPanel[1]
|
||||
Left = 4
|
||||
Height = 30
|
||||
Top = 592
|
||||
Width = 664
|
||||
object btnStack: TDexedToolButton[0]
|
||||
Left = 238
|
||||
Hint = 'view call stack'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnStack'
|
||||
OnClick = btnStackClick
|
||||
resourceName = 'LIST'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnReg: TDexedToolButton[1]
|
||||
Left = 210
|
||||
Hint = 'update CPU registers values'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnReg'
|
||||
OnClick = btnRegClick
|
||||
resourceName = 'PROCESSOR'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button4: TDexedToolButton[2]
|
||||
Left = 205
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 30
|
||||
ClientWidth = 664
|
||||
TabOrder = 1
|
||||
object btnSendCom: TSpeedButton
|
||||
Left = 659
|
||||
Height = 28
|
||||
Top = 0
|
||||
Top = 1
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
Caption = 'button4'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
BorderSpacing.Around = 1
|
||||
OnClick = btnSendComClick
|
||||
end
|
||||
object btnPause: TDexedToolButton[3]
|
||||
Left = 97
|
||||
Hint = 'pause debugging'
|
||||
object Edit1: TComboBox
|
||||
Left = 0
|
||||
Height = 30
|
||||
Hint = 'enter a custom GDB command or the program input with ">"'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnPause'
|
||||
OnClick = btnPauseClick
|
||||
resourceName = 'PAUSE'
|
||||
scaledSeparator = False
|
||||
Width = 658
|
||||
Align = alClient
|
||||
AutoComplete = True
|
||||
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
|
||||
ItemHeight = 0
|
||||
MaxLength = 128
|
||||
OnKeyDown = Edit1KeyDown
|
||||
OnKeyUp = Edit1KeyUp
|
||||
TabOrder = 0
|
||||
TabStop = False
|
||||
end
|
||||
object btnStop: TDexedToolButton[4]
|
||||
Left = 41
|
||||
Hint = 'stop debugging'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnStop'
|
||||
OnClick = btnStopClick
|
||||
resourceName = 'STOP'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object Splitter3: TSplitter[2]
|
||||
Cursor = crVSplit
|
||||
Left = 0
|
||||
Height = 5
|
||||
Top = 200
|
||||
Width = 672
|
||||
Align = alTop
|
||||
ResizeAnchor = akTop
|
||||
end
|
||||
object PageControl1: TPageControl[3]
|
||||
Left = 0
|
||||
Height = 200
|
||||
Hint = 'edit the command line and the environment of the debuger target'
|
||||
Top = 0
|
||||
Width = 672
|
||||
ActivePage = TabSheet1
|
||||
Align = alTop
|
||||
TabIndex = 0
|
||||
TabOrder = 3
|
||||
object TabSheet1: TTabSheet
|
||||
Caption = 'Call stack'
|
||||
ClientHeight = 168
|
||||
ClientWidth = 662
|
||||
object lstCallStack: TListView
|
||||
Left = 0
|
||||
Height = 168
|
||||
Hint = 'call stack'
|
||||
Top = 0
|
||||
Width = 662
|
||||
Align = alClient
|
||||
AutoSort = False
|
||||
Columns = <
|
||||
item
|
||||
Caption = 'function'
|
||||
Width = 200
|
||||
end
|
||||
item
|
||||
Caption = 'address'
|
||||
Width = 40
|
||||
end
|
||||
item
|
||||
Caption = 'filename'
|
||||
Width = 100
|
||||
end
|
||||
item
|
||||
Caption = 'line'
|
||||
Width = 328
|
||||
end>
|
||||
GridLines = True
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnDblClick = lstCallStackDblClick
|
||||
end
|
||||
end
|
||||
object btnContinue: TDexedToolButton[5]
|
||||
Left = 69
|
||||
Hint = 'continue debugging'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnContinue'
|
||||
OnClick = btnContClick
|
||||
resourceName = 'PLAY'
|
||||
scaledSeparator = False
|
||||
object TabSheet2: TTabSheet
|
||||
Caption = 'Thread list'
|
||||
ClientHeight = 168
|
||||
ClientWidth = 662
|
||||
object lstThreads: TListView
|
||||
Left = 0
|
||||
Height = 168
|
||||
Hint = 'call stack'
|
||||
Top = 0
|
||||
Width = 662
|
||||
Align = alClient
|
||||
AutoSort = False
|
||||
AutoWidthLastColumn = True
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'id'
|
||||
Width = 26
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'state'
|
||||
Width = 48
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'core'
|
||||
Width = 43
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'function'
|
||||
Width = 71
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'address'
|
||||
Width = 64
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'filename'
|
||||
Width = 73
|
||||
end
|
||||
item
|
||||
Caption = 'line'
|
||||
Width = 335
|
||||
end>
|
||||
GridLines = True
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnDblClick = lstThreadsDblClick
|
||||
end
|
||||
end
|
||||
object btnNext: TDexedToolButton[6]
|
||||
Left = 125
|
||||
Hint = 'step to next instruction, including in calls'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnNext'
|
||||
DropdownMenu = mnuNext
|
||||
OnClick = btnNextClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'GO_DOWN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnOver: TDexedToolButton[7]
|
||||
Left = 165
|
||||
Hint = 'step to the next instruction, excluding calls'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnOver'
|
||||
DropdownMenu = mnuStep
|
||||
OnClick = btnOverClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'GO_JUMP'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnVariables: TDexedToolButton[8]
|
||||
Left = 266
|
||||
Hint = 'update variables list'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnVariables'
|
||||
OnClick = btnVariablesClick
|
||||
resourceName = 'WATCH_WINDOW'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnStart: TDexedToolButton[9]
|
||||
Left = 1
|
||||
Hint = 'start debugging'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnStart'
|
||||
DropdownMenu = mnuProjRunnable
|
||||
OnClick = btnStartClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'POWER'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnWatch: TDexedToolButton[10]
|
||||
Left = 294
|
||||
Hint = 'add a watchpoint for the variable selected in the list'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnWatch'
|
||||
DropdownMenu = mnuWatch
|
||||
OnClick = btnWatchClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'CAMERA_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnEval: TDexedToolButton[11]
|
||||
Left = 334
|
||||
Hint = 'evaluate either a variable from the list or a custom expression'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnEval'
|
||||
DropdownMenu = mnuEval
|
||||
OnClick = btnEvalClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'EVALUATE_FORMULA'
|
||||
scaledSeparator = False
|
||||
object TabSheet5: TTabSheet
|
||||
Caption = 'Debugee options'
|
||||
ClientHeight = 168
|
||||
ClientWidth = 662
|
||||
object dbgeeOptsEd: TTIPropertyGrid
|
||||
Left = 2
|
||||
Height = 164
|
||||
Top = 2
|
||||
Width = 658
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
CheckboxForBoolean = True
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper, tkFile, tkClassRef, tkPointer]
|
||||
Indent = 10
|
||||
NameFont.Color = clWindowText
|
||||
OnEditorFilter = dbgeeOptsEdEditorFilter
|
||||
PreferredSplitterX = 190
|
||||
SplitterX = 190
|
||||
ValueFont.Color = clGreen
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
object Splitter2: TSplitter[1]
|
||||
inherited toolbar: TDexedToolBar
|
||||
Top = 10
|
||||
Width = 664
|
||||
object btnStack: TDexedToolButton[0]
|
||||
Left = 238
|
||||
Hint = 'view call stack'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnStack'
|
||||
OnClick = btnStackClick
|
||||
resourceName = 'LIST'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnReg: TDexedToolButton[1]
|
||||
Left = 210
|
||||
Hint = 'update CPU registers values'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnReg'
|
||||
OnClick = btnRegClick
|
||||
resourceName = 'PROCESSOR'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button4: TDexedToolButton[2]
|
||||
Left = 205
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button4'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnPause: TDexedToolButton[3]
|
||||
Left = 97
|
||||
Hint = 'pause debugging'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnPause'
|
||||
OnClick = btnPauseClick
|
||||
resourceName = 'PAUSE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnStop: TDexedToolButton[4]
|
||||
Left = 41
|
||||
Hint = 'stop debugging'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnStop'
|
||||
OnClick = btnStopClick
|
||||
resourceName = 'STOP'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnContinue: TDexedToolButton[5]
|
||||
Left = 69
|
||||
Hint = 'continue debugging'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnContinue'
|
||||
OnClick = btnContClick
|
||||
resourceName = 'PLAY'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnNext: TDexedToolButton[6]
|
||||
Left = 125
|
||||
Hint = 'step to next instruction, including in calls'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnNext'
|
||||
DropdownMenu = mnuNext
|
||||
OnClick = btnNextClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'GO_DOWN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnOver: TDexedToolButton[7]
|
||||
Left = 165
|
||||
Hint = 'step to the next instruction, excluding calls'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnOver'
|
||||
DropdownMenu = mnuStep
|
||||
OnClick = btnOverClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'GO_JUMP'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnVariables: TDexedToolButton[8]
|
||||
Left = 266
|
||||
Hint = 'update variables list'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnVariables'
|
||||
OnClick = btnVariablesClick
|
||||
resourceName = 'WATCH_WINDOW'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnStart: TDexedToolButton[9]
|
||||
Left = 1
|
||||
Hint = 'start debugging'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnStart'
|
||||
DropdownMenu = mnuProjRunnable
|
||||
OnClick = btnStartClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'POWER'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnWatch: TDexedToolButton[10]
|
||||
Left = 294
|
||||
Hint = 'add a watchpoint for the variable selected in the list'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnWatch'
|
||||
DropdownMenu = mnuWatch
|
||||
OnClick = btnWatchClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'CAMERA_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnEval: TDexedToolButton[11]
|
||||
Left = 334
|
||||
Hint = 'evaluate either a variable from the list or a custom expression'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnEval'
|
||||
DropdownMenu = mnuEval
|
||||
OnClick = btnEvalClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'EVALUATE_FORMULA'
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
object Splitter2: TSplitter[2]
|
||||
Cursor = crVSplit
|
||||
Left = 0
|
||||
Height = 6
|
||||
|
@ -474,11 +467,11 @@ inherited GdbWidget: TGdbWidget
|
|||
Align = alTop
|
||||
ResizeAnchor = akTop
|
||||
end
|
||||
inherited contextMenu: TPopupMenu[2]
|
||||
inherited contextMenu: TPopupMenu[3]
|
||||
Left = 56
|
||||
Top = 64
|
||||
end
|
||||
object mnuProjRunnable: TPopupMenu[3]
|
||||
object mnuProjRunnable: TPopupMenu[4]
|
||||
Left = 56
|
||||
Top = 112
|
||||
object mnuSelProj: TMenuItem
|
||||
|
@ -497,8 +490,11 @@ inherited GdbWidget: TGdbWidget
|
|||
Caption = 'Debug custom executable...'
|
||||
OnClick = mnuSelCustomClick
|
||||
end
|
||||
object mnuDebugRecent: TMenuItem
|
||||
Caption = 'Debug recent executable'
|
||||
end
|
||||
end
|
||||
object mnuWatch: TPopupMenu[4]
|
||||
object mnuWatch: TPopupMenu[5]
|
||||
Left = 56
|
||||
Top = 160
|
||||
object mnuReadW: TMenuItem
|
||||
|
@ -518,7 +514,7 @@ inherited GdbWidget: TGdbWidget
|
|||
OnClick = mnuReadWriteWClick
|
||||
end
|
||||
end
|
||||
object mnuNext: TPopupMenu[5]
|
||||
object mnuNext: TPopupMenu[6]
|
||||
Left = 152
|
||||
Top = 112
|
||||
object mnuNextMachine: TMenuItem
|
||||
|
@ -526,7 +522,7 @@ inherited GdbWidget: TGdbWidget
|
|||
Caption = 'machine instruction'
|
||||
end
|
||||
end
|
||||
object mnuStep: TPopupMenu[6]
|
||||
object mnuStep: TPopupMenu[7]
|
||||
Left = 152
|
||||
Top = 160
|
||||
object mnuStepMachine: TMenuItem
|
||||
|
@ -534,7 +530,7 @@ inherited GdbWidget: TGdbWidget
|
|||
Caption = 'machine instruction'
|
||||
end
|
||||
end
|
||||
object mnuEval: TPopupMenu[7]
|
||||
object mnuEval: TPopupMenu[8]
|
||||
Left = 216
|
||||
Top = 168
|
||||
object mnuEvalSelected: TMenuItem
|
||||
|
@ -554,7 +550,7 @@ inherited GdbWidget: TGdbWidget
|
|||
OnClick = mnuEvalCustomClick
|
||||
end
|
||||
end
|
||||
object mnuEvalCompletion: TPopupMenu[8]
|
||||
object mnuEvalCompletion: TPopupMenu[9]
|
||||
Left = 288
|
||||
Top = 168
|
||||
end
|
||||
|
|
|
@ -8,7 +8,7 @@ uses
|
|||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, RegExpr, ComCtrls,
|
||||
PropEdits, GraphPropEdits, RTTIGrids, Dialogs, ExtCtrls, Menus, Buttons,
|
||||
StdCtrls, process, fpjson, typinfo, {$IFDEF UNIX}Unix,{$ELSE} Windows,{$ENDIF}
|
||||
ListViewFilterEdit, SynEdit, ObjectInspector, math,
|
||||
ListViewFilterEdit, SynEdit, ObjectInspector, math, u_mru,
|
||||
u_common, u_interfaces, u_widget, u_processes, u_observer, u_synmemo,
|
||||
u_sharedres, u_stringrange, u_dsgncontrols, u_dialogs, u_dbgitf,
|
||||
u_ddemangle, u_writableComponent, EditBtn, strutils, u_controls;
|
||||
|
@ -319,11 +319,13 @@ type
|
|||
fGdbPath: TFilename;
|
||||
fUseCustomCommandsHistory: boolean;
|
||||
fAutoDotCompletion: boolean;
|
||||
fDebugRecentMru: TMRUFileList;
|
||||
procedure setIgnoredSignals(value: TStringList);
|
||||
procedure setCommandsHistory(value: TStringList);
|
||||
procedure setCustomEvalHistory(value: TStringList);
|
||||
procedure setShortcuts(value: TDebugShortcuts);
|
||||
procedure setMaxCallStackDepth(value: integer);
|
||||
procedure setDebugRecentMru(value: TMRUFileList);
|
||||
procedure cleanInvalidHistoryEntries;
|
||||
published
|
||||
property asmSyntax: TAsmSyntax read fAsmSyntax write fAsmSyntax;
|
||||
|
@ -338,6 +340,7 @@ type
|
|||
property coreBreakingSymbols: TDlangBreakpoints read fDlangBreakpoints write fDlangBreakpoints;
|
||||
property currentEvalKind: TGdbEvalKind read fCurrentEvalKind write fCurrentEvalKind;
|
||||
property customEvalHistory: TStringList read fCustomEvalHistory write setCustomEvalHistory;
|
||||
property debugRecentMru: TMRUFileList read fDebugRecentMru write setDebugRecentMru;
|
||||
property gdbPath: TFilename read fGdbPath write fGdbPath;
|
||||
property hideCpuView: boolean read fHideCpuView write fHideCpuView default false;
|
||||
property ignoredSignals: TStringList read fIgnoredSignals write setIgnoredSignals;
|
||||
|
@ -437,6 +440,7 @@ type
|
|||
Edit1: TComboBox;
|
||||
GroupBox3: TGroupBox;
|
||||
lstThreads: TListView;
|
||||
mnuDebugRecent: TMenuItem;
|
||||
mnuSelCustom: TMenuItem;
|
||||
mnuEvalDeref: TMenuItem;
|
||||
mnuEvalSelected: TMenuItem;
|
||||
|
@ -604,6 +608,10 @@ type
|
|||
function evaluate(const exp: string): string;
|
||||
procedure executeFromShortcut(sender: TObject);
|
||||
procedure itemCompletetionClick(sender: TObject);
|
||||
procedure mruDebugRecentChange(Sender: TObject);
|
||||
procedure mruDebugRecentClick(Sender: TObject);
|
||||
procedure mruDebugRecentClearClick(Sender: TObject);
|
||||
procedure mruDebugRecentDeleteInvalidClick(Sender: TObject);
|
||||
public
|
||||
constructor create(aOwner: TComponent); override;
|
||||
destructor destroy; override;
|
||||
|
@ -717,6 +725,7 @@ begin
|
|||
fCustomEvalHistory := TstringList.Create;
|
||||
fCustomEvalHistory.Duplicates:= dupIgnore;
|
||||
fCustomEvalHistory.Sorted:=true;
|
||||
fDebugRecentMru := TMRUFileList.create;
|
||||
for d in [low(TDlangBreakpoint) .. high(TDlangBreakpoint)] do
|
||||
include(fDlangBreakpoints, d);
|
||||
end;
|
||||
|
@ -727,6 +736,7 @@ begin
|
|||
fCommandsHistory.Free;
|
||||
fCustomEvalHistory.Free;
|
||||
fShortcuts.Free;
|
||||
fDebugRecentMru.free;
|
||||
inherited;
|
||||
end;
|
||||
|
||||
|
@ -769,6 +779,11 @@ begin
|
|||
fShortcuts.assign(value);
|
||||
end;
|
||||
|
||||
procedure TDebugOptionsBase.setDebugRecentMru(value: TMRUFileList);
|
||||
begin
|
||||
fDebugRecentMru.assign(value);
|
||||
end;
|
||||
|
||||
procedure TDebugOptionsBase.setMaxCallStackDepth(value: integer);
|
||||
begin
|
||||
value := max(1, value);
|
||||
|
@ -801,6 +816,7 @@ begin
|
|||
fCurrentEvalKind := src.fCurrentEvalKind;
|
||||
fUseCustomCommandsHistory:= src.fUseCustomCommandsHistory;
|
||||
fAutoDotCompletion:=src.fAutoDotCompletion;
|
||||
fDebugRecentMru.assign(src.fDebugRecentMru);
|
||||
end
|
||||
else inherited;
|
||||
end;
|
||||
|
@ -1278,6 +1294,7 @@ begin
|
|||
fSubj:= TDebugObserverSubject.Create;
|
||||
fOptions:= TDebugOptions.create(self);
|
||||
fOptions.onChangesApplied:=@optionsChangesApplied;
|
||||
fOptions.debugRecentMru.OnChange:=@mruDebugRecentChange;
|
||||
fDebugeeOptions:= TDebugeeOptions.Create(self);
|
||||
Edit1.Items.Assign(fOptions.commandsHistory);
|
||||
fAddWatchPointKind := wpkWrite;
|
||||
|
@ -1324,6 +1341,7 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
mruDebugRecentChange(nil);
|
||||
updateCpuViewVisibility;
|
||||
updateMenu;
|
||||
updateButtonsState;
|
||||
|
@ -2023,6 +2041,7 @@ begin
|
|||
fLastFunction := '';
|
||||
// gdb process
|
||||
killGdb;
|
||||
fOptions.debugRecentMru.Insert(0, fExe);
|
||||
fGdb := TDexedProcess.create(nil);
|
||||
fGdb.Executable:= gdb;
|
||||
fgdb.Options:= [poUsePipes, poStderrToOutPut];
|
||||
|
@ -3064,6 +3083,72 @@ begin
|
|||
Edit1.Text := (sender as TMenuItem).Caption;
|
||||
end;
|
||||
|
||||
procedure TGdbWidget.mruDebugRecentChange(Sender: TObject);
|
||||
var
|
||||
srcLst: TMRUFileList;
|
||||
itm: TMenuItem;
|
||||
fname: string;
|
||||
i: integer;
|
||||
s: string;
|
||||
begin
|
||||
srcLst := fOptions.debugRecentMru;
|
||||
mnuDebugRecent.Clear;
|
||||
for i := 0 to srcLst.Count-1 do
|
||||
begin
|
||||
s := srcLst.Strings[i];
|
||||
fname := s.extractFileName;
|
||||
itm := TMenuItem.Create(mnuDebugRecent);
|
||||
itm.Hint := s;
|
||||
itm.Caption := fname + ' - (' + itm.Hint + ')';
|
||||
itm.OnClick := @mruDebugRecentClick;
|
||||
mnuDebugRecent.Add(itm);
|
||||
end;
|
||||
|
||||
mnuDebugRecent.AddSeparator;
|
||||
itm := TMenuItem.Create(mnuDebugRecent);
|
||||
itm.Caption := 'Clear all';
|
||||
itm.OnClick := @mruDebugRecentClearClick;
|
||||
itm.Tag := PtrInt(srcLst);
|
||||
mnuDebugRecent.Add(itm);
|
||||
|
||||
itm := TMenuItem.Create(mnuDebugRecent);
|
||||
itm.Caption := 'Remove invalid entries';
|
||||
itm.OnClick := @mruDebugRecentDeleteInvalidClick;
|
||||
itm.Tag := PtrInt(srcLst);
|
||||
mnuDebugRecent.Add(itm);
|
||||
end;
|
||||
|
||||
procedure TGdbWidget.mruDebugRecentClick(Sender: TObject);
|
||||
begin
|
||||
fCustomTargetFile := TMenuItem(sender).Hint;
|
||||
fDebugTargetKind := dtkCustom;
|
||||
mnuSelProj.Checked:=false;
|
||||
mnuSelRunnable.Checked:=false;
|
||||
mnuSelCustom.Checked:=true;
|
||||
updateDebugeeOptionsEditor;
|
||||
btnStart.Click();
|
||||
end;
|
||||
|
||||
procedure TGdbWidget.mruDebugRecentClearClick(Sender: TObject);
|
||||
begin
|
||||
mnuDebugRecent.Clear;
|
||||
end;
|
||||
|
||||
procedure TGdbWidget.mruDebugRecentDeleteInvalidClick(Sender: TObject);
|
||||
var
|
||||
srcLst: TMRUFileList;
|
||||
i: integer;
|
||||
begin
|
||||
srcLst := fOptions.debugRecentMru;
|
||||
if srcLst.isNotAssigned then
|
||||
exit;
|
||||
srcLst.BeginUpdate;
|
||||
for i := srcLst.Count-1 downto 0 do
|
||||
if not srcLst.Strings[i].fileExists then
|
||||
srcLst.Delete(i);
|
||||
srcLst.EndUpdate;
|
||||
end;
|
||||
|
||||
procedure TGdbWidget.btnSendComClick(Sender: TObject);
|
||||
begin
|
||||
sendCustomCommand;
|
||||
|
@ -3084,7 +3169,10 @@ begin
|
|||
fDocHandler.openDocument(nme);
|
||||
doc := fDocHandler.findDocument(nme);
|
||||
if doc.isAssigned then
|
||||
begin
|
||||
doc.CaretY:= itm.line;
|
||||
doc.centerCursor();
|
||||
end;
|
||||
gdbCommand('-stack-select-frame ' + intToStr(lstCallStack.ItemIndex));
|
||||
if fOptions.autoGetVariables then
|
||||
infoVariables;
|
||||
|
|
147
src/u_infos.lfm
147
src/u_infos.lfm
|
@ -1,92 +1,87 @@
|
|||
inherited InfoWidget: TInfoWidget
|
||||
Left = 713
|
||||
Height = 299
|
||||
Height = 302
|
||||
Top = 245
|
||||
Width = 287
|
||||
Width = 255
|
||||
AutoSize = True
|
||||
BorderIcons = [biSystemMenu, biMinimize, biMaximize]
|
||||
Caption = 'About'
|
||||
ClientHeight = 299
|
||||
ClientWidth = 287
|
||||
inherited Back: TPanel
|
||||
Height = 299
|
||||
Width = 287
|
||||
AutoSize = True
|
||||
ClientHeight = 299
|
||||
ClientWidth = 287
|
||||
inherited Content: TPanel
|
||||
Height = 263
|
||||
Width = 287
|
||||
ClientHeight = 263
|
||||
ClientWidth = 287
|
||||
object GroupBox1: TGroupBox[0]
|
||||
Left = 4
|
||||
Height = 74
|
||||
Top = 4
|
||||
Width = 279
|
||||
ClientHeight = 302
|
||||
ClientWidth = 255
|
||||
inherited Content: TPanel
|
||||
Height = 266
|
||||
Top = 36
|
||||
Width = 255
|
||||
ClientHeight = 266
|
||||
ClientWidth = 255
|
||||
object GroupBox1: TGroupBox[0]
|
||||
Left = 4
|
||||
Height = 80
|
||||
Top = 4
|
||||
Width = 247
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'about'
|
||||
ClientHeight = 61
|
||||
ClientWidth = 245
|
||||
TabOrder = 0
|
||||
object Label1: TLabel
|
||||
Left = 8
|
||||
Height = 1
|
||||
Top = 8
|
||||
Width = 229
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'about'
|
||||
ClientHeight = 55
|
||||
ClientWidth = 275
|
||||
TabOrder = 0
|
||||
object Label1: TLabel
|
||||
Left = 8
|
||||
Height = 1
|
||||
Top = 8
|
||||
Width = 259
|
||||
Align = alTop
|
||||
Alignment = taCenter
|
||||
BorderSpacing.Around = 8
|
||||
Font.Style = [fsBold]
|
||||
Layout = tlCenter
|
||||
ParentFont = False
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 8
|
||||
Height = 30
|
||||
Top = 17
|
||||
Width = 259
|
||||
Align = alClient
|
||||
Alignment = taCenter
|
||||
BorderSpacing.Around = 8
|
||||
Caption = 'Licensed under the terms of the BSL-1.0'#10'©Basile Burg, 2014-2022'
|
||||
Font.Style = [fsItalic]
|
||||
Layout = tlCenter
|
||||
ParentFont = False
|
||||
end
|
||||
Alignment = taCenter
|
||||
BorderSpacing.Around = 8
|
||||
Font.Style = [fsBold]
|
||||
Layout = tlCenter
|
||||
ParentColor = False
|
||||
ParentFont = False
|
||||
end
|
||||
object GroupBox2: TGroupBox[1]
|
||||
object Label2: TLabel
|
||||
Left = 8
|
||||
Height = 36
|
||||
Top = 17
|
||||
Width = 229
|
||||
Align = alClient
|
||||
Alignment = taCenter
|
||||
BorderSpacing.Around = 8
|
||||
Caption = 'Licensed under the terms of the BSL-1.0'#10'©Basile Burg, 2014-2023'
|
||||
Font.Style = [fsItalic]
|
||||
Layout = tlCenter
|
||||
ParentColor = False
|
||||
ParentFont = False
|
||||
end
|
||||
end
|
||||
object GroupBox2: TGroupBox[1]
|
||||
Left = 4
|
||||
Height = 174
|
||||
Top = 88
|
||||
Width = 247
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'tools status'
|
||||
ClientHeight = 155
|
||||
ClientWidth = 245
|
||||
TabOrder = 1
|
||||
object boxTools: TScrollBox
|
||||
Left = 4
|
||||
Height = 177
|
||||
Top = 82
|
||||
Width = 279
|
||||
Height = 147
|
||||
Top = 4
|
||||
Width = 237
|
||||
HorzScrollBar.Page = 1
|
||||
VertScrollBar.Page = 1
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'tools status'
|
||||
ClientHeight = 158
|
||||
ClientWidth = 275
|
||||
TabOrder = 1
|
||||
object boxTools: TScrollBox
|
||||
Left = 4
|
||||
Height = 150
|
||||
Top = 4
|
||||
Width = 267
|
||||
HorzScrollBar.Page = 1
|
||||
VertScrollBar.Page = 1
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BorderStyle = bsNone
|
||||
TabOrder = 0
|
||||
end
|
||||
BorderStyle = bsNone
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Height = 30
|
||||
Width = 279
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 247
|
||||
end
|
||||
end
|
||||
|
|
|
@ -122,7 +122,7 @@ begin
|
|||
// set things up and do the work
|
||||
noFill := CurValue = 'clNone';
|
||||
if noFill then
|
||||
Brush.Color := clWindow
|
||||
Brush.Color := clBackground
|
||||
else
|
||||
Brush.Color := StringToColorDef(CurValue,clNone);
|
||||
Pen.Color := ColorToBorderColor(ColorToRGB(Brush.Color));
|
||||
|
@ -167,7 +167,7 @@ begin
|
|||
ACanvas.Font.Color := clHighlightText;
|
||||
end
|
||||
else begin
|
||||
ACanvas.Brush.Color := clwhite{clWindow};
|
||||
ACanvas.Brush.Color := clWindow;
|
||||
ACanvas.Font.Color := clWindowText;
|
||||
end;
|
||||
ACanvas.FillRect(rc);
|
||||
|
|
|
@ -320,6 +320,8 @@ type
|
|||
function closeDocument(doc: TDexedMemo; promptOnChanged: boolean = true): boolean;
|
||||
// conveniance property.
|
||||
property document[index: integer]: TDexedMemo read getDocument;
|
||||
// force page caption
|
||||
procedure forceCaption(doc: TDexedMemo; value: string);
|
||||
end;
|
||||
|
||||
|
||||
|
|
|
@ -6,197 +6,190 @@ inherited LibManEditorWidget: TLibManEditorWidget
|
|||
Caption = 'Library manager'
|
||||
ClientHeight = 297
|
||||
ClientWidth = 641
|
||||
inherited Back: TPanel
|
||||
Height = 297
|
||||
inherited Content: TPanel
|
||||
Height = 261
|
||||
Width = 641
|
||||
AutoSize = True
|
||||
ClientHeight = 297
|
||||
ClientHeight = 261
|
||||
ClientWidth = 641
|
||||
inherited Content: TPanel
|
||||
Height = 261
|
||||
Width = 641
|
||||
ClientHeight = 261
|
||||
ClientWidth = 641
|
||||
object List: TListView[0]
|
||||
Left = 4
|
||||
Height = 253
|
||||
Top = 4
|
||||
Width = 633
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
Columns = <
|
||||
item
|
||||
Caption = 'Alias'
|
||||
Width = 100
|
||||
end
|
||||
item
|
||||
Caption = 'Library file or folder of sources'
|
||||
Width = 230
|
||||
end
|
||||
item
|
||||
Caption = 'Sources root'
|
||||
Width = 230
|
||||
end
|
||||
item
|
||||
Caption = 'project'
|
||||
Width = 230
|
||||
end
|
||||
item
|
||||
Caption = 'enabled'
|
||||
Width = 30
|
||||
end>
|
||||
GridLines = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
SortType = stText
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnEdited = ListEdited
|
||||
OnSelectItem = ListSelectItem
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
object List: TListView[0]
|
||||
Left = 4
|
||||
Height = 253
|
||||
Top = 4
|
||||
Width = 633
|
||||
object btnSelProj: TDexedToolButton[0]
|
||||
Left = 342
|
||||
Hint = 'set the project that compiles the selected entry'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button3'
|
||||
OnClick = btnSelProjClick
|
||||
resourceName = 'SCRIPT_BRICKS'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelRoot: TDexedToolButton[1]
|
||||
Left = 314
|
||||
Hint = 'set the root of the library sources'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button4'
|
||||
OnClick = btnSelRootClick
|
||||
resourceName = 'FOLDER_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelfoldOfFiles: TDexedToolButton[2]
|
||||
Left = 286
|
||||
Hint = 'select a folder containing several d sources (optional trick)'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button5'
|
||||
OnClick = btnSelfoldOfFilesClick
|
||||
resourceName = 'BRICKS'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelFile: TDexedToolButton[3]
|
||||
Left = 258
|
||||
Hint = 'selected the static library file'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button6'
|
||||
OnClick = btnSelFileClick
|
||||
resourceName = 'FOLDER_BRICK'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnEditAlias: TDexedToolButton[4]
|
||||
Left = 230
|
||||
Hint = 'set the entry alias'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button7'
|
||||
OnClick = btnEditAliasClick
|
||||
resourceName = 'BOOK_EDIT'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button5: TDexedToolButton[5]
|
||||
Left = 225
|
||||
Height = 5
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button8'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnEnabled: TDexedToolButton[6]
|
||||
Left = 197
|
||||
Hint = 'activate or deactivate the selected entry'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnEnabled'
|
||||
OnClick = btnEnabledClick
|
||||
resourceName = 'BOOK'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnDubFetch: TDexedToolButton[7]
|
||||
Left = 169
|
||||
Hint = 'setup a new entry using an online DUB package'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnDubFetch'
|
||||
OnClick = btnDubFetchClick
|
||||
resourceName = 'DUB'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnOpenProj: TDexedToolButton[8]
|
||||
Left = 141
|
||||
Hint = 'open the project that matches to the selected entry'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnOpenProj'
|
||||
OnClick = btnOpenProjClick
|
||||
resourceName = 'BOOK_OPEN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnReg: TDexedToolButton[9]
|
||||
Left = 113
|
||||
Hint = 'register a new entry using the active project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnReg'
|
||||
OnClick = btnRegClick
|
||||
resourceName = 'BOOK_LINK'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveUp: TDexedToolButton[10]
|
||||
Left = 85
|
||||
Hint = 'move entry up'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveUp'
|
||||
OnClick = btnMoveUpClick
|
||||
resourceName = 'ARROW_UP'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveDown: TDexedToolButton[11]
|
||||
Left = 57
|
||||
Hint = 'move entry down'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveDown'
|
||||
OnClick = btnMoveDownClick
|
||||
resourceName = 'ARROW_DOWN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRemLib: TDexedToolButton[12]
|
||||
Left = 29
|
||||
Hint = 'remove selected entry'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemLib'
|
||||
OnClick = btnRemLibClick
|
||||
resourceName = 'BOOK_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddLib: TDexedToolButton[13]
|
||||
Left = 1
|
||||
Hint = 'add a new empty entry'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddLib'
|
||||
OnClick = btnAddLibClick
|
||||
resourceName = 'BOOK_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
Columns = <
|
||||
item
|
||||
Caption = 'Alias'
|
||||
Width = 100
|
||||
end
|
||||
item
|
||||
Caption = 'Library file or folder of sources'
|
||||
Width = 230
|
||||
end
|
||||
item
|
||||
Caption = 'Sources root'
|
||||
Width = 230
|
||||
end
|
||||
item
|
||||
Caption = 'project'
|
||||
Width = 230
|
||||
end
|
||||
item
|
||||
Caption = 'enabled'
|
||||
Width = 30
|
||||
end>
|
||||
GridLines = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
SortType = stText
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnEdited = ListEdited
|
||||
OnSelectItem = ListSelectItem
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 633
|
||||
object btnSelProj: TDexedToolButton[0]
|
||||
Left = 342
|
||||
Hint = 'set the project that compiles the selected entry'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button3'
|
||||
OnClick = btnSelProjClick
|
||||
resourceName = 'SCRIPT_BRICKS'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelRoot: TDexedToolButton[1]
|
||||
Left = 314
|
||||
Hint = 'set the root of the library sources'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button4'
|
||||
OnClick = btnSelRootClick
|
||||
resourceName = 'FOLDER_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelfoldOfFiles: TDexedToolButton[2]
|
||||
Left = 286
|
||||
Hint = 'select a folder containing several d sources (optional trick)'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button5'
|
||||
OnClick = btnSelfoldOfFilesClick
|
||||
resourceName = 'BRICKS'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelFile: TDexedToolButton[3]
|
||||
Left = 258
|
||||
Hint = 'selected the static library file'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button6'
|
||||
OnClick = btnSelFileClick
|
||||
resourceName = 'FOLDER_BRICK'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnEditAlias: TDexedToolButton[4]
|
||||
Left = 230
|
||||
Hint = 'set the entry alias'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button7'
|
||||
OnClick = btnEditAliasClick
|
||||
resourceName = 'BOOK_EDIT'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button5: TDexedToolButton[5]
|
||||
Left = 225
|
||||
Height = 5
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button8'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnEnabled: TDexedToolButton[6]
|
||||
Left = 197
|
||||
Hint = 'activate or deactivate the selected entry'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnEnabled'
|
||||
OnClick = btnEnabledClick
|
||||
resourceName = 'BOOK'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnDubFetch: TDexedToolButton[7]
|
||||
Left = 169
|
||||
Hint = 'setup a new entry using an online DUB package'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnDubFetch'
|
||||
OnClick = btnDubFetchClick
|
||||
resourceName = 'DUB'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnOpenProj: TDexedToolButton[8]
|
||||
Left = 141
|
||||
Hint = 'open the project that matches to the selected entry'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnOpenProj'
|
||||
OnClick = btnOpenProjClick
|
||||
resourceName = 'BOOK_OPEN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnReg: TDexedToolButton[9]
|
||||
Left = 113
|
||||
Hint = 'register a new entry using the active project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnReg'
|
||||
OnClick = btnRegClick
|
||||
resourceName = 'BOOK_LINK'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveUp: TDexedToolButton[10]
|
||||
Left = 85
|
||||
Hint = 'move entry up'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveUp'
|
||||
OnClick = btnMoveUpClick
|
||||
resourceName = 'ARROW_UP'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveDown: TDexedToolButton[11]
|
||||
Left = 57
|
||||
Hint = 'move entry down'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveDown'
|
||||
OnClick = btnMoveDownClick
|
||||
resourceName = 'ARROW_DOWN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRemLib: TDexedToolButton[12]
|
||||
Left = 29
|
||||
Hint = 'remove selected entry'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemLib'
|
||||
OnClick = btnRemLibClick
|
||||
resourceName = 'BOOK_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddLib: TDexedToolButton[13]
|
||||
Left = 1
|
||||
Hint = 'add a new empty entry'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddLib'
|
||||
OnClick = btnAddLibClick
|
||||
resourceName = 'BOOK_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
132
src/u_main.lfm
132
src/u_main.lfm
|
@ -12,7 +12,6 @@ object MainForm: TMainForm
|
|||
OnDropFiles = FormDropFiles
|
||||
OnResize = FormResize
|
||||
ShowHint = True
|
||||
LCLVersion = '2.2.0.4'
|
||||
object mainMenu: TMainMenu
|
||||
Top = 1
|
||||
object MenuItem1: TMenuItem
|
||||
|
@ -135,9 +134,15 @@ object MainForm: TMainForm
|
|||
object MenuItem19: TMenuItem
|
||||
Action = actEdUndo
|
||||
end
|
||||
object MenuItem120: TMenuItem
|
||||
Action = actEdUndoAll
|
||||
end
|
||||
object MenuItem20: TMenuItem
|
||||
Action = actEdRedo
|
||||
end
|
||||
object MenuItem119: TMenuItem
|
||||
Action = actEdRedoAll
|
||||
end
|
||||
object MenuItem21: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
|
@ -418,7 +423,7 @@ object MainForm: TMainForm
|
|||
end
|
||||
end
|
||||
object Actions: TActionList
|
||||
Left = 31
|
||||
Left = 32
|
||||
object actEdCopy: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Copy'
|
||||
|
@ -448,27 +453,6 @@ object MainForm: TMainForm
|
|||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 16474
|
||||
end
|
||||
object actEdRedo: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Redo'
|
||||
OnExecute = actEdRedoExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 24666
|
||||
end
|
||||
object actEdMacStartStop: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Start/stop macro recording'
|
||||
OnExecute = actEdMacStartStopExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 24658
|
||||
end
|
||||
object actEdMacPlay: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Play macro'
|
||||
OnExecute = actEdMacPlayExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 24656
|
||||
end
|
||||
object actFileSave: TAction
|
||||
Category = 'File'
|
||||
Caption = 'Save file'
|
||||
|
@ -530,20 +514,6 @@ object MainForm: TMainForm
|
|||
OnExecute = actProjSourceExecute
|
||||
OnUpdate = updateProjectBasedAction
|
||||
end
|
||||
object actEdIndent: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Indent'
|
||||
OnExecute = actEdIndentExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 24649
|
||||
end
|
||||
object actEdUnIndent: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Unindent'
|
||||
OnExecute = actEdUnIndentExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 24661
|
||||
end
|
||||
object actProjOptView: TAction
|
||||
Category = 'Project'
|
||||
Caption = 'View project command line'
|
||||
|
@ -583,20 +553,6 @@ object MainForm: TMainForm
|
|||
OnExecute = actProjRunWithArgsExecute
|
||||
OnUpdate = updateProjectBasedAction
|
||||
end
|
||||
object actEdFind: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Find...'
|
||||
OnExecute = actEdFindExecute
|
||||
OnUpdate = updateDocumentBasedAction
|
||||
ShortCut = 16454
|
||||
end
|
||||
object actEdFindNext: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Find next'
|
||||
OnExecute = actEdFindNextExecute
|
||||
OnUpdate = updateDocumentBasedAction
|
||||
ShortCut = 114
|
||||
end
|
||||
object actProjOpenContFold: TAction
|
||||
Category = 'Project'
|
||||
Caption = 'View in mini explorer'
|
||||
|
@ -819,12 +775,6 @@ object MainForm: TMainForm
|
|||
OnExecute = actFileCloseAllExecute
|
||||
OnUpdate = updateDocumentBasedAction
|
||||
end
|
||||
object actEdFormat: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Apply code formatting'
|
||||
OnExecute = actEdFormatExecute
|
||||
OnUpdate = updateDocumentBasedAction
|
||||
end
|
||||
object actProjTest: TAction
|
||||
Category = 'Project'
|
||||
Caption = 'Test project'
|
||||
|
@ -862,6 +812,74 @@ object MainForm: TMainForm
|
|||
Caption = 'Check semantics'
|
||||
OnExecute = actProjCheckSemaExecute
|
||||
end
|
||||
object actEdUndoAll: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Undo all'
|
||||
OnExecute = actEdUndoAllExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
end
|
||||
object actEdRedo: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Redo'
|
||||
OnExecute = actEdRedoExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 24666
|
||||
end
|
||||
object actEdRedoAll: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Redo all'
|
||||
OnExecute = actEdRedoAllExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 49242
|
||||
end
|
||||
object actEdMacStartStop: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Start/stop macro recording'
|
||||
OnExecute = actEdMacStartStopExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 24658
|
||||
end
|
||||
object actEdMacPlay: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Play macro'
|
||||
OnExecute = actEdMacPlayExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 24656
|
||||
end
|
||||
object actEdIndent: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Indent'
|
||||
OnExecute = actEdIndentExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 24649
|
||||
end
|
||||
object actEdUnIndent: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Unindent'
|
||||
OnExecute = actEdUnIndentExecute
|
||||
OnUpdate = updateDocEditBasedAction
|
||||
ShortCut = 24661
|
||||
end
|
||||
object actEdFind: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Find...'
|
||||
OnExecute = actEdFindExecute
|
||||
OnUpdate = updateDocumentBasedAction
|
||||
ShortCut = 16454
|
||||
end
|
||||
object actEdFindNext: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Find next'
|
||||
OnExecute = actEdFindNextExecute
|
||||
OnUpdate = updateDocumentBasedAction
|
||||
ShortCut = 114
|
||||
end
|
||||
object actEdFormat: TAction
|
||||
Category = 'Edit'
|
||||
Caption = 'Apply code formatting'
|
||||
OnExecute = actEdFormatExecute
|
||||
OnUpdate = updateDocumentBasedAction
|
||||
end
|
||||
end
|
||||
object ApplicationProperties1: TApplicationProperties
|
||||
OnActivate = ApplicationProperties1Activate
|
||||
|
|
|
@ -16,7 +16,8 @@ uses
|
|||
u_toolseditor, u_procinput, u_optionseditor, u_symlist, u_mru, u_processes,
|
||||
u_infos, u_dubproject, u_dialogs, u_dubprojeditor, u_gdb, u_makeproject,
|
||||
u_dfmt, u_lcldragdrop, u_projgroup, u_projutils, u_stringrange, u_dexed_d,
|
||||
u_halstead, u_profileviewer, u_semver, u_dsgncontrols, u_term, u_newdubproj;
|
||||
u_halstead, u_profileviewer, u_semver, u_dsgncontrols, u_term, u_newdubproj,
|
||||
u_blame;
|
||||
|
||||
type
|
||||
|
||||
|
@ -117,6 +118,8 @@ type
|
|||
actFileCloseAll: TAction;
|
||||
actFileNewClip: TAction;
|
||||
actEdFormat: TAction;
|
||||
actEdRedoAll: TAction;
|
||||
actEdUndoAll: TAction;
|
||||
actProjCheckSema: TAction;
|
||||
actProjSetEnv: TAction;
|
||||
actProjGitPull: TAction;
|
||||
|
@ -186,6 +189,8 @@ type
|
|||
MenuItem116: TMenuItem;
|
||||
MenuItem117: TMenuItem;
|
||||
MenuItem118: TMenuItem;
|
||||
MenuItem119: TMenuItem;
|
||||
MenuItem120: TMenuItem;
|
||||
mnuGitBranch: TMenuItem;
|
||||
mnuItemDubDialog: TMenuItem;
|
||||
mnuItemHelp: TMenuItem;
|
||||
|
@ -297,6 +302,7 @@ type
|
|||
MenuItem8: TMenuItem;
|
||||
MenuItem9: TMenuItem;
|
||||
procedure actEdFormatExecute(Sender: TObject);
|
||||
procedure actEdUndoAllExecute(Sender: TObject);
|
||||
procedure actFileCloseAllExecute(Sender: TObject);
|
||||
procedure actFileCloseAllOthersExecute(Sender: TObject);
|
||||
procedure actFileCompileExecute(Sender: TObject);
|
||||
|
@ -330,6 +336,7 @@ type
|
|||
procedure actProjSetEnvExecute(Sender: TObject);
|
||||
procedure actProjStopCompExecute(Sender: TObject);
|
||||
procedure actProjTestExecute(Sender: TObject);
|
||||
procedure actEdRedoAllExecute(Sender: TObject);
|
||||
procedure actSetRunnableSwExecute(Sender: TObject);
|
||||
procedure ApplicationProperties1Activate(Sender: TObject);
|
||||
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||
|
@ -431,8 +438,9 @@ type
|
|||
fDubProjWidg: TDubProjectEditorWidget;
|
||||
fPrjGrpWidg: TProjectGroupWidget;
|
||||
fGdbWidg: TGdbWidget;
|
||||
fBlameWidg: TBlameWidget;
|
||||
{$IFDEF UNIX}
|
||||
fTermWWidg: TTermWidget;
|
||||
fTermWidg: TTermWidget;
|
||||
{$ENDIF}
|
||||
|
||||
fDfmtWidg: TDfmtWidget;
|
||||
|
@ -454,6 +462,8 @@ type
|
|||
procedure updateFloatingWidgetOnTop(onTop: boolean);
|
||||
procedure widgetDockingChanged(sender: TDexedWidget; newState: TWidgetDockingState);
|
||||
procedure mnuOptsItemClick(sender: TObject);
|
||||
procedure anchorDockingAddControlEvent(Sender: TObject; aName: string;
|
||||
var AControl: TControl; DoDisableAutoSizing: boolean);
|
||||
|
||||
// IMainMenu
|
||||
function singleServiceName: string;
|
||||
|
@ -1079,7 +1089,7 @@ begin
|
|||
// group, group item has the focus
|
||||
grp := getProjectGroup();
|
||||
fProjectGroup := grp.groupFilename();
|
||||
if fProjectGroup.isNotEmpty() and MainForm.fProj.inGroup() then
|
||||
if fProjectGroup.isNotEmpty() and assigned(MainForm.fProj) and MainForm.fProj.inGroup() then
|
||||
begin
|
||||
fProjectIndex := grp.getProjectIndex();
|
||||
fProjectConfigIndex := MainForm.fProj.getActiveConfigurationIndex();
|
||||
|
@ -1353,6 +1363,10 @@ begin
|
|||
|
||||
fProcInputHandler := getprocInputHandler;
|
||||
|
||||
InitDocking;
|
||||
if FileExists(getDocPath + 'docking.xml') then
|
||||
LoadDocking();
|
||||
|
||||
fInitialized := true;
|
||||
end;
|
||||
|
||||
|
@ -1556,8 +1570,10 @@ begin
|
|||
actFileNewClip.ImageIndex:= i;
|
||||
i := loadIcon('ARROW_UNDO');
|
||||
actEdUndo.ImageIndex:= i;
|
||||
actEdUndoAll.ImageIndex:= i;
|
||||
i := loadIcon('ARROW_REDO');
|
||||
actEdRedo.ImageIndex:= i;
|
||||
actEdRedoAll.ImageIndex:= i;
|
||||
i := loadIcon('FIND');
|
||||
actEdFind.ImageIndex:= i;
|
||||
actEdFindNext.ImageIndex:= i;
|
||||
|
@ -1606,6 +1622,19 @@ begin
|
|||
fCleanIconIndex := loadIcon('CLEAN');
|
||||
end;
|
||||
|
||||
procedure TMainForm.anchorDockingAddControlEvent(Sender: TObject; aName: string;
|
||||
var AControl: TControl; DoDisableAutoSizing: boolean);
|
||||
var w : TDexedWidget;
|
||||
begin
|
||||
AControl := nil;
|
||||
for w in fWidgList do
|
||||
if w.name = aName then
|
||||
begin
|
||||
AControl := w;
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.InitWidgets;
|
||||
var
|
||||
widg: TDexedWidget;
|
||||
|
@ -1613,6 +1642,9 @@ var
|
|||
itm: TMenuItem;
|
||||
idx: integer;
|
||||
begin
|
||||
|
||||
DockMaster.OnCreateControl := @anchorDockingAddControlEvent;
|
||||
|
||||
fWidgList := TWidgetList.Create;
|
||||
fMesgWidg := TMessagesWidget.create(self);
|
||||
fEditWidg := TEditorWidget.create(self);
|
||||
|
@ -1632,8 +1664,9 @@ begin
|
|||
fPrjGrpWidg := TProjectGroupWidget.create(self);
|
||||
fProfWidg := TProfileViewerWidget.create(self);
|
||||
fGdbWidg := TGdbWidget.create(self);
|
||||
fBlameWidg := TBlameWidget.create(self);
|
||||
{$IFDEF UNIX}
|
||||
fTermWWidg := TTermWidget.create(self);
|
||||
fTermWidg := TTermWidget.create(self);
|
||||
{$ENDIF}
|
||||
|
||||
getMessageDisplay(fMsgs);
|
||||
|
@ -1657,8 +1690,9 @@ begin
|
|||
fWidgList.addWidget(@fPrjGrpWidg);
|
||||
fWidgList.addWidget(@fProfWidg);
|
||||
fWidgList.addWidget(@fGdbWidg);
|
||||
fWidgList.addWidget(@fBlameWidg);
|
||||
{$IFDEF UNIX}
|
||||
fWidgList.addWidget(@fTermWWidg);
|
||||
fWidgList.addWidget(@fTermWidg);
|
||||
{$ENDIF}
|
||||
|
||||
fWidgList.sort(@CompareWidgCaption);
|
||||
|
@ -1780,14 +1814,21 @@ begin
|
|||
begin
|
||||
w := fWidgList.widget[i];
|
||||
if not w.isDockable then
|
||||
begin
|
||||
if not w.isModal then
|
||||
w.showWidget;
|
||||
continue;
|
||||
if not w.Visible then
|
||||
continue;
|
||||
end;
|
||||
w.showWidget;
|
||||
w.Show;
|
||||
if w = fEditWidg then
|
||||
continue;
|
||||
h := DockMaster.GetAnchorSite(w);
|
||||
if h.isAssigned then
|
||||
h.ManualFloat(w.ClientRect, false);
|
||||
// this should be made automatically but fixes
|
||||
// https://gitlab.com/basile.b/dexed/-/issues/50
|
||||
h.pages.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -1811,7 +1852,7 @@ begin
|
|||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fLibMWidg), DockMaster.GetSite(fMesgWidg), alClient, fMesgWidg);
|
||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fTodolWidg), DockMaster.GetSite(fMesgWidg), alClient, fMesgWidg);
|
||||
{$IFDEF LINUX}
|
||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fTermWWidg), DockMaster.GetSite(fMesgWidg), alClient, fMesgWidg);
|
||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fTermWidg), DockMaster.GetSite(fMesgWidg), alClient, fMesgWidg);
|
||||
{$ENDIF}
|
||||
fMesgWidg.showWidget;
|
||||
// left
|
||||
|
@ -2099,8 +2140,6 @@ var
|
|||
begin
|
||||
inherited;
|
||||
|
||||
InitDocking;
|
||||
|
||||
// TODO-cbetterfix: clipboard doesn't work first time it's used on a reloaded doc.
|
||||
// see: http://forum.lazarus.freepascal.org/index.php/topic,30616.0.htm
|
||||
if fAppliOpts.reloadLastDocuments then
|
||||
|
@ -2118,11 +2157,6 @@ begin
|
|||
fInfoWidg.showWidget;
|
||||
end;
|
||||
|
||||
// see https://bugs.freepascal.org/view.php?id=29475
|
||||
// reloading must be done here otherwise there are "jumps"
|
||||
if FileExists(getDocPath + 'docking.xml') then
|
||||
LoadDocking();
|
||||
|
||||
if fAppliOpts.autoCheckUpdates then
|
||||
begin
|
||||
url := checkForUpdate;
|
||||
|
@ -2884,6 +2918,18 @@ begin
|
|||
fDoc.Redo;
|
||||
end;
|
||||
|
||||
procedure TMainForm.actEdRedoAllExecute(Sender: TObject);
|
||||
begin
|
||||
if fDoc.isAssigned then
|
||||
fDoc.redoAll();
|
||||
end;
|
||||
|
||||
procedure TMainForm.actEdUndoAllExecute(Sender: TObject);
|
||||
begin
|
||||
if fDoc.isAssigned then
|
||||
fDoc.undoAll();
|
||||
end;
|
||||
|
||||
procedure TMainForm.actEdMacPlayExecute(Sender: TObject);
|
||||
begin
|
||||
if fDoc.isAssigned then
|
||||
|
@ -2923,7 +2969,7 @@ begin
|
|||
if fDoc.SelAvail then
|
||||
str := fDoc.SelText
|
||||
else
|
||||
str := fDoc.Identifier;
|
||||
str := fDoc.HighlightedIdent;
|
||||
ffindwidg.cbToFind.Text := str;
|
||||
ffindwidg.cbToFindChange(nil);
|
||||
ffindwidg.cbToFind.SetFocus;
|
||||
|
@ -4077,6 +4123,8 @@ begin
|
|||
fProj.test;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
procedure TMainForm.actProjStopCompExecute(Sender: TObject);
|
||||
begin
|
||||
if fProj.isAssigned then
|
||||
|
|
|
@ -16,14 +16,17 @@ TMakeProjectOptionsBase = class(TWritableLfmTextComponent)
|
|||
strict private
|
||||
fNumThreads: integer;
|
||||
fSourceDirectories: TStringList;
|
||||
fExcludedSourceExtensions: TStringList;
|
||||
fQuiet: boolean;
|
||||
fKeepGoing: boolean;
|
||||
procedure setSourceDirectories(value: TStringList);
|
||||
procedure setExcludedSourceExtensions(value: TStringList);
|
||||
published
|
||||
property keepGoing: boolean read fKeepGoing write fKeepGoing default false;
|
||||
property quiet: boolean read fQuiet write fQuiet default false;
|
||||
property numThreads: integer read fNumThreads write fNumThreads default 1;
|
||||
property sourceDirectories: TStringList read fSourceDirectories write setSourceDirectories;
|
||||
property excludedSourceExtensions: TStringList read fExcludedSourceExtensions write setExcludedSourceExtensions;
|
||||
public
|
||||
constructor create(aOwner: TComponent); override;
|
||||
destructor destroy(); override;
|
||||
|
@ -152,11 +155,14 @@ begin
|
|||
fNumThreads := 1;
|
||||
fSourceDirectories := TStringList.Create;
|
||||
fSourceDirectories.AddStrings(['src', 'import', 'include']);
|
||||
fExcludedSourceExtensions := TStringList.Create;
|
||||
fExcludedSourceExtensions.AddStrings(['.txt', '.md', '.gcov']);
|
||||
end;
|
||||
|
||||
destructor TMakeProjectOptionsBase.destroy();
|
||||
begin
|
||||
fSourceDirectories.Free;
|
||||
fExcludedSourceExtensions.Free;
|
||||
inherited;
|
||||
end;
|
||||
|
||||
|
@ -165,6 +171,11 @@ begin
|
|||
fSourceDirectories.Assign(value);
|
||||
end;
|
||||
|
||||
procedure TMakeProjectOptionsBase.setExcludedSourceExtensions(value: TStringList);
|
||||
begin
|
||||
fExcludedSourceExtensions.Assign(value);
|
||||
end;
|
||||
|
||||
procedure TMakeProjectOptionsBase.assign(other: TPersistent);
|
||||
var
|
||||
src: TMakeProjectOptionsBase;
|
||||
|
@ -173,6 +184,7 @@ begin
|
|||
begin
|
||||
src := TMakeProjectOptionsBase(other);
|
||||
fSourceDirectories.Assign(src.sourceDirectories);
|
||||
fExcludedSourceExtensions.Assign(src.excludedSourceExtensions);
|
||||
fQuiet:= src.fQuiet;
|
||||
fKeepGoing:= src.fKeepGoing;
|
||||
fNumThreads:= src.fNumThreads;
|
||||
|
@ -291,8 +303,11 @@ var
|
|||
hidden: string = DirectorySeparator + '.';
|
||||
f: string;
|
||||
p: string;
|
||||
e: string;
|
||||
s: string;
|
||||
colPos: integer;
|
||||
i: integer;
|
||||
badExt: boolean;
|
||||
begin
|
||||
fRules.Clear;
|
||||
fRules.add('default');
|
||||
|
@ -330,8 +345,21 @@ begin
|
|||
begin
|
||||
listFiles(srcs, fBasePath + p, true);
|
||||
for f in srcs do
|
||||
begin
|
||||
if pos(hidden, f) = 0 then
|
||||
fSrcs.Add(f[fBasePath.length + 1 .. f.length]);
|
||||
begin
|
||||
badExt := false;
|
||||
s := f.extractFileExt();
|
||||
for e in makeProjectOptions.excludedSourceExtensions do
|
||||
if SameText(e, s) then
|
||||
begin
|
||||
badExt := true;
|
||||
break;
|
||||
end;
|
||||
if not badExt then
|
||||
fSrcs.Add(f[fBasePath.length + 1 .. f.length]);
|
||||
end;
|
||||
end;
|
||||
srcs.Clear;
|
||||
end;
|
||||
finally
|
||||
|
@ -501,7 +529,7 @@ var
|
|||
begin
|
||||
if fMakeProc.isAssigned and fMakeProc.Active then
|
||||
begin
|
||||
fMsgs.message('the project is already being processed by DUB', fAsProjectItf, amcProj, amkWarn);
|
||||
fMsgs.message('the project is already being compiled by make', fAsProjectItf, amcProj, amkWarn);
|
||||
exit;
|
||||
end;
|
||||
killProcess(fMakeProc);
|
||||
|
|
|
@ -6,181 +6,174 @@ inherited MessagesWidget: TMessagesWidget
|
|||
Caption = 'Messages'
|
||||
ClientHeight = 159
|
||||
ClientWidth = 844
|
||||
inherited Back: TPanel
|
||||
Height = 159
|
||||
inherited Content: TPanel
|
||||
Height = 123
|
||||
Width = 844
|
||||
AutoSize = True
|
||||
ClientHeight = 159
|
||||
ClientHeight = 123
|
||||
ClientWidth = 844
|
||||
inherited Content: TPanel
|
||||
Height = 123
|
||||
Width = 844
|
||||
ClientHeight = 123
|
||||
ClientWidth = 844
|
||||
PopupMenu = nil
|
||||
object List: TTreeView[0]
|
||||
Left = 2
|
||||
Height = 119
|
||||
Top = 2
|
||||
Width = 840
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
Font.Style = [fsBold]
|
||||
HideSelection = False
|
||||
MultiSelect = True
|
||||
ParentFont = False
|
||||
ParentShowHint = False
|
||||
ReadOnly = True
|
||||
ShowHint = True
|
||||
ShowLines = False
|
||||
ShowRoot = False
|
||||
TabOrder = 0
|
||||
ToolTips = False
|
||||
OnCustomDrawItem = ListCustomDrawItem
|
||||
OnKeyDown = ListKeyDown
|
||||
Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoThemedDraw]
|
||||
end
|
||||
PopupMenu = nil
|
||||
object List: TTreeView[0]
|
||||
Left = 2
|
||||
Height = 119
|
||||
Top = 2
|
||||
Width = 840
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
Font.Style = [fsBold]
|
||||
HideSelection = False
|
||||
MultiSelect = True
|
||||
ParentFont = False
|
||||
ParentShowHint = False
|
||||
ReadOnly = True
|
||||
ShowHint = True
|
||||
ShowLines = False
|
||||
ShowRoot = False
|
||||
TabOrder = 0
|
||||
ToolTips = False
|
||||
OnCustomDrawItem = ListCustomDrawItem
|
||||
OnKeyDown = ListKeyDown
|
||||
Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoThemedDraw]
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 836
|
||||
ShowCaptions = True
|
||||
Wrapable = False
|
||||
OnResize = toolbarResize
|
||||
object sep: TDexedToolButton[0]
|
||||
Left = 405
|
||||
Height = 28
|
||||
Hint = 'Clean filtered messages'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelMisc: TDexedToolButton[1]
|
||||
Left = 367
|
||||
Hint = 'filter the other messages'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'Misc'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button2: TDexedToolButton[2]
|
||||
Left = 257
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button2'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelApp: TDexedToolButton[3]
|
||||
Left = 176
|
||||
Hint = 'filter the messages related to Coedit'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'Application'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button4: TDexedToolButton[4]
|
||||
Left = 171
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button4'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelProj: TDexedToolButton[5]
|
||||
Left = 118
|
||||
Hint = 'filter the messages related to the active project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'Project'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button6: TDexedToolButton[6]
|
||||
Left = 113
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button6'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelEdit: TDexedToolButton[7]
|
||||
Left = 67
|
||||
Hint = 'filter the messages related to the active editor'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'Editor'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button8: TDexedToolButton[8]
|
||||
Left = 62
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button8'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelAll: TDexedToolButton[9]
|
||||
Left = 34
|
||||
Hint = 'don''t filter the messages'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'All'
|
||||
Down = True
|
||||
scaledSeparator = False
|
||||
end
|
||||
object TreeFilterEdit1: TTreeFilterEdit[10]
|
||||
Left = 416
|
||||
Height = 28
|
||||
Hint = 'in the selected category, filter the messages that contain the text typed here'
|
||||
Top = 1
|
||||
Width = 416
|
||||
OnAfterFilter = TreeFilterEdit1AfterFilter
|
||||
ButtonWidth = 23
|
||||
Align = alRight
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Around = 1
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
OnButtonClick = TreeFilterEdit1ButtonClick
|
||||
end
|
||||
object btnClearCat: TDexedToolButton[11]
|
||||
Left = 1
|
||||
Hint = 'Delete the messages stored for the selected category'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
resourceName = 'CLEAN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object sepCat: TDexedToolButton[12]
|
||||
Left = 29
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'sepCat'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelSearches: TDexedToolButton[13]
|
||||
Left = 262
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'Search results'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button3: TDexedToolButton[14]
|
||||
Left = 362
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button3'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 836
|
||||
ShowCaptions = True
|
||||
Wrapable = False
|
||||
OnResize = toolbarResize
|
||||
object sep: TDexedToolButton[0]
|
||||
Left = 405
|
||||
Height = 28
|
||||
Hint = 'Clean filtered messages'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelMisc: TDexedToolButton[1]
|
||||
Left = 367
|
||||
Hint = 'filter the other messages'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'Misc'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button2: TDexedToolButton[2]
|
||||
Left = 257
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button2'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelApp: TDexedToolButton[3]
|
||||
Left = 176
|
||||
Hint = 'filter the messages related to Coedit'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'Application'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button4: TDexedToolButton[4]
|
||||
Left = 171
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button4'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelProj: TDexedToolButton[5]
|
||||
Left = 118
|
||||
Hint = 'filter the messages related to the active project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'Project'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button6: TDexedToolButton[6]
|
||||
Left = 113
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button6'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelEdit: TDexedToolButton[7]
|
||||
Left = 67
|
||||
Hint = 'filter the messages related to the active editor'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'Editor'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button8: TDexedToolButton[8]
|
||||
Left = 62
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button8'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelAll: TDexedToolButton[9]
|
||||
Left = 34
|
||||
Hint = 'don''t filter the messages'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'All'
|
||||
Down = True
|
||||
scaledSeparator = False
|
||||
end
|
||||
object TreeFilterEdit1: TTreeFilterEdit[10]
|
||||
Left = 416
|
||||
Height = 28
|
||||
Hint = 'in the selected category, filter the messages that contain the text typed here'
|
||||
Top = 1
|
||||
Width = 416
|
||||
OnAfterFilter = TreeFilterEdit1AfterFilter
|
||||
ButtonWidth = 23
|
||||
Align = alRight
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Around = 1
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
OnButtonClick = TreeFilterEdit1ButtonClick
|
||||
end
|
||||
object btnClearCat: TDexedToolButton[11]
|
||||
Left = 1
|
||||
Hint = 'Delete the messages stored for the selected category'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
resourceName = 'CLEAN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object sepCat: TDexedToolButton[12]
|
||||
Left = 29
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'sepCat'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnSelSearches: TDexedToolButton[13]
|
||||
Left = 262
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'Search results'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button3: TDexedToolButton[14]
|
||||
Left = 362
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button3'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
|
@ -811,6 +811,7 @@ var
|
|||
i: integer;
|
||||
n: TTreeNode;
|
||||
begin
|
||||
List.ClearSelection();
|
||||
List.BeginUpdate;
|
||||
for i := 0 to List.Items.Count-1 do
|
||||
begin
|
||||
|
|
|
@ -7,197 +7,202 @@ inherited MiniExplorerWidget: TMiniExplorerWidget
|
|||
Caption = 'Mini explorer'
|
||||
ClientHeight = 565
|
||||
ClientWidth = 535
|
||||
inherited Back: TPanel
|
||||
Height = 565
|
||||
Width = 535
|
||||
AutoSize = True
|
||||
ClientHeight = 565
|
||||
ClientWidth = 535
|
||||
inherited Content: TPanel
|
||||
Left = 4
|
||||
Height = 523
|
||||
Top = 38
|
||||
inherited Content: TPanel
|
||||
Left = 4
|
||||
Height = 523
|
||||
Top = 38
|
||||
Width = 527
|
||||
BorderSpacing.Around = 4
|
||||
ClientHeight = 523
|
||||
ClientWidth = 527
|
||||
object lstFav: TListView[0]
|
||||
Left = 0
|
||||
Height = 131
|
||||
Top = 0
|
||||
Width = 527
|
||||
BorderSpacing.Around = 4
|
||||
ClientHeight = 523
|
||||
Align = alTop
|
||||
Columns = <
|
||||
item
|
||||
Width = 525
|
||||
end>
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
ShowColumnHeaders = False
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnClick = lstFavClick
|
||||
OnDeletion = lstFavDeletion
|
||||
OnEnter = lstFavEnter
|
||||
end
|
||||
object Splitter1: TSplitter[1]
|
||||
Cursor = crVSplit
|
||||
Left = 0
|
||||
Height = 6
|
||||
Top = 131
|
||||
Width = 527
|
||||
Align = alTop
|
||||
OnMouseWheel = Splitter2MouseWheel
|
||||
ResizeAnchor = akTop
|
||||
end
|
||||
object Panel2: TPanel[2]
|
||||
Left = 0
|
||||
Height = 386
|
||||
Top = 137
|
||||
Width = 527
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 386
|
||||
ClientWidth = 527
|
||||
object lstFav: TListView[0]
|
||||
Left = 0
|
||||
Height = 131
|
||||
Top = 0
|
||||
Width = 527
|
||||
Align = alTop
|
||||
Columns = <
|
||||
item
|
||||
Width = 525
|
||||
end>
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
ShowColumnHeaders = False
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnClick = lstFavClick
|
||||
OnDeletion = lstFavDeletion
|
||||
OnEnter = lstFavEnter
|
||||
end
|
||||
object Splitter1: TSplitter[1]
|
||||
TabOrder = 2
|
||||
object Splitter2: TSplitter
|
||||
Cursor = crVSplit
|
||||
Left = 0
|
||||
Height = 6
|
||||
Top = 131
|
||||
Top = 218
|
||||
Width = 527
|
||||
Align = alTop
|
||||
OnMouseWheel = Splitter2MouseWheel
|
||||
ResizeAnchor = akTop
|
||||
end
|
||||
object Panel2: TPanel[2]
|
||||
object treeFolders: TShellTreeView
|
||||
Left = 0
|
||||
Height = 386
|
||||
Top = 137
|
||||
Height = 218
|
||||
Top = 0
|
||||
Width = 527
|
||||
Align = alTop
|
||||
FileSortType = fstAlphabet
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 1
|
||||
OnChange = treeFoldersChange
|
||||
OnDblClick = treeFoldersDblClick
|
||||
OnEnter = TreeEnter
|
||||
OnGetImageIndex = treeFoldersGetImageIndex
|
||||
OnGetSelectedIndex = treeFoldersGetSelectedIndex
|
||||
Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||
ObjectTypes = [otFolders]
|
||||
ShellListView = lstFiles
|
||||
end
|
||||
object Panel1: TPanel
|
||||
Left = 0
|
||||
Height = 162
|
||||
Top = 224
|
||||
Width = 527
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 386
|
||||
Caption = 'Panel1'
|
||||
ClientHeight = 162
|
||||
ClientWidth = 527
|
||||
TabOrder = 2
|
||||
object Splitter2: TSplitter
|
||||
Cursor = crVSplit
|
||||
Left = 0
|
||||
Height = 6
|
||||
Top = 218
|
||||
Width = 527
|
||||
object lstFilter: TListViewFilterEdit
|
||||
Left = 3
|
||||
Height = 30
|
||||
Top = 3
|
||||
Width = 521
|
||||
ButtonWidth = 23
|
||||
Flat = True
|
||||
Align = alTop
|
||||
OnMouseWheel = Splitter2MouseWheel
|
||||
ResizeAnchor = akTop
|
||||
end
|
||||
object treeFolders: TShellTreeView
|
||||
Left = 0
|
||||
Height = 218
|
||||
Top = 0
|
||||
Width = 527
|
||||
Align = alTop
|
||||
FileSortType = fstAlphabet
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 1
|
||||
OnChange = treeFoldersChange
|
||||
OnDblClick = treeFoldersDblClick
|
||||
OnEnter = TreeEnter
|
||||
OnGetImageIndex = treeFoldersGetImageIndex
|
||||
OnGetSelectedIndex = treeFoldersGetSelectedIndex
|
||||
Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||
ObjectTypes = [otFolders]
|
||||
ShellListView = lstFiles
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
OnButtonClick = lstFilterButtonClick
|
||||
OnKeyUp = lstFilterKeyUp
|
||||
end
|
||||
object lstFiles: TShellListView
|
||||
Left = 0
|
||||
Height = 162
|
||||
Top = 224
|
||||
Width = 527
|
||||
Left = 1
|
||||
Height = 126
|
||||
Top = 35
|
||||
Width = 525
|
||||
Align = alClient
|
||||
Color = clDefault
|
||||
DragMode = dmAutomatic
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SortColumn = 0
|
||||
SortType = stText
|
||||
TabOrder = 2
|
||||
TabOrder = 1
|
||||
OnColumnClick = lstFilesColumnClick
|
||||
OnDblClick = lstFilesDblClick
|
||||
OnMouseMove = lstFilesMouseMove
|
||||
OnFileAdded = lstFilesFileAdded
|
||||
ObjectTypes = [otNonFolders, otHidden]
|
||||
ShellTreeView = treeFolders
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 527
|
||||
OnResize = toolbarResize
|
||||
object btnEdit: TDexedToolButton[0]
|
||||
Left = 153
|
||||
Hint = 'open the selected file in an editor or as a new project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnEdit'
|
||||
OnClick = btnEditClick
|
||||
resourceName = 'PENCIL'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnShellOpen: TDexedToolButton[1]
|
||||
Left = 125
|
||||
Hint = 'open the selected folder or the selected file using the shell'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnShellOpen'
|
||||
OnClick = btnShellOpenClick
|
||||
resourceName = 'FLASH'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRemFav: TDexedToolButton[2]
|
||||
Left = 97
|
||||
Hint = 'remove selected favorite folder'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemFav'
|
||||
OnClick = btnRemFavClick
|
||||
resourceName = 'FOLDER_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddFav: TDexedToolButton[3]
|
||||
Left = 69
|
||||
Hint = 'add selected folder to the favorites'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddFav'
|
||||
OnClick = btnAddFavClick
|
||||
resourceName = 'FOLDER_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnDrive: TDexedToolButton[4]
|
||||
Left = 1
|
||||
Hint = 'select a drive or a custom folder'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnDrive'
|
||||
DropdownMenu = mnuDrives
|
||||
OnClick = btnDriveClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'FOLDER_GO'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnParentFolder: TDexedToolButton[5]
|
||||
Left = 41
|
||||
Hint = 'select parent folder'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnParentFolder'
|
||||
OnClick = btnParentFolderClick
|
||||
resourceName = 'GO_PREVIOUS'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object lstFilter: TListViewFilterEdit[6]
|
||||
Left = 191
|
||||
Height = 26
|
||||
Top = 2
|
||||
Width = 329
|
||||
ButtonWidth = 23
|
||||
Flat = True
|
||||
Align = alClient
|
||||
BorderSpacing.Left = 180
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
OnButtonClick = lstFilterButtonClick
|
||||
OnKeyUp = lstFilterKeyUp
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 527
|
||||
OnResize = toolbarResize
|
||||
object btnEdit: TDexedToolButton[0]
|
||||
Left = 153
|
||||
Hint = 'open the selected file in an editor or as a new project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnEdit'
|
||||
OnClick = btnEditClick
|
||||
resourceName = 'PENCIL'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnShellOpen: TDexedToolButton[1]
|
||||
Left = 125
|
||||
Hint = 'open the selected folder or the selected file using the shell'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnShellOpen'
|
||||
OnClick = btnShellOpenClick
|
||||
resourceName = 'FLASH'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRemFav: TDexedToolButton[2]
|
||||
Left = 97
|
||||
Hint = 'remove selected favorite folder'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemFav'
|
||||
OnClick = btnRemFavClick
|
||||
resourceName = 'FOLDER_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddFav: TDexedToolButton[3]
|
||||
Left = 69
|
||||
Hint = 'add selected folder to the favorites'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddFav'
|
||||
OnClick = btnAddFavClick
|
||||
resourceName = 'FOLDER_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnDrive: TDexedToolButton[4]
|
||||
Left = 1
|
||||
Hint = 'select a drive or a custom folder'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnDrive'
|
||||
DropdownMenu = mnuDrives
|
||||
OnClick = btnDriveClick
|
||||
Style = tbsDropDown
|
||||
resourceName = 'FOLDER_GO'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnParentFolder: TDexedToolButton[5]
|
||||
Left = 41
|
||||
Hint = 'select parent folder'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnParentFolder'
|
||||
OnClick = btnParentFolderClick
|
||||
resourceName = 'GO_PREVIOUS'
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
Left = 40
|
||||
Top = 48
|
||||
end
|
||||
object mnuDrives: TPopupMenu[2]
|
||||
object mnuDrives: TPopupMenu[3]
|
||||
Left = 8
|
||||
Top = 48
|
||||
end
|
||||
|
|
|
@ -22,6 +22,8 @@ type
|
|||
fDblClick: TExplorerDoubleClick;
|
||||
fContextExpand: boolean;
|
||||
fShowHidden: boolean;
|
||||
fShowSize: boolean;
|
||||
fShowType: boolean;
|
||||
fExplorer: TMiniExplorerWidget;
|
||||
function optionedWantCategory(): string;
|
||||
function optionedWantEditorKind: TOptionEditorKind;
|
||||
|
@ -33,6 +35,8 @@ type
|
|||
property doubleClick: TExplorerDoubleClick read fDblClick write fDblClick;
|
||||
property contextExpand: boolean read fContextExpand write fContextExpand;
|
||||
property showHidden: boolean read fShowHidden write fShowHidden default true;
|
||||
property showSize: boolean read fShowSize write fShowSize default true;
|
||||
property showType: boolean read fShowType write fShowType default true;
|
||||
public
|
||||
constructor create(miniexpl: TMiniExplorerWidget);
|
||||
destructor destroy; override;
|
||||
|
@ -44,18 +48,24 @@ type
|
|||
fSplitter1Position: integer;
|
||||
fSplitter2Position: integer;
|
||||
fLastFolder: string;
|
||||
fRootFolder: string;
|
||||
fDblClick: TExplorerDoubleClick;
|
||||
fContextExpand: boolean;
|
||||
fShowHidden: boolean;
|
||||
fShowSize: boolean;
|
||||
fShowType: boolean;
|
||||
procedure setFavoriteFolders(value: TStringList);
|
||||
published
|
||||
property splitter1Position: integer read fSplitter1Position write fSplitter1Position;
|
||||
property splitter2Position: integer read fSplitter2Position write fSplitter2Position;
|
||||
property lastFolder: string read fLastFolder write fLastFolder;
|
||||
property lastFolder: string read fLastFolder;
|
||||
property rootFolder: string read fRootFolder write fRootFolder;
|
||||
property favoriteFolders: TStringList read fFavoriteFolders write setFavoriteFolders;
|
||||
property doubleClick: TExplorerDoubleClick read fDblClick write fDblClick;
|
||||
property contextExpand: boolean read fContextExpand write fContextExpand;
|
||||
property showHidden: boolean read fShowHidden write fShowHidden default true;
|
||||
property showSize: boolean read fShowSize write fShowSize default true;
|
||||
property showType: boolean read fShowType write fShowType default true;
|
||||
public
|
||||
constructor create(aOwner: TComponent); override;
|
||||
destructor destroy; override;
|
||||
|
@ -74,6 +84,7 @@ type
|
|||
btnShellOpen: TDexedToolButton;
|
||||
lstFilter: TListViewFilterEdit;
|
||||
lstFav: TListView;
|
||||
Panel1: TPanel;
|
||||
Panel2: TPanel;
|
||||
lstFiles: TShellListView;
|
||||
mnuDrives: TPopupMenu;
|
||||
|
@ -93,6 +104,8 @@ type
|
|||
procedure lstFilesDblClick(Sender: TObject);
|
||||
procedure lstFilesEnter(Sender: TObject);
|
||||
procedure lstFilesFileAdded(Sender: TObject; Item: TListItem);
|
||||
procedure lstFilesMouseMove(Sender: TObject; Shift: TShiftState; X,
|
||||
Y: Integer);
|
||||
procedure lstFilterButtonClick(Sender: TObject);
|
||||
procedure lstFilterKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure Splitter2MouseWheel(Sender: TObject; Shift: TShiftState;
|
||||
|
@ -162,6 +175,8 @@ constructor TMiniExplorerEditableOptions.create(miniexpl: TMiniExplorerWidget);
|
|||
begin
|
||||
fExplorer := miniexpl;
|
||||
fShowHidden:=true;
|
||||
fShowSize:=true;
|
||||
fShowType:=true;
|
||||
EntitiesConnector.addObserver(self);
|
||||
end;
|
||||
|
||||
|
@ -185,6 +200,8 @@ begin
|
|||
fExplorer.treeFolders.ObjectTypes := fExplorer.treeFolders.ObjectTypes - [otHidden];
|
||||
fExplorer.lstFiles.ObjectTypes := fExplorer.lstFiles.ObjectTypes - [otHidden];
|
||||
end;
|
||||
fExplorer.lstFiles.Columns[1].Visible := fShowSize;
|
||||
fExplorer.lstFiles.Columns[2].Visible := fShowType;
|
||||
fExplorer.treeFolders.Refresh;
|
||||
end;
|
||||
|
||||
|
@ -220,6 +237,8 @@ begin
|
|||
inherited;
|
||||
fFavoriteFolders := TStringList.Create;
|
||||
fShowHidden:=true;
|
||||
fShowType:=true;
|
||||
fShowSize:=true;
|
||||
end;
|
||||
|
||||
destructor TMiniExplorerOptions.destroy;
|
||||
|
@ -237,11 +256,14 @@ begin
|
|||
widg := TMiniExplorerWidget(source);
|
||||
fFavoriteFolders.Assign(widg.fFavorites);
|
||||
fLastFolder := widg.fLastFold;
|
||||
fRootFolder := widg.treeFolders.Root;
|
||||
fSplitter1Position := widg.Splitter1.GetSplitterPosition;
|
||||
fSplitter2Position := widg.Splitter2.GetSplitterPosition;
|
||||
fDblClick:= widg.fDblClick;
|
||||
fContextExpand:=widg.fContextExpand;
|
||||
fShowHidden:= otHidden in widg.lstFiles.ObjectTypes;
|
||||
fShowSize := widg.lstFiles.Columns[1].Visible;
|
||||
fShowType := widg.lstFiles.Columns[2].Visible;
|
||||
end
|
||||
else inherited;
|
||||
end;
|
||||
|
@ -272,7 +294,11 @@ begin
|
|||
widg.treeFolders.ObjectTypes := widg.treeFolders.ObjectTypes - [otHidden];
|
||||
widg.lstFiles.ObjectTypes := widg.lstFiles.ObjectTypes -[otHidden];
|
||||
end;
|
||||
if widg.fLastFold.dirExists then
|
||||
widg.lstFiles.Columns[1].Visible := fShowSize;
|
||||
widg.lstFiles.Columns[2].Visible := fShowType;
|
||||
if fRootFolder.isNotEmpty and fRootFolder.dirExists then
|
||||
widg.browse(fRootFolder)
|
||||
else if fLastFolder.isNotEmpty and fLastFolder.dirExists then
|
||||
widg.browse(fLastFolder);
|
||||
end
|
||||
else inherited;
|
||||
|
@ -352,8 +378,6 @@ begin
|
|||
lstFav.OnSelectItem := @lstFavSelect;
|
||||
lstFav.OnDblClick := @lstFavDblClick;
|
||||
|
||||
lstFilter.BorderSpacing.Left := ScaleX(182, 96);
|
||||
|
||||
treeSetRoots;
|
||||
|
||||
fname := getDocPath + OptsFname;
|
||||
|
@ -735,13 +759,20 @@ begin
|
|||
lstFiles.Sort;
|
||||
end;
|
||||
|
||||
procedure TMiniExplorerWidget.lstFilterButtonClick(Sender: TObject);
|
||||
procedure TMiniExplorerWidget.lstFilesMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
||||
var
|
||||
s: string;
|
||||
i: TListItem;
|
||||
begin
|
||||
s := treeFolders.Root;
|
||||
treeFolders.Root:= '';
|
||||
treeFolders.Root:= s;
|
||||
i := lstFiles.GetItemAt(x,y);
|
||||
if i.isAssigned() then
|
||||
begin
|
||||
lstFiles.Hint := i.Caption;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMiniExplorerWidget.lstFilterButtonClick(Sender: TObject);
|
||||
begin
|
||||
filterFiles;
|
||||
end;
|
||||
|
||||
procedure TMiniExplorerWidget.lstFilterKeyUp(Sender: TObject; var Key: Word;
|
||||
|
@ -769,7 +800,6 @@ end;
|
|||
|
||||
procedure TMiniExplorerWidget.toolbarResize(Sender: TObject);
|
||||
begin
|
||||
lstFilter.Width := toolbar.Width - lstFilter.Left - lstFilter.BorderSpacing.Around;
|
||||
end;
|
||||
|
||||
procedure TMiniExplorerWidget.shellOpenSelected;
|
||||
|
|
|
@ -8,123 +8,117 @@ inherited OptionEditorWidget: TOptionEditorWidget
|
|||
ClientHeight = 514
|
||||
ClientWidth = 637
|
||||
OnCloseQuery = FormCloseQuery
|
||||
inherited Back: TPanel
|
||||
Height = 514
|
||||
inherited Content: TPanel
|
||||
Height = 478
|
||||
Width = 637
|
||||
ClientHeight = 514
|
||||
ClientHeight = 478
|
||||
ClientWidth = 637
|
||||
inherited Content: TPanel
|
||||
Height = 478
|
||||
Width = 637
|
||||
ClientHeight = 478
|
||||
ClientWidth = 637
|
||||
object pnlBody: TPanel[0]
|
||||
Left = 4
|
||||
object pnlBody: TPanel[0]
|
||||
Left = 4
|
||||
Height = 452
|
||||
Top = 4
|
||||
Width = 629
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 452
|
||||
ClientWidth = 629
|
||||
TabOrder = 0
|
||||
object selCat: TTreeView
|
||||
Left = 0
|
||||
Height = 452
|
||||
Top = 4
|
||||
Width = 629
|
||||
Top = 0
|
||||
Width = 182
|
||||
Align = alLeft
|
||||
AutoExpand = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SortType = stText
|
||||
TabOrder = 0
|
||||
OnChanging = selCatChanging
|
||||
OnDeletion = selCatDeletion
|
||||
OnSelectionChanged = selCatSelectionChanged
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||
end
|
||||
object pnlEd: TPanel
|
||||
Left = 188
|
||||
Height = 452
|
||||
Top = 0
|
||||
Width = 441
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 452
|
||||
ClientWidth = 629
|
||||
TabOrder = 0
|
||||
object selCat: TTreeView
|
||||
ClientWidth = 441
|
||||
TabOrder = 1
|
||||
object inspector: TTIPropertyGrid
|
||||
Left = 0
|
||||
Height = 452
|
||||
Top = 0
|
||||
Width = 182
|
||||
Align = alLeft
|
||||
AutoExpand = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SortType = stText
|
||||
TabOrder = 0
|
||||
OnChanging = selCatChanging
|
||||
OnDeletion = selCatDeletion
|
||||
OnSelectionChanged = selCatSelectionChanged
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||
end
|
||||
object pnlEd: TPanel
|
||||
Left = 188
|
||||
Height = 452
|
||||
Top = 0
|
||||
Width = 441
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 452
|
||||
ClientWidth = 441
|
||||
TabOrder = 1
|
||||
object inspector: TTIPropertyGrid
|
||||
Left = 0
|
||||
Height = 452
|
||||
Top = 0
|
||||
Width = 441
|
||||
Align = alClient
|
||||
CheckboxForBoolean = False
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper]
|
||||
Indent = 16
|
||||
NameFont.Color = clWindowText
|
||||
OnEditorFilter = inspectorEditorFilter
|
||||
OnModified = inspectorModified
|
||||
PreferredSplitterX = 170
|
||||
SplitterX = 170
|
||||
ValueFont.Color = clGreen
|
||||
end
|
||||
end
|
||||
object Splitter1: TSplitter
|
||||
Left = 182
|
||||
Height = 452
|
||||
Top = 0
|
||||
Width = 6
|
||||
CheckboxForBoolean = False
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper]
|
||||
Indent = 16
|
||||
NameFont.Color = clWindowText
|
||||
OnEditorFilter = inspectorEditorFilter
|
||||
OnModified = inspectorModified
|
||||
PreferredSplitterX = 170
|
||||
SplitterX = 170
|
||||
ValueFont.Color = clGreen
|
||||
end
|
||||
end
|
||||
object pnlFooter: TPanel[1]
|
||||
Left = 4
|
||||
Height = 14
|
||||
Top = 460
|
||||
Width = 629
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvLowered
|
||||
ClientHeight = 14
|
||||
ClientWidth = 629
|
||||
TabOrder = 1
|
||||
object btnCancel: TSpeedButton
|
||||
Left = 610
|
||||
Height = 4
|
||||
Hint = 'cancel and revert the modifications of the category'
|
||||
Top = 5
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Around = 4
|
||||
Flat = True
|
||||
OnClick = btnCancelClick
|
||||
end
|
||||
object btnAccept: TSpeedButton
|
||||
Left = 620
|
||||
Height = 4
|
||||
Hint = 'accept the modifications of the category'
|
||||
Top = 5
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Around = 4
|
||||
Flat = True
|
||||
OnClick = btnAcceptClick
|
||||
end
|
||||
object Splitter1: TSplitter
|
||||
Left = 182
|
||||
Height = 452
|
||||
Top = 0
|
||||
Width = 6
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
object pnlFooter: TPanel[1]
|
||||
Left = 4
|
||||
Height = 14
|
||||
Top = 460
|
||||
Width = 629
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvLowered
|
||||
ClientHeight = 14
|
||||
ClientWidth = 629
|
||||
TabOrder = 1
|
||||
object btnCancel: TSpeedButton
|
||||
Left = 610
|
||||
Height = 4
|
||||
Hint = 'cancel and revert the modifications of the category'
|
||||
Top = 5
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Around = 4
|
||||
Flat = True
|
||||
OnClick = btnCancelClick
|
||||
end
|
||||
object btnAccept: TSpeedButton
|
||||
Left = 620
|
||||
Height = 4
|
||||
Hint = 'accept the modifications of the category'
|
||||
Top = 5
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Around = 4
|
||||
Flat = True
|
||||
OnClick = btnAcceptClick
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 629
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
Left = 144
|
||||
Top = 24
|
||||
|
|
|
@ -6,91 +6,85 @@ inherited ProcInputWidget: TProcInputWidget
|
|||
Caption = 'Process input'
|
||||
ClientHeight = 107
|
||||
ClientWidth = 558
|
||||
inherited Back: TPanel
|
||||
Height = 107
|
||||
inherited Content: TPanel
|
||||
Height = 71
|
||||
Width = 558
|
||||
ClientHeight = 107
|
||||
ClientHeight = 71
|
||||
ClientWidth = 558
|
||||
inherited Content: TPanel
|
||||
Height = 71
|
||||
Width = 558
|
||||
ClientHeight = 71
|
||||
ClientWidth = 558
|
||||
object txtExeName: TStaticText[0]
|
||||
Left = 4
|
||||
Height = 21
|
||||
Top = 4
|
||||
Width = 550
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BorderStyle = sbsSunken
|
||||
Caption = 'no process'
|
||||
TabOrder = 0
|
||||
Transparent = False
|
||||
end
|
||||
object Panel1: TPanel[1]
|
||||
Left = 4
|
||||
Height = 33
|
||||
Top = 29
|
||||
Width = 550
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 33
|
||||
ClientWidth = 550
|
||||
Enabled = False
|
||||
TabOrder = 1
|
||||
object txtInp: TEdit
|
||||
Left = 0
|
||||
Height = 27
|
||||
Top = 3
|
||||
Width = 530
|
||||
Align = alClient
|
||||
BorderSpacing.Top = 3
|
||||
BorderSpacing.Bottom = 3
|
||||
OnKeyDown = txtInpKeyDown
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnClose: TSpeedButton
|
||||
Left = 538
|
||||
Height = 29
|
||||
Hint = 'close standard input'
|
||||
Top = 2
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 2
|
||||
OnClick = btnCloseClick
|
||||
end
|
||||
object btnKill: TSpeedButton
|
||||
Left = 544
|
||||
Height = 29
|
||||
Hint = 'kill process'
|
||||
Top = 2
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 2
|
||||
OnClick = btnKillClick
|
||||
end
|
||||
object btnSend: TSpeedButton
|
||||
Left = 532
|
||||
Height = 29
|
||||
Hint = 'write content to standard input'
|
||||
Top = 2
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 2
|
||||
OnClick = btnSendClick
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
object txtExeName: TStaticText[0]
|
||||
Left = 4
|
||||
Height = 21
|
||||
Top = 4
|
||||
Width = 550
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BorderStyle = sbsSunken
|
||||
Caption = 'no process'
|
||||
TabOrder = 0
|
||||
Transparent = False
|
||||
end
|
||||
object Panel1: TPanel[1]
|
||||
Left = 4
|
||||
Height = 33
|
||||
Top = 29
|
||||
Width = 550
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 33
|
||||
ClientWidth = 550
|
||||
Enabled = False
|
||||
TabOrder = 1
|
||||
object txtInp: TEdit
|
||||
Left = 0
|
||||
Height = 27
|
||||
Top = 3
|
||||
Width = 530
|
||||
Align = alClient
|
||||
BorderSpacing.Top = 3
|
||||
BorderSpacing.Bottom = 3
|
||||
OnKeyDown = txtInpKeyDown
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnClose: TSpeedButton
|
||||
Left = 538
|
||||
Height = 29
|
||||
Hint = 'close standard input'
|
||||
Top = 2
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 2
|
||||
OnClick = btnCloseClick
|
||||
end
|
||||
object btnKill: TSpeedButton
|
||||
Left = 544
|
||||
Height = 29
|
||||
Hint = 'kill process'
|
||||
Top = 2
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 2
|
||||
OnClick = btnKillClick
|
||||
end
|
||||
object btnSend: TSpeedButton
|
||||
Left = 532
|
||||
Height = 29
|
||||
Hint = 'write content to standard input'
|
||||
Top = 2
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 2
|
||||
OnClick = btnSendClick
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 550
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
left = 16
|
||||
|
|
|
@ -6,202 +6,195 @@ inherited ProfileViewerWidget: TProfileViewerWidget
|
|||
Caption = 'Profile viewer'
|
||||
ClientHeight = 537
|
||||
ClientWidth = 551
|
||||
inherited Back: TPanel
|
||||
Height = 537
|
||||
inherited Content: TPanel
|
||||
Height = 501
|
||||
Width = 551
|
||||
AutoSize = True
|
||||
ClientHeight = 537
|
||||
ClientHeight = 501
|
||||
ClientWidth = 551
|
||||
inherited Content: TPanel
|
||||
Height = 501
|
||||
Width = 551
|
||||
ClientHeight = 501
|
||||
ClientWidth = 551
|
||||
object list: TListView[0]
|
||||
Left = 4
|
||||
Height = 283
|
||||
Top = 214
|
||||
Width = 543
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
MaxWidth = 18
|
||||
MinWidth = 18
|
||||
Width = 18
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Num calls'
|
||||
Width = 75
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Tree time'
|
||||
Width = 71
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Func time'
|
||||
Width = 73
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Per call'
|
||||
Width = 58
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'function'
|
||||
Width = 246
|
||||
end>
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SmallImages = ImageList1
|
||||
SortType = stText
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
end
|
||||
object Panel1: TPanel[1]
|
||||
object list: TListView[0]
|
||||
Left = 4
|
||||
Height = 283
|
||||
Top = 214
|
||||
Width = 543
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
MaxWidth = 18
|
||||
MinWidth = 18
|
||||
Width = 18
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Num calls'
|
||||
Width = 75
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Tree time'
|
||||
Width = 71
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Func time'
|
||||
Width = 73
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Per call'
|
||||
Width = 58
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'function'
|
||||
Width = 246
|
||||
end>
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SmallImages = ImageList1
|
||||
SortType = stText
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
end
|
||||
object Panel1: TPanel[1]
|
||||
Left = 2
|
||||
Height = 200
|
||||
Top = 2
|
||||
Width = 547
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 2
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 200
|
||||
ClientWidth = 547
|
||||
TabOrder = 1
|
||||
object pie: TChart
|
||||
Left = 2
|
||||
Height = 200
|
||||
Height = 196
|
||||
Top = 2
|
||||
Width = 547
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 2
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 200
|
||||
ClientWidth = 547
|
||||
TabOrder = 1
|
||||
object pie: TChart
|
||||
Left = 2
|
||||
Height = 196
|
||||
Top = 2
|
||||
Width = 543
|
||||
AxisList = <
|
||||
item
|
||||
Marks.Clipped = False
|
||||
Marks.LabelBrush.Style = bsClear
|
||||
Minors = <>
|
||||
Title.LabelBrush.Style = bsClear
|
||||
end
|
||||
item
|
||||
Alignment = calBottom
|
||||
Marks.Clipped = False
|
||||
Marks.LabelBrush.Style = bsClear
|
||||
Minors = <>
|
||||
Title.LabelBrush.Style = bsClear
|
||||
end>
|
||||
AxisVisible = False
|
||||
Foot.Brush.Color = clBtnFace
|
||||
Foot.Font.Color = clBlue
|
||||
Frame.Style = psClear
|
||||
Title.Brush.Color = clBtnFace
|
||||
Title.Font.Color = clBlue
|
||||
Title.Text.Strings = (
|
||||
'TAChart'
|
||||
)
|
||||
Toolset = ChartToolset1
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
object pieSeries: TPieSeries
|
||||
Legend.Visible = False
|
||||
Width = 543
|
||||
AxisList = <
|
||||
item
|
||||
Marks.Clipped = False
|
||||
Marks.Distance = 10
|
||||
Marks.Shape = clsRoundRect
|
||||
Marks.Format = '%2:s %1:.2f%%'
|
||||
Marks.Style = smsLabelPercent
|
||||
Exploded = True
|
||||
MarkPositions = pmpLeftRight
|
||||
end
|
||||
Marks.LabelBrush.Style = bsClear
|
||||
Minors = <>
|
||||
Title.LabelBrush.Style = bsClear
|
||||
end
|
||||
item
|
||||
Alignment = calBottom
|
||||
Marks.Clipped = False
|
||||
Marks.LabelBrush.Style = bsClear
|
||||
Minors = <>
|
||||
Title.LabelBrush.Style = bsClear
|
||||
end>
|
||||
AxisVisible = False
|
||||
Foot.Brush.Color = clBtnFace
|
||||
Foot.Font.Color = clBlue
|
||||
Frame.Style = psClear
|
||||
Title.Brush.Color = clBtnFace
|
||||
Title.Font.Color = clBlue
|
||||
Title.Text.Strings = (
|
||||
'TAChart'
|
||||
)
|
||||
Toolset = ChartToolset1
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
object pieSeries: TPieSeries
|
||||
Legend.Visible = False
|
||||
Marks.Clipped = False
|
||||
Marks.Distance = 10
|
||||
Marks.Shape = clsRoundRect
|
||||
Marks.Format = '%2:s %1:.2f%%'
|
||||
Marks.Style = smsLabelPercent
|
||||
Exploded = True
|
||||
MarkPositions = pmpLeftRight
|
||||
end
|
||||
end
|
||||
object Splitter1: TSplitter[2]
|
||||
Cursor = crVSplit
|
||||
Left = 0
|
||||
Height = 6
|
||||
Top = 204
|
||||
Width = 551
|
||||
Align = alTop
|
||||
OnCanResize = Splitter1CanResize
|
||||
OnMoved = Splitter1Moved
|
||||
ResizeAnchor = akTop
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 543
|
||||
object btnRefresh: TDexedToolButton[0]
|
||||
Left = 57
|
||||
Hint = 'reload current trace log file or auto load from the current directory'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRefresh'
|
||||
OnClick = btnRefreshClick
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnOpen: TDexedToolButton[1]
|
||||
Left = 29
|
||||
Hint = 'open a trace log file'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnOpen'
|
||||
OnClick = btnOpenClick
|
||||
resourceName = 'FOLDER'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button0: TDexedToolButton[2]
|
||||
Left = 113
|
||||
Height = 5
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button0'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object selPieSource: TComboBox[3]
|
||||
Left = 118
|
||||
Height = 31
|
||||
Hint = 'select the pie representation'
|
||||
Top = 0
|
||||
Width = 282
|
||||
BorderSpacing.InnerBorder = 3
|
||||
ItemHeight = 0
|
||||
ItemIndex = 0
|
||||
Items.Strings = (
|
||||
'Number of calls'
|
||||
'Tree time'
|
||||
'Function time'
|
||||
'Time per call'
|
||||
)
|
||||
OnSelect = selPieSourceSelect
|
||||
Style = csDropDownList
|
||||
TabOrder = 0
|
||||
Text = 'Number of calls'
|
||||
end
|
||||
object btnOpts: TDexedToolButton[4]
|
||||
Left = 85
|
||||
Hint = 'edit profile viewer options'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnOpts'
|
||||
OnClick = btnOptsClick
|
||||
resourceName = 'WRENCH'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnProj: TDexedToolButton[5]
|
||||
Left = 1
|
||||
Hint = 'Try to load using the project output path'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnProj'
|
||||
OnClick = btnProjClick
|
||||
resourceName = 'LIST'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object Splitter1: TSplitter[2]
|
||||
Cursor = crVSplit
|
||||
Left = 0
|
||||
Height = 6
|
||||
Top = 204
|
||||
Width = 551
|
||||
Align = alTop
|
||||
OnCanResize = Splitter1CanResize
|
||||
OnMoved = Splitter1Moved
|
||||
ResizeAnchor = akTop
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 543
|
||||
object btnRefresh: TDexedToolButton[0]
|
||||
Left = 57
|
||||
Hint = 'reload current trace log file or auto load from the current directory'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRefresh'
|
||||
OnClick = btnRefreshClick
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnOpen: TDexedToolButton[1]
|
||||
Left = 29
|
||||
Hint = 'open a trace log file'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnOpen'
|
||||
OnClick = btnOpenClick
|
||||
resourceName = 'FOLDER'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button0: TDexedToolButton[2]
|
||||
Left = 113
|
||||
Height = 5
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button0'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object selPieSource: TComboBox[3]
|
||||
Left = 118
|
||||
Height = 31
|
||||
Hint = 'select the pie representation'
|
||||
Top = 0
|
||||
Width = 282
|
||||
BorderSpacing.InnerBorder = 3
|
||||
ItemHeight = 0
|
||||
ItemIndex = 0
|
||||
Items.Strings = (
|
||||
'Number of calls'
|
||||
'Tree time'
|
||||
'Function time'
|
||||
'Time per call'
|
||||
)
|
||||
OnSelect = selPieSourceSelect
|
||||
Style = csDropDownList
|
||||
TabOrder = 0
|
||||
Text = 'Number of calls'
|
||||
end
|
||||
object btnOpts: TDexedToolButton[4]
|
||||
Left = 85
|
||||
Hint = 'edit profile viewer options'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnOpts'
|
||||
OnClick = btnOptsClick
|
||||
resourceName = 'WRENCH'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnProj: TDexedToolButton[5]
|
||||
Left = 1
|
||||
Hint = 'Try to load using the project output path'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnProj'
|
||||
OnClick = btnProjClick
|
||||
resourceName = 'LIST'
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
|
@ -7,166 +7,160 @@ inherited ProjectGroupWidget: TProjectGroupWidget
|
|||
Caption = 'Project group'
|
||||
ClientHeight = 195
|
||||
ClientWidth = 328
|
||||
inherited Back: TPanel
|
||||
Height = 195
|
||||
inherited Content: TPanel
|
||||
Height = 159
|
||||
Width = 328
|
||||
ClientHeight = 195
|
||||
ClientHeight = 159
|
||||
ClientWidth = 328
|
||||
inherited Content: TPanel
|
||||
Height = 159
|
||||
Width = 328
|
||||
ClientHeight = 159
|
||||
ClientWidth = 328
|
||||
object lstProj: TListView[0]
|
||||
Left = 4
|
||||
Height = 122
|
||||
Top = 4
|
||||
Width = 320
|
||||
Align = alClient
|
||||
AutoSort = False
|
||||
BorderSpacing.Around = 4
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Name'
|
||||
Width = 49
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Type'
|
||||
Width = 40
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Async'
|
||||
Width = 49
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Configuration'
|
||||
Width = 180
|
||||
end>
|
||||
GridLines = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnDblClick = lstProjDblClick
|
||||
OnSelectItem = slstProjSelectItem
|
||||
end
|
||||
object Panel2: TPanel[1]
|
||||
Left = 4
|
||||
object lstProj: TListView[0]
|
||||
Left = 4
|
||||
Height = 122
|
||||
Top = 4
|
||||
Width = 320
|
||||
Align = alClient
|
||||
AutoSort = False
|
||||
BorderSpacing.Around = 4
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Name'
|
||||
Width = 49
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Type'
|
||||
Width = 40
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Async'
|
||||
Width = 49
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Configuration'
|
||||
Width = 180
|
||||
end>
|
||||
GridLines = True
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
OnDblClick = lstProjDblClick
|
||||
OnSelectItem = slstProjSelectItem
|
||||
end
|
||||
object Panel2: TPanel[1]
|
||||
Left = 4
|
||||
Height = 25
|
||||
Top = 130
|
||||
Width = 320
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 25
|
||||
ClientWidth = 320
|
||||
TabOrder = 1
|
||||
object btnFreeFocus: TSpeedButton
|
||||
Left = 312
|
||||
Height = 25
|
||||
Top = 130
|
||||
Width = 320
|
||||
Align = alBottom
|
||||
Hint = 'Put the focus on the ungrouped project'
|
||||
Top = 0
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 25
|
||||
ClientWidth = 320
|
||||
TabOrder = 1
|
||||
object btnFreeFocus: TSpeedButton
|
||||
Left = 312
|
||||
Height = 25
|
||||
Hint = 'Put the focus on the ungrouped project'
|
||||
Top = 0
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
Layout = blGlyphBottom
|
||||
Spacing = 0
|
||||
OnClick = btnFreeFocusClick
|
||||
end
|
||||
object StaticText1: TStaticText
|
||||
Left = 2
|
||||
Height = 21
|
||||
Top = 2
|
||||
Width = 308
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 2
|
||||
BorderStyle = sbsSunken
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnAddUnfocused: TSpeedButton
|
||||
Left = 316
|
||||
Height = 25
|
||||
Hint = 'Put the ungrouped project in the group'
|
||||
Top = 0
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
Layout = blGlyphBottom
|
||||
Spacing = 0
|
||||
OnClick = btnAddUnfocusedClick
|
||||
end
|
||||
Layout = blGlyphBottom
|
||||
Spacing = 0
|
||||
OnClick = btnFreeFocusClick
|
||||
end
|
||||
object StaticText1: TStaticText
|
||||
Left = 2
|
||||
Height = 21
|
||||
Top = 2
|
||||
Width = 308
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 2
|
||||
BorderStyle = sbsSunken
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnAddUnfocused: TSpeedButton
|
||||
Left = 316
|
||||
Height = 25
|
||||
Hint = 'Put the ungrouped project in the group'
|
||||
Top = 0
|
||||
Width = 4
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
Layout = blGlyphBottom
|
||||
Spacing = 0
|
||||
OnClick = btnAddUnfocusedClick
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Height = 30
|
||||
Width = 320
|
||||
object BtnAddProj: TDexedToolButton[0]
|
||||
Left = 1
|
||||
Hint = 'add a project to the group'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'BtnAddProj'
|
||||
OnClick = BtnAddProjClick
|
||||
resourceName = 'DOCUMENT_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRemProj: TDexedToolButton[1]
|
||||
Left = 29
|
||||
Hint = 'remove the selected project from the group'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemProj'
|
||||
OnClick = btnRemProjClick
|
||||
resourceName = 'DOCUMENT_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveDown: TDexedToolButton[2]
|
||||
Left = 57
|
||||
Hint = 'move the selected project down'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveDown'
|
||||
OnClick = btnMoveDownClick
|
||||
resourceName = 'GO_DOWN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveUp: TDexedToolButton[3]
|
||||
Left = 85
|
||||
Hint = 'move the selected project up'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveUp'
|
||||
OnClick = btnMoveUpClick
|
||||
resourceName = 'GO_UP'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAsync: TDexedToolButton[4]
|
||||
Left = 118
|
||||
Hint = 'async compilation mode'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAsync'
|
||||
OnClick = btnAsyncClick
|
||||
resourceName = 'ARROW_DIVIDE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button0: TDexedToolButton[5]
|
||||
Left = 113
|
||||
Height = 5
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button0'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Height = 30
|
||||
Width = 320
|
||||
object BtnAddProj: TDexedToolButton[0]
|
||||
Left = 1
|
||||
Hint = 'add a project to the group'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'BtnAddProj'
|
||||
OnClick = BtnAddProjClick
|
||||
resourceName = 'DOCUMENT_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRemProj: TDexedToolButton[1]
|
||||
Left = 29
|
||||
Hint = 'remove the selected project from the group'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemProj'
|
||||
OnClick = btnRemProjClick
|
||||
resourceName = 'DOCUMENT_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveDown: TDexedToolButton[2]
|
||||
Left = 57
|
||||
Hint = 'move the selected project down'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveDown'
|
||||
OnClick = btnMoveDownClick
|
||||
resourceName = 'GO_DOWN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveUp: TDexedToolButton[3]
|
||||
Left = 85
|
||||
Hint = 'move the selected project up'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveUp'
|
||||
OnClick = btnMoveUpClick
|
||||
resourceName = 'GO_UP'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAsync: TDexedToolButton[4]
|
||||
Left = 118
|
||||
Hint = 'async compilation mode'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAsync'
|
||||
OnClick = btnAsyncClick
|
||||
resourceName = 'ARROW_DIVIDE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button0: TDexedToolButton[5]
|
||||
Left = 113
|
||||
Height = 5
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button0'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
|
@ -9,140 +9,133 @@ inherited ProjectInspectWidget: TProjectInspectWidget
|
|||
ClientHeight = 258
|
||||
ClientWidth = 424
|
||||
OnDropFiles = FormDropFiles
|
||||
inherited Back: TPanel
|
||||
Height = 258
|
||||
inherited Content: TPanel
|
||||
Height = 222
|
||||
Width = 424
|
||||
AutoSize = True
|
||||
ClientHeight = 258
|
||||
ClientHeight = 222
|
||||
ClientWidth = 424
|
||||
inherited Content: TPanel
|
||||
Height = 222
|
||||
Width = 424
|
||||
ClientHeight = 222
|
||||
ClientWidth = 424
|
||||
PopupMenu = nil
|
||||
object Tree: TTreeView[0]
|
||||
Left = 2
|
||||
Height = 184
|
||||
Top = 36
|
||||
Width = 420
|
||||
Align = alClient
|
||||
AutoExpand = True
|
||||
BorderSpacing.Around = 2
|
||||
DragMode = dmAutomatic
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RightClickSelect = True
|
||||
ScrollBars = ssAutoBoth
|
||||
ShowRoot = False
|
||||
TabOrder = 0
|
||||
ToolTips = False
|
||||
OnClick = TreeClick
|
||||
OnDeletion = TreeDeletion
|
||||
OnKeyDown = TreeKeyDown
|
||||
OnSelectionChanged = TreeSelectionChanged
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoThemedDraw]
|
||||
Items.Data = {
|
||||
F9FFFFFF020001000000000000000000000000000000FFFFFFFF000000000000
|
||||
0000000C000000536F757263652066696C6573
|
||||
}
|
||||
end
|
||||
object selConf: TComboBox[1]
|
||||
Left = 4
|
||||
Height = 30
|
||||
Hint = 'select the active configuaration'
|
||||
Top = 2
|
||||
Width = 416
|
||||
Align = alTop
|
||||
BorderSpacing.Left = 4
|
||||
BorderSpacing.Top = 2
|
||||
BorderSpacing.Right = 4
|
||||
BorderSpacing.Bottom = 4
|
||||
ItemHeight = 0
|
||||
OnChange = selConfChange
|
||||
Style = csDropDownList
|
||||
TabOrder = 1
|
||||
end
|
||||
PopupMenu = nil
|
||||
object Tree: TTreeView[0]
|
||||
Left = 2
|
||||
Height = 184
|
||||
Top = 36
|
||||
Width = 420
|
||||
Align = alClient
|
||||
AutoExpand = True
|
||||
BorderSpacing.Around = 2
|
||||
DragMode = dmAutomatic
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RightClickSelect = True
|
||||
ScrollBars = ssAutoBoth
|
||||
ShowRoot = False
|
||||
TabOrder = 0
|
||||
ToolTips = False
|
||||
OnClick = TreeClick
|
||||
OnDeletion = TreeDeletion
|
||||
OnKeyDown = TreeKeyDown
|
||||
OnSelectionChanged = TreeSelectionChanged
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoThemedDraw]
|
||||
Items.Data = {
|
||||
F9FFFFFF020001000000000000000000000000000000FFFFFFFF000000000000
|
||||
0000000C000000536F757263652066696C6573
|
||||
}
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
object selConf: TComboBox[1]
|
||||
Left = 4
|
||||
Height = 30
|
||||
Hint = 'select the active configuaration'
|
||||
Top = 2
|
||||
Width = 416
|
||||
OnResize = toolbarResize
|
||||
object btnRemFold: TDexedToolButton[0]
|
||||
Left = 141
|
||||
Hint = 'remove the selected source parent folder from the project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemFold'
|
||||
OnClick = btnRemFoldClick
|
||||
resourceName = 'FOLDER_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddFold: TDexedToolButton[1]
|
||||
Left = 113
|
||||
Hint = 'add a folder of sources to the project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddFold'
|
||||
OnClick = btnAddFoldClick
|
||||
resourceName = 'FOLDER_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRemFile: TDexedToolButton[2]
|
||||
Left = 85
|
||||
Hint = 'remove selected source from the project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemFile'
|
||||
OnClick = btnRemFileClick
|
||||
resourceName = 'DOCUMENT_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddFile: TDexedToolButton[3]
|
||||
Left = 57
|
||||
Hint = 'add a source to the project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddFile'
|
||||
OnClick = btnAddFileClick
|
||||
resourceName = 'DOCUMENT_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object TreeFilterEdit1: TTreeFilterEdit[4]
|
||||
Left = 176
|
||||
Height = 26
|
||||
Hint = 'filter the source names that contain the text typed here'
|
||||
Top = 2
|
||||
Width = 232
|
||||
ButtonWidth = 28
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
FilteredTreeview = Tree
|
||||
ExpandAllInitially = True
|
||||
end
|
||||
object btnTree: TDexedToolButton[5]
|
||||
Left = 29
|
||||
Hint = 'display the file list as a tree'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnTree'
|
||||
OnClick = btnTreeClick
|
||||
Style = tbsCheck
|
||||
resourceName = 'FOLDERS_EXPLORER'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnReload: TDexedToolButton[6]
|
||||
Left = 1
|
||||
Hint = 'reload the project, useful to fetch new dependencies or detect new source files'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnReload'
|
||||
OnClick = btnReloadClick
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
Align = alTop
|
||||
BorderSpacing.Left = 4
|
||||
BorderSpacing.Top = 2
|
||||
BorderSpacing.Right = 4
|
||||
BorderSpacing.Bottom = 4
|
||||
ItemHeight = 0
|
||||
OnChange = selConfChange
|
||||
Style = csDropDownList
|
||||
TabOrder = 1
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 416
|
||||
OnResize = toolbarResize
|
||||
object btnRemFold: TDexedToolButton[0]
|
||||
Left = 141
|
||||
Hint = 'remove the selected source parent folder from the project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemFold'
|
||||
OnClick = btnRemFoldClick
|
||||
resourceName = 'FOLDER_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddFold: TDexedToolButton[1]
|
||||
Left = 113
|
||||
Hint = 'add a folder of sources to the project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddFold'
|
||||
OnClick = btnAddFoldClick
|
||||
resourceName = 'FOLDER_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRemFile: TDexedToolButton[2]
|
||||
Left = 85
|
||||
Hint = 'remove selected source from the project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemFile'
|
||||
OnClick = btnRemFileClick
|
||||
resourceName = 'DOCUMENT_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddFile: TDexedToolButton[3]
|
||||
Left = 57
|
||||
Hint = 'add a source to the project'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddFile'
|
||||
OnClick = btnAddFileClick
|
||||
resourceName = 'DOCUMENT_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object TreeFilterEdit1: TTreeFilterEdit[4]
|
||||
Left = 176
|
||||
Height = 26
|
||||
Hint = 'filter the source names that contain the text typed here'
|
||||
Top = 2
|
||||
Width = 232
|
||||
ButtonWidth = 28
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
FilteredTreeview = Tree
|
||||
ExpandAllInitially = True
|
||||
end
|
||||
object btnTree: TDexedToolButton[5]
|
||||
Left = 29
|
||||
Hint = 'display the file list as a tree'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnTree'
|
||||
OnClick = btnTreeClick
|
||||
Style = tbsCheck
|
||||
resourceName = 'FOLDERS_EXPLORER'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnReload: TDexedToolButton[6]
|
||||
Left = 1
|
||||
Hint = 'reload the project, useful to fetch new dependencies or detect new source files'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnReload'
|
||||
OnClick = btnReloadClick
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
465
src/u_search.lfm
465
src/u_search.lfm
|
@ -6,263 +6,258 @@ inherited SearchWidget: TSearchWidget
|
|||
Caption = 'Search & replace'
|
||||
ClientHeight = 329
|
||||
ClientWidth = 422
|
||||
inherited Back: TPanel
|
||||
Height = 329
|
||||
inherited Content: TPanel
|
||||
Height = 293
|
||||
Top = 36
|
||||
Width = 422
|
||||
ClientHeight = 329
|
||||
ClientHeight = 293
|
||||
ClientWidth = 422
|
||||
inherited Content: TPanel
|
||||
Height = 293
|
||||
Width = 422
|
||||
ClientHeight = 293
|
||||
ClientWidth = 422
|
||||
object cbToFind: TComboBox[0]
|
||||
Left = 4
|
||||
Height = 27
|
||||
Top = 4
|
||||
Width = 414
|
||||
Align = alTop
|
||||
AutoComplete = True
|
||||
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchCaseSensitive, cbactSearchAscending]
|
||||
BorderSpacing.Around = 4
|
||||
ItemHeight = 0
|
||||
MaxLength = 128
|
||||
OnChange = cbToFindChange
|
||||
OnKeyDown = cbToFindKeyDown
|
||||
OnSelect = cbToFindChange
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnFind: TBitBtn[1]
|
||||
Left = 4
|
||||
Height = 27
|
||||
Top = 169
|
||||
Width = 414
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'btnFind'
|
||||
TabOrder = 1
|
||||
end
|
||||
object btnReplace: TBitBtn[2]
|
||||
Left = 4
|
||||
Height = 27
|
||||
Top = 231
|
||||
Width = 414
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'btnReplace'
|
||||
TabOrder = 2
|
||||
end
|
||||
object grpOpts: TGroupBox[3]
|
||||
Left = 4
|
||||
Height = 99
|
||||
Top = 66
|
||||
Width = 414
|
||||
object cbToFind: TComboBox[0]
|
||||
Left = 4
|
||||
Height = 30
|
||||
Top = 4
|
||||
Width = 414
|
||||
Align = alTop
|
||||
AutoComplete = True
|
||||
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchCaseSensitive, cbactSearchAscending]
|
||||
BorderSpacing.Around = 4
|
||||
ItemHeight = 0
|
||||
MaxLength = 128
|
||||
TabOrder = 0
|
||||
OnChange = cbToFindChange
|
||||
OnKeyDown = cbToFindKeyDown
|
||||
OnSelect = cbToFindChange
|
||||
end
|
||||
object btnFind: TBitBtn[1]
|
||||
Left = 4
|
||||
Height = 32
|
||||
Top = 149
|
||||
Width = 414
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'btnFind'
|
||||
TabOrder = 1
|
||||
end
|
||||
object btnReplace: TBitBtn[2]
|
||||
Left = 4
|
||||
Height = 32
|
||||
Top = 221
|
||||
Width = 414
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'btnReplace'
|
||||
TabOrder = 2
|
||||
end
|
||||
object grpOpts: TGroupBox[3]
|
||||
Left = 4
|
||||
Height = 73
|
||||
Top = 72
|
||||
Width = 414
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'Options'
|
||||
ClientHeight = 54
|
||||
ClientWidth = 412
|
||||
TabOrder = 4
|
||||
object FlowPanel1: TFlowPanel
|
||||
Left = 0
|
||||
Height = 54
|
||||
Top = 0
|
||||
Width = 412
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'Options'
|
||||
ClientHeight = 80
|
||||
ClientWidth = 410
|
||||
TabOrder = 4
|
||||
object FlowPanel1: TFlowPanel
|
||||
Left = 0
|
||||
Height = 80
|
||||
Top = 0
|
||||
Width = 410
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ControlList = <
|
||||
item
|
||||
Control = chkRegex
|
||||
WrapAfter = waAuto
|
||||
Index = 0
|
||||
end
|
||||
item
|
||||
Control = chkPrompt
|
||||
WrapAfter = waAuto
|
||||
Index = 1
|
||||
end
|
||||
item
|
||||
Control = chkCaseSens
|
||||
WrapAfter = waAuto
|
||||
Index = 2
|
||||
end
|
||||
item
|
||||
Control = chkFromCur
|
||||
WrapAfter = waAuto
|
||||
Index = 3
|
||||
end
|
||||
item
|
||||
Control = chkBack
|
||||
WrapAfter = waAuto
|
||||
Index = 4
|
||||
end
|
||||
item
|
||||
Control = chkWWord
|
||||
WrapAfter = waAuto
|
||||
Index = 5
|
||||
end>
|
||||
FlowLayout = tlTop
|
||||
FlowStyle = fsTopBottomLeftRight
|
||||
TabOrder = 0
|
||||
object chkRegex: TCheckBox
|
||||
Left = 0
|
||||
Height = 22
|
||||
Top = 0
|
||||
Width = 100
|
||||
Anchors = []
|
||||
Caption = 'allow regex'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 0
|
||||
end
|
||||
object chkPrompt: TCheckBox
|
||||
Left = 0
|
||||
Height = 22
|
||||
Top = 23
|
||||
Width = 71
|
||||
Anchors = []
|
||||
Caption = 'prompt'
|
||||
TabOrder = 1
|
||||
end
|
||||
object chkCaseSens: TCheckBox
|
||||
Left = 0
|
||||
Height = 22
|
||||
Top = 46
|
||||
Width = 117
|
||||
Anchors = []
|
||||
Caption = 'case sensitive'
|
||||
TabOrder = 2
|
||||
end
|
||||
object chkFromCur: TCheckBox
|
||||
Left = 117
|
||||
Height = 22
|
||||
Top = 0
|
||||
Width = 99
|
||||
Anchors = []
|
||||
Caption = 'from cursor'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 3
|
||||
end
|
||||
object chkBack: TCheckBox
|
||||
Left = 117
|
||||
Height = 22
|
||||
Top = 23
|
||||
Width = 87
|
||||
Anchors = []
|
||||
Caption = 'backward'
|
||||
TabOrder = 4
|
||||
end
|
||||
object chkWWord: TCheckBox
|
||||
Left = 117
|
||||
Height = 22
|
||||
Top = 46
|
||||
Width = 99
|
||||
Anchors = []
|
||||
Caption = 'whole word'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 5
|
||||
end
|
||||
end
|
||||
end
|
||||
object btnReplaceAll: TBitBtn[4]
|
||||
Left = 4
|
||||
Height = 27
|
||||
Top = 262
|
||||
Width = 414
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'btnReplaceAll'
|
||||
TabOrder = 3
|
||||
end
|
||||
object Panel1: TPanel[5]
|
||||
Left = 4
|
||||
Height = 27
|
||||
Top = 35
|
||||
Width = 414
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 27
|
||||
ClientWidth = 414
|
||||
TabOrder = 5
|
||||
object cbReplaceWth: TComboBox
|
||||
Left = 111
|
||||
Height = 27
|
||||
ControlList = <
|
||||
item
|
||||
Control = chkRegex
|
||||
WrapAfter = waAuto
|
||||
Index = 0
|
||||
end
|
||||
item
|
||||
Control = chkPrompt
|
||||
WrapAfter = waAuto
|
||||
Index = 1
|
||||
end
|
||||
item
|
||||
Control = chkCaseSens
|
||||
WrapAfter = waAuto
|
||||
Index = 2
|
||||
end
|
||||
item
|
||||
Control = chkFromCur
|
||||
WrapAfter = waAuto
|
||||
Index = 3
|
||||
end
|
||||
item
|
||||
Control = chkBack
|
||||
WrapAfter = waAuto
|
||||
Index = 4
|
||||
end
|
||||
item
|
||||
Control = chkWWord
|
||||
WrapAfter = waAuto
|
||||
Index = 5
|
||||
end>
|
||||
FlowLayout = tlTop
|
||||
FlowStyle = fsTopBottomLeftRight
|
||||
TabOrder = 0
|
||||
object chkRegex: TCheckBox
|
||||
Left = 0
|
||||
Height = 23
|
||||
Top = 0
|
||||
Width = 303
|
||||
Align = alClient
|
||||
AutoComplete = True
|
||||
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchCaseSensitive, cbactSearchAscending]
|
||||
ItemHeight = 0
|
||||
MaxLength = 128
|
||||
OnChange = cbReplaceWthChange
|
||||
OnKeyDown = cbReplaceWthKeyDown
|
||||
OnSelect = cbReplaceWthChange
|
||||
Width = 94
|
||||
Anchors = []
|
||||
Caption = 'allow regex'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 0
|
||||
end
|
||||
object chkPrompt: TCheckBox
|
||||
Left = 0
|
||||
Height = 23
|
||||
Top = 24
|
||||
Width = 72
|
||||
Anchors = []
|
||||
Caption = 'prompt'
|
||||
TabOrder = 1
|
||||
end
|
||||
object chkEnableRep: TCheckBox
|
||||
Left = 0
|
||||
Height = 27
|
||||
object chkCaseSens: TCheckBox
|
||||
Left = 94
|
||||
Height = 23
|
||||
Top = 0
|
||||
Width = 111
|
||||
Align = alLeft
|
||||
Caption = 'Replace with '
|
||||
OnChange = chkEnableRepChange
|
||||
TabOrder = 0
|
||||
Width = 107
|
||||
Anchors = []
|
||||
Caption = 'case sensitive'
|
||||
TabOrder = 2
|
||||
end
|
||||
end
|
||||
object Panel2: TPanel[6]
|
||||
Left = 4
|
||||
Height = 27
|
||||
Top = 200
|
||||
Width = 414
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 27
|
||||
ClientWidth = 414
|
||||
TabOrder = 6
|
||||
object btnFindAll: TBitBtn
|
||||
Left = 0
|
||||
Height = 27
|
||||
Top = 0
|
||||
Width = 402
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
Caption = 'btnFindAll'
|
||||
TabOrder = 0
|
||||
object chkFromCur: TCheckBox
|
||||
Left = 94
|
||||
Height = 23
|
||||
Top = 24
|
||||
Width = 96
|
||||
Anchors = []
|
||||
Caption = 'from cursor'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 3
|
||||
end
|
||||
object btnAllScope: TBitBtn
|
||||
Left = 404
|
||||
Height = 27
|
||||
object chkBack: TCheckBox
|
||||
Left = 201
|
||||
Height = 23
|
||||
Top = 0
|
||||
Width = 10
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 2
|
||||
OnClick = btnAllScopeClick
|
||||
TabOrder = 1
|
||||
Width = 84
|
||||
Anchors = []
|
||||
Caption = 'backward'
|
||||
TabOrder = 4
|
||||
end
|
||||
object chkWWord: TCheckBox
|
||||
Left = 201
|
||||
Height = 23
|
||||
Top = 24
|
||||
Width = 96
|
||||
Anchors = []
|
||||
Caption = 'whole word'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 5
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
object btnReplaceAll: TBitBtn[4]
|
||||
Left = 4
|
||||
Height = 32
|
||||
Top = 257
|
||||
Width = 414
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'btnReplaceAll'
|
||||
TabOrder = 3
|
||||
end
|
||||
object Panel1: TPanel[5]
|
||||
Left = 4
|
||||
Height = 30
|
||||
Top = 38
|
||||
Width = 414
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 30
|
||||
ClientWidth = 414
|
||||
TabOrder = 5
|
||||
object cbReplaceWth: TComboBox
|
||||
Left = 104
|
||||
Height = 30
|
||||
Top = 0
|
||||
Width = 310
|
||||
Align = alClient
|
||||
AutoComplete = True
|
||||
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchCaseSensitive, cbactSearchAscending]
|
||||
ItemHeight = 0
|
||||
MaxLength = 128
|
||||
TabOrder = 1
|
||||
OnChange = cbReplaceWthChange
|
||||
OnKeyDown = cbReplaceWthKeyDown
|
||||
OnSelect = cbReplaceWthChange
|
||||
end
|
||||
object chkEnableRep: TCheckBox
|
||||
Left = 0
|
||||
Height = 30
|
||||
Top = 0
|
||||
Width = 104
|
||||
Align = alLeft
|
||||
Caption = 'Replace with '
|
||||
TabOrder = 0
|
||||
OnChange = chkEnableRepChange
|
||||
end
|
||||
end
|
||||
object Panel2: TPanel[6]
|
||||
Left = 4
|
||||
Height = 32
|
||||
Top = 185
|
||||
Width = 414
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 32
|
||||
ClientWidth = 414
|
||||
TabOrder = 6
|
||||
object btnFindAll: TBitBtn
|
||||
Left = 0
|
||||
Height = 32
|
||||
Top = 0
|
||||
Width = 398
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
Caption = 'btnFindAll'
|
||||
TabOrder = 0
|
||||
end
|
||||
object btnAllScope: TBitBtn
|
||||
Left = 400
|
||||
Height = 32
|
||||
Top = 0
|
||||
Width = 14
|
||||
Align = alRight
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 2
|
||||
OnClick = btnAllScopeClick
|
||||
TabOrder = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 414
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
Left = 216
|
||||
Top = 16
|
||||
end
|
||||
object imgList: TImageList[2]
|
||||
object imgList: TImageList[3]
|
||||
Left = 248
|
||||
Top = 16
|
||||
Bitmap = {
|
||||
|
|
|
@ -7,7 +7,7 @@ interface
|
|||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
||||
Menus, StdCtrls, actnList, Buttons, SynEdit, SynEditSearch, SynEditTypes,
|
||||
RegExpr, SynEditTextBuffer, strutils,
|
||||
RegExpr, SynEditTextBuffer, strutils, LCLType,
|
||||
u_common, u_mru, u_widget, u_synmemo, u_interfaces, u_observer,
|
||||
u_writableComponent, u_dialogs, u_sharedres, u_dsgncontrols;
|
||||
|
||||
|
@ -762,13 +762,16 @@ begin
|
|||
fToFind := cbToFind.Text;
|
||||
fHasSearched := false;
|
||||
updateImperative;
|
||||
if fDoc.isAssigned and (not chkRegex.Checked) then
|
||||
fDoc.HighlightedIdent := fToFind;
|
||||
end;
|
||||
|
||||
procedure TSearchWidget.cbToFindKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
begin
|
||||
if Key <> 13 then
|
||||
exit;
|
||||
actFindNextExecute(nil);
|
||||
if Key = 13 then
|
||||
actFindNextExecute(nil)
|
||||
else if (key = VK_ESCAPE) and fDoc.isAssigned then
|
||||
fDoc.setFocus;
|
||||
end;
|
||||
|
||||
procedure TSearchWidget.chkEnableRepChange(Sender: TObject);
|
||||
|
|
|
@ -20,7 +20,7 @@ type
|
|||
public
|
||||
// Initializes with the semVer text.
|
||||
// When throw is set to true an Exception is raised if the format is not compliant.
|
||||
procedure init(const text: string; throw: boolean = true);
|
||||
procedure init(const text: string; throw: boolean);
|
||||
|
||||
// Indicates wether the version is not a final release.
|
||||
function isPreRelease: boolean;
|
||||
|
@ -58,7 +58,7 @@ implementation
|
|||
var v1, v2: TSemVer;
|
||||
{$ENDIF}
|
||||
|
||||
procedure TSemVer.init(const text: string; throw: boolean = true);
|
||||
procedure TSemVer.init(const text: string; throw: boolean);
|
||||
|
||||
procedure resetFields();
|
||||
begin
|
||||
|
@ -84,12 +84,12 @@ begin
|
|||
if throw and (r.front <> 'v') then
|
||||
error('Invalid semVer format, the text must start with "v"');
|
||||
r.popFront;
|
||||
fMajor := r.takeUntil('.').yield.ToInteger;
|
||||
fMajor := StrToInt64Def(r.takeUntil('.').yield, 0);
|
||||
if throw and r.empty then
|
||||
error('Invalid semVer format, minor and patch miss');
|
||||
fMinor := r.popFront^.takeUntil('.').yield.ToInteger;
|
||||
fMinor := StrToInt64Def(r.popFront^.takeUntil('.').yield, 0);
|
||||
if not r.empty then
|
||||
fPatch := r.popFront^.takeWhile(['0'..'9']).yield.ToInteger;
|
||||
fPatch := StrToInt64Def(r.popFront^.takeWhile(['0'..'9']).yield, 0);
|
||||
if not r.empty then
|
||||
fAdditional := r.popFront^.takeUntil(#0).yield;
|
||||
fValid := true;
|
||||
|
@ -146,46 +146,46 @@ end;
|
|||
|
||||
{$IFDEF DEBUG}
|
||||
begin
|
||||
v1.init('v1.0.0');
|
||||
v2.init('v1.0.0');
|
||||
v1.init('v1.0.0', true);
|
||||
v2.init('v1.0.0', true);
|
||||
assert(v1 = v2);
|
||||
|
||||
v1.init('v2.0.0');
|
||||
v2.init('v1.0.0');
|
||||
v1.init('v2.0.0', true);
|
||||
v2.init('v1.0.0', true);
|
||||
assert(v1 > v2);
|
||||
assert(v2 < v1);
|
||||
|
||||
v1.init('v1.1.0');
|
||||
v2.init('v1.0.0');
|
||||
v1.init('v1.1.0', true);
|
||||
v2.init('v1.0.0', true);
|
||||
assert(v1 > v2);
|
||||
assert(v2 < v1);
|
||||
|
||||
v1.init('v1.1.1');
|
||||
v2.init('v1.1.0');
|
||||
v1.init('v1.1.1', true);
|
||||
v2.init('v1.1.0', true);
|
||||
assert(v1 > v2);
|
||||
assert(v2 < v1);
|
||||
|
||||
v1.init('v1.1.1');
|
||||
v2.init('v1.0.1');
|
||||
v1.init('v1.1.1', true);
|
||||
v2.init('v1.0.1', true);
|
||||
assert(v1 > v2);
|
||||
assert(v2 < v1);
|
||||
|
||||
v1.init('v1.1.1-alpha.2');
|
||||
v2.init('v1.1.1-alpha.1');
|
||||
v1.init('v1.1.1-alpha.2', true);
|
||||
v2.init('v1.1.1-alpha.1', true);
|
||||
assert(v1 > v2);
|
||||
assert(v1.isAlpha);
|
||||
assert(v2.isAlpha);
|
||||
assert(v2.asString = '1.1.1-alpha.1');
|
||||
|
||||
v1.init('v1.1.1-beta.1');
|
||||
v2.init('v1.1.1-alpha.8');
|
||||
v1.init('v1.1.1-beta.1', true);
|
||||
v2.init('v1.1.1-alpha.8', true);
|
||||
assert(v1 > v2);
|
||||
assert(v1.isBeta);
|
||||
assert(v2.isAlpha);
|
||||
assert(v1.isPreRelease);
|
||||
|
||||
v1.init('v1.2.3');
|
||||
v2.init('v1.22.33');
|
||||
v1.init('v1.2.3', true);
|
||||
v2.init('v1.22.33', true);
|
||||
assert(v1.major = 1);
|
||||
assert(v1.minor = 2);
|
||||
assert(v1.patch = 3);
|
||||
|
@ -194,7 +194,7 @@ begin
|
|||
assert(v2.patch = 33);
|
||||
assert(v2.asString = '1.22.33');
|
||||
|
||||
v1.init('v0.0.2060');
|
||||
v1.init('v0.0.2060', true);
|
||||
assert(v1.major = 0);
|
||||
assert(v1.minor = 0);
|
||||
assert(v1.patch = 2060);
|
||||
|
@ -204,7 +204,7 @@ begin
|
|||
assert(v2.minor = 0);
|
||||
assert(v2.patch = 2060);
|
||||
|
||||
v1.init('v0.6.0');
|
||||
v1.init('v0.6.0', true);
|
||||
assert(v1.major = 0);
|
||||
assert(v1.minor = 6);
|
||||
assert(v1.patch = 0);
|
||||
|
|
|
@ -14,21 +14,21 @@ type
|
|||
KeywordMatch = record
|
||||
private
|
||||
|
||||
{
|
||||
rendered on 2021-Nov-28 21:12:13.8852083 by IsItThere.
|
||||
- PRNG seed: 6574
|
||||
- map length: 128
|
||||
- case sensitive: true
|
||||
}
|
||||
{
|
||||
rendered on 2024-Feb-21 05:21:19.9635608 by IsItThere.
|
||||
- PRNG seed: 6574
|
||||
- map length: 128
|
||||
- case sensitive: true
|
||||
}
|
||||
|
||||
const fWords: array [0..127] of string =
|
||||
('', '', 'alias', 'this', 'f32', '', 's32', 's8', 'throw', 'f64', 'switch', 's64', '', '', '', '', '', '', 'finally', '', '', '', 'if', '', '', '', '', '', '', '', '', '', '', '', '', '', 'protection', 's16', '', '', 'goto', 'usize', '', '', 'in', '', 'static', '', 'try', '', '', '', 'enum', 'do', '', '', '', 'super', 'const', 'union', '', '', 'else', '', 'version', '', '', '', '', 'u32', 'u8', 'echo', '', 'true', 'u64', 'asm', '', 'struct', '', 'auto', 'bool', '', '', '', '', '', 'false', 'null', 'class', '', '', 'overload', '', '', '', '', 'label', '', 'assert', 'continue', 'u16', 'foreach', 'break', '', '', '', 'ssize', '', '', '', '', 'unit', 'while', '', 'var', 'new', 'with', 'template', '', 'import', 'on', 'delete', '', 'function', '', 'return', '', '');
|
||||
const fWords: array [0..127] of string =
|
||||
('label', 'switch', '', 'goto', '', '', '', 'char', 'delete', 'var', '', '', '', '', '', 'apply', '', '', 'on', '', '', 'from', 'alias', '', '', '', 'static', 'super', 'overload', 'usize', '', 'false', '', 'template', 'continue', '', '', 'this', 'new', 'in', 'foreach', 'throw', 'u8', '', '', '', '', 'const', 'break', 'union', '', 'ssize', 'true', '', 'class', '', 'unit', 'version', '', '', '', '', 'asm', '', 's8', 'echo', '', '', '', '', '', 'u16', '', '', '', 'function', 'protection', 'enum', '', 'while', 'defer', '', '', 'return', 'if', '', '', 'u32', '', '', '', 'else', '', 's16', 'import', '', 'auto', 'try', 'bool', '', '', '', 'finally', '', 'null', 'u64', 'f32', '', '', 's32', '', 'struct', '', '', '', 'assert', 'do', '', '', '', '', '', '', '', 'f64', 'with', '', 's64');
|
||||
|
||||
const fFilled: array [0..127] of boolean =
|
||||
(false, false, true, true, true, false, true, true, true, true, true, true, false, false, false, false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, true, true, false, false, true, false, true, false, true, false, false, false, true, true, false, false, false, true, true, true, false, false, true, false, true, false, false, false, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, false, false, true, true, true, false, false, true, false, false, false, false, true, false, true, true, true, true, true, false, false, false, true, false, false, false, false, true, true, false, true, true, true, true, false, true, true, true, false, true, false, true, false, false);
|
||||
const fFilled: array [0..127] of boolean =
|
||||
(true, true, false, true, false, false, false, true, true, true, false, false, false, false, false, true, false, false, true, false, false, true, true, false, false, false, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, false, false, false, false, true, true, true, false, true, true, false, true, false, true, true, false, false, false, false, true, false, true, true, false, false, false, false, false, true, false, false, false, true, true, true, false, true, true, false, false, true, true, false, false, true, false, false, false, true, false, true, true, false, true, true, true, false, false, false, true, false, true, true, true, false, false, true, false, true, false, false, false, true, true, false, false, false, false, false, false, false, true, true, false, true);
|
||||
|
||||
const fCoefficients: array [0..255] of Byte =
|
||||
(251, 141, 241, 229, 153, 224, 69, 154, 183, 60, 181, 128, 168, 190, 25, 39, 142, 116, 172, 48, 49, 203, 195, 46, 229, 38, 232, 88, 114, 147, 97, 185, 242, 43, 34, 75, 89, 228, 21, 156, 254, 129, 186, 74, 224, 78, 146, 25, 49, 118, 232, 70, 92, 34, 215, 44, 47, 48, 153, 28, 19, 111, 146, 97, 159, 224, 143, 72, 212, 194, 30, 104, 134, 217, 123, 30, 68, 206, 208, 50, 96, 3, 30, 30, 90, 245, 234, 93, 191, 97, 112, 45, 103, 11, 225, 255, 132, 128, 78, 62, 41, 62, 214, 100, 191, 64, 95, 146, 234, 243, 236, 12, 68, 60, 72, 216, 44, 23, 42, 201, 206, 188, 188, 190, 114, 193, 20, 143, 119, 31, 235, 96, 72, 92, 146, 146, 227, 33, 253, 76, 142, 189, 58, 38, 203, 68, 19, 35, 82, 49, 150, 78, 157, 199, 33, 210, 223, 133, 237, 56, 89, 123, 20, 177, 68, 205, 21, 128, 142, 35, 222, 180, 138, 141, 10, 160, 212, 166, 255, 166, 75, 212, 216, 239, 76, 119, 45, 62, 130, 21, 116, 119, 253, 50, 241, 160, 208, 225, 244, 55, 57, 238, 239, 107, 190, 143, 165, 125, 217, 80, 18, 244, 72, 210, 28, 77, 138, 40, 239, 124, 75, 87, 92, 121, 107, 222, 0, 23, 215, 213, 133, 144, 208, 216, 191, 170, 75, 182, 75, 230, 218, 136, 44, 134, 191, 183, 126, 108, 58, 29, 52, 163, 111, 131, 198, 230);
|
||||
const fCoefficients: array [0..255] of Byte =
|
||||
(37, 236, 86, 118, 73, 206, 4, 48, 111, 209, 73, 137, 75, 157, 197, 152, 28, 40, 164, 170, 89, 179, 110, 152, 34, 12, 168, 23, 76, 66, 91, 217, 64, 82, 153, 12, 185, 137, 120, 56, 55, 132, 75, 141, 42, 119, 214, 156, 103, 102, 23, 72, 8, 181, 233, 248, 50, 191, 134, 63, 153, 91, 211, 31, 248, 110, 52, 135, 183, 250, 187, 30, 201, 228, 26, 255, 211, 174, 96, 188, 196, 206, 170, 218, 210, 19, 147, 137, 85, 186, 122, 214, 221, 218, 67, 147, 91, 27, 241, 246, 192, 226, 11, 2, 53, 201, 105, 1, 137, 149, 94, 180, 242, 169, 65, 14, 25, 248, 173, 230, 80, 135, 108, 41, 129, 206, 58, 41, 231, 66, 9, 230, 66, 181, 237, 77, 132, 143, 61, 65, 125, 248, 77, 147, 107, 74, 69, 83, 82, 217, 61, 119, 70, 229, 222, 170, 236, 100, 226, 92, 167, 163, 84, 207, 175, 75, 43, 27, 105, 100, 137, 0, 50, 34, 66, 135, 19, 75, 41, 113, 105, 88, 81, 86, 255, 235, 167, 229, 20, 181, 28, 233, 251, 234, 32, 117, 113, 48, 178, 193, 180, 111, 116, 38, 1, 16, 93, 108, 26, 83, 202, 163, 49, 177, 142, 229, 120, 149, 99, 182, 110, 136, 118, 198, 153, 237, 92, 131, 160, 58, 248, 253, 183, 192, 200, 200, 172, 192, 213, 137, 2, 208, 24, 94, 17, 41, 66, 9, 196, 119, 30, 99, 11, 28, 148, 180);
|
||||
|
||||
class function hash(const w: string): Word; static;
|
||||
public
|
||||
|
@ -91,6 +91,7 @@ type
|
|||
procedure lexFloatingLiteralFractionalPart();
|
||||
procedure lexExponent();
|
||||
procedure lexStringLiteral();
|
||||
procedure lexCharLiteral();
|
||||
procedure lexRawStringLiteral();
|
||||
procedure lexLineComment();
|
||||
procedure lexStarComment();
|
||||
|
@ -577,6 +578,25 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TSynSxSyn.lexCharLiteral();
|
||||
begin
|
||||
fTokKind := TTokenKind.tkStrng;
|
||||
fTokStop += 1;
|
||||
while fTokStop <= fLineBuf.length do
|
||||
begin
|
||||
case fLineBuf[fTokStop] of
|
||||
'\' : fTokStop += 2;
|
||||
#39 :
|
||||
begin
|
||||
fTokStop += 1;
|
||||
exit;
|
||||
end
|
||||
else fTokStop += 1;
|
||||
end;
|
||||
end;
|
||||
fTokKind := TTokenKind.tkError;
|
||||
end;
|
||||
|
||||
procedure TSynSxSyn.lexStringLiteral();
|
||||
var
|
||||
firstLine: Boolean;
|
||||
|
@ -675,21 +695,12 @@ begin
|
|||
while fTokStop <= fLineBuf.length do
|
||||
begin
|
||||
case fLineBuf[fTokStop] of
|
||||
'_', 'a'..'z', 'A'..'Z':
|
||||
'_', 'a'..'z', 'A'..'Z', '0'..'9':
|
||||
begin
|
||||
oneChr := true;
|
||||
fTokStop += 1;
|
||||
continue;
|
||||
end;
|
||||
'0' .. '9':
|
||||
begin
|
||||
if oneChr then
|
||||
begin
|
||||
fTokStop += 1;
|
||||
continue;
|
||||
end
|
||||
else break; // e.g $0
|
||||
end
|
||||
else break;
|
||||
end;
|
||||
end;
|
||||
|
@ -779,6 +790,8 @@ begin
|
|||
end;
|
||||
// number
|
||||
'1' .. '9' : lexIntLiteral();
|
||||
// char
|
||||
#39 : lexCharLiteral();
|
||||
// "string"
|
||||
'"': lexStringLiteral();
|
||||
// `string`
|
||||
|
@ -798,7 +811,16 @@ begin
|
|||
'>': lexOpAndOpOpAndOpEqualAndOpOpEqual('>');
|
||||
// `=`, `==`, `=>`
|
||||
'=': lexAssEquOrLambda();
|
||||
'.', '(', ')', ',', ':' , '[', ']', ';' :
|
||||
'.':
|
||||
begin
|
||||
nextPChar := safeLookupChar();
|
||||
fTokKind := TTokenKind.tkSymbl;
|
||||
if (nextPChar <> nil) and (nextPChar^ = '=') then
|
||||
fTokStop += 2
|
||||
else
|
||||
fTokStop += 1;
|
||||
end;
|
||||
'(', ')', ',', ':' , '[', ']', ';' :
|
||||
begin
|
||||
fTokKind := TTokenKind.tkSymbl;
|
||||
fTokStop += 1;
|
||||
|
|
|
@ -6,86 +6,84 @@ inherited SymbolListWidget: TSymbolListWidget
|
|||
Caption = 'Symbol list'
|
||||
ClientHeight = 430
|
||||
ClientWidth = 308
|
||||
inherited Back: TPanel
|
||||
Height = 430
|
||||
Height = 430
|
||||
Width = 308
|
||||
AutoSize = True
|
||||
ClientHeight = 430
|
||||
ClientWidth = 308
|
||||
inherited Content: TPanel
|
||||
Height = 394
|
||||
Width = 308
|
||||
AutoSize = True
|
||||
ClientHeight = 430
|
||||
ClientHeight = 394
|
||||
ClientWidth = 308
|
||||
inherited Content: TPanel
|
||||
Height = 394
|
||||
Width = 308
|
||||
ClientHeight = 394
|
||||
ClientWidth = 308
|
||||
PopupMenu = nil
|
||||
object Tree: TTreeView[0]
|
||||
Left = 4
|
||||
Height = 386
|
||||
Top = 4
|
||||
Width = 300
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RightClickSelect = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SelectionColor = clActiveBorder
|
||||
TabOrder = 0
|
||||
OnCompare = TreeCompare
|
||||
OnKeyPress = TreeKeyPress
|
||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||
Items.Data = {
|
||||
F9FFFFFF02000E000000090000000900000009000000FFFFFFFF000000000000
|
||||
000000060000004572726F7273080000000800000008000000FFFFFFFF000000
|
||||
000000000000080000005761726E696E6773000000000000000000000000FFFF
|
||||
FFFF00000000000000000005000000416C696173010000000100000001000000
|
||||
FFFFFFFF00000000000000000005000000436C61737302000000020000000200
|
||||
0000FFFFFFFF00000000000000000004000000456E756D030000000300000003
|
||||
000000FFFFFFFF0000000000000000000800000046756E6374696F6E04000000
|
||||
0400000004000000FFFFFFFF00000000000000000006000000496D706F727405
|
||||
0000000500000005000000FFFFFFFF00000000000000000009000000496E7465
|
||||
7266616365060000000600000006000000FFFFFFFF0000000000000000000500
|
||||
00004D6978696E070000000700000007000000FFFFFFFF000000000000000000
|
||||
06000000537472756374000000000000000000000000FFFFFFFF000000000000
|
||||
0000000800000054656D706C617465010000000100000001000000FFFFFFFF00
|
||||
000000000000000005000000556E696F6E020000000200000002000000FFFFFF
|
||||
FF00000000000000000008000000556E69747465737403000000030000000300
|
||||
0000FFFFFFFF000000000000000000080000005661726961626C65
|
||||
}
|
||||
TreeLineColor = clDefault
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
PopupMenu = nil
|
||||
object Tree: TTreeView[0]
|
||||
Left = 4
|
||||
Height = 386
|
||||
Top = 4
|
||||
Width = 300
|
||||
OnResize = toolbarResize
|
||||
object btnRefresh: TDexedToolButton[0]
|
||||
Left = 1
|
||||
Hint = 'refresh the symbol list'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRefresh'
|
||||
OnClick = btnRefreshClick
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object TreeFilterEdit1: TTreeFilterEdit[1]
|
||||
Left = 32
|
||||
Height = 26
|
||||
Hint = 'filter the symbols that contain the text typed here'
|
||||
Top = 2
|
||||
Width = 264
|
||||
OnAfterFilter = TreeFilterEdit1AfterFilter
|
||||
OnFilterItem = TreeFilterEdit1FilterItem
|
||||
ButtonWidth = 28
|
||||
Align = alClient
|
||||
BorderSpacing.Left = 30
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
OnMouseEnter = TreeFilterEdit1MouseEnter
|
||||
FilteredTreeview = Tree
|
||||
end
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RightClickSelect = True
|
||||
ScrollBars = ssAutoBoth
|
||||
SelectionColor = clActiveBorder
|
||||
TabOrder = 0
|
||||
OnCompare = TreeCompare
|
||||
OnKeyPress = TreeKeyPress
|
||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||
Items.Data = {
|
||||
F9FFFFFF02000E000000090000000900000009000000FFFFFFFF000000000000
|
||||
000000060000004572726F7273080000000800000008000000FFFFFFFF000000
|
||||
000000000000080000005761726E696E6773000000000000000000000000FFFF
|
||||
FFFF00000000000000000005000000416C696173010000000100000001000000
|
||||
FFFFFFFF00000000000000000005000000436C61737302000000020000000200
|
||||
0000FFFFFFFF00000000000000000004000000456E756D030000000300000003
|
||||
000000FFFFFFFF0000000000000000000800000046756E6374696F6E04000000
|
||||
0400000004000000FFFFFFFF00000000000000000006000000496D706F727405
|
||||
0000000500000005000000FFFFFFFF00000000000000000009000000496E7465
|
||||
7266616365060000000600000006000000FFFFFFFF0000000000000000000500
|
||||
00004D6978696E070000000700000007000000FFFFFFFF000000000000000000
|
||||
06000000537472756374000000000000000000000000FFFFFFFF000000000000
|
||||
0000000800000054656D706C617465010000000100000001000000FFFFFFFF00
|
||||
000000000000000005000000556E696F6E020000000200000002000000FFFFFF
|
||||
FF00000000000000000008000000556E69747465737403000000030000000300
|
||||
0000FFFFFFFF000000000000000000080000005661726961626C65
|
||||
}
|
||||
TreeLineColor = clDefault
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 300
|
||||
OnResize = toolbarResize
|
||||
object btnRefresh: TDexedToolButton[0]
|
||||
Left = 1
|
||||
Hint = 'refresh the symbol list'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRefresh'
|
||||
OnClick = btnRefreshClick
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object TreeFilterEdit1: TTreeFilterEdit[1]
|
||||
Left = 32
|
||||
Height = 26
|
||||
Hint = 'filter the symbols that contain the text typed here'
|
||||
Top = 2
|
||||
Width = 264
|
||||
OnAfterFilter = TreeFilterEdit1AfterFilter
|
||||
OnFilterItem = TreeFilterEdit1FilterItem
|
||||
ButtonWidth = 28
|
||||
Align = alClient
|
||||
BorderSpacing.Left = 30
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
OnMouseEnter = TreeFilterEdit1MouseEnter
|
||||
FilteredTreeview = Tree
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
|
@ -209,8 +209,8 @@ begin
|
|||
fSymbols[CFF] := fDoc.fileName;
|
||||
fSymbols[CFR] := fSymbols[CFF].stripFileExt + exeExt;
|
||||
fSymbols[CFP] := fSymbols[CFF].extractFilePath;
|
||||
if fDoc.Identifier.isNotEmpty then
|
||||
fSymbols[CI] := fDoc.Identifier;
|
||||
if fDoc.HighlightedIdent.isNotEmpty then
|
||||
fSymbols[CI] := fDoc.HighlightedIdent;
|
||||
fSymbols[CL] := fDoc.LineText;
|
||||
fSymbols[CS] := fDoc.SelText;
|
||||
end;
|
||||
|
|
|
@ -11,7 +11,6 @@ uses
|
|||
SynEditMarks, SynEditTypes, SynHighlighterJScript, SynBeautifier, dialogs,
|
||||
md5, Spin, LCLIntf, LazFileUtils, LMessages, SynHighlighterCpp, math,
|
||||
SynGutterBase, LCLVersion, SynEditMiscProcs,
|
||||
//SynEditMarkupFoldColoring,
|
||||
Clipbrd, fpjson, jsonparser, LazUTF8, Buttons, StdCtrls,
|
||||
u_common, u_writableComponent, u_d2syn, u_txtsyn, u_dialogs, u_sxsyn,
|
||||
u_sharedres, u_dlang, u_stringrange, u_dbgitf, u_observer, u_diff,
|
||||
|
@ -98,6 +97,7 @@ type
|
|||
fCaretPosition: Integer;
|
||||
fSelectionEnd: Integer;
|
||||
fFontSize: Integer;
|
||||
fFontHeight: Integer;
|
||||
fSourceFilename: string;
|
||||
procedure setFolds(someFolds: TCollection);
|
||||
published
|
||||
|
@ -106,6 +106,7 @@ type
|
|||
property folds: TCollection read fFolds write setFolds;
|
||||
property selectionEnd: Integer read fSelectionEnd write fSelectionEnd;
|
||||
property fontSize: Integer read fFontSize write fFontSize;
|
||||
property fontHeight: Integer read fFontHeight write fFontHeight;
|
||||
public
|
||||
constructor create(aComponent: TComponent); override;
|
||||
destructor destroy; override;
|
||||
|
@ -189,7 +190,6 @@ type
|
|||
|
||||
TDexedMemo = class(TSynEdit, IDebugObserver)
|
||||
private
|
||||
//fIndentGuideMarkup: TSynEditMarkupFoldColors;
|
||||
fLifeTimeManager: TObject;
|
||||
fIdentDialShown: boolean;
|
||||
fScrollMemo: TScrollMemo;
|
||||
|
@ -199,7 +199,7 @@ type
|
|||
fCacheLoaded: boolean;
|
||||
fIsDSource: boolean;
|
||||
fFocusForInput: boolean;
|
||||
fIdentifier: string;
|
||||
fHighlightedIdent: string;
|
||||
fTempFileName: string;
|
||||
fMultiDocSubject: TObject;
|
||||
fDefaultFontSize: Integer;
|
||||
|
@ -265,7 +265,7 @@ type
|
|||
procedure setMatchOpts(value: TIdentifierMatchOptions);
|
||||
function getMouseBytePosition: Integer;
|
||||
procedure changeNotify(Sender: TObject);
|
||||
procedure highlightCurrentIdentifier;
|
||||
procedure highlightCurrentIdentifier(fromEditor: boolean = true);
|
||||
procedure saveCache;
|
||||
procedure loadCache;
|
||||
class procedure cleanCache; static;
|
||||
|
@ -319,6 +319,7 @@ type
|
|||
procedure debugBreak(const fname: string; line: integer; reason: TDebugBreakReason);
|
||||
function breakPointsCount: integer;
|
||||
procedure tryToPatchMixedIndentation;
|
||||
procedure setHighligthedIdent(value: string);
|
||||
protected
|
||||
procedure DoEnter; override;
|
||||
procedure DoExit; override;
|
||||
|
@ -381,9 +382,13 @@ type
|
|||
procedure replaceUndoableContent(const value: string);
|
||||
procedure setDscannerOptions(dsEnabled: boolean; dsDelay: integer);
|
||||
procedure centerCursor();
|
||||
procedure redoAll();
|
||||
procedure undoAll();
|
||||
procedure scrollCentered(down: boolean);
|
||||
procedure setHighligtherFrom(other: TDexedMemo);
|
||||
//
|
||||
property IdentifierMatchOptions: TIdentifierMatchOptions read fMatchOpts write setMatchOpts;
|
||||
property Identifier: string read fIdentifier;
|
||||
property HighlightedIdent: string read fHighlightedIdent write setHighligthedIdent;
|
||||
property fileName: string read fFilename;
|
||||
property modified: boolean read fModified;
|
||||
property tempFilename: string read fTempFileName;
|
||||
|
@ -481,6 +486,10 @@ const
|
|||
ecRightWordEdge = ecUserFirst + 31;
|
||||
ecSelLeftWordEdge = ecUserFirst + 32;
|
||||
ecSelRightWordEdge = ecUserFirst + 33;
|
||||
ecRedoAll = ecUserFirst + 34;
|
||||
ecUndoAll = ecUserFirst + 35;
|
||||
ecScrollCenteredUp = ecUserFirst + 36;
|
||||
ecScrollCenteredDown = ecUserFirst + 37;
|
||||
var
|
||||
D2Syn: TSynD2Syn; // used as model to set the options when no editor exists.
|
||||
TxtSyn: TSynTxtSyn; // used as model to set the options when no editor exists.
|
||||
|
@ -839,6 +848,7 @@ begin
|
|||
fSourceFilename := fMemo.fileName;
|
||||
fSelectionEnd := fMemo.SelEnd;
|
||||
fFontSize := fMemo.Font.Size;
|
||||
fFontHeight := fMemo.Font.Height;
|
||||
TEditorHintWindow.FontSize := fMemo.Font.Size;
|
||||
|
||||
prev := fMemo.Lines.Count-1;
|
||||
|
@ -866,8 +876,10 @@ begin
|
|||
if fMemo.isNotAssigned then
|
||||
exit;
|
||||
|
||||
if fFontSize > 0 then
|
||||
if fFontSize <> 0 then
|
||||
fMemo.Font.Size := fFontSize;
|
||||
if fFontHeight <> 0 then
|
||||
fMemo.Font.Height := fFontHeight;
|
||||
|
||||
// Currently collisions are not handled.
|
||||
if fMemo.fileName <> fSourceFilename then
|
||||
|
@ -1234,9 +1246,6 @@ begin
|
|||
LineHighlightColor.Background := color - $080808;
|
||||
LineHighlightColor.Foreground := clNone;
|
||||
|
||||
//fIndentGuideMarkup:= TSynEditMarkupFoldColors.Create(self);
|
||||
//MarkupManager.AddMarkUp(fIndentGuideMarkup);
|
||||
|
||||
fAutoCloseCurlyBrace:= autoCloseOnNewLineLexically;
|
||||
fAutoClosedPairs:= [autoCloseSquareBracket];
|
||||
|
||||
|
@ -1256,7 +1265,6 @@ destructor TDexedMemo.destroy;
|
|||
begin
|
||||
saveCache;
|
||||
|
||||
//fIndentGuideMarkup.Free;
|
||||
EntitiesConnector.removeObserver(self);
|
||||
subjDocClosing(TMultiDocSubject(fMultiDocSubject), self);
|
||||
fMultiDocSubject.Free;
|
||||
|
@ -1481,6 +1489,10 @@ begin
|
|||
AddKey(ecSelRightWordEdge, 0, [], 0, []);
|
||||
AddKey(ecSmartWordLeft, 0, [], 0, []);
|
||||
AddKey(ecSmartWordRight, 0, [], 0, []);
|
||||
AddKey(ecRedoAll, 0, [], 0, []);
|
||||
AddKey(ecUndoAll, 0, [], 0, []);
|
||||
AddKey(ecScrollCenteredDown, VK_DOWN, [ssCtrl, ssAlt], 0, []);
|
||||
AddKey(ecScrollCenteredUp, VK_UP, [ssCtrl, ssAlt], 0, []);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -1520,6 +1532,10 @@ begin
|
|||
'ecRightWordEdge': begin Int := ecRightWordEdge; exit(true); end;
|
||||
'ecSelLeftWordEdge': begin Int := ecSelLeftWordEdge; exit(true); end;
|
||||
'ecSelRightWordEdge': begin Int := ecSelRightWordEdge; exit(true); end;
|
||||
'ecRedoAll': begin Int := ecRedoAll; exit(true); end;
|
||||
'ecUndoAll': begin Int := ecUndoAll; exit(true); end;
|
||||
'ecScrollCenteredUp': begin Int := ecScrollCenteredUp; exit(true); end;
|
||||
'ecScrollCenteredDown': begin Int := ecScrollCenteredDown; exit(true); end;
|
||||
else exit(false);
|
||||
end;
|
||||
end;
|
||||
|
@ -1560,6 +1576,10 @@ begin
|
|||
ecRightWordEdge: begin Ident := 'ecRightWordEdge'; exit(true); end;
|
||||
ecSelLeftWordEdge: begin Ident := 'ecSelLeftWordEdge'; exit(true); end;
|
||||
ecSelRightWordEdge: begin Ident := 'ecSelRightWordEdge'; exit(true); end;
|
||||
ecRedoAll: begin Ident := 'ecRedoAll'; exit(true); end;
|
||||
ecUndoAll: begin Ident := 'ecUndoAll'; exit(true); end;
|
||||
ecScrollCenteredUp: begin Ident := 'ecScrollCenteredUp'; exit(true); end;
|
||||
ecScrollCenteredDown: begin Ident := 'ecScrollCenteredDown'; exit(true); end;
|
||||
else exit(false);
|
||||
end;
|
||||
end;
|
||||
|
@ -1692,6 +1712,14 @@ begin
|
|||
gotoWordEdge(false);
|
||||
ecRightWordEdge, ecSelRightWordEdge:
|
||||
gotoWordEdge(true);
|
||||
ecRedoAll:
|
||||
redoAll();
|
||||
ecUndoAll:
|
||||
undoAll();
|
||||
ecScrollCenteredUp:
|
||||
scrollCentered(false);
|
||||
ecScrollCenteredDown:
|
||||
scrollCentered(true);
|
||||
end;
|
||||
if fOverrideColMode and not SelAvail then
|
||||
begin
|
||||
|
@ -2128,6 +2156,35 @@ begin
|
|||
TopView := NewTopLine;
|
||||
end;
|
||||
|
||||
procedure TDexedMemo.scrollCentered(down: boolean);
|
||||
begin
|
||||
centerCursor();
|
||||
if not down then
|
||||
begin
|
||||
ExecuteCommand(ecScrollDown, #0, nil);
|
||||
CaretY := CaretY - 1;
|
||||
end else
|
||||
begin
|
||||
ExecuteCommand(ecScrollUp, #0, nil);
|
||||
CaretY := CaretY + 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TDexedMemo.setHighligtherFrom(other: TDexedMemo);
|
||||
begin
|
||||
if other.Highlighter = other.TxtHighlighter then
|
||||
Highlighter := TxtHighlighter
|
||||
else if other.Highlighter = other.D2Highlighter then
|
||||
Highlighter := D2Highlighter
|
||||
else if other.Highlighter = other.SxHighlighter then
|
||||
Highlighter := SxHighlighter
|
||||
else if other.Highlighter = other.CppHighlighter then
|
||||
Highlighter := CppHighlighter
|
||||
// LFM, JSON, etc. are shared instances
|
||||
else
|
||||
Highlighter := other.Highlighter;
|
||||
end;
|
||||
|
||||
procedure TDexedMemo.ShowPhobosDoc;
|
||||
var
|
||||
str: string;
|
||||
|
@ -2673,6 +2730,22 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TDexedMemo.redoAll();
|
||||
begin
|
||||
BeginUpdate(false);
|
||||
while CanRedo do
|
||||
Redo;
|
||||
EndUpdate();
|
||||
end;
|
||||
|
||||
procedure TDexedMemo.undoAll();
|
||||
begin
|
||||
BeginUpdate(false);
|
||||
while CanUndo do
|
||||
Undo;
|
||||
EndUpdate();
|
||||
end;
|
||||
|
||||
procedure TDexedMemo.gotoWordEdge(right: boolean);
|
||||
var
|
||||
s: string;
|
||||
|
@ -2889,6 +2962,7 @@ var
|
|||
h: TStringHashSet;
|
||||
const
|
||||
c: TSysCharSet = ['A'..'Z', 'a'..'z', '_'];
|
||||
a: TSysCharSet = ['A'..'Z', 'a'..'z', '_', '0' .. '9'];
|
||||
begin
|
||||
|
||||
fCompletion.Position := 0;
|
||||
|
@ -2920,7 +2994,16 @@ begin
|
|||
r := TStringRange.create(lines[i]);
|
||||
while not r.empty do
|
||||
begin
|
||||
w := r.popUntil(c)^.takeWhile(c).yield;
|
||||
r.popWhile([' ', #9]);
|
||||
if r.startsWith('//') then
|
||||
r.popUntil(#0);
|
||||
if r.startsWith('/*') then
|
||||
begin
|
||||
r.popFrontN(2);
|
||||
r.popUntil('/');
|
||||
r.popFront();
|
||||
end;
|
||||
w := r.popUntil(c)^.takeWhile(a).yield;
|
||||
if (w.length >= fTextCompletionMinLength) and not h.contains(w) then
|
||||
begin
|
||||
h.insert(w);
|
||||
|
@ -2940,6 +3023,11 @@ procedure TDexedMemo.completionCodeCompletion(var value: string;
|
|||
begin
|
||||
if KeyChar = '' then
|
||||
exit;
|
||||
if (KeyChar = '.') and (SourceValue <> value) then
|
||||
begin
|
||||
value := SourceValue + '.';
|
||||
exit;
|
||||
end;
|
||||
if KeyChar[1] = ' ' then
|
||||
value := sourceValue + KeyChar[1]
|
||||
else
|
||||
|
@ -3309,14 +3397,23 @@ begin
|
|||
fIsDSource := Highlighter = fD2Highlighter;
|
||||
end;
|
||||
|
||||
procedure TDexedMemo.highlightCurrentIdentifier;
|
||||
procedure TDexedMemo.setHighligthedIdent(value: string);
|
||||
begin
|
||||
if fHighlightedIdent = value then
|
||||
exit;
|
||||
fHighlightedIdent := value;
|
||||
highlightCurrentIdentifier(false);
|
||||
end;
|
||||
|
||||
procedure TDexedMemo.highlightCurrentIdentifier(fromEditor: boolean = true);
|
||||
var
|
||||
s: string;
|
||||
i: integer;
|
||||
begin
|
||||
fIdentifier := GetWordAtRowCol(LogicalCaretXY);
|
||||
if (fIdentifier.length > 2) and (not SelAvail) then
|
||||
SetHighlightSearch(fIdentifier, fMatchIdentOpts)
|
||||
if fromEditor then
|
||||
fHighlightedIdent := GetWordAtRowCol(LogicalCaretXY);
|
||||
if (fHighlightedIdent.length > 2) and (not SelAvail) then
|
||||
SetHighlightSearch(fHighlightedIdent, fMatchIdentOpts)
|
||||
else if SelAvail and (BlockBegin.Y = BlockEnd.Y) then
|
||||
begin
|
||||
s := SelText;
|
||||
|
@ -4032,7 +4129,6 @@ begin
|
|||
else
|
||||
addBreakPoint(line);
|
||||
CaretY := Line;
|
||||
centerCursor;
|
||||
end;
|
||||
|
||||
procedure TDexedMemo.addGutterIcon(line: integer; value: TGutterIcon);
|
||||
|
|
|
@ -6,41 +6,35 @@ inherited TermWidget: TTermWidget
|
|||
ClientHeight = 296
|
||||
ClientWidth = 674
|
||||
OnShortCut = FormShortCut
|
||||
inherited Back: TPanel
|
||||
Height = 296
|
||||
inherited Content: TPanel
|
||||
Height = 260
|
||||
Width = 674
|
||||
ClientHeight = 296
|
||||
ClientHeight = 260
|
||||
ClientWidth = 674
|
||||
inherited Content: TPanel
|
||||
OnPaint = ContentPaint
|
||||
object ScrollBar1: TScrollBar[0]
|
||||
Left = 661
|
||||
Height = 260
|
||||
Width = 674
|
||||
ClientHeight = 260
|
||||
ClientWidth = 674
|
||||
OnPaint = ContentPaint
|
||||
object ScrollBar1: TScrollBar[0]
|
||||
Left = 661
|
||||
Height = 260
|
||||
Top = 0
|
||||
Width = 13
|
||||
Align = alRight
|
||||
Kind = sbVertical
|
||||
PageSize = 0
|
||||
TabOrder = 0
|
||||
OnScroll = ScrollBar1Scroll
|
||||
end
|
||||
object Panel1: TPanel[1]
|
||||
Left = 0
|
||||
Height = 260
|
||||
Top = 0
|
||||
Width = 661
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
TabOrder = 1
|
||||
end
|
||||
Top = 0
|
||||
Width = 13
|
||||
Align = alRight
|
||||
Kind = sbVertical
|
||||
PageSize = 0
|
||||
TabOrder = 0
|
||||
OnScroll = ScrollBar1Scroll
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Height = 30
|
||||
Width = 666
|
||||
object Panel1: TPanel[1]
|
||||
Left = 0
|
||||
Height = 260
|
||||
Top = 0
|
||||
Width = 661
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
TabOrder = 1
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Height = 30
|
||||
Width = 666
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,96 +6,89 @@ inherited TodoListWidget: TTodoListWidget
|
|||
Caption = 'Todo list'
|
||||
ClientHeight = 337
|
||||
ClientWidth = 584
|
||||
inherited Back: TPanel
|
||||
Height = 337
|
||||
inherited Content: TPanel
|
||||
Height = 301
|
||||
Width = 584
|
||||
AutoSize = True
|
||||
ClientHeight = 337
|
||||
ClientHeight = 301
|
||||
ClientWidth = 584
|
||||
inherited Content: TPanel
|
||||
Height = 301
|
||||
Width = 584
|
||||
ClientHeight = 301
|
||||
ClientWidth = 584
|
||||
object lstItems: TListView[0]
|
||||
Left = 4
|
||||
Height = 293
|
||||
Top = 4
|
||||
Width = 576
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'text'
|
||||
Width = 36
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'category'
|
||||
Width = 67
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'assignee'
|
||||
Width = 68
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'status'
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'priority'
|
||||
Width = 57
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'file'
|
||||
Width = 284
|
||||
end>
|
||||
ReadOnly = True
|
||||
SortType = stText
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
object lstItems: TListView[0]
|
||||
Left = 4
|
||||
Height = 293
|
||||
Top = 4
|
||||
Width = 576
|
||||
OnResize = toolbarResize
|
||||
object btnGo: TDexedToolButton[0]
|
||||
Left = 29
|
||||
Hint = 'go the TODO item definition'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnGo'
|
||||
resourceName = 'PENCIL_GO'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRefresh: TDexedToolButton[1]
|
||||
Left = 1
|
||||
Hint = 'refresh the TODO items'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRefresh'
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object lstfilter: TListFilterEdit[2]
|
||||
Left = 61
|
||||
Height = 26
|
||||
Hint = 'filter the TODO items that contain the text typed here'
|
||||
Top = 2
|
||||
Width = 513
|
||||
ButtonWidth = 28
|
||||
Align = alClient
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 58
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
end
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 4
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'text'
|
||||
Width = 36
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'category'
|
||||
Width = 67
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'assignee'
|
||||
Width = 68
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'status'
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'priority'
|
||||
Width = 57
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'file'
|
||||
Width = 284
|
||||
end>
|
||||
ReadOnly = True
|
||||
SortType = stText
|
||||
TabOrder = 0
|
||||
ViewStyle = vsReport
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 576
|
||||
OnResize = toolbarResize
|
||||
object btnGo: TDexedToolButton[0]
|
||||
Left = 29
|
||||
Hint = 'go the TODO item definition'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnGo'
|
||||
resourceName = 'PENCIL_GO'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRefresh: TDexedToolButton[1]
|
||||
Left = 1
|
||||
Hint = 'refresh the TODO items'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRefresh'
|
||||
resourceName = 'ARROW_UPDATE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object lstfilter: TListFilterEdit[2]
|
||||
Left = 61
|
||||
Height = 26
|
||||
Hint = 'filter the TODO items that contain the text typed here'
|
||||
Top = 2
|
||||
Width = 513
|
||||
ButtonWidth = 28
|
||||
Align = alClient
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 58
|
||||
BorderSpacing.Around = 2
|
||||
NumGlyphs = 1
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
|
|
|
@ -6,164 +6,161 @@ inherited ToolsEditorWidget: TToolsEditorWidget
|
|||
Caption = 'Tools editor'
|
||||
ClientHeight = 280
|
||||
ClientWidth = 441
|
||||
inherited Back: TPanel
|
||||
Height = 280
|
||||
inherited Content: TPanel
|
||||
Height = 244
|
||||
Top = 36
|
||||
Width = 441
|
||||
AutoSize = True
|
||||
ClientHeight = 280
|
||||
ClientHeight = 244
|
||||
ClientWidth = 441
|
||||
inherited Content: TPanel
|
||||
Height = 244
|
||||
Width = 441
|
||||
ClientHeight = 244
|
||||
ClientWidth = 441
|
||||
object Panel2: TPanel[0]
|
||||
Left = 4
|
||||
object Panel2: TPanel[0]
|
||||
Left = 4
|
||||
Height = 236
|
||||
Top = 4
|
||||
Width = 433
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 236
|
||||
ClientWidth = 433
|
||||
TabOrder = 0
|
||||
object lstTools: TListBox
|
||||
Left = 0
|
||||
Height = 236
|
||||
Top = 4
|
||||
Width = 433
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 236
|
||||
ClientWidth = 433
|
||||
Top = 0
|
||||
Width = 160
|
||||
Align = alLeft
|
||||
ExtendedSelect = False
|
||||
ItemHeight = 0
|
||||
OnDblClick = lstToolsDblClick
|
||||
OnDrawItem = lstToolsDrawItem
|
||||
OnKeyPress = lstToolsKeyPress
|
||||
OnSelectionChange = lstToolsSelectionChange
|
||||
ScrollWidth = 158
|
||||
Style = lbOwnerDrawFixed
|
||||
TabOrder = 0
|
||||
object lstTools: TListBox
|
||||
Left = 0
|
||||
Height = 236
|
||||
Top = 0
|
||||
Width = 160
|
||||
Align = alLeft
|
||||
ItemHeight = 0
|
||||
OnDblClick = lstToolsDblClick
|
||||
OnDrawItem = lstToolsDrawItem
|
||||
OnSelectionChange = lstToolsSelectionChange
|
||||
ScrollWidth = 158
|
||||
Style = lbOwnerDrawFixed
|
||||
TabOrder = 0
|
||||
TopIndex = -1
|
||||
end
|
||||
object Splitter1: TSplitter
|
||||
Left = 160
|
||||
Height = 236
|
||||
Top = 0
|
||||
Width = 5
|
||||
AutoSnap = False
|
||||
end
|
||||
object propsEd: TTIPropertyGrid
|
||||
Left = 165
|
||||
Height = 236
|
||||
Top = 0
|
||||
Width = 268
|
||||
Align = alClient
|
||||
CheckboxForBoolean = False
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper]
|
||||
Indent = 16
|
||||
NameFont.Color = clWindowText
|
||||
OnModified = propsEdModified
|
||||
PreferredSplitterX = 150
|
||||
SplitterX = 150
|
||||
ValueFont.Color = clGreen
|
||||
end
|
||||
TopIndex = -1
|
||||
end
|
||||
object Splitter1: TSplitter
|
||||
Left = 160
|
||||
Height = 236
|
||||
Top = 0
|
||||
Width = 5
|
||||
AutoSnap = False
|
||||
end
|
||||
object propsEd: TTIPropertyGrid
|
||||
Left = 165
|
||||
Height = 236
|
||||
Top = 0
|
||||
Width = 268
|
||||
Align = alClient
|
||||
CheckboxForBoolean = False
|
||||
DefaultValueFont.Color = clWindowText
|
||||
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper]
|
||||
Indent = 16
|
||||
NameFont.Color = clWindowText
|
||||
OnModified = propsEdModified
|
||||
PreferredSplitterX = 150
|
||||
SplitterX = 150
|
||||
ValueFont.Color = clGreen
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Width = 433
|
||||
object btnRun: TDexedToolButton[0]
|
||||
Left = 174
|
||||
Hint = 'execute selected tool'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRun'
|
||||
OnClick = btnRunClick
|
||||
resourceName = 'APPLICATION_FLASH'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button1: TDexedToolButton[1]
|
||||
Left = 169
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button1'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnClone: TDexedToolButton[2]
|
||||
Left = 141
|
||||
Hint = 'clone selected tool'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnClone'
|
||||
OnClick = btnCloneClick
|
||||
resourceName = 'APPLICATION_DOUBLE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveUp: TDexedToolButton[3]
|
||||
Left = 113
|
||||
Hint = 'move selected tool up'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveUp'
|
||||
OnClick = btnMoveUpClick
|
||||
resourceName = 'ARROW_UP'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveDown: TDexedToolButton[4]
|
||||
Left = 85
|
||||
Hint = 'move selected tool down'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveDown'
|
||||
OnClick = btnMoveDownClick
|
||||
resourceName = 'ARROW_DOWN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRemTool: TDexedToolButton[5]
|
||||
Left = 57
|
||||
Hint = 'remove selected tool'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemTool'
|
||||
OnClick = btnRemToolClick
|
||||
resourceName = 'APPLICATION_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddTool: TDexedToolButton[6]
|
||||
Left = 29
|
||||
Hint = 'add a new empty tool'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddTool'
|
||||
OnClick = BtnAddToolClick
|
||||
resourceName = 'APPLICATION_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnEdit: TDexedToolButton[7]
|
||||
Left = 1
|
||||
Hint = 'enable or disable edition'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnEdit'
|
||||
OnClick = btnEditClick
|
||||
resourceName = 'APPLICATION_EDIT'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnKill: TDexedToolButton[8]
|
||||
Left = 202
|
||||
Hint = 'if running, kills the process matching to the selected tool'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnKill'
|
||||
OnClick = btnKillClick
|
||||
resourceName = 'CANCEL'
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited toolbar: TDexedToolBar
|
||||
Height = 30
|
||||
Width = 433
|
||||
object btnRun: TDexedToolButton[0]
|
||||
Left = 174
|
||||
Hint = 'execute selected tool'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRun'
|
||||
OnClick = btnRunClick
|
||||
resourceName = 'APPLICATION_FLASH'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object button1: TDexedToolButton[1]
|
||||
Left = 169
|
||||
Height = 28
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'button1'
|
||||
Style = tbsDivider
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnClone: TDexedToolButton[2]
|
||||
Left = 141
|
||||
Hint = 'clone selected tool'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnClone'
|
||||
OnClick = btnCloneClick
|
||||
resourceName = 'APPLICATION_DOUBLE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveUp: TDexedToolButton[3]
|
||||
Left = 113
|
||||
Hint = 'move selected tool up'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveUp'
|
||||
OnClick = btnMoveUpClick
|
||||
resourceName = 'ARROW_UP'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnMoveDown: TDexedToolButton[4]
|
||||
Left = 85
|
||||
Hint = 'move selected tool down'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnMoveDown'
|
||||
OnClick = btnMoveDownClick
|
||||
resourceName = 'ARROW_DOWN'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnRemTool: TDexedToolButton[5]
|
||||
Left = 57
|
||||
Hint = 'remove selected tool'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnRemTool'
|
||||
OnClick = btnRemToolClick
|
||||
resourceName = 'APPLICATION_DELETE'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnAddTool: TDexedToolButton[6]
|
||||
Left = 29
|
||||
Hint = 'add a new empty tool'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnAddTool'
|
||||
OnClick = BtnAddToolClick
|
||||
resourceName = 'APPLICATION_ADD'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnEdit: TDexedToolButton[7]
|
||||
Left = 1
|
||||
Hint = 'enable or disable edition'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnEdit'
|
||||
OnClick = btnEditClick
|
||||
resourceName = 'APPLICATION_EDIT'
|
||||
scaledSeparator = False
|
||||
end
|
||||
object btnKill: TDexedToolButton[8]
|
||||
Left = 202
|
||||
Hint = 'if running, kills the process matching to the selected tool'
|
||||
Top = 0
|
||||
AutoSize = True
|
||||
Caption = 'btnKill'
|
||||
OnClick = btnKillClick
|
||||
resourceName = 'CANCEL'
|
||||
scaledSeparator = False
|
||||
end
|
||||
end
|
||||
inherited contextMenu: TPopupMenu
|
||||
left = 16
|
||||
top = 40
|
||||
Left = 16
|
||||
Top = 40
|
||||
end
|
||||
end
|
||||
|
|
|
@ -36,6 +36,7 @@ type
|
|||
procedure lstToolsDblClick(Sender: TObject);
|
||||
procedure lstToolsDrawItem(Control: TWinControl; Index: Integer;
|
||||
ARect: TRect; State: TOwnerDrawState);
|
||||
procedure lstToolsKeyPress(Sender: TObject; var Key: char);
|
||||
procedure lstToolsSelectionChange(Sender: TObject; User: boolean);
|
||||
procedure propsEdModified(Sender: TObject);
|
||||
private
|
||||
|
@ -261,5 +262,10 @@ begin
|
|||
lstTools.Canvas.TextOut(rc.Left, rc.Top , CustomTools.tool[Index].toolAlias);
|
||||
end;
|
||||
|
||||
procedure TToolsEditorWidget.lstToolsKeyPress(Sender: TObject; var Key: char);
|
||||
begin
|
||||
key := #0;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
|
@ -1,54 +1,42 @@
|
|||
object DexedWidget: TDexedWidget
|
||||
Left = 1360
|
||||
Height = 121
|
||||
Height = 118
|
||||
Top = 144
|
||||
Width = 332
|
||||
Width = 325
|
||||
BorderIcons = [biMinimize, biMaximize]
|
||||
Caption = 'DexedWidget'
|
||||
ClientHeight = 121
|
||||
ClientWidth = 332
|
||||
ClientHeight = 118
|
||||
ClientWidth = 325
|
||||
DesignTimePPI = 94
|
||||
ShowHint = True
|
||||
ShowInTaskBar = stNever
|
||||
LCLVersion = '2.2.0.1'
|
||||
object Back: TPanel
|
||||
object Content: TPanel
|
||||
Left = 0
|
||||
Height = 121
|
||||
Top = 0
|
||||
Width = 332
|
||||
Height = 83
|
||||
Top = 35
|
||||
Width = 325
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 121
|
||||
ClientWidth = 332
|
||||
FullRepaint = False
|
||||
TabOrder = 0
|
||||
object Content: TPanel
|
||||
Left = 0
|
||||
Height = 85
|
||||
Top = 36
|
||||
Width = 332
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
PopupMenu = contextMenu
|
||||
TabOrder = 0
|
||||
end
|
||||
object toolbar: TDexedToolBar
|
||||
Left = 4
|
||||
Height = 30
|
||||
Top = 4
|
||||
Width = 324
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Top = 2
|
||||
BorderSpacing.Right = 2
|
||||
BorderSpacing.Around = 2
|
||||
Caption = 'toolbar'
|
||||
EdgeBorders = []
|
||||
EdgeInner = esNone
|
||||
EdgeOuter = esNone
|
||||
Flat = False
|
||||
TabOrder = 1
|
||||
Transparent = True
|
||||
end
|
||||
PopupMenu = contextMenu
|
||||
TabOrder = 1
|
||||
end
|
||||
object toolbar: TDexedToolBar
|
||||
Left = 4
|
||||
Height = 29
|
||||
Top = 4
|
||||
Width = 317
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Top = 2
|
||||
BorderSpacing.Right = 2
|
||||
BorderSpacing.Around = 2
|
||||
Caption = 'toolbar'
|
||||
EdgeBorders = []
|
||||
EdgeInner = esNone
|
||||
EdgeOuter = esNone
|
||||
Flat = False
|
||||
TabOrder = 2
|
||||
Transparent = True
|
||||
end
|
||||
object contextMenu: TPopupMenu
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue