1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
- Done item from TO-DO file:
Caption should reflect current filename of the project, or 'noname.pds'
if it's not saved yet. Also '*' should be added when Changed = true.
These are the common ways to say user what filename he is editing
(because he *is* editing a file using pasdoc_gui: he's editing
his PasDoc Settings, pds file) and what is the value of Changed.
This would also render unnecessary the code
"PageControl1.ActivePageIndex := 0;"
currently done when user executes "New" menu command.
I find it unpleasant, but for now it's sometimes necessary to clearly
show the user that settings were reseted.
For later changes see cvs logs.
Although some changes may be mentioned in this file if they were
previously mentioned in TO-DO file. Upon fixing such things
you can move text from TO-DO file to this HISTORY file.
kambi, 2005-04-20:
Changes done to HelpGenerator to make it work cleanly with FPC/Lazarus:
- I renamed it to "pasdoc_gui" (instead of "HelpGenerator"),
because I just consider it a better name.
I also changed output extension to "pds" (was "hgs").
This not only reflects new name, but it also reflects the fact
that pasdoc_gui *cannot* read files written by HelpGenerator.
See lower in this file for description why I changed the way
settings are read/written.
- I removed dependency on MemCheck unit, not only because it's does not
comply with GNU GPL free but also because it's absolutely useless for
FPC programs. (HeapTrc unit exists for FPC that does roughly what
MemCheck unit does for Delphi).
- I also removed USGS copyright notices at the beginning of the file
frmhelpgeneratorunit.pas because they were making unclear
statements about what and how is required.
I replaced them with standard GNU GPL copyright preamble.
My basis is that original code by Richard is said to be
on public domain, so I can do anything with it, including licensing
modified version of HelpGenerator as GNU GPL sources.
If someone thinks that I cannot do this, I will obey.
Although I prefer to develop free software using GNU GPL,
and a "clean GNU GPL", without any additional legal statements.
Richard: even if what I did is OK, you may still want me to change
the first line of copyright. I put there
"Copyright 2004-2005 Richard B. Winston, U.S. Geological Survey (USGS)"
basing on previous copyright comments.
- Part of "Options" tab splitted to "Header/Footer" tab to make it
smaller.
- "About" form changed.
- Running external browser is implemented using TProcess.
- Let me elaborate a little why previous system with saving
setting was not working correctly:
When you save a component to a stream, Delphi and FPC do not write
properties that have a default value. This is against the spirit
of what was assumed in HelpGenerator code, that incorrectly *assumed*
that this will always be done.
You can see this bug in HelpGenerator:
1. clear "Defines" memo
2. save project as "foo.hgs"
3. write some values in "Defines" memo, like 'FPC'
4. load project as "foo.hgs"
Bug: "Defines" memo contains value 'FPC', but it shouldn't, because
"foo.hgs" says that no defines should be specified.
Why ? Because ObjectPascal streaming system did not record in "foo.hgs"
file value of Directives property, it assumed that having Count=0 is the
default state of "Defines" property, so there is no need to save it.
There are a couple of property types where this behavior will always be
present, e.g. string properties are never saved when their value is '' etc.
For *some* properties (namely, ones that are obtained via GetOrdProp RTTI call,
with the exception of "Integer default $80000000" because $80000000 is special)
you can reliably tell Delphi to always save them (regardless of their
value) but
1. this is uncleanly done in Delphi (because it's not a general solution,
it doesn't work for all property types (it doesn't work for TString
property or a string property), and there's that funny thing
with $80000000 being special)
2. unfortunately FPC does not implement it for now. This means that
in FPC property always has some implicit default value, like "false"
for booleans and "0" for integers. There is *no* way to tell FPC
to always save a boolean property to a file (regardless of value
of that property). See this thread in fpc-pascal mailing archives:
[http://www.nl.freepascal.org/lists/fpc-pascal/2005-April/008267.html]
What does it mean in a "general view" ?
Using ObjectPascal streaming system is a perfect (and easy) way
when you always load object from a file *right after* creating it
and you're prepared that if some property has some default value,
it's "Set" method will not be called by the streaming system at all.
Streaming system simply assumes that properties are already correctly
set to their default values.
That's why I decided that it will be simplest to simply resign from
using separate THelpGeneratorProjectOptions class at all.
I simply remade reading/writing everything using simple TIniFile.
This means that adding new things to a settings file is a little
more error-prone (you don't have to add only one property to some
class, you have to remember to add both the reading and the writing
code to appropriate places). Although in fact it's simpler and shorter
(less dummy Get/Set methods, also no need for dummy splitting
of clbMethodVisibility items to 5 boolean properties.)
As for now, I see that my version of frmHelpGenerator has 250 lines
less than original one :) OK, I surprised myself :)
- Implementation of SetDefaults extended with things that were originally
only in New1Click. This is for clarity.
- Oh, and I changed default "Defines" from Delphi and Win32 oriented
to FPC and Linux oriented. Sorry, I just couldn't resists :)
Seriously, this is TO-DO item in TO-DO file, see item
"pasdoc_gui should allow user to configure default state of Defines"
|